A minimal template to kickstart projects with:
- Hono – Fast web framework
- Better Auth – Authentication system
- Drizzle ORM – Database management
- Cloudflare Workers – Edge deployment
- Bun – Fast JavaScript runtime
- Docker – Local database development
Clean setup for authentication, database, and deployment.
- Clone the repository:
git clone https://github.com/alwaysnomads/better-hono.git
cd better-hono
- Install dependencies:
bun install
- Setup your environment:
# Copy the example environment file into .env and .dev.vars
cp .env.example .env .dev.vars
- .env: Used by your application (e.g., in Drizzle).
- .dev.vars: Used by Wrangler when running the local server.
Edit both files with your environment variables.
- Start the database (if needed):
# Start the local Postgres database with Docker
bun run docker:up
Or connect to a cloud database like Neon.
Make sure your.env
and.dev.vars
point to the correct database URL.
- Push database schema and generate types:
bun run db:push
bun run db:generate
- Start the development server:
bun run dev
The development server runs on port 3000 by default for easier integration with Better-Auth, you can change it at the wrangler.jsonc file. OpenAPI documentation for Better-Auth is available at http://localhost:3000/api/auth/reference.
You can remove the OpenAPI plugin if not needed by editingsrc/lib/auth.ts
.
This template is heavily inspired by w3cj's hono-open-api-starter, even using parts of their code. Make sure to check out their repository!
Command | Description |
---|---|
bun run dev |
Start local server (Wrangler) |
bun run deploy |
Deploy to Cloudflare |
bun run cf-typegen |
Generate Cloudflare types |
bun run docker:up |
Start Docker containers |
bun run docker:down |
Stop Docker containers |
bun run docker:clean |
Stop and remove containers + volumes |
bun run db:push |
Push schema to database |
bun run db:generate |
Generate Drizzle ORM types |
bun run db:migrate |
Run database migrations |
bun run db:studio |
Open Drizzle Studio GUI |
To add Cloudflare bindings (e.g., R2 buckets, KV stores), update the bindings types at src/lib/types.ts
This template comes with Google social login preconfigured for example purposes.
You can easily change or extend it in src/lib/auth.ts
.
Released under the MIT License.
✅ Built with Bun
✅ Powered by Cloudflare Workers
✅ Local database ready with Docker