Flare composes routes, services, contracts, and state into one graph, then validates and compiles it before traffic.
Same app, two runtimes.
Routes, services, contracts, and state stay on one host. Swap the adapter, then call
run() on Node or export the app to Workers.
const host = new FlareHost(node); const app = host.build(); app.run();
const host = new FlareHost(cf); const app = host.build(); export default app.export();
Bun and Deno adapters ship before v1.
Broken wiring never reaches traffic.
Typed handlers are not a validated application. host.build() walks
providers, contracts, state, and adapter constraints before the server starts.
Missing DI, unprovided state, and dead wiring fail together at composition time, where they are still cheap to fix.
[flare] Build failed with 1 validation error: 1. [CONTROLLER_UNREGISTERED_DEP] Controller OrphanController depends on unregistered service MissingSvc. Hint: Register MissingSvc with host.scoped() or host.singleton() before calling host.build().
Start with a route. Add depth in place.
An inline handler is a complete app. Grow the same registration with contracts, request state, and services only when the surface needs them.
host.http.get("/users/:id", { route: { id: int } }, (_ctx, scope) => new FlareResponse(200, { id: scope.input.route.id, }), );
What the framework adds per request.
This bench measures framework overhead on a simple GET / returning
{"hello":"world"}. We run fastify/benchmarks on GitHub Actions
with Flare added to the package list, then take the median across 5 sweeps.
It does not model a real application. It shows what each framework adds before your
handler runs. Flare compiles per-route pipelines at build(), so the request
path does not rebuild the graph.
flare-bench · 5 sweeps · v24.18.0 · 2026-07-20 · simple framework-overhead test
One host, more than routes.
WebSockets live beside HTTP on the same composition graph. Host extensions stamp
capabilities onto host.*, so packages add surface area without adding a
second stack.
Zero runtime dependencies. Core and schema stay in-tree, with no plugin chain on the hot path.