Releases: oss-apps/split-pro
v2.0.0-beta.0
⚠️ BACKUP YOUR DATABASE BEFORE UPDATING!
This release includes major database schema changes. Please follow the migration guide carefully.
We're excited to announce the first beta of SplitPro 2.0! This release brings long-awaited features like recurring transactions, currency conversions, and bank transaction integration, along with a fundamental architectural change to how balances are computed.
Your feedback is invaluable! As a beta release, we encourage you to test thoroughly and report any issues you encounter. Bug reports and UX feedback—especially on the new features—help us improve SplitPro for everyone.
Migration Guide
PostgreSQL Image Upgrade
This release requires a new PostgreSQL image with the pg_cron extension for recurring transactions and cache management.
-
Determine your current PostgreSQL version:
docker exec -it splitpro-db psql --version -
Determine your Debian version:
docker exec -it splitpro-db cat /etc/os-release -
Update your
compose.yml:- Change the image from
postgrestoossapps/postgres - Select the appropriate tag from Docker Hub matching your major PostgreSQL version and Debian version
- Add the startup command for pg_cron:
services: db: image: ossapps/postgres:17.7-bookworm # adjust to your version command: postgres -c shared_preload_libraries=pg_cron -c cron.database_name=splitpro
See the production compose file for a complete example.
- Change the image from
-
If you need a specific version not yet available, please ask in the GitHub Discussions.
For Alpha/Main Branch Users
If you were running the alpha release or building from main, you may encounter migration issues due to squashed Prisma migrations in this release. If you experience problems, please report them in the GitHub Discussions—if enough users are affected, we may provide additional migration paths.
Non-Standard Decimal Currency Fix (KRW, JPY, etc.)
If you used currencies with non-standard decimal places (e.g., KRW, JPY, or 3-decimal currencies like KWD) in versions 1.5.4–1.5.8, your amounts may have been stored incorrectly due to #440.
To fix affected data, run the migration script manually:
- Download the migration script
- Copy it to your docker compose file directory
- Execute:
(Adjust container name/db user/db name if needed)
cat migration.sql | docker exec -i splitpro-db psql -U postgres -d splitpro
New Features
💱 Currency Conversions
Convert expenses and group balances between currencies with ease! We support three exchange rate providers:
- Frankfurter — Completely free, covers ~30 major currencies
- Open Exchange Rates — 1000 requests/day free tier, extensive currency support
- NBP — Polish National Bank, no API key required, but some rates may be out of date and I'm not sure about rate limits
Rates are cached in the database to minimize API calls. Configure your preferred provider(s) via environment variables.
Features:
- Convert individual expenses between currencies
- Convert group balances on-the-fly directly from the balance view
- Edit existing conversion transactions
screenrecording-2025-12-31_22-23-59.mp4
screenrecording-2025-11-30_17-57-46.mp4
🔄 Recurring Transactions
Set up automatic recurring expenses with cron-based scheduling powered by pg_cron. Perfect for rent, subscriptions, or any regular shared expense.
How it works:
- When creating an expense, you can set a recurrence schedule using a cron rule
- The recurrence creates derived expenses from the template expense, which can then be manually adjusted or deleted independently
- Editing the template updates the schedule for all future expenses, but does not affect existing derived expenses
- Deleting the template removes the recurrence rule but preserves all derived expenses
- Confirmation dialogs clearly explain the impact of each action
Note:
pg_cronsupports a subset of standard cron syntax. Features like ranges (1-5) or multiple values (1,15) are not supported. See the pg_cron documentation for details.
Recurrence Management Page:
A dedicated page (accessible via the Activity tab) lets you manage all recurring expenses in one place:
- View all active recurrences
- Edit recurrence schedules without navigating to individual expenses
- Delete recurrence rules while keeping the original expense intact
screenrecording-2025-12-31_22-26-52.mp4
screenrecording-2025-10-07_21-47-50.mp4
🏦 Bank Transaction Integration
Import transactions directly from your bank account! Connect via Plaid to fetch transactions and convert them into SplitPro expenses.
Note: GoCardless integration is deprecated as they have closed new signups. Existing GoCardless users can continue using it, but we recommend migrating to Plaid.
Features:
- Connect your bank from the Account page
- Browse and select transactions when adding expenses
- New in beta: Multi-add — add multiple transactions as expenses at once
- Duplicate detection prevents adding the same transaction twice
To get started, create a free account on Plaid, obtain your API keys, and add them to your environment variables. See README_BANKTRANSACTIONS.md for details.
Nov-08-2025.15-13-501.mp4
UI/UX Improvements
Month Headers in Expense Lists
Long expense lists are now organized with month headers, making it easier to navigate your transaction history.
Debug Info Dialog
New diagnostic dialog in Account settings shows version info, git hash (in dev), and checks for available updates.
screenrecording-2025-10-20_22-02-04.mp4
Improved Category Picker
Redesigned layout with responsive grid and proper text wrapping for localized category names.
Enhanced Expense Details
- Links to people and groups directly from expense details
- Indicator icon shows if a group has debt simplification enabled
- Only relevant amounts shown in friend expense lists (your actual debt/credit, not total expense)
Other UI Improvements
- Fixed calendar to always show 6 weeks (no more size fluctuations)
- "No providers configured" message on signin page when OAuth isn't set up
- Responsive icon buttons across the app
- Fixed avatar sizing issues on Safari
- Improved settle-up flow: editing a settlement reopens the amount dialog instead of expense edit
Breaking Changes
Database-Computed Balances
We've migrated from manually-maintained balance tables to PostgreSQL views. This fundamental change:
- Treats expenses as the source of truth — balances are computed, not stored
- Eliminates balance inconsistency bugs — no more stale or incorrect balances
- Enables recurring transactions — which couldn't work with the old table-based approach
- Performs well at scale — benchmarked on large datasets with no noticeable performance impact
The old "Recalculate Balances" button in groups is no longer needed and has been removed.
Expense ID Migration
Expense IDs have been migrated from CUID to native PostgreSQL UUID. This is required for pg_cron to insert recurring expenses via SQL procedures.
PostgreSQL Image Requirement
The ossapps/postgres image with pg_cron extension is now required. See the Migration Guide above.
Bug Fixes
- PWA Integration — Upgraded to the successor of
next-pwa, fixing service worker issues - Service Worker Precache — Resolved failures that prevented offline functionality
- Equal Split Editing — Fixed payer detection when editing equal splits
- Back Navigation — Improved navigation after adding/editing expenses
- Receipt Upload — Fixed receipt not appearing when editing expenses
- Negative Numbers — Proper handling in BigInt conversion
- Decimal Input — Both
.and,keys now work correctly for decimal entry - Interpersonal Balances — Fixed incorrect balances when group debt simplification is enabled
- Deterministic Pennies — Leftover cents are now distributed deterministically (based on amount and date) rather than randomly
- Currency Formatting — Proper
Intl-based formatting for all currencies, including those with non-standard decimal places - Date Width — Fixed inconsistent date column widths in expense lists
- PostgreSQL 17+ — Updated Docker compose for compatibility with PostgreSQL 17 and newer
Security Note
The recent CVE-2025-55182 vulnerability affecting Next.js has been widely reported. SplitPro is NOT affected by this vulnerability, as it targets React Server Components in the App Router—SplitPro uses the Pages Router and does not use Server Compone...
v1.5.8
v1.6.0-alpha.0
Major changes ahead
⚠⚠⚠ Backup your database before updating and follow the steps below!!!
This release is not meant for daily use, stuff will break!
This release will include major database changes, so DB backup is absolutely vital! To make this process as seamless as possible, we have created a new ossapps/postgres image, which is just a regular postgres image with the pg_cron extension installed (source).
DB image update
- Determine your currently used major postgres version using
docker exec -it splitpro-db psql --version - Determine the version of Debian using
docker exec -it splitpro-db cat /etc/os-release - In your
composefile, change the image name frompostgrestoossapp/postgresand add the relevant tag from the ones we have built. The minor versions shouldn't matter as lons as you match the major version and debian version. - If you encounter issues and require a specific version, ask us in the discussion to build it.
- Add a starting command to your
postgresservice, like in here
New features
- currency conversions are here! Configure one of the providers in the README and start converting group balances and individual expense amount! More features (and docs) will be added during the alpha, such as balance views in preferred currency or user balance conversions
- recurring transactions you can now select a recurrence cron rule on expenses! You will see a new icon in the add expense page with a pop up for setting up these rules (UI refresh is also expected) and manage them from a new tab accessible via the activity page.
- bank transaction import connect a Plaid account to fetch your bank data and convert them into SplitPro expenses directly! Still a bit WIP, but kudos to @alexanderwassbjer !
Breaking changes
This alpha release is mainly focused on testing out not only the new features, but also the breaking changes they carry with them. Apart from the DB image transition:
- moving from expense
cuidtouuid. We needed a postgres native id solution to support recurrent transaction input viapg_cron. Make sure all your transactions are properly carried over. You can usepgAdminorpsqlto query your expense+expense participant tables before and after the migration. Ideas on how to automate this check are welcome - migration to DB calculated balances. Maintaining a balance table proved to be very cumbersome and bug prone once advanced features started being implemented. Instead, we want to rely on the speed of DBMS and utilize a database View for that, treating expenses themselves as the source of truth rather than the surgically updated table. Many thanks to @FriesischScott for the work on this and the benchmarks proving the feasibility of this approach.
Testing
There is a substantial amount of new code and potential polishing required so any testing and feedback (both bugs and LGTM) is very helpful! For the balances, we currently still use the old tables, but on each call a comparison with the view is made and any mismatch is logged as an error by the server. It's not visible to the user, but I am asking you to run this version for a while and report any errors that may arise. Keep in mind that there are bugs in the current balances, so not every mismatch is a bug in views. In groups you can run recalculate balances to refresh.
Also keep in mind that recurring transactions are not and will not be supported by balance tables (only views).
Detailed changes
- Translations update from Hosted Weblate by @weblate in #365
- Feat 79 currency rate transactions by @krokosik in #364
- 1.6 dep updates by @krokosik in #372
- Locale json merge by @krokosik in #385
- Add pg cron builds by @krokosik in #387
- Fix application_name/title translation by @beposec in #396
- Adding fr (French) locale by @FelixDz in #405
- Translations update from Hosted Weblate by @weblate in #404
- Translations update from Hosted Weblate by @weblate in #399
- Translations update from Hosted Weblate by @weblate in #398
- Translations update from Hosted Weblate by @weblate in #397
- Add keycloak as oidc provider and remove non-standard fields from keycloaks response by @beposec in #395
- fix for Negative expenses with decimals- #370 by @BhaskarKulshrestha in #403
- Revert "fix for Negative expenses with decimals- #370" by @krokosik in #408
- Show "No providers configured" on signin page by @ercusz in #409
- 🚀 Add bank account transaction integration by @alexanderwassbjer in #132
- 160 recurring expense by @krokosik in #420
- Translations update from Hosted Weblate by @weblate in #422
- Translations update from Hosted Weblate by @weblate in #421
- 401 fix back navigation by @krokosik in #423
- 400 split equal edit fix by @krokosik in #424
- Handle negative numbers in bigint conversion by @krokosik in #425
- Extended seed db by @krokosik in #430
- Fix receipt missing on edit by @krokosik in #431
- 366 only show relevant amounts with friends by @krokosik in #443
- 331 debug info button by @krokosik in #444
- Translations update from Hosted Weblate by @weblate in #433
- Translations update from Hosted Weblate by @weblate in #432
- Translations update from Hosted Weblate by @weblate in #448
- Translations update from Hosted Weblate by @weblate in #449
- Fix service worker precache failure by @hrmtc in #446
- Improve category picker layout by @rodrigost23 in #472
New Contributors
- @weblate made their first contribution in #365
- @beposec made their first contribution in #396
- @FelixDz made their first contribution in #405
- @BhaskarKulshrestha made their first contribution in #403
- @ercusz made their first contribution in #409
- @rodrigost23 made their first contribution in #472
Last but not least, a huge shoutout to @FelixDz for supporting the project with a donation!
Full Changelog: v1.5.7...v1.6.0-alpha.0
v1.5.7
v1.5.6
Fix for regression where the service worker does not register, which does not enable client cache and notifications. The issue does not affect long running SplitPro users, only new SW registrations.
Full Changelog: v1.5.5...v1.5.6
v1.5.5
v1.5.4
While I hoped to release 1.6 with all the bug fixes that piled up, it's taking a bit longer than I hoped for, so I decided to fix the most critical bugs on top of the 1.5.3 release and backport some of the fixes from main branch.
What's Changed
- Implemented a proper currency formatter based on Intl browser API. We now properly render decimals and fixed numerous issues with the current implementation.
- the case where the split is not properly defined (for example in exact split) is now handled more gracefully in the UI with nonsensical share texts hidden. Additionally a critical performance issue was fixed with large sums and leftover pennies calculation, which froze the webpage on huge leftover sums.
- the simplify method has been patched to properly fill in metadata of generated simplified balances that did not exist prior, causing a crash on balanceList
- the recalculate method now better deals with malformed balance data, where not all group balance relations are created, since newly joined users may not have groupBalances with everyone
- backported the improvements to expense details back navigation #423
Full Changelog: v1.5.3...v1.5.4
v1.5.3
We now support custom OIDC providers! Thanks a lot for the initial work to @imnotjames and everyone else for testing in feedback. Remember to report any issues you might encounter, check out the docker README and add missing icons for your providers.
Also, thanks to @Silther for spotting that the Health Check Docker command for the DB was incorrect. See the updated compose file for the proper value.
What's Changed
- Modify healthcheck to check database readiness by @krokosik in #363
- feat: add support for OIDC auth by @imnotjames in #171
Full Changelog: v1.5.2...v1.5.3
v1.5.2
What's Changed
- Language PT - Revision 2 by @c42759 in #355
- Fix hook error and add PWA install translations and localize InstallApp by @marcosinigaglia in #352
- Fix locale strings and remove currentUser prop in SettleUp by @krokosik in #360
- feat: Add Spanish (Mexico) and Spanish (Argentina) locales by @hrmtc in #357
- Fix 359 account page alignment by @krokosik in #361
- Fix 361 balance list mixup by @krokosik in #362
New Contributors
Full Changelog: v1.5.1...v1.5.2
v1.5.1
What's Changed
- Fix Italian translation for 'you_dativus' by @marcosinigaglia in #338
- Set avatar size in BalanceEntry component by @marcosinigaglia in #343
- Fix/add members by @marcosinigaglia in #339
- refine hostname comment by @soeffi in #348
- ✨ Add tsc check in pre-commit by @alexanderwassbjer in #350
- Fix the number of weeks in calendar by @krokosik in #354
Full Changelog: v1.5.0...v1.5.1
