selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

dubbl logo

Self-host dubbl

Open-source double-entry accounting and business platform

BetaOpen SourceApache-2.0
Updated4 months ago
LanguageTypescript
Setup difficultyModerate
Stars
57
Port
3000 (HTTP web interface)
Requires
PostgreSQL
Install with Build from Source

What is dubbl?

dubbl is a full-featured, open-source accounting and business management platform built as a replacement for commercial tools like Xero and QuickBooks. It delivers double-entry bookkeeping, invoicing and quotes, bills and purchase orders, banking with CSV import and reconciliation, expense management with receipt OCR, inventory with warehouses and stock tracking, payroll for employees and contractors, project management with time tracking, CRM with pipeline management, fixed assets with depreciation, budgets, multi-jurisdiction tax handling, 25+ financial reports, multi-currency support, document management, and a complete audit trail. The platform is API-first with a full REST API and includes a built-in server for the Model Context Protocol so AI agents can work with your financial data. It runs on Node.js 20+ with PostgreSQL 15+ and optional S3-compatible storage for file uploads. Self-hosting is supported via Docker Compose with no feature limits or user caps on self-hosted instances. The cloud offering has Free and Pro tiers with usage limits.

Should you self-host dubbl?

dubbl scores 41/100 on selfhost.directory (how scoring works) and ranks #8 of 11 in Accounting. It has 57 GitHub stars.

There was no stable release in the past 12 months, so check the repository's recent activity before you rely on it.

Setup is moderate: expect some configuration beyond a single command. It is Apache-2.0-licensed and written mostly in Typescript.

Its closest alternative on selfhost.directory is ERPNext (85/100, 40 690 stars). It scores higher overall, so compare the two before you pick. See dubbl vs ERPNext side by side.

Features

  • Banking
  • Bills and purchase orders
  • Budgets
  • CRM
  • Document Management
  • Double-Entry Bookkeeping
  • Expense Management
  • Financial Reports
  • Fixed Assets
  • Inventory Management
  • Invoicing and quotes
  • Multi-currency
  • Payroll
  • Project Management
  • Tax Management

dubbl README

How to install dubbl

Install dubbl with Build from Source

Environment variables
DATABASE_URL, AUTH_SECRET, AUTH_URL, STRIPE_*, TRIGGER_*, S3_* variables

git clone https://github.com/dubbl-org/dubbl.git cd dubbl pnpm install cp .env.example .env

Edit .env with your configuration

pnpm db:push pnpm db:seed pnpm dev

Development installation with Node.js and pnpm. Requires PostgreSQL 15+ and optional S3 storage.

How to configure dubbl

  • ALLOWED_EMAIL_DOMAINSSelf-Hosting (Optional) REGISTRATION_MODE="open" # open, invite_only, disabled

    Self-Hosting (Optional) REGISTRATION_MODE="open" # open, invite_only, disabled

  • AUTH_APPLE_IDApple — https://developer.apple.com/sign-in-with-apple Option A (recommended): provide your .p8 key as base64 for runtime JWT generation To encode: base64 -w0 AuthKey_XXXXXXXXXX.p8

    Apple — https://developer.apple.com/sign-in-with-apple Option A (recommended): provide your .p8 key as base64 for runtime JWT generation To encode: base64 -w0 AuthKey_XXXXXXXXXX.p8

  • AUTH_APPLE_KEY_BASE64
  • AUTH_APPLE_KEY_ID
  • AUTH_APPLE_SECRETOption B: provide a pre-generated JWT secret (expires after 6 months)

    Option B: provide a pre-generated JWT secret (expires after 6 months)

  • AUTH_APPLE_TEAM_ID
  • AUTH_GOOGLE_IDOAuth Providers (Optional) Google — https://console.cloud.google.com/apis/credentials

    OAuth Providers (Optional) Google — https://console.cloud.google.com/apis/credentials

  • AUTH_GOOGLE_SECRET
  • AUTH_SECRETAuthentication — NextAuth (Required) Generate with: openssl rand -base64 32

    Authentication — NextAuth (Required) Generate with: openssl rand -base64 32

  • DATABASE_URLpostgresql://dubbl:dubbl@localhost:5432/dubblDatabase (Required) For Docker Compose: postgresql://dubbl:dubbl@localhost:5432/dubbl

    Database (Required) For Docker Compose: postgresql://dubbl:dubbl@localhost:5432/dubbl

  • EXCHANGE_RATE_PROVIDERExchange rates (Optional) Auto exchange-rate sync uses ExchangeRate-API's free open endpoint by default (open.er-api.com — no key, ~160 currencies, any base currency). No config needed for full multi-currency support. Optional: force ECB official rates (Frankfurter — ~31 majors, most authoritative for those). Leave unset to use the default.

    Exchange rates (Optional) Auto exchange-rate sync uses ExchangeRate-API's free open endpoint by default (open.er-api.com — no key, ~160 currencies, any base currency). No config needed for full multi-currency support. Optional: force ECB official rates (Frankfurter — ~31 majors, most authoritative for those). Leave unset to use the default.

  • NEXT_PUBLIC_APP_URLhttp://localhost:3000Public app URL

    Public app URL

  • OPENEXCHANGERATES_APP_IDOptional: use Open Exchange Rates instead (~200 currencies incl. crypto/metals). The free OXR plan is USD-base only, but other bases are triangulated from it, so any base currency still works. Requires an app id.

    Optional: use Open Exchange Rates instead (~200 currencies incl. crypto/metals). The free OXR plan is USD-base only, but other bases are triangulated from it, so any base currency still works. Requires an app id.

  • RESEND_API_KEYEmail — Resend (Optional — needed for notification digests & platform emails) https://resend.com/api-keys

    Email — Resend (Optional — needed for notification digests & platform emails) https://resend.com/api-keys

  • S3_ACCESS_KEY_ID
  • S3_BUCKETdubbl
  • S3_ENDPOINThttp://localhost:9000
  • S3_REGIONus-east-1S3 / Object Storage (Optional — needed for file uploads) For Docker Compose (MinIO): use these defaults

    S3 / Object Storage (Optional — needed for file uploads) For Docker Compose (MinIO): use these defaults

  • S3_SECRET_ACCESS_KEY
  • STRIPE_CONNECT_CLIENT_IDStripe Connect (Optional — needed for user Stripe account integration)

    Stripe Connect (Optional — needed for user Stripe account integration)

  • STRIPE_CONNECT_WEBHOOK_SECRET
  • STRIPE_PRO_ANNUAL_PRICE_ID
  • STRIPE_PRO_PRICE_IDSeat plan price IDs from your Stripe product catalog

    Seat plan price IDs from your Stripe product catalog

  • STRIPE_SECRET_KEYStripe (Optional — needed for billing features) https://dashboard.stripe.com/apikeys

    Stripe (Optional — needed for billing features) https://dashboard.stripe.com/apikeys

  • STRIPE_STORAGE_GROWTH_ANNUAL_PRICE_ID
  • STRIPE_STORAGE_GROWTH_PRICE_ID
  • STRIPE_STORAGE_SCALE_ANNUAL_PRICE_ID
  • STRIPE_STORAGE_SCALE_PRICE_ID
  • STRIPE_STORAGE_STARTER_ANNUAL_PRICE_IDStorage add-on price IDs (annual)

    Storage add-on price IDs (annual)

  • STRIPE_STORAGE_STARTER_PRICE_IDStorage add-on price IDs (monthly)

    Storage add-on price IDs (monthly)

  • STRIPE_WEBHOOK_SECRET
  • TRIGGER_PROJECT_REFTrigger.dev — Background jobs Optional for local development; required in production for scheduled tasks & retries.

    Trigger.dev — Background jobs Optional for local development; required in production for scheduled tasks & retries.

  • TRIGGER_SECRET_KEY

More in Business Management

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…