Freelancers and agencies all eventually face the same question: how do you send professional invoices, accept payments, and track who owes you what — without handing your entire financial history to a SaaS company that can raise prices, change terms, or shut down whenever it wants?
Invoice Ninja is the answer for people who want to own their billing data. It's a full invoicing, quoting, and payment platform that you can self-host on your own server, with support for 45+ payment gateways and a feature set that competes directly with FreshBooks and QuickBooks. There's one licensing nuance worth understanding upfront, which we'll cover clearly.
What Invoice Ninja is
Invoice Ninja is an invoicing, billing, and payment management platform built with Laravel (PHP) on the backend and Flutter on the frontend, giving it web, mobile, and desktop apps from a single codebase. It launched in 2014, and version 5 was a complete ground-up rewrite. The current version is in the v5.x line with an active, fast release cycle.
It covers the full billing workflow: create and send branded invoices, generate quotes and proposals, set up recurring invoices with auto-billing, track expenses, log billable time, manage projects with Kanban boards, and accept online payments through more than 45 gateways. The client portal lets your customers view invoices, see their payment history, and pay online.
It has 9,600+ GitHub stars and is widely used by freelancers and small agencies who want billing software they control.
The license situation — ELv2
Like Outline, Invoice Ninja deserves a clear explanation of its license before anything else.
Invoice Ninja is licensed under the Elastic License v2 (ELv2) — the same license Elastic used for Elasticsearch. ELv2 is source-available, not OSI-approved open source. The source code is fully public on GitHub, and you can self-host it freely.
What ELv2 allows:
- Full access to the source code
- Self-hosting for your own business, with all Pro and Enterprise features included
- Modifying the code for your own use
What ELv2 prohibits:
- Offering Invoice Ninja as a hosted service to third parties (a managed SaaS competing with their own hosted offering)
- Circumventing the license key functionality
- Removing or altering licensing/copyright notices
For the typical user — a freelancer or agency self-hosting Invoice Ninja to bill their own clients — ELv2 imposes no practical restriction. You get the full feature set, including everything that's paid on the hosted plans, for free. The restriction only matters if you intend to resell Invoice Ninja as a service to others.
Worth noting: when you self-host, all Pro and Enterprise features from the hosted app are included in the source-available code. You're not getting a crippled community edition — you get everything.
Core features
Invoicing and quotes
Create branded invoices with custom fields, custom CSS, and custom invoice designs. The free tier includes 4 templates; self-hosted gives you all 11 plus full design control. Generate quotes that convert to invoices on approval, create proposals, and set up recurring invoices that bill automatically on a schedule.
Payments — 45+ gateways
This is Invoice Ninja's standout feature. It integrates with more payment gateways than any competitor: Stripe, PayPal, Braintree, Authorize.net, Square, GoCardless, Mollie, WePay, and dozens more. It accepts credit cards, ACH bank transfers, and even crypto. Critically, Invoice Ninja charges no additional fees beyond the gateway's own standard rates — unlike some competitors who take a cut.
Auto-billing and reminders
Set up recurring invoices that automatically charge a client's saved payment method on schedule. Configure automatic payment reminders that chase overdue invoices without you lifting a finger. For agencies with retainer clients or subscription billing, this automates the entire recurring revenue workflow.
Time tracking and projects
Log billable hours, organize work into projects, and visualize task flow with Kanban boards. Time entries link directly to invoices, so you can track work and bill for it without switching tools.
Expenses
Record and categorize business expenses, attach receipts, and link expenses to clients or projects for accurate billing and reporting. Convert billable expenses directly into invoice line items.
Multi-currency and multi-language
Support for multiple currencies with automatic conversion, and multiple languages for both the interface and client-facing documents. For agencies with international clients, this handles the complexity of billing across borders.
Client portal
Each client gets a portal where they can view their invoices, see payment history, approve quotes, and pay online. Self-hosting with the white-label license removes all Invoice Ninja branding so the portal is fully yours.
Self-hosting Invoice Ninja
Invoice Ninja runs on a standard LAMP-style stack: PHP (Laravel), MySQL/MariaDB, and a web server. Docker is the cleanest deployment path. The official Docker Compose setup:
services:
app:
image: invoiceninja/invoiceninja:5
depends_on:
- mysql
environment:
APP_URL: https://invoices.example.com
APP_KEY: ${APP_KEY}
DB_HOST: mysql
DB_DATABASE: ninja
DB_USERNAME: ninja
DB_PASSWORD: ${DB_PASSWORD}
volumes:
- ./public:/var/www/app/public
- ./storage:/var/www/app/storage
ports:
- "8000:80"
mysql:
image: mysql:8
environment:
MYSQL_DATABASE: ninja
MYSQL_USER: ninja
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
volumes:
- mysql-data:/var/lib/mysql
volumes:
mysql-data:Generate the APP_KEY with php artisan key:generate or use a 32-character random string. Put Traefik or Nginx in front for HTTPS, configure SMTP for sending invoice emails, and you have a production-ready instance.
One important note: email deliverability matters more for Invoice Ninja than most self-hosted tools. Your invoices need to actually reach clients' inboxes, not their spam folders. Use a proper transactional email service (Postmark, SendGrid, Amazon SES, or Mailgun) rather than trying to send directly from your server. This is the difference between getting paid on time and clients never seeing the invoice.
The minimum viable server is modest — 1-2 CPU cores and 2GB RAM handle a freelancer or small agency comfortably.
Invoice Ninja vs the alternatives
vs FreshBooks — FreshBooks is the polished SaaS default for freelancers, with excellent UX and strong accounting features. It's also subscription-priced per client and stores your data on their servers. Invoice Ninja matches most of the invoicing feature set, costs nothing when self-hosted, and gives you full data ownership. FreshBooks wins on polish and built-in accounting depth; Invoice Ninja wins on cost and control.
vs QuickBooks — QuickBooks is full accounting software; Invoice Ninja is focused on invoicing and payments. If you need full double-entry bookkeeping, tax preparation, and payroll, QuickBooks does more. If you primarily need to send invoices and get paid — and handle accounting separately — Invoice Ninja is leaner and cheaper.
vs Wave — Wave is free and cloud-based, popular with freelancers. But Wave is SaaS-only with no self-hosting, and has been narrowing its free tier over time. Invoice Ninja gives you the same core functionality with self-hosting and no risk of feature removal.
vs Stripe Invoicing — Stripe's built-in invoicing is simple and tightly integrated with Stripe payments, but it locks you to Stripe and lacks the broader features (time tracking, projects, expenses, multi-gateway). Invoice Ninja is a full platform; Stripe Invoicing is a feature of a payment processor.
vs Crater / SolidInvoice — these are genuinely open source (not source-available) invoicing tools. If OSI-approved licensing is a hard requirement, they're worth evaluating. Both are less mature and have fewer payment gateway integrations than Invoice Ninja, but the licensing is cleaner for some use cases.
Who it's for
Good fit:
- Freelancers and agencies who want to own their billing data
- Businesses needing a wide range of payment gateway options
- Anyone billing international clients (multi-currency, multi-language)
- Teams who want invoicing, time tracking, and expenses in one self-hosted tool
- People already running self-hosted infrastructure who want to add billing
- Anyone tired of per-client SaaS invoicing pricing
Not the right fit:
- Non-technical users who want zero setup — the hosted plan or FreshBooks is easier
- Businesses needing full accounting (bookkeeping, payroll, tax) — QuickBooks does more
- Teams with strict OSI open source requirements — Crater or SolidInvoice instead
- Anyone who wants the most polished mobile experience — the mobile app lags the web version
My take
Invoice Ninja is the right tool for freelancers and agencies who take data ownership seriously and don't want their invoicing history living on someone else's server. The 45+ payment gateway support is genuinely best-in-class — whatever payment method your clients prefer, it's probably supported. And the fact that self-hosting unlocks all the Pro and Enterprise features for free makes it a remarkable value.
The ELv2 license is worth understanding but won't affect you unless you're trying to resell it as a service. For self-hosting to bill your own clients, you get the complete feature set with no restrictions.
The one thing I'd emphasize: invest in proper email deliverability from day one. An invoicing tool that sends invoices to spam is worse than useless. Wire it to a transactional email provider and verify your domain's SPF, DKIM, and DMARC records. Get that right and Invoice Ninja becomes a billing system you fully control — which, for anyone running a business on their own terms, is exactly the point.
PIPOLINE · DEVOPS CONSULTING
Need help self-hosting Invoice Ninja?
Getting Invoice Ninja into production — Docker, MySQL, SSL via Traefik, and especially proper email deliverability with SPF/DKIM/DMARC so your invoices actually reach clients — takes experience to get right. I can handle the full setup and wire it into your existing stack. You get a billing platform you fully control, with invoices that land in the inbox.
Get in touch at pipoline.com →
Member discussion