Skip to content

ElysiaJS + Bun + DrizzleORM (with bun:sqlite for sync/async database) codebase containing real world examples (CRUD, auth, advanced patterns, etc) that adheres to the RealWorld spec and API.

License

Notifications You must be signed in to change notification settings

remuspoienar/bun-elysia-drizzle-sqlite

Repository files navigation

RealWorld Example App

Bun ElysiaJS DrizzleORM

Bun + Elysia.JS + DrizzleORM (with bun:sqlite for sync/async database) 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 fullstack application built with Elysia including CRUD operations, authentication, routing, pagination, and more.

We've gone to great lengths to adhere to the Elysia community styleguides & best practices.

For more information on how to this works with other frontends/backends, head over to the RealWorld repo.

Currently supported versions

Bun - 1.2.9
Elysia - 1.2.25 (1.2.0 for plugins)
Drizzle ORM - 0.41.0 
Drizzle kit - 0.30.6

How it works

ElysiaJS is a web framework written in Bun so i'm using that as the runtime for this project as well SQLite was the db choice because of the new blazing fast bun:sqlite which even has sync APIs, and adding drizzle-orm on top for easier data fetching and for db migrations management(with drizzle-kit)

The point of using these is also have great DX by offered by the typescript support they provide. For instance types can be inferred from schemas(from Elysia's typedbox integration module "t") and tables(from drizzle schema definitions), so we rarely have to defined types that have to be in sync with some other objects. On top of that whenver you add something inside a middleware(or plugin) it will be available in autocomplete down the line

Structure

Structure wise this is closer to something like NestJS, since Elysia is not really opinionated on naming/structure it a higher level. This is an MVC pattern based structure, where each resource(article,user,etc) will have its own folder.

src/api

  • *.controller.ts denotes a controller file, which is an Elysia plugin (separated for each resource as recommended by the docs)
  • *.service.ts will hold any logic, to keep controllers lean
  • *.schema.ts file will hold related schema objects and types either inferred or generated from them, will be used in both controller and service files
  • *.utils.ts optionally for even more granular logic related to a resource

src/db

Will expose a database connection and the schema definitions Note that /sqlite folder will contain the DB files and the generated migrations

⚠️ Pro tip In order to generate sql migration scripts one needs only to change the schema.ts file and run bun migration:create, drizzle-kit will figure out how to generate sql from those changes

src/test

A few integration tests, using an in-memory sqlite database

Config files

  • *.env files that will automatically be loaded by Bun when running either the server or the tests
  • drizzle.config.ts used to cofigure drizzle/sqlite integration
  • bunfig.toml used for the tests setup
  • Good old package.json and tsconfig.json

Last but not least this repo is not just a fork of the realworld starter kit but it has the realworld repo as a git submodule, to access all the extra goodies you might need

Getting started

  • Install dependencies

    bun install

  • Setup

    bun migration:run

  • Start local server

    bun dev

    OR

    bun start

Useful

  • Run local tests

    bun test

  • Run the integration tests(from the realworld submodule)

    APIURL=http://localhost:3001/api ./realworld/api/run-api-tests.sh

    ⚠️ Requires the local server to be started

  • Update db snapshots

    bun migration:snapshots

  • Generate bundle

    bun bundle

About

ElysiaJS + Bun + DrizzleORM (with bun:sqlite for sync/async database) codebase containing real world examples (CRUD, auth, advanced patterns, etc) that adheres to the RealWorld spec and API.

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published