blog review

It’s been a whirlwind year working with InvoiceNinja 5, a web-based accounting package you can run in the cloud, or on your own server (self-hosting). Think of it as Freshbooks, but running on your own servers. I’ve run through self-hosting every version available, testing with dummy data, pulling out my hair, migrating from Quickbooks and Freshbooks, then going live with actual data. I’m here after about a year of working with InvoiceNinja (IN) on Docker, to say this is a good tool to self-host. It’s cheap ($30 /year at the time of writing), and it has the basic features needed if you run a small service business such as consulting or accounting. So, for that reason, I love IN, but, I might also hate it too. Let’s take a look.

To say they don’t like your hate is an understatement. In the support forums, agitated users collide with support people and get admonished for salty words. I did too, and probably for good reason. For the smallness of this tool’s price, one has to feel, at times, what are they bound to deliver in the product? It’s an interesting problem as I see the main lightning rod of pain for users show up often: migration from version 4 to version 5. That’s better than the tyrant who supports Tiny-Tiny RSS users, so count your blessings when you run into issues.

This review covers versions up to 5.3.1 and self-hosting the InvoiceNinja 5 software on a Linux machine inside a Docker environment. This software continues to develop and improve over time.

There are some truly annoying things

1. When importing expenses, the types of fields mapped are limited. So, you can never really do an import and get everything across. In my example, I imported from Freshbooks and had to go back over all of the entries and clean them up, add taxes, etc. They’ve been working on this, but it was clunky and took a great deal of time for me to clean up.

2. The Laravel Flutter (Laravel is on the back-end) interface exposes some annoying things. Some of it is probably in the software, others are chosen by InvoiceNinja. One example, when importing, all expenses get set to a setting of non-inclusive taxes and by rate. Once you go one by one and change this, the tax amount is always defaulted to “1.00.” So, as an update, it appears as though in at least version 5.3.8 this default value issue is gone. This now gets to a general challenge with IN and that’s keyboard usage.

3. This leads me to one fundamental thing – keyboard operation. InvoiceNinja 5 is bad, really bad if you want to use a keyboard only for speed. The web interface already forces you to a mouse for some things, but an expense entry, for example, used tab stops that don’t make sense, dropdowns that can’t be adjusted by keyboard and even when tabbing into a currency field. For example, the data is wiped – yet again forcing you back to the mouse and slowing down. In some cases, that currency field is wiped and impossible to fill in, forcing you to start again. Sometimes clicking on elements engages them, sometimes it doesn’t. They’ve improved this through the beta program, but overall InvoiceNinja 5 is poor for this and probably will always be. This is what would keep this program from being considered a professional tool. I’d like to thank Hillel Coren for the comments, I’ll follow up with you about tabbing on the Discourse forum.

4. The migration process is absurd. It’s ill-conceived and, well, just broken. First and foremost, you’re expected to run two copies of IN side-by-side and have them communicate with each other in real-time. Given these tools are web-hosted, you’ll require a DNS host and TLS support, this can be downright painful for some. And judging by the comments in the support forum, this problem won’t go away until they just offer a way to export data from v4 and allow for the same data to be imported directly into v5.

5. The Client Portal. I really have a love/hate relationship with this feature. I do think it’s useful, but as it has improved over different versions, you’re often left with the dreaded “500 Server Error” and nowhere to start:

Update: This issue was corrected by changing credit card support (specifically supporting MasterCard) A bit random, but the portal is now accessible. The folks at IN continue to correct issues as they arise, and this one is no different.

As far as the feature’s usefulness, it’s great. To allow clients access to an authenticated area that lets your clients see past invoices, their profiles and give them a possible way to pay bills. The implementation of it has been a bit iffy, but they clearly still have work to do.

Let’s get to what’s good

1. InvoiceNinja is very reasonably priced. It can be self-hosted for free, and for $30 / year, USD can be white-labelled. The fact that it’s self-hosted helps keep your data close. I’m not sure that the application should be a monthly cost given that you are hosting it, but as long as the cost stays low, it’s great. The docker setup process works well enough and you can have it spun up very quickly and ready to use. For a basic accounting package that can create recurring invoices, email your clients and provide a decent portal, InvoiceNinja works well. The regular updates are a great sign of active work to fix issues.

2. They’ve been actively working on an iOS application. I have used the tool throughout the beta, but the developers have done well with replicating the web interface. I haven’t completely been able to trust the tool for data entry, but there’s hope for a seamless web and mobile experience in the future. Over time, IN has been able to push the Flutter interface into all sorts of environments such as Windows and macOS. To be sure, these are good though probably just a web portal to what you already have – So, not an embedded we experience specifically, though it does feel like it. One point to make is the speed of these apps feels like native for speed but lacks things you’d expect in native apps (like print support when viewing an invoice PDF in Windows; you have to download, then print). Like a bunch of this, mileage varies depending on the platform you use.

Perhaps even more interesting was the Windows app’s CPU performance. While running and viewing a PDF, it started to consume far more CPU than an idle application should expect.

3. The interface is clean and simple. This is what you want in a tool like this. It’s a departure from the flat look of Freshbooks, but the interface takes you to where you need, quickly. Many of the modules such as “Invoices” and “Expenses” can be disabled. This interface is an improvement over version 4.

4. The recurring invoice module works well. And, let’s face it, this is probably why you want to self-host this tool (beyond reports). I’m happy to say that after some tweaking of the Docker container, the Laravel queue process sends out emails reliably. Here’s what I do after an IN5 Docker update (note I modify the official cron process slightly for logging):

# Get into the container
docker exec -it -u root in5 /bin/sh
# edit the crontab
crontab -e
# add these two lines
* * * * * cd /var/www/app && php artisan schedule:run >> /var/www/app/storage/logs/cronoutput.log 2>&1
* 5 * * * echo "" > /var/www/app/storage/logs/cronoutput.log >> /dev/null 2>&1
# run cron
crond
# watch the logs for updates
tail -f /var/www/app/storage/logs/cronoutput.log

5. Email templates. While the early beta stage had so many issues with this (especially messages that would send even if you had the setting off), IN5 soon improved and the template structure improved. The Laravel interface to this will probably always be clunky, but being able to template messages with HTML code has worked as expected. Since I send invoices with reports, this kind of feature was a necessity. I always suggest that you enable the bcc: option (Settings-> Email) to message you in case of errant messages.

Other tools such as reporting and client management are basic in functionality but will get you what you need. Currency support might force you to edit the database directly. Some other features are nice (such as revenue graphs), but I’m not sure they’re more than pretty. Perhaps to others, that’s valuable.

InvoiceNinja 5 is, however, worth looking into if you want to self-host an accounting package. For all the pain I’ve gone through with this tool, it’s been reliable enough to make it worthwhile. Accounting software, in general, needs more useful and reasonably priced options for those that don’t want to spend top-dollar on Quickbooks or Freshbooks. Take a look at Invoice Ninja here: invoiceninja.org

Encountering issues installing this on Docker? Let me know if I can help. Also, while you’re here, do subscribe to my newsletter.