A household money app for Android: what comes in, what goes out, and what stays. Offline-first, your data on your phone or in your own Supabase. Free and open source (GPL-3.0).
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Fulla keeps a household's money straight: what came in, what went out, what
is left, and who owes whom. It is an Android app for one person or a whole
household. It works offline, it collects nothing, and your data lives on your
phone or in a database you own.
It is named after Fulla, the Norse goddess of plenty, whose name means
full and who wore a golden band. The app draws your month as a vessel that
fills; the golden band is its icon.檢視完整 README ↗sirallap.github.io/fulla · Download · Get started
Fulla keeps a household's money straight: what came in, what went out, what is left, and who owes whom. It is an Android app for one person or a whole household. It works offline, it collects nothing, and your data lives on your phone or in a database you own.
It is named after Fulla, the Norse goddess of plenty, whose name means full and who wore a golden band. The app draws your month as a vessel that fills; the golden band is its icon.
0.1 — first public release. The backend, the domain logic and the sync are complete and tested, and the app is in daily use on real phones. Expect rough edges, and please report them.
Just you, on one phone (two minutes):
fulla-<version>.apk from the
latest release and
open it on your phone. Android asks once to allow installs from your
browser or file manager: allow it, then install.Shared with your household (about five minutes, once; everyone else just scans a QR code):
New phone, or reinstalled the app? Nothing is lost. Make a fresh token (step 3) and paste it in Shared: the app finds your project and reconnects. Then I already have an account.
The whole setup, and doing it by hand, is in docs/self-hosting.md.
Fulla has no server of its own and collects nothing: no analytics, no telemetry, no crash reporting, no ads.
The app talks only to your own <project>.supabase.co, with two exceptions
you can see coming: setting a project up from a token reaches Supabase's
api.supabase.com for those few minutes, and checking for updates asks
api.github.com and downloads from GitHub. docs/privacy.md
lists everything and explains how to check it yourself with a proxy.
Fulla ships only as signed APKs on GitHub Releases, never through Google Play. You install it by hand once; after that the app finds new releases itself, shows that one is waiting, and downloads and installs it from Settings when you say so. Checking is on by default and can be turned off in Settings › About. Android checks that every update is signed with the same key as the app you have.
core/ the app's logic in plain Kotlin: money, sync, splits, analytics, importers
client/ the protocol in plain Kotlin: wire format, Supabase transport, sync, setup, updates
app/ the Android app (Jetpack Compose)
supabase/migrations/ the database: tables, row level security, and the API
supabase/tests/ a suite that runs the real migrations on a real PostgreSQL
supabase/scripts/ setup.sql bundler and migration runner
testdata/ defaults and test vectors shared by the database and the app
tools/ the leak scanner and the translation check
docs/ architecture, sync, API, data model, design, decisions
./gradlew :core:test :client:test # the domain and the protocol; needs a JDK 17+
npm run test:db # the database; needs PostgreSQL installed (not running)
npm run i18n # every language has every string
npm run leakcheck # no secrets or personal data in the working tree
npm run hooks:install # run that scan on every commit
The database suite starts its own throwaway PostgreSQL in a temporary
directory and never touches a real project (apt install postgresql is
enough on Debian or Ubuntu). The Android app builds in CI, which publishes a
debug APK to the latest-debug
prerelease on every change.
CONTRIBUTING.md before a pull request, AGENTS.md for the rules the code depends on, docs/design.md for the design system, and SECURITY.md to report a vulnerability privately.
Fulla is free software under the GNU General Public License v3.0 or later: anyone may use, study, change and share it, and whoever distributes it, changed or not, passes on the same freedoms with the source. Third-party components keep their own licences, listed in THIRD_PARTY_NOTICES.md.