Have you been using an online accounting app like Wave and now need to shift or do you need more control over your data, then Invoice Ninja might be just right for you, if you have 20 or less clients.
Although it is no longer fully open-source due to some limitations, the source-code is still available. It can still be self-hosted.
https://www.invoiceninja.org/
Built with Google’s Flutter Framework, Laravel & React
Versions
- Online Free – 20 Clients & Unlimited Invoices & Quotes
- Online Monthly Fee – $120/year or $12/month – https://invoiceninja.com/pricing/
- Self-hosted – You can host it on your own domain, now that’s a neat trick
Desktop App
Available directly from the Microsoft Store
https://www.microsoft.com/en-za/p/invoice-ninja/9n3f2bbcfdr6#activetab=pivot:overviewtab
Mobile App
https://www.invoiceninja.com/mobile/
Self-Hosted Requirements
- PHP 8.1 with the PHP Modules listed below following
- MySQL 5.7+ or MariaDB 10.3+
- NGINX or Apache
- Server requirements
PHP Modules required for Invoice Ninja
- bcmath – BCMath Arbitrary Precision Mathematics – for arbitrary precision mathematics, PHP offers Binary Calculator which supports numbers of any size and precision, represented as strings.
- * ctype (Enabled in 8.1) – the functions provided by this extension check whether a character or string falls into a certain character class according to the current locale.
- * curl (PHP >= 7.3 requires libcurl >= 7.15.5; PHP >= 8.0 requires libcurl >= 7.29.0) – Performs remote request operations.
- * fileinfo – Used to detect mimetype of file uploads.
- fpm (if using NGINX)
- gd – GD is required for generating image thumbnails, resizing images, and generating watermarks
- gmp – GNU Multiple Precision
- * iconv (requires libiconv/POSIX) – Used to convert between character sets.
- * json (bundled in >=8.0.0) – Used for communications with other servers and processing data in JSON format.
- for earlier versions of Laravel mcrypt (required by Laravel) – this is an interface to the mcrypt library, which supports a wide variety of block algorithms such as DES, TripleDES, Blowfish (default), 3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH, TEA, RC2 and GOST in CBC, OFB, CFB and ECB cipher modes.
- * mbstring – Used to properly handle UTF8 text.
- nd_mysqli & its dependancy mysqlnd or mysqli (bundled in >=5.0.0) – Connects to MySQL for database interactions.
- * openssl (PHP 7.1-8.0 requires OpenSSL >= 1.0.1 / < 3.0; PHP >= 8.1 requires OpenSSL >= 1.0.2 / < 4.0) – SSL-based connections to other hosts.
- PDO – the PHP Data Objects (PDO) extension defines a lightweight, consistent interface for accessing databases in PHP. Each database driver that implements the PDO interface can expose database–specific features as regular extension functions.
- nd_pdo_mysql or pdo_mysql – – without this it gives you the setup page & under Database Connection, when you click Test connection you’ll receive the message “could not find driver”
- soap – required by Softaculous to update Invoice ninja
- * tokenizer (Enabled in 8.1) – the tokenizer functions provide an interface to the PHP tokenizer embedded in the Zend Engine. Using these functions you may write your own PHP source analyzing or modification tools without having to deal with the language specification at the lexical level.
- * xml (requires libxml) – Used for XML parsing, such as from a third-party site.
- * zip (requires libzip >= 0.11; recommended libzip >= 1.6) – Used for decompressing Plugins, Themes, and WordPress update packages.
* Should be enabled already if WordPress is installed
Additional if you get 500 error when creating invoices. Fixed my issue, not sure if all are required
- xmlreader
- xmlwriter
- xsl
Laravel Versions
- 11: https://laravelversions.com/en/11 requires PHP 8.2.0 & curl 7.34.0 or greater – https://laravel.com/docs/11.x/upgrade
- 10: https://laravelversions.com/en/10 works with PHP 8.1