Skip to main content

Naming Conventions

The full type list and per-type validation are in Field Types.

Best Practices

Use enum over text for constrained values

If a field has a known set of valid values (status, priority, category), use enum with values rather than text. Writes outside the set are rejected, and filtering with eq / in is exact.

Model many-valued attributes explicitly

There is no multi-select type. For a short, fixed list of flags, use one boolean field per flag — each is filterable. For an open-ended set of tags, add a tags entity with a reference field back to the record, so each tag is its own filterable record. A json field can hold an array, but json fields only support the is_null filter. When a record in one entity refers to a record in another entity in the same app, use type: reference with constraints.entity_slug rather than a plain text field:
HASP checks the referenced record exists — in the same project and environment — whenever the value is written.

Keep entities focused

One entity per concept. Don’t combine “tasks” and “comments” into one entity — make two entities and use a reference field in the comments entity to point back to the task.

Index what you filter on

Declare indexed: true on the fields your app filters or sorts on routinely — statuses, dates, identifiers — so those queries stay fast as the entity grows. See Indexing fields.

Example Schemas

Task Tracker

Contact Directory

Inventory