Built for Bun

Polyglot routes. Static-ready sites.

Tachyon is a polyglot, file-system-routed full-stack framework for Bun. Write backend handlers as plain exported functions in JavaScript, TypeScript, Python, Ruby, Go, Rust, and more. Build reactive front-end pages with Tac — companion classes, decorators, scoped CSS, prerendered static output, and first-party preview tooling.

Use yon.init for a scaffolded app, then iterate with bun run preview or bun run serve.

yon.init my-app
my-app/
├─ browser/
│ ├─ pages/
│ │ └─ index.html
│ └─ components/
│ └─ hero.html
├─ server/
│ └─ routes/
│ └─ GET.js
├─ package.json
└─ amplify.yml

# Then iterate with:
bun run preview
bun run serve

Everything you need.
Nothing you don't.

Tachyon handles routing, scaffolding, bundling, preview, and deployment-ready output — so you can focus on writing handlers and pages.

File-system Routing

Routes are directories. HTTP methods are files. No router config or decorators, just drop a file in the right place.

Polyglot Handlers

Export a handler function in TypeScript, Python, Ruby, Go, Rust, Java, or any language — the framework invokes it directly.

Reactive UI (Tac)

HTML templates with {expr} bindings, @event handlers, loops, conditionals, and lazy components. No virtual DOM.

App Scaffold

yon.init creates a production-ready starter with routes, components, package scripts, and Amplify config.

NPM Bundling

Any package in dependencies is auto-bundled and available at /modules/<name>.js in front-end code.

Built-in Database (FYLO)

Filesystem-first document store with prefix indexes, event journals, WORM history, and optional AES-GCM encryption — no external database needed.

Prerendered Static Export

tac.bundle writes real route HTML like dist/index.html and dist/docs/index.html, not just an SPA shell.

Static Preview

tac.preview --watch bundles front-end changes and serves nested routes locally so static hosting behavior is easy to verify.

Security by Default

CSP, X-Frame-Options, and X-Content-Type-Options ship on every response. Basic Auth, JWT decoding, and optional HSTS are built in.

Schema Validation

Drop an OPTIONS.json file in any route directory to validate request and response shapes with CHEX regex schemas.

Lazy Components

Add lazy to any component to defer loading until it scrolls into view via IntersectionObserver.

Bundle Watch

Use tac.bundle --watch for front-end iteration, or yon.serve when you want the app server and static preview together.

Write routes in
any language.

Every handler is a function that receives a request object and returns plain data. JavaScript and TypeScript run directly; Python, Ruby, Go, Rust, and others are invoked through their native runtimes — no adapter layer needed.

typescript
export async function handler(request) {
return {
message: "Hello from TypeScript!",
id: request.paths.id
}
}

Reactive UI.
Static-friendly output.

Tac is Tachyon's built-in template engine. Write reactive front-end pages with plain HTML, then prerender them into deployable documents with tac.bundle. Non-native tags auto-resolve from components/, including nested folders.

&#123;expr&#125;Interpolate expression
@event="fn()"Event binding
&#58;prop="value"Bind attribute to expression
&#58;value="var"Two-way input binding
&lt;loop &#58;for="..."&gt;Loop block
&lt;logic &#58;if="..."&gt;Conditional block
&lt;my-comp /&gt;Custom component from components/my-comp.html
&lt;ui-chart /&gt;Nested component from components/ui/chart.html
&lt;ui-chart lazy /&gt;Lazy-loaded nested component
tac.preview --watchServe bundled pages and rebundle frontend changes automatically
yon.serveRun the app server and the static preview workflow together
frontend workflow
$ bun run preview
$ bun run serve

# dist/ output
dist/
├─ index.html
├─ docs/index.html
├─ pages/index.js
├─ pages/docs/index.js
└─ components/ui-chart.js

# static hosts can deploy dist/ directly

Ready to build?

Ship API routes in any language, scaffold new apps fast, and deploy prerendered Bun sites from a single framework.