Build or edit a schema by hand

The Database Visualizer is not read-only. You can add data types, fields, option sets and relationships directly on the diagram, either on top of something you uploaded or starting from nothing.

Two starting points

Start from scratch. The Database Visualizer's "Start from Scratch" card gives you an empty canvas with Bubble's built-in User already on it. No file required, no Bubble app required.

Edit an upload. Load any schema, turn on edit mode, and plan your changes visually before touching the real app.

Either way, the original schema is kept separate from your additions, so you can always see what you changed.

Adding things

Edit mode gives you:

  • Add data type — a new box on the canvas.
  • Add field — a row inside a box, with a type picker.
  • Add option set — a new orange box.
  • Add option value — a row inside an option set.
  • Rename — on types, fields and option sets.
  • Remove — new fields and option values carry an "×" on their row in the diagram, and clicking it drops them from your plan. Anything that was already in the schema cannot be removed, and neither can a whole new type once you have created it. Clear changes in the Actions menu throws away every addition and rename at once.

Creating a type asks what kind you want and shows you the key it will get, which is the string any other field has to use to reference it.

Creating a data type. The ID under the name field is the key the format uses, so this one would be referenced as custom.new_delivery_slot.

New items are drawn in green with dashed borders and a "NEW" badge, so at a glance you can tell your plan apart from what already existed.

The new type on the canvas next to an existing one. Green, dashed and badged NEW; everything already in the schema stays as it was.

Bubble's built-in User is a special case: you can add fields to it in the diagram, but it cannot be renamed, and the type itself can never be pasted into Bubble, because Bubble already has a User and a same-name paste would create a copy of it rather than merge into it. Its fields can go across: turn on Add missing fields to existing types in the extension, which is off by default, and they are created one at a time. See push a schema into Bubble.

What the type picker offers

The field type dropdown offers Bubble's own vocabulary:

text, number, numeric range, date, date range, date interval, yes / no, file, image, geographic address, plus a reference to any data type, option set, or the built-in User. A checkbox turns any of them into a list.

Two things are worth knowing about how that maps onto the underlying format:

  • When you pick the built-in User, LumiDevKit writes user, and a list of Users becomes list.custom.user. The asymmetry is Bubble's own: list.user is a real Bubble string that silently degrades, so the list form must go through custom. See the schema format.
  • numeric range, date range and date interval are real Bubble types, but the diagram draws them as plain values with no special meaning. They are offered because Bubble has them; they are not modelled.

Getting your work out

Edit mode has several exits:

  • Download JSON (scratch mode only) — the full merged schema as {user_types, option_sets}, which LumiDevKit can re-import.
  • Export changes (when you loaded a file) — a markdown summary of just what you added, useful for a ticket or a code review.
  • Export as… — Postgres SQL, Markdown, Prisma or Drizzle. See export your schema.
  • Copy for Bubble — push the whole thing into a real Bubble app. See push a schema into Bubble.
  • Save — keep it on your account. See saved schemas.

The first two are one menu item, and which of them you get depends on how you started. When you loaded a file there is no merged-JSON download at all: the drawer's Download Schema gives you the schema as it arrived, without your unsaved additions. Save first, which bakes the additions into the schema, then download.

If you try to leave with unsaved changes, you get a dialog offering to export, discard or cancel.

A note on drafts

Work in progress is kept in your browser's local storage, so a refresh does not lose it and you get a "resume" prompt when you come back. That is browser-local, not an account feature — clearing site data clears it, and it does not follow you to another machine. For that, use saved schemas.

View this page as plain markdown