Entities & Data

Last updated: March 2026

A complete guide to Webooto's entity system -- the data tables that power every part of the platform. Learn about field types, relations, virtual vs real objects, timeline activities, and data management tools.

Understanding Entities

Entities are the foundational data layer of the Webooto platform. Every piece of structured information -- contacts, products, orders, blog posts, invoices, or any custom data your business requires -- lives inside an entity. An entity is essentially a data table with a defined schema of fields, and each row in that table is called an entry.

Entities are not just passive storage. They are deeply integrated across the entire platform: pages can bind to entity data through data sources, workflows can trigger when entries are created or updated, applications can display entity data in custom dashboards, and permissions can control who sees and edits which records. A change to an entity entry is immediately reflected everywhere it is referenced.

Every entity has a name, a URL-friendly slug, a display name, an optional description, and an icon. Entities can be marked as active or inactive, shown or hidden in the Designer sidebar menu, and ordered by priority. The platform also supports localized names and descriptions for multi-language workspaces.

When you create a new entity, Webooto automatically provisions three system fields: id (a unique identifier for each entry), createdAt (the timestamp when the entry was created), and updatedAt (the timestamp of the last modification). These system fields are managed automatically and cannot be deleted.

Tip

Think of entities as the single source of truth for your workspace. Rather than duplicating data across pages and applications, point everything at the same entity and let the platform keep it synchronized.

Field Types Reference

Each entity is composed of fields that define the shape of its data. Webooto provides 19 field types covering text, numbers, dates, media, selections, structured data, relational links, and auto-generated references. When adding a field, you configure its display name, internal name, whether it is required or unique, a default value, and optional validation rules.

The table below lists every available field type, its internal identifier, and a description of its behavior and typical use case.

Field TypeInternal TypeDescription
Text (Short)STRINGSingle-line text input. Ideal for names, titles, short labels, and any value that fits on one line.
Text (Long)TEXTMulti-line text area. Suited for descriptions, notes, addresses, and longer free-form content.
NumberNUMBERNumeric value. Accepts integers and decimals. Used for prices, quantities, scores, and calculations.
BooleanBOOLEANTrue/false toggle. Renders as a switch or checkbox. Common for flags like "active", "featured", or "published".
DateDATEDate picker. Stores a date (and optionally time). Used for deadlines, birth dates, event dates, and scheduling.
EmailEMAILText input with email validation. Ensures the value conforms to a valid email format before saving.
URLURLText input with URL validation. Ensures the value starts with http:// or https:// and is well-formed.
ColorCOLORColor picker. Stores a hex color value. Useful for category colors, theme accents, and branding fields.
ImageIMAGEImage upload integrated with the media library. Stores a reference to an uploaded image file.
FileFILEGeneral file upload. Accepts documents, PDFs, spreadsheets, and other file types through the media library.
SelectSELECTDropdown with predefined options. Each option has a label, a value, and an optional color. Supports localized labels for multi-language use.
Multi SelectMULTI_SELECTMultiple-choice field. Allows selecting more than one option from a predefined list. Stored as an array of values.
JSONJSONStructured JSON data. Stores arbitrary key-value objects. Used for metadata, configuration blobs, and complex nested data.
RelationRELATIONGeneric link between two entities. Establishes a foreign-key relationship to another entity's entries.
One to ManyONE_TO_MANYParent-child relationship. The parent entity can have many related children. Example: a Company has many Contacts.
Many to OneMANY_TO_ONEChild-parent relationship. Each entry belongs to one parent. Example: a Contact belongs to one Company.
Many to ManyMANY_TO_MANYBidirectional relationship. Entries on both sides can link to multiple entries on the other side. Requires a junction table.
Junction TableJUNCTIONIntermediate table for Many-to-Many relationships. Stores the links between two entities and can hold additional fields on the relationship itself (e.g., quantity, role, date assigned).
ReferenceREFERENCEAuto-incrementing reference number. Generates unique identifiers using configurable patterns (e.g., INV-2026-0001). Supports number padding, start offset, and reset strategies (auto, none, yearly, monthly, daily).
Note

Every field also supports metadata for advanced configuration, validation rules for input constraints, and field profiles for customizing labels, help text, and placeholders per language.

Creating and Configuring Entities

You create and manage entities from the Designer sidebar under the Entities section. The entity creation flow lets you define the structure upfront or start minimal and add fields iteratively as your requirements evolve.

1

Create the entity

Navigate to Designer > Entities and click "New Entity". Provide a name (e.g., "Invoices"), a slug (e.g., "invoices"), and a display name. Optionally add a description and choose an icon from the icon picker. The system fields (id, createdAt, updatedAt) are created automatically.

2

Add fields

Open the entity and go to the Fields tab. Click "Add Field" and select a field type from the 19 available types. Configure the display name, internal name, required/unique constraints, default value, and any type-specific settings (e.g., options for Select fields, related entity for Relation fields, or pattern for Reference fields).

3

Configure field profiles

For multi-language workspaces, use the Field Profile Manager to set localized labels, help text, and placeholder text for each field. This ensures that forms and list views display the correct language for each user without duplicating entity definitions.

4

Set entity options

Configure whether the entity appears in the Designer sidebar menu and its display order. Mark the entity as active or inactive. Add localized names and descriptions if your workspace supports multiple languages.

5

Manage field ordering

Each field has an order property that controls its position in forms and list views. Reorder fields by adjusting their order values to match the logical flow of data entry for your team.

Tip

Use descriptive slugs for your entities. The slug is used in API endpoints, URL routing, and data source bindings, so a clear slug like "customer-orders" is much easier to work with than "co1".

Relations & Linking Data

Relations are what transform a collection of flat tables into a connected data model. Webooto supports four relational field types that cover every common data modeling pattern, plus a junction table type for enriched many-to-many relationships.

When you create a relational field, you specify the target entity (relatedEntityId) and a deletion behavior that controls what happens to linked records when a parent is deleted. The three deletion behaviors are: "unlink" (remove the link but keep the child), "soft" (soft-delete the child), and "hard" (permanently delete the child).

One-to-Many and Many-to-One are inverse perspectives of the same relationship. If you add a One-to-Many field on entity A pointing to entity B, each entry in A can reference multiple entries in B. From B's perspective, each entry belongs to one entry in A (Many-to-One). You typically create both sides to enable navigation in either direction.

Many-to-Many relationships require a junction table to store the links. When you create a Many-to-Many field, you specify a junction table name and optionally define junction fields -- additional columns on the junction table that describe the relationship itself. For example, a "ProjectMembers" junction between Projects and Users might include a "role" field and a "joinedAt" date.

The generic Relation type is a simplified link when you do not need to enforce cardinality. It stores a reference to another entity's entry and is useful for lightweight associations like "assignee" or "category".

Warning

Choose deletion behaviors carefully. Setting "hard" on a One-to-Many relation means deleting a parent will permanently remove all its children. Use "unlink" as the safe default unless cascading deletes are intentional.

Virtual vs Real Objects

Webooto offers two storage strategies for entities, designed to match different scale and performance requirements across subscription tiers.

Virtual entities store their data in a shared table structure. All entries across all virtual entities use the same underlying database table, with the entity schema applied at the application layer. This approach is storage-efficient and included in Free, Light, and Essential plans. Virtual entities are identified by IDs prefixed with "__virtual_" and include system entities like Users, Media, Pages, Applications, Entities, Themes, and Permissions. Virtual entities cannot be deleted from the system.

Real Objects are available on the Unlimited plan. When you enable "Real Object" mode on an entity, Webooto creates a dedicated database table with a custom table name that you specify. Each field becomes a real column, and the database engine handles indexing, constraints, and query optimization natively. This yields significantly better read and write performance for entities with large volumes of data (thousands to millions of entries).

The choice between virtual and real is transparent to the rest of the platform. Pages, workflows, applications, and APIs interact with both storage types through the same interface. You can start with virtual entities and upgrade to real objects later without changing any of your pages or application logic.

AspectVirtual EntitiesReal Objects
StorageShared table with JSON data columnDedicated table with typed columns
PlansFree, Light, EssentialUnlimited
PerformanceGood for small to medium datasetsOptimized for large datasets
SetupAutomatic, no configuration neededRequires specifying a table name
System entitiesUsers, Media, Pages, etc.Custom entities only
MigrationN/ACan convert from virtual to real
Note

System virtual entities (Users, Media, Pages, Themes, Applications, Permissions, Entities) are always present regardless of plan. They provide the backbone data structures that the platform depends on.

Timeline & Activity

Every entity entry has a built-in timeline that records activities, comments, and changes over its lifecycle. The Entity Timeline is a collaborative feed attached to individual records, similar to a comment thread but enriched with structured events.

The timeline supports multiple event types: field updates and status changes (tracked automatically), notes and comments (posted by users), tasks (created from the timeline and linked to the entry), email sent notifications, PDF generation records, workflow run logs, and custom events. Each event is attributed to an actor, which can be a user, the system, a workflow, or the AI assistant.

Users can post comments through the Timeline Composer, a rich input area at the top of the timeline. Comments support emoji reactions -- each reaction shows a count and the list of users who reacted. Comments also support threaded replies, enabling focused discussions within a record's context.

Tasks created from the timeline are linked directly to the entity entry. Each task has a title, description, status, priority, and optional start/end dates. A task checkbox in the timeline lets users toggle task completion without leaving the record view. Tasks created by a user show their avatar and name for attribution.

The timeline supports filtering by event type (All, Field Update, Status Change, Note, Task, Comment, Email Sent, PDF Generated, Workflow Run, Custom, Entry Created, Entry Updated, Linked Task) so users can focus on the activity they care about. It also supports cursor-based pagination for entries with long activity histories.

Tip

Use timeline notes to document decisions and context around a record. Unlike ephemeral chat messages, timeline entries are permanently attached to the record and serve as an audit trail.

Data Management

Webooto provides a comprehensive set of tools for viewing, filtering, exporting, and operating on entity data at scale. The list view is your primary interface for browsing and managing entries within an entity.

The list view displays entries in a table format with configurable columns. Each field type has a specialized renderer: booleans show as toggles, dates are formatted, emails and URLs are clickable links, images show thumbnails, and relations display the linked record's display value. You can control which columns are visible, their order, and their width.

Filtering uses a powerful operator-based system. You can combine multiple filters, each consisting of a field, an operator, and a value. The available operators are: equals, not equal, contains, starts with, ends with, greater than, greater or equal, less than, less or equal, between, in, not in, is empty, and is not empty. Filters are automatically type-aware -- number fields coerce values to numeric, boolean fields normalize to true/false, and text fields support string operations.

Sorting is available on any field, with ascending and descending options. The default sort is by createdAt descending (newest first). You can combine sorting with filtering to find exactly the records you need.

Entity Views let you save and share filter/column configurations. Each view has a name, optional description, and visibility setting: private (only you can see it), shared (specific users can see it), or tenant_default (visible to everyone in the workspace). Views can be set as defaults for specific roles or users, ensuring each team member sees the most relevant data layout.

Export functionality supports JSON and CSV formats. Exports respect the current column visibility -- only visible columns are included in the CSV output. JSON export includes the full entry data. Export files are named using the entity slug for easy identification.

Row-level actions let you edit or delete individual entries. For entities with special behavior (pages, PDF templates, email templates), the edit action routes to the appropriate builder interface. Delete operations require confirmation and respect the entity's deletion behavior configuration.

Filter OperatorLabelDescription
eqequalsExact match on the field value
neqnot equalExcludes entries where the field matches the value
containscontainsSubstring match within the field value
startsWithstarts withField value begins with the given text
endsWithends withField value ends with the given text
gtgreater thanField value is strictly greater than the given value
gtegreater or equalField value is greater than or equal to the given value
ltless thanField value is strictly less than the given value
lteless or equalField value is less than or equal to the given value
betweenbetweenField value falls within a specified range
ininField value matches any item in a given list
notInnot inField value does not match any item in a given list
isNullis emptyField has no value (null or undefined)
isNotNullis not emptyField has a value assigned
Note

Additional specialized components are available for complex data entry: the Line Items Editor for invoice-style nested rows, the Many-to-Many Editor for managing bidirectional links, and the Entity Translation Manager for maintaining multi-language content across all fields.