⚠️ 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 Components. Nevertheless, we've updated to the latest Next.js version (15.4.10) as a precaution.
Infrastructure & Developer Experience
- Keycloak OIDC Provider — Added support for Keycloak authentication (#395)
- Improved Healthcheck — Now verifies database readiness, not just container health (#363)
- Automatic Cache Cleaning — Currency rate cache and other caches are cleaned via configurable
pg_cronjobs - TypeScript Go — Faster type checking in development and CI
- PostgreSQL 17+ Support — Updated Docker compose paths for newer PostgreSQL versions
New Locales
Thanks to our amazing community translators, SplitPro now supports:
- 🇫🇷 French (fr)
- 🇳🇱 Dutch (nl)
- 🇧🇷 Portuguese - Brazil (pt-BR)
- 🇲🇽 Spanish - Mexico (es-MX)
- 🇦🇷 Spanish - Argentina (es-AR)
🌍 Help Us Translate!
This release adds many new translation keys for currency conversions, recurring transactions, and bank integration. We need your help to keep all languages up to date!
Contribute translations on Weblate →
Contributors
Thank you to everyone who contributed to this release! 🎉
- @FriesischScott — Database balance views implementation and performance benchmarks
- @alexanderwassbjer — Bank transaction integration with GoCardless/Plaid
- @BhaskarKulshrestha — Negative numbers fix
- @davidhernandeze — Spanish locale variants (Mexico, Argentina)
- @ahmedsalah52 — Month headers feature
- @lx4r — German locale corrections
- @beposec — Keycloak provider
- @vabatta — Italian translations
- @avargaskun — PWA install translations
- And all our Weblate translators for keeping SplitPro accessible worldwide!
Feedback Welcome!
This is a beta release and we want to hear from you:
- 🐛 Found a bug? Open an issue
- 💡 Have a suggestion? Start a discussion
- ⭐ Enjoying SplitPro? Give us a star!
We're especially interested in feedback on:
- The new recurring transactions feature and cron scheduling UX
- Currency conversion workflow and provider reliability
- Bank transaction import experience
- Any balance calculation discrepancies
Full Changelog: v1.5.8...v2.0.0-beta.0
