# What's inside a Bubble export A Bubble application export is one large JSON object. This is what its top-level keys hold, and which tool reads which. ## The keys ### `user_types` Your data types. Each entry has a `display` name and a `fields` object; each field has a `display`, a `value` describing its type, and optionally `deleted` and a default. Read by: the [Database Visualizer](/docs/database-visualizer) as its entire input, and by the [Workflow Tracer](/docs/workflow-tracer) and [Audit](/docs/audit) to turn internal identifiers into readable names. The `value` grammar is documented in full in [the schema format](/docs/schema-format-for-ai). ### `option_sets` Your option sets. Each has a `display` and a set of values, each with its own display label, database value and sort order. Option values can carry arbitrary extra attributes — Bubble's own icon option sets, for example, attach an SVG URL to every option. Note that the values live under `values` in some exports and `options` in others. LumiDevKit reads either. ### `pages` Every page in the app: its element tree, its properties, and its workflows. Read by: the [Workflow Tracer](/docs/workflow-tracer), [Reusables Tree](/docs/reusables-tree), [Design System](/docs/design-system) and [Audit](/docs/audit). ### `element_definitions` Reusable elements. Entries of type `CustomDefinition` are the reusables themselves; elsewhere in the file, a `CustomElement` is an *instance* of one placed on a page, referencing the definition by identifier rather than by name. That indirection is why the [Reusables Tree](/docs/reusables-tree) needs both this key and `pages` to build its hierarchy. ### `api` Backend API workflows, keyed by identifier, each with an event name. Read by: the [Workflow Tracer](/docs/workflow-tracer). ### `styles` Named style definitions. Read by: the [Design System](/docs/design-system) tool. Optional: without it the tool still parses the element tree, it just has no named styles to report. ### `settings` App settings, split into two parts that matter a great deal: - **`settings.secure`** — credentials. This is deleted wholesale by the [JSON Sanitizer](/docs/json-sanitizer). - **`settings.client_safe`** — a mix. It holds design tokens, colour swatches, default styles and breakpoints, which the Design System tool needs. It *also* holds API Connector configuration, Stripe keys, general keys and plugin keys, which are credentials despite the name. "Client safe" means Bubble ships it to the browser. It does not mean it is safe to share. ### `_index` and `mobile_views` Internal bookkeeping. LumiDevKit does not read them. ## Which tool reads what The full mapping, with what happens when a key is missing, is in [which file does each tool need?](/docs/which-export-does-each-tool-need). ## The short version If you have the full export, every tool works. If you only have `user_types` and `option_sets`, only the Database Visualizer works — but that is also the only file an AI can write for you, which is the point of [designing a database with AI](/docs/design-a-database-with-ai).