Full-stack TypeScript · One Cloudflare Worker
Compose your platform from typed modules and ship all of it as a single Worker. One repo. One deploy.
bun firebrand/cli/build.ts --link
firebrand setup
firebrand deploy --skip-build
import { useFirebrand } from 'firebrand'
import { core } from 'firebrand/core/api'
import { stripe } from
'firebrand/modules/stripe/api'
import { cloudflare } from
'firebrand/modules/cloudflare/api'
export default {
async fetch(request, env, ctx) {
const firebrand = useFirebrand(
'api', [core, cloudflare, stripe], { env }
)
const server = useServer(firebrand)
return server.fetch(request, env, ctx)
}
}
makeSignal('api', '/ping', {
middleware: [],
handler: async (firebrand) => {
const { responses } = firebrand.helpers
return responses.json({ ok: true })
}
})
makeView({
name: 'PricingView',
tag: 'pricing-view',
pathname: '/pricing',
template,
style,
logic,
layouts: ['site-layout']
})
How it works
A module bundles its routes, pages, elements, jobs and helpers. Register it once and every runtime it targets picks up its part — there is no second project to keep in step.
Core
Core is not a starter template you grow out of. It is the base module every Firebrand app is composed on, and it arrives with the parts you would otherwise be buying, wiring and keeping current.
The alternative
Nothing here is impossible without Firebrand. It is the assembling, the invoices and the version drift that the modular monolith is a bet against.
Quickstart
Three commands. The CLI resolves the project root by walking up from wherever you run it, so each one works from anywhere in the tree.
Straight answers
Request access
Whether it is a project you want built on Firebrand or a question about whether it fits, write and I will answer.
Follow the build
New modules, release notes and the occasional post-mortem. No more than monthly.
Start from a platform that already has auth, storage, notifications, tests and a deploy pipeline, and spend the week on the part only you can build.