Invoicerr is a simple, open-source invoicing application designed to help freelancers manage their quotes and invoices efficiently. It provides a clean interface for creating, sending, and tracking quotes and invoices — so you get paid faster, with less hassle.
- Create and manage invoices
- Create and manage quotes (convertible to invoices)
- Manage clients and their contact details
- Track status of quotes and invoices (signed, paid, unread, etc.)
- Built-in quote signing system with secure tokens
- Generate and send quote/invoice emails directly from the app
- Generate clean PDF documents (quotes, invoices, receipts, and more)
- Custom brand identity: logo, company name, VAT, and more
- Authentication via JWT or OIDC (stored in cookies)
- International-friendly: Default English UI, customizable currencies
- SQLite database for quick local setup
- Docker & docker-compose ready for self-hosting
- Built with modern stack: React, NestJS, Prisma, SQLite/PostgreSQL
- REST API backend, ready for future integrations (mobile & desktop apps)
- Plugin system for community-made features
Invoicerr uses weblate to easily manage the translations
The images are built for the following architectures:
linux/amd64(x86_64)linux/arm64/v8(ARMv8)
The linux/arm/v7 architecture is not supported due to the use of prisma, which does not provide prebuilt binaries for this architecture. This means that the application will not run on 32-bit ARM devices.
The fastest way to run Invoicerr is using Docker Compose. A prebuilt image is available at ghcr.io/impre-visible/invoicerr.
-
Clone the repository:
git clone https://github.com/Impre-visible/invoicerr.git cd invoicerr -
Edit the
docker-compose.ymlto set your environment variables. -
Run the app:
docker compose up -d
-
Open your browser at:
http://localhost
These environment variables are defined in docker-compose.yml under the invoicerr service:
-
DATABASE_URL
PostgreSQL connection string. Example:
postgresql://invoicerr:invoicerr@invoicerr_db:5432/invoicerr_db -
APP_URL
Full public URL of the frontend (e.g.,https://invoicerr.example.com).
This is required for email templates and links. -
SMTP_HOST,SMTP_USER,SMTP_PASSWORD
Credentials and server used for sending emails (quotes, invoices, etc.) -
SMTP_FROM
Optional — address used as the sender for emails. If omitted, defaults toSMTP_USER. -
JWT_SECRET
Optional but recommended for JWT authentication. Can be any random string.
If not set, a default secret will be used. But it can have issues with docker deployments.
Make sure port 80 is available on your host machine, or change the mapping.
- Node.js v20+
- SQLite (or configure another
DATABASE_URL) - PNPM or NPM
-
Clone the project:
git clone https://github.com/Impre-visible/invoicerr.git cd invoicerr -
Backend setup:
cd backend npm install npx prisma generate npm run start -
Frontend setup (in a new terminal):
cd frontend npm install npm run start -
Open in your browser:
- Frontend:
http://localhost:5173 - API:
http://localhost:3000
- Frontend:
Pour lancer les tests e2e localement ou en CI :
-
Démarrer le backend et le frontend avec les variables de test :
cd backend && npm run start:test & cd frontend && npm run start:test &
(Assurez-vous d'avoir un .env.test dans chaque dossier)
-
Dans un autre terminal, lancer Cypress :
cd e2e npm install npm run e2e:open # ou npm run e2e:run
En CI, le workflow GitHub Actions fait ces étapes automatiquement.
This project is dual-licensed:
- Open Source: AGPL-3.0
- Commercial: COMMERCIAL-LICENSE
Contact me for commercial use.






