SSD Nodes Learn Hosting plans →
Guides Matt ConnorPar Matt Connor · Mis à jour le 2026-09-14

Applications de budget auto-hébergées : comparatif

Comparez Actual, Firefly III, Fava et Wallos : récupération bancaire automatique, import manuel, agrégateur tiers et limites de chaque application.

La réponse courte

Les applications de gestion budgétaire auto-hébergées se distinguent sur un point qui détermine la plupart des installations : le logiciel récupère-t-il vos transactions, ou devez-vous les saisir vous-même ? Actual Budget est le meilleur choix par défaut pour gérer le budget d’un foyer. Il utilise la méthode des enveloppes et fonctionne dans un seul conteneur. Il peut également récupérer les transactions auprès d’un fournisseur de données bancaires lorsque vous le lui demandez.

Firefly III convient lorsque vous voulez utiliser la comptabilité en partie double, ou lorsque vous voulez que les imports s’exécutent selon une planification sans supervision. Beancount avec Fava convient aux personnes qui veulent conserver le grand livre dans un fichier texte brut géré avec un système de contrôle de version. Wallos n’effectue qu’une seule tâche ciblée : suivre les dépenses récurrentes prélevées chaque mois sur votre compte.

Aucune de ces applications ne communique directement avec votre banque. Toutes celles qui affichent des transactions bancaires les obtiennent auprès d’un agrégateur tiers, et la création d’un compte auprès d’un agrégateur est l’étape qui bloque le plus souvent les utilisateurs. Lisez la section sur la synchronisation avant d’installer quoi que ce soit.

Ce que chaque application exécute, côte à côte

ChartServices, storage and sync model, taken from each project's own install docs
The data behind this chart
[
  {
    "tool": "Actual Budget",
    "services": 1,
    "storage": "SQLite files",
    "bank_sync": "Aggregators, manual pull",
    "multi_user": "Needs OpenID",
    "encryption": "Optional end to end"
  },
  {
    "tool": "Firefly III",
    "services": 3,
    "storage": "MariaDB",
    "bank_sync": "Importer, cron capable",
    "multi_user": "Built in accounts",
    "encryption": "None at rest"
  },
  {
    "tool": "Beancount + Fava",
    "services": 1,
    "storage": "Text file",
    "bank_sync": "Import scripts only",
    "multi_user": "No login at all",
    "encryption": "File level, your choice"
  },
  {
    "tool": "Wallos",
    "services": 1,
    "storage": "SQLite file",
    "bank_sync": "Manual entry only",
    "multi_user": "Extra logins in settings",
    "encryption": "None at rest"
  }
]

Actual Budget exécute 1 service de longue durée. Firefly III en exécute 3, car son fichier Compose officiel démarre l’application, une base de données MariaDB et un processus cron auxiliaire dans des conteneurs distincts. C’est tout ce qu’il faut retenir concernant les ressources pour ces 4 applications : un serveur de base de données est le seul composant lourd du groupe, et le reste se résume à un petit processus qui utilise un petit fichier.

Quelles applications de gestion de budget auto-hébergées peuvent importer les transactions de votre banque ?

Aucune application auto-hébergée ne se connecte directement à une banque. Les banques exposent les transactions via des API d’open banking, et ces API sont accessibles par l’intermédiaire d’un agrégateur : une entreprise qui entretient les relations avec les banques et revend l’accès. La vraie question comporte donc deux volets. L’application communique-t-elle avec un agrégateur, et pouvez-vous ouvrir un compte auprès d’un agrégateur qui couvre votre banque ?

Actual Budget communique avec plusieurs agrégateurs. En août 2026, sa documentation liste Akahu pour la Nouvelle-Zélande, Enable Banking pour l’Europe, GoCardless Bank Account Data pour l’Europe, SimpleFIN Bridge pour l’Amérique du Nord et Pluggy.ai pour le Brésil. Vous vous inscrivez vous-même auprès du fournisseur, vous générez les clés et les secrets, puis vous les collez dans votre serveur. Deux limites sont importantes. La documentation précise qu’Actual ne synchronise pas automatiquement les données bancaires : une personne doit cliquer sur le bouton. La même page indique aussi que GoCardless n’accepte plus de nouveaux comptes, ce qui ferme la voie européenne gratuite encore recommandée par les anciens guides. SimpleFIN Bridge est un service payant sur abonnement, facturé par le fournisseur, et non par Actual.

Firefly III déporte l’importation dans un second conteneur, Firefly III Data Importer. Sa configuration d’exemple contient des emplacements pour les identifiants GoCardless (Nordigen), Enable Banking, Spectre et SimpleFIN, ainsi que pour les imports de fichiers CSV et CAMT.053. Définissez CAN_POST_AUTOIMPORT=true, placez une longue valeur aléatoire dans AUTO_IMPORT_SECRET, puis un cron job sur l’hôte peut déclencher un import sans navigateur ouvert. Il s’agit de la seule synchronisation réellement sans intervention de cette comparaison.

Beancount ne propose aucune synchronisation. Vous téléchargez un fichier CSV ou OFX depuis votre banque, puis vous exécutez un script d’importation que vous avez écrit ou récupéré. Wallos ne propose pas non plus de synchronisation, volontairement : vous saisissez un abonnement une fois, puis il se répète selon sa propre périodicité.

L’import manuel est la méthode qui fonctionne toujours, et il reste utilisable même si votre banque change de fournisseur. Si la connectivité bancaire est déterminante pour vous, vérifiez la couverture de votre banque par l’agrégateur concerné avant d’installer quoi que ce soit. Cette vérification prend dix minutes et peut vous éviter d’y passer le week-end.

Actual Budget : budget par enveloppes dans un conteneur

Le budget par enveloppes consiste à affecter l’argent dont vous disposez déjà à une catégorie avant de le dépenser. Vous affectez 300 aux courses et 80 au transport, et le total affecté ne peut jamais dépasser l’argent disponible sur vos comptes. Actual applique cette méthode et privilégie le fonctionnement local : votre navigateur ou votre client de bureau conserve une copie complète du budget et la synchronise avec votre serveur. L’application continue donc de fonctionner lorsque le serveur est indisponible.

services:
  actual_server:
    image: actualbudget/actual-server:latest
    ports:
      - '5006:5006'
    volumes:
      - ./actual-data:/data
    restart: unless-stopped

Démarrez-le avec docker compose up -d et ouvrez http://your-server:5006. Le volume de données contient deux répertoires supplémentaires : server-files et user-files. Ces répertoires contiennent votre budget. Placez un reverse proxy avec TLS (transport layer security) devant le service avant de l’utiliser depuis un réseau autre que le vôtre. La procédure complète se trouve dans notre guide d’installation d’Actual Budget, et les modèles Compose utilisés dans ce fichier sont présentés dans Docker Compose sur un VPS.

Utilisateurs multiples. Par défaut, le serveur utilise un seul mot de passe partagé par tous les utilisateurs. Pour créer des comptes distincts, vous devez utiliser OpenID Connect, que le serveur prend en charge avec des fournisseurs tels qu’Authentik, Keycloak, Google et GitHub. La première personne qui se connecte via OpenID devient propriétaire du serveur, et ACTUAL_USER_CREATION_MODE détermine si les connexions suivantes créent automatiquement leur propre compte. Deux personnes peuvent ouvrir le même fichier de budget en même temps. La documentation avertit toutefois que les modifications conflictuelles ne sont pas sûres. Un couple qui partage un budget doit donc éviter de modifier le même écran simultanément.

Chiffrement. Actual propose un chiffrement de bout en bout pour chaque fichier de budget. Lorsqu’il est activé, le serveur stocke des données qu’il ne peut pas lire, ce qui est souhaitable sur un serveur loué. Deux conséquences en découlent. Si vous perdez le mot de passe de chiffrement, le fichier est perdu, car aucune réinitialisation n’est possible. Les jetons de synchronisation bancaire sont stockés séparément et ne sont pas couverts par ce chiffrement. Toute personne disposant d’un accès à la base de données du serveur peut donc les lire.

Firefly III : comptabilité en partie double et seul import automatisé de cette liste

La partie double signifie que chaque transaction possède un compte source et un compte destination. Lorsque vous achetez des courses, l’argent passe de votre compte courant à un compte de dépenses ; rien n’apparaît donc de nulle part. L’argent que vous ne pouvez pas expliquer apparaît comme un compte déséquilibré au lieu de se dissimuler dans le total d’une catégorie. C’est la raison de choisir Firefly III : il est plus proche de la comptabilité que de la gestion de budget.

Installez-le à partir des fichiers du projet :

mkdir -p /srv/firefly
curl -fsSL -o /srv/firefly/docker-compose.yml https://raw.githubusercontent.com/firefly-iii/docker/main/docker-compose.yml
curl -fsSL -o /srv/firefly/.env https://raw.githubusercontent.com/firefly-iii/firefly-iii/main/.env.example
curl -fsSL -o /srv/firefly/.db.env https://raw.githubusercontent.com/firefly-iii/docker/main/database.env

Modifiez .env avant le premier démarrage. APP_KEY doit être une chaîne de 32 caractères exactement, et le projet fournit la commande qui permet d’en générer une :

head /dev/urandom | LC_ALL=C tr -dc 'A-Za-z0-9' | head -c 32 && echo

STATIC_CRON_TOKEN attend une deuxième chaîne de 32 caractères. Le conteneur cron de ce fichier compose appelle l’application une fois par jour. L’appel est refusé sans token valide, ce qui empêche l’exécution des transactions récurrentes et des rappels d’échéance. Définissez SITE_OWNER avec votre adresse e-mail. Faites correspondre le mot de passe de la base de données dans .env avec celui de .db.env, puis démarrez l’ensemble :

docker compose up -d
docker compose logs -f app

Un premier démarrage réussi se termine avec l’application disponible sur le port 80 dans le conteneur et des journaux qui se stabilisent. Une boucle d’erreurs de connexion à la base de données signifie que les mots de passe dans .env et .db.env sont différents. L’application ne peut donc pas se connecter à MariaDB.

Import automatique. Data Importer s’exécute dans son propre conteneur et s’authentifie auprès de Firefly III avec un personal access token dans FIREFLY_III_ACCESS_TOKEN. Configurez un import de manière interactive, enregistrez le fichier de configuration fourni, puis laissez cron envoyer des requêtes à l’endpoint d’auto-import selon un calendrier. C’est ce que signifie la synchronisation de Firefly III : l’agrégateur conserve la connexion bancaire, l’importateur récupère les données et votre serveur effectue le travail pendant votre absence.

Multi-utilisateur. Firefly III conserve les comptes réels dans sa propre base de données, ce que sélectionne AUTHENTICATION_GUARD=web. À la place, utilisez remote_user_guard et laissez un proxy d’authentification tel qu’Authelia gérer la connexion en transmettant le nom d’utilisateur dans un en-tête. LDAP n’est plus pris en charge. Sur une instance accessible depuis Internet, ouvrez la page d’administration après votre première connexion et vérifiez le paramètre du mode utilisateur unique. Il détermine si d’autres personnes peuvent s’inscrire.

Chiffrement. Il n’y en a pas au repos. Les transactions sont stockées en clair dans MariaDB. Toute personne qui possède le mot de passe de la base de données ou une copie du volume dispose donc de votre historique financier. Terminez TLS en amont, évitez autant que possible de l’exposer directement sur Internet et chiffrez les sauvegardes.

Beancount et Fava : votre grand livre est un fichier texte

Beancount utilise une syntaxe en texte brut pour la comptabilité en partie double. Une transaction tient en quelques lignes dans un fichier qui vous appartient :

2026-08-19 * "Supermarket" "Weekly shop"
  Expenses:Food:Groceries   42.10 EUR
  Assets:Bank:Checking

Fava est l’interface web de ce fichier. Il génère les graphiques, le bilan et le compte de résultat, et peut modifier la source. Installez-le dans un environnement virtuel :

sudo apt update && sudo apt install -y python3-venv
python3 -m venv ~/.venvs/fava
~/.venvs/fava/bin/pip install fava
~/.venvs/fava/bin/fava --read-only ~/ledger/main.beancount

Un simple pip3 install fava échoue sur Ubuntu 24.04 avec error: externally-managed-environment, car apt gère le Python système. L’environnement virtuel est donc la solution, et non un contournement.

Par défaut, Fava écoute sur localhost, sur le port 5000. -H modifie l’hôte et -p modifie le port, mais réfléchissez avant d’élargir l’accès : Fava ne propose aucune connexion utilisateur. La ligne de commande n’a pas d’option pour définir un utilisateur ou un mot de passe. Toute machine capable d’atteindre le port peut donc lire toutes vos transactions. Conservez l’hôte par défaut et utilisez un tunnel SSH, un VPN ou un proxy qui gère l’authentification. L’option --read-only bloque les écritures depuis le navigateur. Elle est utile lorsque vous modifiez le fichier sur votre ordinateur portable et le validez dans git.

Multi-utilisateur et chiffrement. Fava ne propose aucun modèle utilisateur. Une instance sert un seul grand livre, sans identité associée. Le partage revient donc à partager l’authentification du proxy. Le chiffrement dépend de la méthode appliquée au fichier, par exemple une copie chiffrée avec age ou gpg, ou un dépôt de sauvegarde chiffré. L’avantage d’un grand livre texte est que git fournit gratuitement un historique, la fonction blame et une copie distante.

Wallos : le petit outil pour les coûts récurrents

services:
  wallos:
    image: bellamy/wallos:latest
    ports:
      - "8282:80/tcp"
    volumes:
      - './db:/var/www/html/db'
      - './logos:/var/www/html/images/uploads/logos'
    restart: unless-stopped

Wallos conserve toutes les données dans un seul fichier SQLite, à l’emplacement db/wallos.db. Il gère plusieurs devises avec conversion et peut vous avertir par e-mail, Discord, Telegram, Gotify, Pushover ou webhook lorsqu’un renouvellement approche. Vous pouvez créer des comptes supplémentaires depuis la page des paramètres. Chaque compte dispose de sa propre liste.

Il faut bien comprendre ce que Wallos ne fait pas. Wallos ne suit pas les dépenses quotidiennes et ne gère pas les budgets. Il répond à une seule question : combien est-ce que je paie chaque mois, et quel abonnement sera renouvelé la semaine prochaine ? De nombreuses personnes l’utilisent avec Actual pour cette raison. Si les montants récurrents qui vous intéressent sont ceux que vous facturez plutôt que ceux que vous payez, consultez plutôt un logiciel de facturation auto-hébergé.

Qu’en est-il de Maybe ?

Maybe Finance est souvent recommandé dans les discussions, il faut donc en parler. Son README indique que le dépôt n’est plus activement maintenu. La dernière version publiée est v0.6.0 et le code est sous licence AGPLv3. Le logiciel fonctionne toujours. Les données budgétaires sont conservées pendant une décennie. Un logiciel qui n’est plus maintenu et qui contient un schéma de base de données ainsi que des identifiants bancaires est un mauvais endroit pour les stocker. C’était la situation en août 2026. Vérifiez donc vous-même le dépôt avant de vous engager.

De quelles ressources serveur ont-elles besoin ?

Toutes ces applications sont légères. Vous devez mesurer leur consommation plutôt que de vous fier à un chiffre trouvé sur un blog. Exécutez cette commande sur votre propre machine après une journée d’utilisation normale :

docker stats --no-stream

Consultez la colonne MEM USAGE. Actual, Wallos et Fava contiennent chacun un petit fichier géré par un petit processus. Ils fonctionnent donc sans difficulté sur un VPS modeste à côté d’autres services. Firefly III est différent, car sa stack inclut MariaDB. Un serveur de base de données utilise de la mémoire même lorsqu’aucune requête ne lui est adressée. Prévoyez une marge pour la base de données, et non en fonction du volume de vos transactions. Malgré cela, une application de gestion de budget remplit rarement un VPS à elle seule. Si vous dimensionnez une seule machine pour toute la stack, les besoins minimaux en mémoire de PhotoPrism et d’Immich détermineront bien plus probablement la quantité de RAM à acheter.

Les données elles-mêmes augmentent à peine. Dix ans de transactions d’un foyer tiennent dans un fichier de quelques mégaoctets. Le disque n’est donc pas le facteur limitant. La véritable conséquence de cette longévité est abordée dans la section suivante.

L’expérience mobile, et ses limites

C’est ici que les applications financières auto-hébergées sont moins convaincantes que les solutions commerciales. Soyez donc réaliste avant d’en déployer une pour tout un foyer.

La documentation officielle indique que les applications mobiles sont obsolètes. À la place, vous utilisez la version web, décrite dans sa documentation comme une progressive web app responsive que vous installez sur l’écran d’accueil et utilisez comme une application native. Elle fonctionne bien. Ce n’est toutefois pas une application distribuée par un app store, même si la communauté maintient des clients natifs non officiels.

Firefly III ne fournit pas non plus d’application officielle, mais son API a donné naissance à deux applications non officielles capables. Waterfly III est une application Android publiée sur Google Play et F-Droid. Abacus fonctionne sur iPhone, iPad et Android, utilise OAuth2 pour l’authentification et stocke ses tokens dans le trousseau iOS. Dans les deux cas, votre instance doit être accessible depuis le téléphone.

Fava et Wallos fournissent une page web responsive, rien de plus. Lire un ledger sur un téléphone ne pose pas de problème. Saisir une transaction Beancount avec le clavier d’un téléphone est une autre affaire.

Un point s’applique à toutes ces applications : un téléphone connecté au réseau mobile ne se trouve pas sur votre réseau domestique. Vous devez soit publier l’application sur un domaine avec TLS et une authentification forte, soit connecter le téléphone à un VPN. Publier une application financière sur Internet avec un seul mot de passe partagé est l’erreur à éviter. Si aucune de ces solutions ne vous convient, placer l’instance derrière un service onion v3 constitue une troisième possibilité : aucun enregistrement DNS public ni port ouvert sur Internet n’est nécessaire. En contrepartie, vous devrez y accéder avec Tor Browser sur le téléphone.

Sauvegardes : la section la plus importante de cette catégorie

Perdre une bibliothèque multimédia vous coûte un téléchargement. Perdre cinq ans de transactions classées vous coûte des données impossibles à retélécharger. Mettez cela en place dès le premier jour.

Éléments à copier pour chaque application :

  • Actual Budget : tout le volume de données, à la fois server-files et user-files.
  • Firefly III : un dump de la base de données, ainsi que .env, .db.env et le volume des téléversements.
  • Beancount : le fichier du ledger, idéalement dans un dépôt git avec un dépôt distant.
  • Wallos : db/wallos.db et le répertoire contenant les logos téléversés.

Copier un fichier SQLite utilisé par une application est la méthode classique pour produire une sauvegarde impossible à restaurer. SQLite conserve les écritures récentes dans un fichier write ahead log distinct. Une copie du seul fichier .sqlite peut donc ne pas contenir les dernières transactions, ou ne pas s’ouvrir du tout. Arrêtez le conteneur pendant les quelques secondes nécessaires à la copie :

cd /srv/actual
docker compose stop actual_server
tar czf /srv/backups/actual-$(date +%F).tgz -C /srv/actual actual-data
docker compose start actual_server

Firefly III nécessite plutôt un dump. Créez-le depuis le conteneur de base de données afin que le mot de passe n’apparaisse jamais dans l’historique de votre shell :

cd /srv/firefly
docker compose exec -T db sh -c 'mariadb-dump -u firefly -p"$MYSQL_PASSWORD" firefly' > /srv/backups/firefly-$(date +%F).sql

Les anciennes images MariaDB fournissent le même outil sous son ancien nom, mysqldump. Conservez .env et .db.env à côté du dump, car restaurer une base de données dans une installation dont vous n’avez plus la configuration est un problème à résoudre le pire jour possible.

Une copie sur le même VPS vous protège contre une mauvaise modification. Elle ne vous protège pas contre la perte du serveur ou contre sa compromission. Envoyez le répertoire de sauvegarde vers un stockage objet avec restic. Le dépôt est chiffré avant que les données ne quittent le serveur :

export RESTIC_REPOSITORY=s3:s3.example.com/money-backups
export RESTIC_PASSWORD_FILE=/root/.restic-pass
restic init
restic backup /srv/backups
restic forget --keep-daily 7 --keep-weekly 8 --keep-monthly 12 --prune

restic snapshots doit maintenant afficher un snapshot daté du jour. La planification, les identifiants et le timer systemd sont présentés dans notre guide sur les sauvegardes restic chiffrées sur un VPS.

Une sauvegarde que vous n’avez jamais restaurée n’est qu’une hypothèse. Testez-la maintenant, tant que tout fonctionne :

restic restore latest --target /tmp/restore-test

Décompressez l’archive Actual dans un répertoire de travail, démarrez un second conteneur avec ces données sur un autre port, puis ouvrez-le. Vous devez voir vos comptes avec les soldes qu’ils avaient lors de la création de la sauvegarde. Pour Firefly III, chargez le dump dans une base de données de travail et comptez les lignes de la table transactions. Si les nombres correspondent à ceux de l’instance active, la sauvegarde est valide. Supprimez ensuite les copies de test, car une instance oubliée contenant de vraies données financières constitue un problème à part entière.

Choisissez une application, utilisez-la pendant un mois avec de vraies données avant de migrer votre historique, et mettez la sauvegarde en place la même semaine. Si vous hésitez encore sur les aspects de votre vie à héberger sur votre propre serveur, notre panorama de ce qui mérite d’être auto-hébergé en 2026 couvre le reste de la stack.

FAQ

Quelle application de budget auto-hébergée peut se connecter à ma banque ?

Actual Budget et Firefly III le peuvent tous les deux, via un agrégateur tiers plutôt que par une connexion bancaire directe. Actual prend notamment en charge SimpleFIN Bridge pour l’Amérique du Nord, Enable Banking pour l’Europe, Akahu pour la Nouvelle-Zélande et Pluggy.ai pour le Brésil. Sa documentation précise toutefois qu’Actual ne synchronise pas automatiquement les données bancaires : vous devez appuyer sur le bouton. Firefly III utilise un conteneur Data Importer distinct, qui peut être déclenché par cron. C’est donc celui qui fonctionne réellement sans intervention. Beancount et Wallos ne proposent aucune connexion bancaire. Vérifiez qu’un agrégateur prend en charge votre banque avant de choisir une application, car la couverture détermine plus souvent le choix que les fonctionnalités.

Puis-je utiliser ces applications de budget sur mon téléphone ?

Oui, mais pas avec une application officielle. La documentation d’Actual indique que les applications mobiles officielles sont obsolètes et renvoie vers la version web, une progressive web app responsive que vous pouvez installer sur l’écran d’accueil. Firefly III dispose de deux clients non officiels fiables : Waterfly III sur Android, et Abacus sur iOS et Android. Fava et Wallos sont de simples pages web responsives. Dans tous les cas, le téléphone doit pouvoir joindre votre serveur. Prévoyez donc un domaine avec TLS et une authentification forte, ou connectez le téléphone à un VPN.

Comment sauvegarder une application de budget auto-hébergée sans corrompre la base de données ?

Ne copiez jamais un fichier SQLite utilisé en production sans autre précaution. SQLite conserve les écritures récentes dans un write ahead log distinct. Une copie effectuée pendant une écriture peut donc perdre des transactions ou refuser de s’ouvrir. Arrêtez le conteneur, copiez le répertoire de données, puis redémarrez-le. Pour des applications de cette taille, cela prend quelques secondes. Pour Firefly III, exécutez plutôt mariadb-dump dans le conteneur de base de données et conservez les fichiers d’environnement avec le dump. Transférez le résultat hors du serveur dans un dépôt restic chiffré, puis effectuez une restauration pour vérifier qu’il fonctionne.

Firefly III est-elle trop lourde pour un petit VPS ?

C’est l’option la plus lourde ici, uniquement parce que son fichier compose officiel exécute un serveur MariaDB à côté des conteneurs de l’application et de cron. Les données de finances personnelles sont très peu volumineuses. La mémoire est donc consommée par le processus de base de données inactif, et non par vos transactions. Exécutez docker stats --no-stream sur votre propre serveur après une journée normale et consultez la colonne MEM USAGE au lieu de vous fier à un chiffre publié. Si vous voulez l’empreinte la plus réduite possible, Actual Budget et Wallos exécutent chacun un seul processus utilisant un seul fichier.

#budgeting#personal-finance#auto-hébergement#docker#privacy