ElysiaJS + Drizzle ORM codebase containing real world examples (CRUD, auth, advanced patterns, etc) that adheres to the RealWorld spec and API.
This codebase was created to demonstrate a fully fledged backend application built with ElysiaJS and Drizzle ORM including CRUD operations, authentication, routing, pagination, and more.
We've gone to great lengths to adhere to the ElysiaJS and Drizzle ORM community styleguides & best practices.
For more information on how this works with other frontends/backends, head over to the RealWorld repo.
This project follows the Bedstack architecture - a modular, layered approach to building TypeScript backends:
- Modular structure - Each domain (users, articles, comments, etc.) is a self-contained module with its own controller, service, repository, and DTOs
- Layered design - Clear separation between Controller (HTTP handling) → Service (business logic) → Repository (data access)
- Type-safe data flow - DTOs define request/response shapes, mappers transform between layers, schemas define database tables
src/
├── users/ # User module
│ ├── users.controller.ts
│ ├── users.service.ts
│ ├── users.repository.ts
│ ├── users.schema.ts
│ ├── dto/
│ └── mappers/
├── articles/ # Article module (same structure)
├── shared/ # Shared utilities and error handling
└── app.module.ts # Root module composing all features
Read more about the Bedstack architecture →
- ElysiaJS - Web framework for HTTP
- Drizzle ORM - TypeScript ORM for PostgreSQL
- ArkType - Runtime validation
- Scalar - API documentation
- Bun - JavaScript runtime and package manager
- Biome - Linting and formatting
-
Install dependencies
bun i
-
Create a
.envfilecp .env.example .env
Use the provided example values or replace them with your own.
-
Ensure Docker daemon is running and start the database service
bun db:start
-
Migrate the schema to the database
bun db:migrate
-
Run the development server
bun dev
-
Run the API tests
bun run test # not `bun test`!
-
(Optional) Start the database studio
bun db:studio
Tip
See more info in ElysiaJS's Deploy to production pattern.
-
Build the app
bun run build # not `bun build`! -
Run the server
bun preview
If you have questions or ideas:
- Open a GitHub Discussion
- Open an Issue if you believe you found a bug
You are welcome to contribute to the project!
Yam C Borodetsky 💬 🤔 📖 🐛 💡 🚇 |
Hajbo 🚇 💻 🎨 🤔 |
Aruay Berdikulova 💻 🤔 |
