Model authoring and custom development run in parallel. You do not have to finish generation permanently before writing business logic: the next Generate updates its own files and preserves existing custom zones.
Example: order-specific logic
Assume an entity named Order. Configure its fields, relationships, access and ordinary list behavior in Content. Implement company-specific pricing in backend/internal/custom/order/ and special UI in admin/src/features/order/custom/.
Order/order is an explicit example. In the other guides, ENTITY_NAME means your entity directory and EntityName its code type.
- Open the current project in Generator UI, configure the model and save it.
- Develop Go/React custom code alongside those model changes. Generator UI does not edit arbitrary source code.
- Open Generate → Preview changes. Check that generated files update and existing custom files remain preserved.
- Run Generate. If the schema changed, review the new SQL and apply pending local migrations with
make migrate. - Build the affected application part and check the changed user flow. Commit model, generated output, custom code and registered migrations together.
- Follow Application updates. Routine deploy does not replace server records with local content.
Check after model changes
| Change | Custom-code responsibility |
|---|---|
| A new field | Preserve it when transforming and saving a complete object |
| Localized or nullable | Handle *string/nil in Go and null in API values |
| Rename/removal | Update references to the former field and contract |
| Access changes | Check custom actions and server handlers |
| Generator upgrade | Compare hooks, customcontracts and frontend extension contracts |
Preserving a file does not guarantee that its implementation stays compatible with every model. Adapt custom code when a contract changes rather than editing generated bootstrap.
Resolve a conflict
Save your work in Git and read the diff. If a generator-owned file was changed manually, move the required logic into the appropriate extension point. Understand the conflict before using Force.
If the required extension point does not exist, define the missing contract separately. A directory named custom does not make every manual change a supported extension.
Start with The custom-zone map, then choose Backend, Admin, SQL migrations or Deployment.