Firefly III. My favorite personal finance management app

Personal finance management using an open source program

Firefly III. My favorite personal finance management app


Earlier this year, I was in the market for a personal finance manager. I wanted to know where all my money went during the month, and how I can be able to optimize savings and and see where I can reduce unnecessary spending.

After trying different apps and lots of research, I ended up finding Firefly III.

What is Firefly III?

"Firefly III" is a (self-hosted) manager for your personal finances. It can help you keep track of your expenses and income, so you can spend less and save more.

What can it do?

A light overview of Firefly III is as follows:

  • You can create and edit transactions, accounts, and give them budgets, categories and tags.
  • You can automate part of this with recurring transactions and auto-budgets.
  • You can keep track of liabilities.
  • You can setup piggy banks for savings goals and generate reports of all your transactions

If you want a more comprehensive list of features, you can check out their Introduction and features page.

For me, it's Perfect! It ticked all the boxes of what I needed.

Firefly has different options on how to host it, personally what I ended up using to host Firefly was Docker.

Docker is a software platform that allows you to build, test, and deploy applications quickly. It does this by containerizing the applications. I really love it and in the future I'll hopefully make a post talking about this amazing platform. But if you're a developer, you really need to look into it if you haven't already.

If you'd like to test out Firefly and see if it's for you, you can check out their demo site.

For those that are versed with docker, this is a sample of the contents of a docker-compose file that you can use.

version: '3.3'

services:
  #The firefly app
  app:
    image: fireflyiii/core:latest
    container_name: firefly
    restart: always
    volumes:
      - firefly_iii_upload:/var/www/html/storage/upload
    env_file: .env
    ports:
      - 80:8080
    depends_on:
      - db

  #Database for firefly
  db:
    image: mysql
    container_name: fireflydb
    hostname: fireflyiiidb
    restart: always
    environment:
      - MYSQL_RANDOM_ROOT_PASSWORD=yes
      - MYSQL_USER=firefly
      - MYSQL_PASSWORD=secret_firefly_password
      - MYSQL_DATABASE=firefly
    volumes:
      - firefly_iii_db:/var/lib/mysql
      
volumes:
   firefly_iii_upload:
   firefly_iii_db:

Make sure to change MYSQL_PASSWORD = "Your own strong password"

This will deploy the firefly application as well as the SQL database for it and get you started. Personally, I also add the following to my docker-compose file as well:

  #phpmyadmin - To check database
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: pma
    links:
      - db
    environment:
      PMA_HOST: db
      PMA_PORT: 3306
      PMA_ARBITRARY: 1
    restart: always
    ports:
      - 8081:80

   #mysql-cron-backup - Creates automatic backups of fireflydb
  mysql-cron-backup:
    container_name: software_firefly_db_backuper
    image: fradelg/mysql-cron-backup
    restart: always
    depends_on:
      - db
    volumes:
      - ./mysql_backup:/backup
    environment:
      - MYSQL_HOST=fireflydb
      - MYSQL_USER=firefly
      - MYSQL_PASSWORD=secret_firefly_password
      - MAX_BACKUPS=15
      - INIT_BACKUP=1
      - CRON_TIME=0 * * * * # Every hour at minute 0
      - GZIP_LEVEL=9 # High compression level

I use the mysql-cron-backup container to create periodical backups for my firefly database so I'm able to restore it in case anything goes wrong, and I use phpadmin to help me access the database directly.

If you have any questions, don't hesitate to contact me. Cheers.