Single-file components.
Markup, script and style in one .html file. Nothing rewrites your code.
no compiler·no virtual DOM·no build step
Import a component straight from a URL — no install, no bundler. The browser fetches the .html and boots it live. Components are just files, anywhere. Nothing else does that.
The component is the file. Save counter.html and the browser runs it byte-for-byte — reactive, scoped, untouched. Nothing else does that.
bunx create-spark-html-app@latest
<div import="https://cdn.jsdelivr.net/gh/wilkinnovo/
spark/website/public/components/url-card.html">
</div>
● live — fetched from a CDN, no bundler
This whole component is a plain .html file on a CDN — no bundler touched it.
<h2>Count: {count}</h2> <button onclick={inc}>+1</button> <script> let count = 0; function inc() { count++; } </script>
● live — the actual component
Why Spark
AI writes more of the web every day. Spark is for the people who still love writing it themselves — view-source romantics, hand-crafters, the ones who want to understand every line they ship. So it gets out of your way: no compiler rewriting your code, no virtual DOM between you and the page, no build step between you and the browser. The HTML you write is the app that runs.
What's in Spark
Markup, script and style in one .html file. Nothing rewrites your code.
A change re-evaluates only the bindings that read it — not the page.
Named stores let any two components share state. No providers.
<template route> + router(). Active links and a route store, free.
Real HTML per route at build time. No SSR server, no app changes.
theme() — dark / light / system, persisted, no flash.
Use it — no build required
<script type="importmap"> { "imports": { "spark-html": "https://esm.sh/spark-html@0.27" } } </script> <script type="module"> import { mount } from 'spark-html'; mount(); </script>
<div import="components/card"></div> <!-- …or straight from anywhere --> <div import="https://cdn.jsdelivr.net/ gh/you/repo/card.html"></div>
Serve any static folder (bunx serve) — no install, no bundler, no compiler. Read the docs →
Built with Spark
View all →