OneSpend
Offline-first personal finance manager for tracking expenses and budgets. Sync is optional, allowing you to connect to a self-hosted backend or use the default public server.
OneSpend is an offline-first personal finance manager. (i) Sync is opt-in: the app never connects to a hardcoded server - the user picks the backend URL in Ajustes -> Conexiones (the bundled default is the author's public server, only used if the user enables sync, and overridable in-app without a rebuild). (ii) UI is wrapped for es + en; the language selector is in the side menu.
Default servers — the build ships with these defaults, which you can override in Settings → Connections after install:
- Sync server:
https://onespend-back.dowar.xyz - SSO server:
https://auth.dowar.xyz/api(login panel:https://auth-panel.dowar.xyz)
The author maintains these as a public service for anyone who does not want to self-host. To use a self-hosted sync server and/or SSO, change the URLs in the Connections screen (no rebuild needed). The SSO source is public at https://gitlab.com/dowardev/sso.
Summary generated by Zapstore from source.
Original description, as the developer published it.
Latest release
The catalog lists this app from
dowardev/onespend
and signs its releases. The developer has not claimed it.
Are you the developer? Claim your app
It asks for no sensitive access.
Release notes
Changed
• The merge retry lifecycle is now a single state machine (SyncRetryScheduler) with one predicate, one timer and one re-arm per transition, instead of four independent guards each with its own arming logic. Its lock-retry budget lives in that state, so a lock that never frees can no longer be retried forever (GitLab #14).
Fixed
• Editing a record right after creating it no longer produces a false "concurrent edit" conflict. The server now compares the pushed fields against the last synced state one by one, so an edit to a row the same client just created is applied instead of landing in the conflict list, and an edit made while another device changed a different field is merged instead of rejected (GitLab #15).
• The local copy of a record now keeps the same revision counter as the server after every sync, for every kind of record. Before, a record created on the device kept revision 0 on the device while the server had already moved on, which the sync diagnostics reported as a version drift on every row the device had created (GitLab #15).
• The live pull mapper (SyncQueueService.mapServerItemToRow) normalizes recurring_record.time to "HH:MM" ("14:30:00" -> "14:30", "9:00:00" -> "09:00"), falling back to the local row's time when the server omits it. The server stores the column as a MySQL TIME and hands back "HH:MM:SS", which the client stored verbatim, so the row disagreed with the field hash the server computes over the "HH:MM" the client sent — a phantom conflict on every push (GitLab #17).
• The date picker derives its locale from the app's active language (es -> es-ES, en -> en-US) instead of forcing en-US, so the calendar and the time picker follow the language the user picked. An explicit locale prop still wins (GitLab #17).
• The app now pushes the changes it queued while it was offline as soon as the connection comes back, instead of leaving them pending until the user taps sync by hand. An item queued offline carries no retry evidence of its own, so the reconnect itself is what marks a push as owed (GitLab #14).
• A run whose chunks all failed with a network or server error no longer unblocks the retries against an expired token: the auth block is now only lifted by a successful response from the server (GitLab #14).
Removed
• fromApiFormat (front/src/services/sync/entityMappers.ts): a second pull mapper that only the tests used. The live pull path is SyncQueueService.mapServerItemToRow, and its coverage now pins the cases the dead mapper used to cover (GitLab #17).
Comments
Loading comments…
More finance manager apps
See more-
F
Finan+ Offline, encrypted personal finance manager (Brazilian Portuguese)
-
P
Pocket Sense Private, offline money tracker in English and Arabic, in JOD and 68 currencies
-
B
Balance Private offline bank balance dashboard
-
I
Invoice Ninja Invoice your clients, accept payments, track expenses & time billable-tasks
-
N
NanoLedger Data entry app for plain text accounting
-
O
Okanzo Private, offline-first net worth tracker with on-device encryption
Get OneSpend the private way
Updates checked on your device, and every release verified before it installs.