Upgrade notes
This release splits the SQLite database into two files. Back up your data directory before upgrading.
- On the first start, the durable data in
crowdsec.dbis copied into a newstate.db, and thencrowdsec.dbis deleted. - Cached alerts and decisions are not copied. The first start runs a full synchronization over
crowdsec.sync.lookback, so the alert list may be incomplete until it finishes. - Older versions can't read the new files. To roll back, restore your backup.
Highlights
Durable state and rebuildable cache are now separate (#552, #553)
| File | Location | Contents | If lost |
|---|---|---|---|
state.db
| storage.dataDir
| Users, passkeys, notification channels, rules and history, saved and recent filters, queued alert deletions, UI settings | Restore from a backup |
cache.db
| storage.cacheDir (new)
| Alerts and decisions synchronized from LAPI | Rebuilt by the next synchronization |
- New option
storage.cacheDir/CONFIG_STORAGE_CACHE_DIR(default:storage.dataDir). You can put the cache on fast node-local storage and keepstate.dbandconfig.yamlon backed-up or network storage. The container only fixes ownership of/app/data, so a cache mount elsewhere must be writable by the container user. state.dbalways uses a rollback journal, so it works on network filesystems that don't support WAL.storage.walEnablednow only applies tocache.db.- Database maintenance is simpler. If startup reports reclaimable space, stop the app, delete
cache.db,cache.db-walandcache.db-shm, and start it again. The manualVACUUMsteps are no longer needed.
Browser Back and Escape close overlays (#549)
- Back (including the mouse back button) closes the alert details modal without leaving
/alerts. The alert list isn't reloaded, so loaded pages and the scroll position are kept. Thanks @mcbyte-it! - Back also closes the Add Decision form opened from alerts (returning to the alert details if you opened it from there) and the mobile sidebar drawer.
- Closing a modal with the close button, a backdrop click or by deleting the alert doesn't leave a stale history entry. Closing a modal opened from a deep link (
/alerts?id=…) no longer adds an entry each time, so Back goes to the previous page. - Escape closes any modal, the same as a backdrop click. Only the topmost modal closes, and an open dropdown inside a dialog handles Escape first.
Fixes
- Fixed refreshes stalling during retention cleanup ("Database refresh worker is no longer available", #551). Cleanup now runs before the refresh transaction, in separately committed batches whose size adapts. A slow cleanup can no longer roll back or block the LAPI delta. Cached analytics and list counts are updated as each batch commits.
- Made reconciliation planning faster with a covering index on
decisions(stop_at, alert_id, instance_id). - Notification incident and history writes, and progress on queued deletions, are now done in bounded batches that yield between them.
Maintenance
- Upgraded runtime and dev dependencies (React 19.3.1, Vite 8.3.5, Vitest 5.0.5, tsup 9, …) and pnpm 12.15.0.
- Updated GitHub Actions (setup-node v7.1.0, login-action v4.7.0, codeql-action v4.39.1).
- Fixed flaky Settings tests.
Contributors
Docker
docker pull ghcr.io/TheDuffman85/crowdsec-web-ui:2026.10.11