# How does Uvilno's declarative database work?

Canonical: https://uvilno.com/answers/how-does-uvilno-declarative-database-work
Updated: 2026-10-27

Uvilno declares collections, typed fields, references and optional rules in data/schema.json. Generated interfaces call Uvilno.db for hosted CRUD, and the creator inspects rows through App Data. The schema is validated with the saved version; it is not permission to execute arbitrary SQL or server code.

Begin with field meanings and ownership, not merely table names. Mark required values, supported options and references to other declared collections. A schema change can affect existing records, so inspect compatibility instead of assuming a new preview automatically migrates every old value.

The hosted service validates operations independently of the generated interface. A disabled button or hidden section is not an access-control mechanism. Keep real orders, bookings and lead collections empty initially; only explicitly disclosed fictional demonstration records should be seeded.

## What to verify

| Check | Published behavior | Verification |
| --- | --- | --- |
| Definition | data/schema.json declares supported typed collections. | Compare the declaration with App Data fields. |
| Access | Private rows follow real app visitor ownership. | Try retrieving a record with another identity. |
| Execution | The service validates bounded CRUD operations. | Submit a missing required value and inspect the error. |

## Steps

1. Name the records and their owner.
2. Define supported fields and references.
3. Test create, update and invalid input through the app.

## Editable starting brief

Plan a personal inventory application with private items and locations collections. Define required names, quantity as a number, supported status options and a valid location reference. Use actual hosted CRUD and a visual list/detail interface. Include field validation, revision conflict handling and an App Data verification checklist without arbitrary SQL or invented server functions.

## Sources

- [Uvilno public SDK documentation](https://uvilno.com/docs)
