stratal
v0.0.10
Published
A modular Cloudflare Workers framework with dependency injection, queue-based events, and type-safe configuration
Maintainers
Readme
Stratal
A modular framework for building Cloudflare Workers with dependency injection, OpenAPI documentation, queues, cron jobs, and more.
Documentation
Full guides and examples are available at stratal.dev. API reference lives at api-reference.stratal.dev.
Features
- Dependency Injection — Two-tier DI container (global + request-scoped) powered by tsyringe
- OpenAPI Documentation — Define Zod schemas once and get a full OpenAPI 3.0 spec with interactive docs
- Modular Architecture — NestJS-style modules with lifecycle hooks, dynamic configuration, and middleware
- Hono Routing — Convention-based RESTful controllers with automatic HTTP method mapping
- Queue Consumers — Typed Cloudflare Queue consumers with message-type filtering
- Cron Jobs — Scheduled tasks via Cloudflare Workers cron triggers
- Storage — S3-compatible file storage with presigned URLs and TUS upload support
- Email — Resend and SMTP providers with React Email template support
- i18n — Type-safe internationalization with locale detection from request headers
- Guards and Middleware — Route protection and per-module middleware configuration
Note: Stratal is in active development and APIs may change before v1. It is okay to use in projects, but consider pinning your dependency version so that a new patch does not break your existing code.
Installation
Scaffold a new project from an official template:
npm create stratal my-app
# or
yarn create stratal my-app
# or
pnpm create stratal my-appAvailable templates:
| Template | Description | Example |
|---|---|---|
| hello-world | A minimal Stratal app with a single GET endpoint | Source |
| crud-api | RESTful notes API with full CRUD operations and DI | Source |
| testing | Vitest + @stratal/testing with Cloudflare worker pool | Source |
| guards | Route protection with @UseGuards and CanActivate | Source |
| middleware | Middleware configuration with apply/exclude/forRoutes | Source |
| queues | Queue producer/consumer pattern with Cloudflare Queues | Source |
| scheduled-tasks | Cron job scheduling with the CronJob interface | Source |
| openapi | OpenAPI docs with Scalar UI and Zod schema integration | Source |
For benchmarks, see the main README.
You can also specify a template directly:
npm create stratal my-app -- -t crud-apiOr add Stratal to an existing project:
npm install stratalAI Agent Skills
Stratal provides Agent Skills for AI coding assistants like Claude Code and Cursor. Install to give your AI agent knowledge of Stratal patterns, conventions, and APIs:
npx skills add strataljs/stratalQuick Start
Define a module with a controller and wire it up as a Cloudflare Worker:
import { Stratal } from 'stratal'
import { Module } from 'stratal/module'
import { Controller, Route, type RouterContext } from 'stratal/router'
import { z } from 'stratal/validation'
// Define a controller
@Controller('/api/greetings')
class GreetingsController {
@Route({
summary: 'Say hello',
response: z.object({ message: z.string() }),
})
async index(ctx: RouterContext) {
return ctx.json({ message: 'Hello from Stratal!' })
}
}
// Create the root module
@Module({
controllers: [GreetingsController],
})
class AppModule {}
// Worker entry point
export default new Stratal({ module: AppModule })Contributing
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
License
MIT
