-
released this
2026-04-15 14:29:16 +02:00 | 0 commits to master since this releaseWarning
Database Migration RequiredVersion 1.4 includes database migrations from version 20 to version 27. There is NO automatic rollback. Once you upgrade, you cannot downgrade without restoring a backup.
Back up your database before upgrading:
- Option 1: Go to Admin -> Database and use the download button to save a copy of your database
- Option 2: Copy your data folder:
cp -r /path/to/your/data ./bricktracker-backup/data
See Migration Guide for detailed upgrade instructions.
Breaking Changes
BK_PARTS_DEFAULT_ORDERColumn Names ChangedThe
BK_PARTS_DEFAULT_ORDERenvironment variable now uses"combined"instead of"bricktracker_parts"for column references.Required updates if you have a custom value:
"bricktracker_parts"."spare"->"combined"."spare""bricktracker_parts"."part"->"combined"."part""bricktracker_parts"."quantity"->"combined"."quantity"
Or remove the custom setting entirely to use the new defaults. See
.env.samplefor the full list of available column names.New Features
Read the full changelog here
Individual Minifigures Tracking
Track loose minifigures outside of sets with full part-level tracking.
- Problem tracking (missing/damaged/checked states)
- Complete metadata: owners, tags, statuses, storage, purchase info
- Purchase tracking with date, location, and price
Feature Flags:
BK_HIDE_INDIVIDUAL_MINIFIGURES: hides navbar menu item and links from minifigure detail pages; routes remain accessibleBK_DISABLE_INDIVIDUAL_MINIFIGURES: read-only mode; all pages accessible but editing fields disabled, delete buttons hidden, write operations blocked
Individual Parts Tracking
Track loose parts outside of sets and minifigures.
- Quick-add directly from set parts tables
- Complete metadata: owners, tags, statuses, storage, purchase info
- Purchase tracking with date, location, and price
- Bulk part addition interface
Feature Flags:
BK_HIDE_INDIVIDUAL_PARTS: hides navbar menu item, "Add Parts" button, and links from part detail pages; routes remain accessibleBK_DISABLE_INDIVIDUAL_PARTS: read-only mode; all pages accessible but editing fields disabled, delete buttons hidden, "Add Parts" menu item removed, write operations blockedBK_HIDE_QUICK_ADD_INDIVIDUAL_PARTS: hides the "Add to individual parts" option in set parts row menus only
Part Lots System
Organize individual parts into lots/collections:
- Group related parts under a named lot (e.g. a bulk purchase, a project)
- Shared metadata across the lot (storage, purchase info)
- View and filter all parts within a lot
- Lot-level metadata: name, description, created date
Purchase Location Management
- New purchase location management page at
/purchase-locations/ - View all items purchased from a given location
Export Functionality
New export section in the Admin panel with three categories:
Export Sets:
- Rebrickable CSV format for collection tracking
Export All Parts:
- Rebrickable CSV (Part, Color, Quantity)
- LEGO Pick-a-Brick CSV (Element ID, Quantity)
- BrickLink XML (Wanted List format)
Export Missing/Damaged Parts:
- Same three formats as All Parts
All exports aggregate quantities automatically. BrickLink exports use proper BrickLink part numbers and color IDs when available (sourced from the Rebrickable color cache).
NOT Filter Toggle Buttons
Toggle any filter between "equals" and "not equals" mode:
- Works with all filter types: Status, Theme, Owner, Storage, Purchase Location, Tag, Year
- Visual feedback: button turns red with
≠icon when in NOT mode - Supports both client-side and server-side pagination modes
- Filter state persists in the URL (e.g.
?theme=-frozen&status=-has-missing) - Clear filters button resets all toggle states
Notes / Comments Field
Add text notes and comments to any set:
- Accessible via Management -> Notes accordion on set detail pages
- Auto-save functionality with visual feedback
- Clear button to quickly remove notes
- Supports multi-line text input
Configuration:
BK_SHOW_NOTES_GRID(default:false): show notes on set cards in grid viewBK_SHOW_NOTES_DETAIL(default:true): show notes on set detail pages- Both settings can be toggled in Admin -> Live Settings without restart
Bulk Set Refresh
Batch refresh functionality for updating multiple sets at once:
- New Bulk Refresh button on Admin -> Sets needing refresh
- Pre-populates a comma-separated list of all sets needing refresh
- Follows same pattern as bulk add with real-time progress tracking
- Shows current set being processed; failed sets remain in input for easy retry
Badge Order Customization
Configurable badge ordering for set cards and detail pages:
BK_BADGE_ORDER_GRID: comma-separated badge keys for grid view (default:theme,year,parts,total_minifigures,owner)BK_BADGE_ORDER_DETAIL: comma-separated badge keys for detail view (default: all 16 badges)- Both settings configurable via
.envor Admin -> Live Settings without restart
16 available badge types:
theme,tag,year,parts,instance_count,total_minifigures,total_missing,total_damaged,owner,storage,purchase_date,purchase_location,purchase_price,instructions,rebrickable,bricklinkSortable Checked Column (Issue #137)
- The "Checked" column in set inventory tables can now be sorted by clicking the header
- Works in both the parts table and the part lots table
Front Page Parts Display
- Added latest/random parts section to the front page alongside sets and minifigures
- Shows 6 parts with quantity badges and relevant information
- Respects
BK_RANDOM,BK_HIDE_SPARE_PARTS, andBK_HIDE_ALL_PARTSconfiguration
Rebrickable Color Database
- Caches color information from Rebrickable API locally
- Provides BrickLink color ID mapping for exports
- Reduces repeated API calls for color data
Bug Fixes
Parts & Sorting
- Fixed client-side table sorting corruption (Issue #136, #145): Sort buttons now trigger actual table header clicks instead of using
columns.sort()directly- Prevents misaligned images, colors, and links when mixing sort buttons with header clicks
- Applies to
/parts,/problems, and/minifigurespages
Set Refresh
- Fixed set refresh functionality: Resolved multiple issues with refreshing sets from Rebrickable
- Reuses existing set IDs instead of generating new UUIDs, preventing foreign key errors
- Uses UPDATE-then-INSERT pattern to properly update existing parts while preserving user tracking data (
checked,missing,damaged) - Part quantities now correctly sync with Rebrickable during refresh
- New parts from Rebrickable are added; orphaned parts (no longer in Rebrickable's inventory) are removed
Networking
- Fixed Socket.IO connections behind reverse proxies: Resolved WebSocket disconnection issues with Traefik, Nginx, and other reverse proxies
- Root cause: setting
BK_DOMAIN_NAMEenables strict CORS checking that fails with reverse proxies - Solution: leave
BK_DOMAIN_NAMEempty for reverse proxy deployments (allows all origins by default) - Added debug logging for Socket.IO connections to help troubleshoot proxy issues
- Root cause: setting
Import & Bulk Operations
- Fixed bulk import hanging on empty set numbers: Trailing commas in bulk import input (e.g.
"10312, 21348, ") no longer cause infinite loops- Empty strings from trailing commas are now filtered out before processing
- Fixed bulk parts redirect: Corrected endpoint reference after route function rename
Admin & Storage
- Fixed storage deletion error handling: Added proper validation when attempting to delete storage locations still in use
- Shows detailed count of items using the storage (sets, individual minifigures, individual parts, part lots)
- Provides clickable link to storage details page
- Fixed purchase location templates: Created missing template files for purchase location pages
Docker
- Fixed permission denied when running as non-root user (Issue #138): Resolved container startup failure when using
user:directive in docker-compose- Added
chmod -R a+rX /appto Dockerfile so all files are readable regardless of build environment - Added commented
user:example incompose.yamlto document non-root support
- Added
Configuration Updates
New Environment Variables
Individual Features:
BK_HIDE_INDIVIDUAL_MINIFIGURES(default:false): hide individual minifigures UI elementsBK_DISABLE_INDIVIDUAL_MINIFIGURES(default:false): read-only mode for individual minifiguresBK_HIDE_INDIVIDUAL_PARTS(default:false): hide individual parts UI elementsBK_DISABLE_INDIVIDUAL_PARTS(default:false): read-only mode for individual partsBK_HIDE_QUICK_ADD_INDIVIDUAL_PARTS(default:false): hide quick-add option in set parts tables
Notes:
BK_SHOW_NOTES_GRID(default:false): show set notes on grid view cardsBK_SHOW_NOTES_DETAIL(default:true): show set notes on set detail pages
Badge Order:
BK_BADGE_ORDER_GRID(default:theme,year,parts,total_minifigures,owner): badge order on set cardsBK_BADGE_ORDER_DETAIL(default: all 16 badges): badge order on set detail pages
All new settings support live configuration updates via Admin -> Live Settings without a container restart.
Database
7 new migrations (v20 -> v27):
- 0021: Individual minifigures and parts tables
- 0022: Part lots system with proper foreign keys
- 0023: Performance indexes for individual features
- 0024: Rebrickable colors cache table
- 0025: Additional composite indexes for query optimization
- 0026: Standardized
ON DELETE RESTRICTbehavior across metadata tables - 0027: Consolidated metadata tables. Removes FK constraints to allow reuse across sets, individual minifigures, individual parts, and lots
Upgrade Path
From 1.3.x to 1.4
- Back up your database (see warning above)
- Update your image tag to
1.4.0 - Restart. The application will prompt you to run the database upgrade from the Admin page
- If you have a custom
BK_PARTS_DEFAULT_ORDER, update it as described in Breaking Changes
Update using
latesttag:If your
compose.yamlcontainsimage: gitea.baerentsen.space/frederikbaerentsen/bricktracker:latest, update with:# Pull the new version docker compose pull # Restart the container with the new image docker compose down docker compose up -dUpdate using version tag:
If your
compose.yamlspecifies a version, edit it and change the tag to1.4.0:image: gitea.baerentsen.space/frederikbaerentsen/bricktracker:1.4.0# Pull the new version docker compose pull # Restart the container with the new image docker compose down docker compose up -dDownloads