Marko

Marko

HTML re-imagined for building dynamic UIs

Features

  • Automatic partial hydration with streaming HTML
  • Compiler-driven approach — ships minimal JS to client
  • Tag-based syntax extending HTML naturally
  • Built-in server-side rendering with progressive enhancement
  • Fine-grained reactivity without virtual DOM

Pros

  • Exceptional server rendering performance (battle-tested at eBay scale)
  • Automatic code splitting between server and client
  • Small client-side runtime — only ships JS for interactive parts

Cons

  • Small ecosystem outside eBay
  • Unique syntax has a learning curve
  • Limited third-party tooling and IDE support

Overview

Marko is a UI framework created by eBay that rethinks how HTML should work for dynamic web applications. Instead of treating HTML as a static template language, Marko extends it with reactive features — components, state, and control flow — while keeping the familiar tag-based syntax. The compiler analyzes your components and automatically determines what needs to run on the server versus the client.

Marko’s key innovation is its streaming and partial hydration architecture. The server renders HTML and streams it to the browser progressively, while the compiler ensures only the interactive portions of the page ship JavaScript. This approach, battle-tested on eBay’s high-traffic pages, delivers excellent performance without requiring developers to manually manage the server/client boundary.

When to Use

Marko is the right choice when server rendering performance is critical, when you want automatic partial hydration without manual optimization, or when building content-heavy pages with selective interactivity. Its eBay pedigree makes it proven at massive scale.

Getting Started

npx @marko/create my-app
cd my-app && npm install && npm run dev
<let/count=0/>

<button onClick() { count++ }>
  Count: ${count}
</button>