Analytics cookies only (Google Analytics, PostHog). No ad networks, no cross-site tracking. See our privacy policy.
Self-host InvoiceShelf
updated Oct 2026deployed by usprices checked · Jul 2026Install verified on Ubuntu 26.04 · Oct 2026 · how we test
We earn commissions when you shop through the links below. Full disclosure →
An open-source web application for creating invoices and estimates, tracking payments and managing expenses, with customers and items, taxes, recurring invoices and reports. A Laravel and Vue application; the project's Compose files run it with SQLite, MySQL or PostgreSQL.
Runs on a VPS from $6/mo (Kamatera 2GB, 2 GB RAM) · prices checked Sep 2026
Our recommendation
Pick InvoiceShelf when you want to send invoices and estimates, record payments and track expenses from a web app you host yourself. The docs list invoices, estimates and recurring invoices, payment tracking, expense management, customer and item management, taxes, reports and a dashboard; it is AGPL-3.0 Laravel and Vue. Our snippet is the repository's SQLite Compose file with the published image pinned to a release tag. We did not find an upstream RAM minimum, so our 512 MB floor is an estimate. The catalog's Invoice Ninja is source-available under the Elastic licence and Akaunting under the Business Source Licence, so InvoiceShelf is the one here under an OSI-approved licence.
What you need
Any VPS with at least 512 MB of RAM
A domain you control — most self-hosted setups need HTTPS in front of them
InvoiceShelf's README and Docker files flag these before you put real invoices in it:
non-negotiableThe README says this branch is the stable v2 line, which receives security patches only through 2027-09-01, and that new feature work is focused on the next major version. The registry already carries 3.0.0-alpha tags next to the 2.x ones, so check which line you are installing and what the migration guide says before you plan a long-term setup.
non-negotiableThe first visit redirects to an installation wizard (/installation) where you create the company and the admin account, so complete it before the port is reachable by anyone else. Set APP_URL and SANCTUM_STATEFUL_DOMAINS to the address you use, as in the Compose file; we use the SERVER_IP placeholder.
non-negotiableOur snippet uses SQLite stored in the invoiceshelf_storage volume (the Compose file warns not to touch the DB_DATABASE path); the repository also provides MySQL and PostgreSQL Compose variants. Back up the storage and modules volumes; the image also runs Laravel's scheduler itself, which generates recurring invoices and flags overdue documents.
non-negotiablePort 8090 is plain HTTP, so put a TLS reverse proxy in front before entering client details. The production images are built from a separate InvoiceShelf/docker repository according to the README; we pin the published 2.4.7 tag.