Actual keeps the budget local and syncs it on your terms
Actual is an envelope-budgeting application for recording accounts, assigning income, importing transactions, and checking spending against a plan. The local-first design means the working copy lives on the device. A synchronization server moves changes between devices when you want that shared view. This is an appealing arrangement for a household that dislikes a finance company holding the only usable copy of its budget.
There are 4 installation routes in the README: PikaPods, Fly.io, a self-hosted Docker image, and downloadable desktop apps for Windows, macOS, and Linux. That range matters because running Actual does not require becoming its operator. The desktop route suits one machine. A managed service suits a household that wants sync without patching a server. Docker gives an experienced self-hoster control over storage, TLS, backups, and upgrades.
Envelope budgeting is the product, not portfolio analysis
The README sends new users straight to an envelope-budgeting guide and separate migration documentation. That tells you where Actual's opinion lies. Money is assigned to categories, transactions update those categories, and the budget remains the main screen. People moving from another application should inspect the relevant importer before committing, since a clean import is far more important than a polished empty dashboard.
Actual's GitHub repository had 28,381 stars and 216 combined open issues and pull requests when fetched. The latest release was v26.8.1, published on August 7, 2026, and the repository was pushed again on August 25. Those dates show current work around a released product. The combined open count cannot be read as 216 bugs, but the active queue gives prospective operators useful evidence about current edge cases.
What happened when we ran it
Our sandbox installed the Yarn workspace in 194 seconds. It pulled 2,608 packages and occupied 1,678 MB on disk. The checkout itself contained 4,072 files, about 305,186 source lines, and 72.3 MB before installation. Those figures describe a multi-client finance product with desktop, server, and mobile pieces, not a small Node service that happens to display a budget.
The top-level build ran for 69 seconds and exited 1. Its final lines show Capacitor copying and updating the iOS project, skipping CocoaPods because it was absent, warning that xcodebuild could not be found, and then stopping at command not found: xcodebuild. The log establishes the missing command. It does not establish that every Linux or server build needs Apple tooling, so contributors should use the documented target for the package they intend to change.
Tests ran for 626 seconds and also exited 1. One reported Vitest group ended with 1,079 passed, 1 failed, and 2 skipped across 1,082 tests; the failure was a 5,000 ms timeout. Another part recorded 23 tests failing by a 20,000 ms timeout, while a separate pair of files recorded 9 passes. The supplied output is mixed across commands, so we will not collapse it into one invented total. The useful conclusion is that the complete command did not pass in our 3-CPU, 8 GB Debian sandbox.
Bank sync adds credentials and provider-specific failure modes
Manual budgeting and file imports avoid a bank integration, while automatic bank synchronization introduces provider accounts, server configuration, and failure handling. Recent repository activity includes work to explain failures caused by missing GoCardless server credentials. Issue 8788 reports an EU banking connection that does not list the expected account. These are specific reminders that self-hosting the application does not make a third-party banking connection local or universal.
Offline behavior deserves a trial with your normal devices. Issue 8785 reports that transactions and payees written locally can fail to appear in the interface after connectivity is lost mid-session. The report says the data exists locally, which is better than silent deletion, but an invisible money entry is still a serious workflow problem. Anyone relying on mobile entry should test a network drop, reconnection, and a second-device sync before importing a full history.
Source contributors inherit desktop, server, and mobile concerns
The repository is a monorepo, and our scan found 38 CI workflow files, a Dockerfile, and a Compose file. Its package layout includes the core application, desktop client, and Electron app, while the measured build also entered Capacitor's iOS work. That breadth explains both the 1,678 MB installed footprint and why a generic build command can cross into tools absent from a fresh Debian container.
For deployment, start with the supported artifact closest to the intended use. A single user can try the desktop app without exposing a server. A household can trial managed sync before accepting backup and upgrade duties. A self-hoster should document the data volume, backup restoration, HTTPS endpoint, and bank-provider secrets. The MIT license permits modification, though financial data still demands cautious access control and tested recovery.
Current maintenance supports adoption, while open sync reports require testing
A push on August 25, 2026, a release earlier that month, and busy issue and pull request activity make Actual look maintained. The documentation has separate tracks for installation, starting fresh, migration, budgeting, and contribution. That is enough to recommend a real trial for envelope-budget users who value local data and can choose the right deployment route.
The lab result changes the advice for contributors. A 194-second install, 2,608 dependencies, an Apple-tooling build stop, and timeout failures call for package-scoped commands and a reproducible development environment. End users should prefer the release artifacts. Developers should first reproduce the relevant workspace, then check offline edits and bank sync with the exact providers their users depend on.

