Skip to content

Getting Started

The fastest way to run Inkvoice is with Docker Compose.

1. Generate a signing secret

bash
openssl rand -base64 48

Inkvoice refuses to start in production without JWT_SECRET, and it must be at least 32 characters. Keep the output for the next step.

2. Create a docker-compose.yml

yaml
services:
  app:
    image: ghcr.io/pigontech/inkvoice:latest
    ports:
      - "3000:3000"
    volumes:
      - invoice-data:/app/data
    environment:
      ADMIN_USER: admin
      ADMIN_PASS: pick-a-strong-password
      JWT_SECRET: paste-the-openssl-output-here
      # Serving over plain HTTP? Keep this false. It defaults to true, which
      # marks the session cookie Secure, and browsers then drop it on any
      # non-HTTPS address other than localhost, so logins silently fail.
      COOKIE_SECURE: "false"
    restart: unless-stopped
    # Bun sizes its heap to the memory it can see, so keep this cap.
    mem_limit: 512m

volumes:
  invoice-data:

3. Start it

bash
docker compose up -d

4. Open the app

Navigate to http://localhost:3000 and log in with the credentials you set above.

TIP

Putting this on the public internet? Terminate TLS in front of it, then switch to COOKIE_SECURE: "true" and add ENABLE_HSTS: "true".

Manual Setup

If you prefer to run Inkvoice without Docker:

Prerequisites

  • Bun (latest stable)

1. Clone the repository

bash
git clone https://github.com/pigontech/inkvoice.git
cd inkvoice

2. Install dependencies

bash
bun install

3. Configure environment

bash
cp .env.example .env

Edit .env with your settings. See Configuration for all options.

4. Start the development server

bash
# Start both backend and frontend
bun run dev

# Or start them separately
bun run dev:backend   # API on port 3000
bun run dev:frontend  # Vite dev server on port 5173

5. Build for production

bash
bun run build
bun run start

This builds the frontend to static files and starts the Hono server on port 3000.

Released under the MIT License.