v0.1.84 — 12 Jul 2026
Bug Fix — Platform Studio now supports non-id primary keys
Who is affected: Anyone browsing or editing a collection in Platform Studio (Content pages) whose primary key column is not named id.
What was wrong
v0.1.83 added non-id primary key support to the REST API service layer, but Platform Studio’s UI still assumed every collection has an id column:
- The content list injected
idinto thefieldsquery parameter of every request, soGET /content/<collection>failed withcolumn <table>.id does not exist(HTTP 500). - The total record count used
aggregate[count]=id(failed silently). - Row clicks navigated to
/content/<collection>/undefinedbecause the item had noidproperty. - After creating a record, the form read the new key from
result.id, breaking M2M relation saving and post-save callbacks.
What changed
CollectionList and CollectionForm now resolve the collection’s real primary key from field metadata (schema.is_primary_key) and use it for field selection, aggregate counts, row keys, navigation, and post-create handling. The primaryKeyField prop still works as an explicit override.
| Scenario | Before | After |
|---|---|---|
Content list for a non-id PK collection | ❌ HTTP 500 (column <table>.id does not exist) | ✅ Loads correctly |
Row click on a non-id PK collection | ❌ Navigates to /content/<collection>/undefined | ✅ Opens the record |
Create record with M2M relations (non-id PK) | ❌ M2M values not saved | ✅ Saved correctly |
Non-id primary key support also requires the database migrations that ship the get_table_columns RPC (20260323000001 and 20260409000001). Without them, the API silently falls back to assuming id.
Bug Fix — Save split-button gap; explicit Group spacing now honored
Who is affected: Everyone using Platform Studio. Most visibly: the Save button and its dropdown caret on Content Detail pages rendered as two separated buttons instead of one joined split-button.
What was wrong
The application theme forced a fixed gap on every Mantine Group via styles.root, which is applied as an inline style. This silently overrode any explicit gap prop anywhere in the app — gap={0} (the split save button), gap="xs" (badge/label spacing), and similar were all ignored and rendered with the theme’s default spacing.
What changed
The theme now sets the default via defaultProps, so the default spacing is unchanged but explicit gap props take effect. The save split-button also carries an inline gap: 0 as a safeguard against theme overrides.
| Scenario | Before | After |
|---|---|---|
| Save button + options caret (Content Detail) | ❌ Rendered with a visible gap | ✅ Joined split-button |
| Components specifying small gaps (e.g. badges) | ❌ Forced to theme default spacing | ✅ Render as designed |
Maintenance — Platform Studio components synced with Buildpad UI 1.6.0
Who is affected: No action required. Internal refresh of the copied @buildpad UI components (collection list/form, table, form renderer, field interfaces) and lib modules to the current Buildpad UI registry versions — this is also how the non-id primary key fix above ships. The component install manifest (buildpad.json) was migrated to schema v2, which enables per-file change tracking so future component updates can detect locally modified copies instead of overwriting them.