selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

GitHub
facto logo

Self-host facto

v4.32

Family accounting tool for expenses and internal debts

ReleaseOpen SourceOther
Updated10 hours ago
LanguageScala
Setup difficultyAdvanced
Stars
372
Port
9000 (HTTP web interface)
Requires
Java, MariaDB/MySQL
Docker
nymanjens/facto
Install with Docker Compose
facto screenshot 1

What is facto?

Family Accounting Tool (facto) is a self-hosted web application for families to track every transaction, extract spending statistics by category, calculate who owes whom for shared expenses, and monitor cash flow to catch unaccounted spending. It supports multiple users with separate accounts and a common family account, using categories like 'endowment' for transfers to the shared pot. The application runs on Java 11 (JDK 11) with a MariaDB or MySQL database, and can be installed either from pre-built release binaries or via Docker Compose (though the latter is discouraged for production). A default admin user is created on first run. The project is maintained by a single developer (Jens) and licensed under Apache-2.0.

Should you self-host facto?

facto scores 44/100 on selfhost.directory (how scoring works) and ranks #7 of 11 in Accounting. It has 372 GitHub stars.

It shipped 9 stable releases in the past year. The latest, v4.32, came out on 26 October 2026. New versions land roughly every 2 weeks.

Setup is advanced: plan for several services and some ongoing maintenance. An official Docker image is available. It is Other-licensed and written mostly in Scala.

Its closest alternative on selfhost.directory is akaunting (67/100, 10 241 stars). It scores higher overall, so compare the two before you pick. See facto vs akaunting side by side.

Features

  • Accounting categories
  • Cash flow overview
  • Category-based statistics
  • Exchange rates and inflation correctionDescribed as hidden/advanced features
  • Internal debt calculation
  • Multi-user with admin
  • Transaction tracking

facto README

How to install facto

Install facto with Docker Compose

Docker and Docker Compose
Environment variables
APPLICATION_SECRET, DATABASE_URL

Get the docker-compose.yml file

wget https://raw.githubusercontent.com/nymanjens/facto/master/docker-compose.yml

Choose a unique random string here of sufficient length

export APPLICATION_SECRET="$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)"

Create an empty database with a single admin user

docker-compose run web sleep 5 # Wait for the database to be ready docker-compose run web bin/server -DdropAndCreateNewDb docker-compose run web bin/server -DcreateAdminUser

Bring up the server

docker-compose up

Discouraged for production use with real data; see GitHub issue #4

How to configure facto

  • APPLICATION_SECRETApplication secret for Docker deployment

    Application secret for Docker deployment

  • app.setup.defaultPasswordDefault password for the initial admin user

    Default password for the initial admin user

  • DATABASE_URLjdbc:mysql://db:3306/facto?user=root&password=facto&disableMariaDbDriverJDBC connection URL for Docker deployment

    JDBC connection URL for Docker deployment

  • drivercom.mysql.jdbc.DriverJDBC driver class for the database (under db.default)

    JDBC driver class for the database (under db.default)

  • play.http.secret.keySecret key for Play framework HTTP security

    Secret key for Play framework HTTP security

  • slick.profileslick.jdbc.MySQLProfile$Slick database profile (under db.default)

    Slick database profile (under db.default)

  • urljdbc:mysql://localhost/facto?user=mysqluser&password=mysqlpasswordJDBC connection URL for the database (under db.default)

    JDBC connection URL for the database (under db.default)

facto releases & version history

More in Accounting

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…