Modern framework
built on
old ideas.
Built for fast, simple server-driven apps.
No runtime dependencies.
deno create jsr:@cookingpot/dashiJSX to plain old HTML
JSX is precompiled and transformed into plain HTML strings, no hydration, no abstraction. Just hypertext.
component.tsx
export function Hello() { return ( <div className="greeting"> <h1>Hello, World</h1> </div> ); }
->
output.html
<div class="greeting"> <h1>Hello, World</h1> </div>
Pages are just handlers
A page is a GET handler that returns Response, same as JSON, one helper seals HTML.
page.tsx
export function getPage({ html }): Response { return html( <main> <PageContent /> </main> ); }
vs.
jsonEndpoint.ts
export function getJson(): Response { return Response.json({ ok: true }); }
Slots
Pages leave slots pointing at other routes, for separate cache or expensive work.
user_page.tsx
export async function UserProfile({ ctx, html }) { const user = await service.getUser(ctx); return html( <User userData={user} /> ); }
home.tsx
<User userData={user} /> <RouteSlot src="/users/USER_ID" fetchWhen="visible" />
->
@Jorji
click me!Loading
Patches
A patch is HTML aimed at an element. A form POST can return several, and the page updates in place.
postTodo.tsx
export async function addTodo({ ctx, patches }) { const { todo } = ctx.state; const count = await service.addTodo(todo); return patches([ patch.append("#todos", <Todo data={todo} />), patch.update("#count", <Count c={count} />), ]); }
->
Client
Progressive enhancement by design. Add client-side logic only where needed using TS and standard Web APIs.
page.tsx
const HeartButton = client.element("heart-button", new URL(...)); export function Page() { ... <HeartButton /> ... }
heart_client.ts
// Native custom elements! customElements.define( "heart-button", class extends HTMLElement { constructor() { super(); this.addEventListener("click", shootHearts); } }, );
->
Small API with no runtime dependencies
Each page and slot is cached on its own
Soft navigation with in-place document swaps
HTML first, for SEO, LCP, and link previews
Built on web standards, not a parallel stack
Wrap paths with layouts and middleware