Introduction

What is dashi?

dashi is a server-first web framework for Deno. JSX is precompiled to HTML with no VDOM intermediary or hydration. Pages update by swapping server-rendered HTML, in the spirit of Hotwire and htmx.

main.ts

import { type ReadArgs, serve } from "dashi";

function Home({ html }: ReadArgs) {
  return html(<h1>Hello</h1>);
}

serve(({ route }) => ({
  routes: [
    route("/", { GET: Home }),
  ],
}));

Features

I built dashi after Next.js 16: too much magic, spending too much time fighting the framework than shipping. I wanted a small tool that keeps the ideas I actually like - server-rendered HTML, patches, only as much JS as you ask for.

  • Fast. JSX is precompiled into plain HTML and sent as-is for every render.
  • Server-driven. Update the UI through targeted HTML patches.
  • No JS bloat. The page is HTML. You add JS only for the bits that need it.
  • Composition. A page can include other routes, each fetched and cached on its own.
  • Small API. No magic, one way to do each thing, no runtime dependencies.
  • Web APIs. Built on standards - Request, Response, fetch(), etc.

Community

Questions and suggestions are welcome.