Why PHP for self-hosted invoicing?
PHP remains the dominant server-side language for self-hosted business applications — and for good practical reason. PHP 7.4+ runs on virtually every shared hosting environment in the world. If you or your client has a cPanel hosting account, PHP is already available without any additional configuration.
Compare this to alternatives:
- Node.js apps — require a VPS or cloud instance, ongoing server management, and process supervision (PM2, systemd). Not available on standard shared hosting.
- Docker-based tools (Invoice Ninja v5, Crater) — require Docker, which is not available on shared hosting. This adds operational complexity and ongoing maintenance.
- Python/Django apps — similarly restricted to VPS or cloud environments.
PHP's ubiquity on shared hosting is a genuine deployment advantage for self-hosted invoicing software aimed at small businesses that don't have DevOps resources.
Practical note: "Runs on shared hosting" is not a limitation — it's a feature. It means no VPS provisioning, no Docker configuration, no server management overhead. Upload, set permissions, run the setup page. Done.
Hosting and deployment requirements
For a PHP-based invoicing system, the minimum requirements for any modern tool should be:
Any PHP invoicing system that requires MySQL/MariaDB, Redis, or Node.js as dependencies is adding infrastructure complexity that most small business deployments can't sustain. The simpler the stack, the better.
What to check before deploying
php -v # PHP 7.4.33 (cli) or higher php -m | grep -E 'curl|json|mbstring|pdo|zip' # Should list: curl, json, mbstring, pdo_sqlite (for SQLite tools), zip
Features that matter for invoicing
Not all invoicing modules are equal. Here's what separates a complete invoicing system from a basic one:
Expense tracking requirements
Invoicing without expense tracking gives you half the picture. A complete system should handle:
- Categorised expense entry — assign expenses to categories (Rent, Utilities, Supplies, Payroll, etc.) for accurate P&L reporting
- Multi-account support — track expenses across business bank accounts, credit cards and petty cash separately
- Receipt attachment — store scanned receipts against transactions for audit trail purposes
- Recurring expenses — automatically post regular expenses (rent, subscriptions, loan repayments) without manual entry each month
- Petty cash module — dedicated tracking for small cash expenditures with running balance
- Tax-deductible flagging — mark expenses as deductible for simplified tax reporting
- Export to CSV — send expense data to your accountant in a standard format
Architecture: database vs flat-file
PHP invoicing tools fall into two camps architecturally, and the choice has real implications for deployment and maintenance:
MySQL/MariaDB-dependent tools
Most PHP invoicing tools (Crater, Invoice Ninja v4, Akaunting) require a MySQL database. This adds a dependency: you need a database server, credentials, and someone to manage backups. On shared hosting this is usually available, but it's additional configuration. Database corruption is rare but catastrophic when it happens without a recovery plan.
Flat-file and SQLite tools
Tools using flat-file JSON or SQLite have no database server dependency. SQLite stores the entire database in a single file that you can back up with a simple file copy. Flat-file JSON is even simpler — all data is human-readable text files.
CWFMS uses flat-file JSON for all core data — no MySQL required, no database configuration. The entire data store is a directory of JSON files that can be backed up with a single zip operation. Folio, the companion HR system, uses SQLite.
PHP invoicing tools compared
| Tool | Database | Shared Hosting | Price Model | Payroll | Expense Tracking | Multi-company |
|---|---|---|---|---|---|---|
| CWFMS | Flat-file JSON | ✓ Any cPanel | One-time | ✓ Full | ✓ Full | ✓ |
| Crater | MySQL required | Possible | Free (OSS) | ✗ | Basic | ✗ |
| Invoice Ninja v4 | MySQL required | Possible | Free (OSS) | ✗ | Basic | ✗ |
| Invoice Ninja v5 | MySQL + Docker | ✗ VPS only | Free (OSS) | ✗ | Basic | Limited |
| Akaunting | MySQL required | With effort | Free core | Paid add-on | Core only | ✓ |
CWFMS: invoicing inside a complete financial system
CWFMS treats invoicing as one module within a complete wealth management system rather than a standalone invoicing tool. This matters because invoices don't exist in isolation — a paid invoice should update your accounts receivable, affect your cashflow view, and be trackable against a client for P&L purposes. In siloed invoicing tools, you handle that reconciliation manually. In CWFMS, it's automatic.
What the invoicing module covers
- Invoice generator with PDF export and customisable branding
- Line items with per-item GCT/tax configuration
- Status tracking: Draft → Sent → Paid → Overdue
- Recurring invoice scheduling
- Accounts receivable dashboard with aging
- Client database with outstanding balance view
- Payment recording (full or partial)
- Invoice history and audit trail
Deployment
PHP: 7.4+ (8.x supported) Extensions: curl, json, mbstring Database: None — flat-file JSON Hosting: Any cPanel shared hosting Setup: Upload ZIP → visit /admin/setup.php → done
No database credentials. No migration scripts. No environment files to configure. Unzip, upload, visit the setup page, set your admin password and brand settings, and the system is live.
See the invoicing module live
The demo is pre-loaded with sample clients, invoices and transactions — explore everything before deciding.
Open Live Demo → Pricing & DocsRelated: Self-hosted accounting software guide · Wave alternatives · Self-hosted office management comparison