Skip to main content

Prerequisites

Before you begin, make sure you have the following installed: You will also need accounts for these services (free tiers available):
  • Stripe - Payment processing (test mode works without a paid account)
  • Turso - Cloud database (optional for local development)
For local development, BunShip uses a file-based SQLite database by default. You only need Turso for cloud/production deployments.

Setup

1

Clone the repository

2

Install dependencies

BunShip is a monorepo managed with Bun workspaces and Turborepo. A single install pulls in all packages: the API, database layer, email templates, config, utilities, and the Eden type-safe client.
This also creates a .env file from .env.example with working defaults for local development.
3

Generate JWT secrets (recommended)

The auto-generated .env includes placeholder secrets that work for development, but you should replace them with random values — especially before deploying anywhere.Generate two separate secrets and paste them into your .env:
Open .env and replace the placeholder values:
Use different values for each secret. Both must be at least 32 characters. Never commit your .env file to version control.
See the Installation guide for a full breakdown of every environment variable.
4

Set up the database

Run migrations to create all tables, then optionally seed demo data:
If you ran the seed command, you can log in with:
5

Start the development server

The API is now running at http://localhost:3000.

Verify It Works

Once the server is running, confirm everything is healthy:
Expected response:

Project Structure

Here is how the monorepo is organized:

Common Scripts

What’s Next

Installation

Full environment configuration including Stripe, email, S3 storage, and OAuth providers

Architecture

Understand how BunShip organizes routes, services, and middleware

Authentication

JWT tokens, 2FA, magic links, and OAuth flows

API Reference

Interactive documentation for every endpoint