Skip to Content

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 id into the fields query parameter of every request, so GET /content/<collection> failed with column <table>.id does not exist (HTTP 500).
  • The total record count used aggregate[count]=id (failed silently).
  • Row clicks navigated to /content/<collection>/undefined because the item had no id property.
  • 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.

ScenarioBeforeAfter
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.

ScenarioBeforeAfter
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.

Last updated on