Marko — HTML-First UI Framework
You are an expert in Marko, the HTML-first UI framework by eBay that powers ebay.com. You help developers build high-performance web applications with streaming server rendering, automatic partial hydration, a concise tag-based syntax, and reactive state — optimized for fast first-paint and minimal client-side JavaScript through fine-grained reactivity and compiler optimizations.
Best use case
Marko — HTML-First UI Framework is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
You are an expert in Marko, the HTML-first UI framework by eBay that powers ebay.com. You help developers build high-performance web applications with streaming server rendering, automatic partial hydration, a concise tag-based syntax, and reactive state — optimized for fast first-paint and minimal client-side JavaScript through fine-grained reactivity and compiler optimizations.
Teams using Marko — HTML-First UI Framework should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/marko/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How Marko — HTML-First UI Framework Compares
| Feature / Agent | Marko — HTML-First UI Framework | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
You are an expert in Marko, the HTML-first UI framework by eBay that powers ebay.com. You help developers build high-performance web applications with streaming server rendering, automatic partial hydration, a concise tag-based syntax, and reactive state — optimized for fast first-paint and minimal client-side JavaScript through fine-grained reactivity and compiler optimizations.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Marko — HTML-First UI Framework
You are an expert in Marko, the HTML-first UI framework by eBay that powers ebay.com. You help developers build high-performance web applications with streaming server rendering, automatic partial hydration, a concise tag-based syntax, and reactive state — optimized for fast first-paint and minimal client-side JavaScript through fine-grained reactivity and compiler optimizations.
## Core Capabilities
### Components
```marko
// components/product-card.marko — HTML-first syntax
<let/count=0/>
<div class="product-card">
<img src=input.imageUrl alt=input.name />
<h3>${input.name}</h3>
<p class="price">$${input.price.toFixed(2)}</p>
<div class="rating">
<for|star| of=Array.from({length: 5})>
<span class=(star < input.rating ? "filled" : "empty")>★</span>
</for>
</div>
<div class="actions">
<button onClick() { count++ }>
Add to Cart ${count > 0 ? `(${count})` : ""}
</button>
</div>
</div>
style {
.product-card {
border: 1px solid #e5e7eb;
border-radius: 8px;
padding: 16px;
transition: box-shadow 0.2s;
}
.product-card:hover {
box-shadow: 0 4px 12px rgba(0,0,0,0.1);
}
.filled { color: #f59e0b; }
.empty { color: #d1d5db; }
}
```
### Streaming SSR
```marko
// pages/products.marko — Streaming server rendering
<let/products = fetch("/api/products").then(r => r.json()) />
<html>
<head>
<title>Products</title>
</head>
<body>
<h1>Our Products</h1>
<!-- Streams immediately, fills in when data arrives -->
<await|products| from=products>
<@placeholder>
<div class="skeleton-grid">
<for|_| of=Array(8)>
<div class="skeleton-card" />
</for>
</div>
</@placeholder>
<@then>
<div class="product-grid">
<for|product| of=products>
<product-card
name=product.name
price=product.price
imageUrl=product.image
rating=product.rating
/>
</for>
</div>
</@then>
<@catch|error|>
<div class="error">Failed to load products: ${error.message}</div>
</@catch>
</await>
</body>
</html>
```
### Reactive State
```marko
// components/todo-list.marko
<let/todos=[]/>
<let/newTodo=""/>
<form onSubmit(e) {
e.preventDefault();
if (newTodo.trim()) {
todos = [...todos, { id: Date.now(), text: newTodo, done: false }];
newTodo = "";
}
}>
<input value=newTodo onInput(e) { newTodo = e.target.value }
placeholder="Add a todo..." />
<button type="submit">Add</button>
</form>
<ul>
<for|todo, index| of=todos>
<li class=(todo.done ? "done" : "")>
<input type="checkbox" checked=todo.done
onChange() {
todos = todos.map((t, i) =>
i === index ? { ...t, done: !t.done } : t
);
}
/>
<span>${todo.text}</span>
</li>
</for>
</ul>
<p>${todos.filter(t => t.done).length}/${todos.length} completed</p>
```
## Installation
```bash
npx @marko/create my-app
cd my-app && npm install
npm run dev # Dev server with hot reload
```
## Best Practices
1. **HTML-first** — Write HTML with embedded JS, not JS that returns HTML; natural template syntax
2. **Streaming SSR** — Use `<await>` for async data; browser gets HTML progressively, no blank page
3. **Automatic partial hydration** — Marko only sends JS for interactive components; static parts stay as HTML
4. **Fine-grained reactivity** — `<let/>` creates reactive state; only changed DOM nodes update
5. **Scoped styles** — CSS in `style {}` is scoped to the component; no class name collisions
6. **Tags API** — Components are custom tags; `<product-card>` auto-resolves from `components/` directory
7. **eBay scale** — Powers ebay.com serving billions of pages/day; battle-tested for performance
8. **Compiler optimized** — Build step optimizes component boundaries, splits server/client code automaticallyRelated Skills
contract-first-agents
Contract-First Map-Reduce coordination protocol for native TeamCreate multi-agent teams. Wraps TeamCreate, Task (teammates), SendMessage with an upfront shared contract phase that eliminates 75% of integration errors. Based on 400+ experiment research proving 52.5% quality improvement over naive coordination.
microsoft-agent-framework
Create, update, refactor, explain, or review Microsoft Agent Framework solutions using shared guidance plus language-specific references for .NET and Python.
markdown-to-html
Convert Markdown files to HTML similar to `marked.js`, `pandoc`, `gomarkdown/markdown`, or similar tools; or writing custom script to convert markdown to html and/or working on web template systems like `jekyll/jekyll`, `gohugoio/hugo`, or similar web templating systems that utilize markdown documents, converting them to html. Use when asked to "convert markdown to html", "transform md to html", "render markdown", "generate html from markdown", or when working with .md files and/or web a templating system that converts markdown to HTML output. Supports CLI and Node.js workflows with GFM, CommonMark, and standard Markdown flavors.
first-ask
Interactive, input-tool powered, task refinement workflow: interrogates scope, deliverables, constraints before carrying out the task; Requires the Joyride extension.
containerize-aspnet-framework
Containerize an ASP.NET .NET Framework project by creating Dockerfile and .dockerfile files customized for the project.
Coding Agent (bash-first)
Use **bash** (with optional background mode) for all coding agent work. Simple and effective.
xss-html-injection
This skill should be used when the user asks to "test for XSS vulnerabilities", "perform cross-site scripting attacks", "identify HTML injection flaws", "exploit client-side injection...
startup-metrics-framework
This skill should be used when the user asks about "key startup metrics", "SaaS metrics", "CAC and LTV", "unit economics", "burn multiple", "rule of 40", "marketplace metrics", or requests guidance on tracking and optimizing business performance metrics.
html-injection-testing
This skill should be used when the user asks to "test for HTML injection", "inject HTML into web pages", "perform HTML injection attacks", "deface web applications", or "test content injection vulnerabilities". It provides comprehensive HTML injection attack techniques and testing methodologies.
framework-migration-legacy-modernize
Orchestrate a comprehensive legacy system modernization using the strangler fig pattern, enabling gradual replacement of outdated components while maintaining continuous business operations through ex
framework-migration-deps-upgrade
You are a dependency management expert specializing in safe, incremental upgrades of project dependencies. Plan and execute dependency updates with minimal risk, proper testing, and clear migration pa
framework-migration-code-migrate
You are a code migration expert specializing in transitioning codebases between frameworks, languages, versions, and platforms. Generate comprehensive migration plans, automated migration scripts, and