Skip to main content

Uni-Verein 1.4.0 – Dark Mode and the Switch to PostgreSQL πŸŒ“πŸ˜

Β· 3 min read
RenΓ© Herrmann
Senior developer

Published on July 28, 2026

Uni-Verein 1.4.0 is here – with a long-requested dark mode and a bigger change under the hood: the database engine switches from MariaDB to PostgreSQL. Existing installations are migrated automatically and safely by the updater.

Highlights​

  • πŸŒ“ Dark mode: the app now follows your OS/browser color scheme by default, with a manual toggle next to the language switcher
  • 🐘 PostgreSQL instead of MariaDB: the database engine has been switched to PostgreSQL. Existing installations are migrated automatically and safely by the updater (see Important Upgrade Notes below)

⚠️ Important Upgrade Notes (Breaking Change)​

This release changes the database engine from MariaDB to PostgreSQL. Always update using the official updater never set VERSION in .env by hand or swap in a newer docker-compose-prod-image.yml yourself, as that skips the required database migration and will break your installation.

curl -O https://raw.githubusercontent.com/uni-verein/uni-verein/main/docker-compose-update.yml
docker compose -f docker-compose-update.yml run --rm update
  • Before continuing, create a manual backup (database backup and member export, both under Settings β†’ Backup) – the updater asks you to confirm this before it proceeds
  • Installations still on MariaDB are updated to v1.3.1 first, if they aren't already there. From v1.3.1, the next update run migrates your database to PostgreSQL and switches the whole stack over. This adds downtime proportional to your database size
  • Migration safety net: the cutover runs against an isolated, temporary PostgreSQL instance while your live MariaDB container keeps serving, so nothing is touched until the copy is verified. On success, the old MariaDB container is stopped and its data volume is kept (not deleted) reclaim the space later with docker volume rm <project>_db_data once you've confirmed everything works. On failure, the migration is cleaned up automatically and your MariaDB installation is left completely untouched
  • Coming from an older version? The updater only advances one step per run (< v1.3.1 β†’ v1.3.1 β†’ v1.4.0 β†’ latest). If you're updating from before v1.3.1, run the command above repeatedly until it reports "Already up to date"

New Features​

  • πŸŒ“ Dark mode: follows prefers-color-scheme by default, or set it manually via a toggle next to the language switcher. The choice is remembered across reloads. Every previously light-only surface (main background, table headers, Backup/Email/SendProgress panels, top bar, login page) is now theme-aware
  • πŸ› οΈ UniVerein.DbMigrator: a new tool that performs the MariaDB β†’ PostgreSQL migration described above, copies every table (including soft-deleted rows) in foreign-key-safe order and verifies row counts

Improvements​

  • 🐘 Replaced MariaDB with PostgreSQL (postgres:17-alpine) across the whole stack: Docker images, the backend's database provider, and the backup/restore tooling
  • πŸ”„ The updater (docker-compose-update.yml) now understands the MariaDB β†’ PostgreSQL cutover described above and handles it automatically

Bug Fixes​

  • πŸ› The demo-mode login dialog could appear even when the app wasn't configured as a demo instance, due to how the demo flag was evaluated

Why These Updates Matter​

Dark mode has been one of the most-requested quality-of-life features, a noticeable difference during evening board meetings, for one. The switch to PostgreSQL, on the other hand, is a strategic decision: it provides a more robust foundation for future features and better data integrity. Since a database engine change is inherently delicate for existing installations, particular care was taken to make the migration safe, automated, and reversible on failure.

What's Next?​

Please plan a short maintenance window for the update, and reach out via GitHub Issues if you run into any problems during the migration. Thanks to everyone who provided feedback for this release. Check back here again soon!