Why a metadata engine matters
"We need to start tracking equipment warranties against our customer accounts. Our old CRM vendor quoted six weeks and $15,000 to add one custom object with a handful of fields. We needed it live before our next sales cycle."
In most systems, adding a new kind of record โ a new "table" โ means a developer, a database migration, and a deployment. That turns every new business idea into an engineering ticket with a multi-week queue.
Anatomy of the Metadata Engine
Instead of one database table per business entity, SmartLite stores the shape of your data โ objects and fields โ as metadata rows, and the actual record data as JSON. Nothing about a new object or field requires touching the database schema.
| Concept | What it is | Business translation |
|---|---|---|
| Object | A row in object_definition (e.g. "Warranty") | A new kind of record your team wants to track |
| Field | A row in field_definition, typed via the FieldType enum | An attribute on that record โ text, number, date, picklist, lookup, formula, auto-number |
| Formula field | Evaluated live at read time, never stored | Computed values like "Tier" from IF(amount__c > 10000, "Enterprise", "Standard") |
| Lookup field | Relationship to another object; parent data injected at read time | Connects records together, e.g. Warranty โ Account |
__c suffix in its API name. Standard, platform-seeded objects and fields keep plain names.Every metadata read is cached per organization for speed; every metadata write evicts that cache and calls metadataEngine.invalidate(orgId) so the change is visible instantly, with no restart required.
Build a "Warranty" object from scratch
warranty__c is generated automatically. Save.Days Remaining using {expiration_date__c} - TODAY()-style logic via the Formula Editor, and watch it compute live on every record without ever being stored.Test what you learned
_std__cdata_json, updated on every save