Why Metadata?
In a traditional system, adding a new entity type means writing model code, migration scripts, resolver logic, and UI components. In ISO BPMS, you define an object in metadata — and the engine generates the PostgreSQL table, GraphQL type, CRUD resolvers, and dynamic UI at runtime.
The Metadata Schema
Object metadata stores the singular/plural names, label, icon, and configuration. Field metadata stores the name, type (TEXT, NUMBER, CURRENCY, SELECT, etc.), validation rules, and display options. Relation metadata defines foreign keys between objects. All of this lives in a shared metadata schema, scoped by workspace ID for multi-tenancy.
Dynamic GraphQL Generation
The GraphQL schema is generated dynamically from metadata and cached per version. When you add a field or create a new object, the schema version increments and the next request gets the updated SDL. No server restart required. The generic resolver handles all CRUD operations by reading the object configuration at request time.