Bubble.io · Data Model
The differences between option sets and data types, when to use each, the security point, a worked example and common mistakes.
Last updated: October 2026. Written by Athar Ahmad, Certified Bubble.io Developer and Tech Architect, Simple Automation Solutions.
Quick answer
In Bubble, a data type is a category of records stored in the database that users and workflows can change and that privacy rules protect, while an option set is a fixed list of choices defined in the editor, loaded with the app, fast, not editable by users at runtime and not protected by privacy rules. Use option sets for fixed lists such as statuses, categories and plan names, and data types for anything users create or edit, anything sensitive and anything you search or link. Never put sensitive data in an option set.
Key takeaways
- Option set = fixed, fast, visible to users, not protected by privacy rules.
- Data type = editable records, searchable, protected by privacy rules.
- Use option sets for statuses, categories, plan names and document types.
- Never store sensitive or personal data in an option set.
- Use a data type when admins or users must manage the list.
In this guide
Bubble’s features, plugin options and interface change over time, so check its current documentation for exact steps and names.
What are option sets and data types?
In Bubble, both option sets and data types hold structured information, but they behave very differently. A data type is a category of records stored in your database, such as Client or Invoice, which users and workflows can create, change and delete. An option set is a fixed list of choices, such as statuses or categories, defined in the editor and the same for everyone.
Option sets vs data types at a glance
| Option set | Data type | |
|---|---|---|
| What it is | A fixed list of options with optional attributes | A table of records in the database |
| Who can change it | The builder in the editor, not users at runtime | Users and workflows, according to your rules |
| Speed | Fast, since values are loaded with the app without a database search | Requires a search or a link to a record |
| Privacy rules | Not protected. Values are visible to users | Protected by privacy rules |
| Typical content | Statuses, categories, plan names, countries, fixed labels | Clients, documents, messages, invoices |
| Can hold sensitive data? | No | Yes, with proper privacy rules |
| Changing a value | Edit in the editor and deploy | Edit the record |
When should you use an option set?
- Statuses such as Draft, Under Review and Approved.
- Categories and types that change rarely.
- Plan or tier names and their fixed limits.
- Fixed lists such as countries, document types or priority levels.
- Labels and attributes tied to each option, such as a colour or description.
Option sets are neat, quick and safe from accidental user edits, which makes them ideal for values the app’s logic relies on.
When should you use a data type?
- Anything users create or edit, such as clients, tasks, messages and documents.
- Lists that administrators need to manage without the builder, such as configurable categories.
- Anything sensitive or personal.
- Anything you need to search, filter, link or report on.
- Anything with relationships to other records.
The important security point
Option sets are loaded with the app and are visible to users, and they are not covered by privacy rules. Never put sensitive, personal or confidential information in an option set. Treat everything in an option set as public to anyone who uses the app. Sensitive data belongs in data types with privacy rules. See our security guide and our guide to Bubble privacy rules.
A worked example for a client portal
| Information | Best choice | Why |
|---|---|---|
| Matter status: Open, Awaiting Client, Under Review, Closed | Option set | Fixed, used in logic and the interface |
| Document type: ID, Contract, Invoice, Statement | Option set | Fixed list, no sensitive content |
| Client records | Data type | Created and edited by users, with privacy rules |
| Uploaded documents | Data type | Sensitive, protected |
| Priority labels and colours | Option set with attributes | Fixed, with display attributes |
| Firm-specific tags that staff create | Data type | Must be editable at runtime |
| Subscription plan limits | Option set with attributes | Fixed rules used across the app |
Common mistakes
- Putting sensitive information in an option set.
- Using a data type for a tiny fixed list, adding searches and cost for no reason.
- Using an option set for something users need to edit.
- Hard-coding values in many places instead of using one option set.
- Changing an option set casually, which can affect logic that depends on it.
- Inconsistent naming between option sets and data types.
Performance and design tips
- Use option sets for fixed lists to avoid unnecessary searches. See workload units.
- Store a status as an option set value on the record, so the record is protected but the label is consistent.
- Keep option set names and values stable, since logic may depend on them.
- Plan these choices in the data model. See database design mistakes.
Simple Automation Solutions plans these decisions in the PRD from a $345 Discovery Sprint, credited toward the build. Builds start at $3,500, and support is from $35 per hour. See what to cut before you build.
Frequently asked questions
What is the difference between an option set and a data type in Bubble?
A data type is a table of records in the database that users and workflows can change. An option set is a fixed list of choices defined in the editor.
Are option sets protected by privacy rules?
No. Option set values are visible to users, so never store sensitive information in them.
When should I use an option set?
For fixed lists the logic relies on, such as statuses, categories, plan names and document types.
Can users edit option sets?
No, not at runtime. If users or admins need to manage a list, use a data type.
Are option sets faster than data types?
Generally yes for fixed lists, since they avoid a database search.
Planning your data model and unsure what goes where?
Email us what your app stores. We will sketch a data model with the right structures and rules.
Athar Ahmad, Certified Bubble.io Developer and Tech Architect, Simple Automation Solutions
About Simple Automation Solutions (SA Solutions)
Simple Automation Solutions is a Bubble.io development studio led by Athar Ahmad, a Certified Bubble.io Developer and Tech Architect. It builds web and mobile apps, client portals and SaaS products for founder-led businesses such as law firms, accounting firms, boutique agencies and consultants. Services include a free 30-minute Idea Audit, a $345 Discovery Sprint (a Product Requirements Document delivered within 24 hours, credited toward the build) and builds starting at $3,500. Website: sasolutionspk.com.