Part 7 · Platform, hosting and artificial intelligence
Forge (no-code customization)
Add fields, stat buttons, default values and shared filters to Symbifox forms, without writing any code.
Forge adds the fields your line of work needs to Symbifox forms: a member number on a contact, a renewal date, an internal status on a file. You do everything by pointing and clicking, with no module to write and no restart. The application is meant for the person who administers Symbifox and knows its screens well, not for the whole team. Your additions stay in place when Symbifox is updated.
Overview#
Forge is deliberately narrow: it adds fields to existing forms, and nothing else. It does not create new record types, design reports or replace custom development.
Five objects make up the application.
- Custom field: a field added to an existing record type. Text, number, amount, checkbox, date, selection list, link to another record, attachment or image.
- View injection: the place where the field appears. A field can show in the form, in the list, on the kanban card and in the search filters.
- Stat button: one of the shortcut buttons at the top of a form, which shows a count and opens the records counted.
- Default value: the value a field takes when a record is created, for one person or for the whole company.
- Shared filter: a saved search offered to the whole team rather than to its author alone.
The Add custom field screen is the application's entry point.

What sets the approach apart: Forge keeps a description of every addition, then rebuilds what is needed if a Symbifox update wipes out the underlying setup. Data entered in a custom field is never touched.
Configuration#
Access and permissions#
Two groups exist, and the Forge entry in the main menu appears only to the first.
| Group | What it opens |
|---|---|
| Forge: Administrator | Create fields, stat buttons and injections on ordinary record types. |
| Forge: Bypass model lock | Lift the lock and work on protected record types. Reserve it for system administration. |
Some record types are protected by default: user accounts and groups, settings, attachments, actions, security rules, accounting, payments and internal messaging. Forge refuses to touch them until the second group is granted.
Settings#
The application has no settings page. Everything happens in its own screens.
Base data#
There is nothing to create in advance. Do know which form you want to work on, and which existing field your addition should appear next to: the creation screen asks for this anchor point.
Getting started#
This walkthrough adds a “Service level” field to the contact form of the Boréal demo, and shows it in the list.
- Go to Forge › Add custom field.
- In Model, select “Contact”.
- In Field label, enter “Service level”. The technical name fills itself in.
- In Field Type, select Selection, then enter one option per line in Selection values.
- Leave Show in form view checked and enter the anchor field in Place after field.
- Check Show in list view and Show in search filters.
- Select Save.
The field is created, the views are adjusted, and the creation record is filed under Forge › Custom fields. Open any contact: the field is there, ready to use.
Common tasks#
Add a custom field#
This is the application's main action, and it always follows the same pattern.
- Go to Forge › Add custom field.
- Select the Model, that is, the record type to extend.
- Enter the Field label and select the Field Type.
- Optional: enter text in Help text shown to users, which appears as a tooltip.
- Check Required if the field must be filled in.
- Choose where the field appears with Show in form view, Show in list view, Show in kanban card and Show in search filters.
- Select Save.
The field appears immediately on the chosen screens, for everyone who has access to them. Discard abandons the creation.
Add a field that reads another record#
A field can display information that lives elsewhere, without entering it twice: the customer's country on an order, for example.
- Go to Forge › Add custom field.
- Select the Model and enter the Field label.
- Check Computed from another field.
- In Related path, enter the path to the information you want, separating each step with a period.
- Select Save.
The field is created read-only: it follows the source record and cannot be edited. Paths that lead to a password, a token or another secret are refused, as are paths that go through a protected record type.
Make a field conditional#
A field can appear, or become required, only in certain situations.
- Go to Forge › Custom fields.
- Open the field.
- Enter the condition in Invisible when, Required when or Readonly when, as a simple comparison.
- Save.
The condition applies everywhere Forge has placed the field. Accepted expressions stay basic: a comparison between a field and a value, with no function calls and no complex constructions.
Add a stat button#
A stat button leads from a record to the records linked to it, with their number displayed.
- Go to Forge › Add smart button.
- In Source model, select the record type that will carry the button.
- In Target model, select the record type to count.
- In Relation field on target, select the field on the counted record that points to the carrying record.
- Enter the Label shown under the count, then select the Icon and the Color.
- Optional: narrow the count with Extra domain (optional).
- Select Save.
The button appears at the top of the chosen form. When Open On Click is checked, selecting it opens the list of counted records.

Set a default value#
A default value saves you from entering the same thing every time you create a record.
- Go to Forge › Default values.
- Select New.
- Select the target Field.
- Enter the Default Value (JSON format).
- Select the User so that the default applies only to that person, or leave it empty for the whole company.
- Save.
The value applies the next time a record is created. The demo has nine defaults, including the language of new contacts and the accounting accounts of new product categories.
Share a filter with the team#
A useful search is worth offering to everyone rather than keeping it for its author.
- On the relevant list, build the search, then save it as a favourite filter.
- Go to Forge › Shared filters.
- Open the filter.
- Delete the value in User.
- Save.
The filter now appears in the whole team's favourites, on that record type. The demo has twelve, on invoices, blog posts, applications and tasks.

Remove a field from the screen#
A field that is no longer useful can be removed without losing what it holds.
- Go to Forge › Custom fields.
- Open the field.
- Clear Active.
- Save.
The field disappears from forms, lists and filters. The values entered stay in the database and reappear if you reactivate it.
The menus, one by one#
The application bar shows Forge, Add custom field, Add smart button and Custom fields; the other entries are under the plus sign at the end of the bar. The Forge entry itself is a grouping: it opens no screen.
- Forge › Add custom field: the screen for creating a field, described in Overview. It opens empty every time: it is an entry form, not a list.
- Forge › Add smart button: the screen for creating a stat button.
- Forge › Custom fields: the list of fields created, six on the demo, with their technical names. A field's record gives its label, record type, data type, list options, display conditions and the view injections that result from it.

- Forge › Smart buttons: the stat buttons created. There are none on the demo, so the screen shows a reminder of what a stat button is.
- Forge › View injections: the list of view adjustments made by Forge, one per place where a field or button appears. You consult them to understand where an addition shows, rarely to change them.
- Forge › Default values: the prefilled values, with the columns Field, Default Value (JSON format), User and Company.

- Forge › Shared filters: the saved searches, with the columns Filter Name, Model, User, Default Filter and Action.
Reference#
Fields of the Add custom field screen#
| Field | Description | Required or default |
|---|---|---|
| Model | Record type to extend, for example a contact or a task. | Required |
| Field label | Label shown on screen. | Required |
| Technical name | Internal name, derived from the label. | Filled in automatically |
| Field Type | Text, long text, integer, decimal, amount, checkbox, date, date and time, selection list, link to a record, attachment or image. | Single-line text |
| Required | Makes the field mandatory when entering data. | Cleared |
| Help text shown to users | Help text shown as a tooltip. | Empty |
| Selection values | One option per line, for a selection list. | Empty |
| Linked model | Target record type, for a link to another record. | Empty |
| Allowed reference models | List of permitted record types, for a reference field. | Empty |
| Computed from another field, Related path | Reads information that lives on a linked record. | Cleared |
| Show in form view, Place after field | Display in the form, and anchor field. | Checked |
| Show in list view, Show in kanban card, Show in search filters | Display in the list, on the card and in the filters. | Cleared |
Fields of the stat button screen#
| Field | Description | Required or default |
|---|---|---|
| Source model | Record type whose form will carry the button. | Required |
| Target model | Record type whose records are counted. | Required |
| Relation field on target | Field, on the counted record, that points to the carrying record. | Required |
| Label | Text shown under the count. | Required |
| Icon, Color | The button's icon and colour. | Suggested values |
| Extra domain (optional) | Narrows the count, as simple conditions. | Empty |
| Open On Click | Opens the list of counted records when you select the button. | Checked |
Reports and exports#
The application produces no reports. The lists of fields, buttons, injections, default values and filters can be exported with Action › Export.
Automations#
- An integrity check runs once a day: if the setup of a field or button has disappeared, for example after a module was reinstalled, it is rebuilt from the stored description. Data in the database is not touched.
- The same check runs when the application is installed and at each of its updates.
- The count shown by a stat button is calculated when the form opens, not stored: it is always up to date.
- A field or button whose rebuild fails several times in a row carries a failure counter and a message explaining the last refusal.
Public pages and portal#
The application has no public page and no portal page. A single internal address, reserved for signed-in users, calculates the count shown by a stat button.
Modules that extend this application#
No satellite module extends this application. Forge installs on its own and works as soon as it is installed. A panel of getting-started steps sits at the top of its main screen, and you close it once your first customizations are done.
Understanding#
Why your additions survive updates. A customization hacked directly into the views is lost at the first update. Forge keeps the description of each addition in its own records, independent of the technical setup. If an update wipes out that setup, the daily check rebuilds it exactly as it was. The database columns are never touched: only Symbifox's description of the field is rebuilt.
Why some record types are locked. Adding a field to user accounts, security rules, attachments or accounting can break mechanisms that everything else depends on. The lock is not a whim: it separates what a functional administrator can do alone from what needs someone who can measure the consequences.
Why no code is generated. Forge never generates a program from what you enter. A computed field only reads information on a linked record, a display condition is only a comparison, and a stat button relies on an action assembled from elements already checked. That is why the possibilities are limited: what is not offered is what would open the door to running arbitrary code.
What Forge does not do. It does not create new record types, only fields on existing ones. It designs neither reports nor pages. It does not rearrange a form by drag and drop. It does not add options to a selection list shipped with Symbifox, only to the lists it created itself. For those needs, you need a module written for the purpose.
Why a field is deactivated rather than deleted. Removing a field also removes what people entered in it. Deactivating it hides it from the screens but keeps the values, which leaves time to notice that someone missed it.
Troubleshooting#
| Symptom | Likely cause | Fix |
|---|---|---|
| The Forge entry does not appear in the main menu. | The account does not have the Forge administration group. | Add the group on the user's record, in the general settings. |
| Creation refuses the chosen record type. | The type is protected by default. | Have the lock bypass group granted, or give up on that record type. |
| The new field does not appear on the form. | Show in form view is cleared, or the anchor field does not exist on that view. | Open the field, fix the anchor, then reload the page. |
| A read path is refused. | It leads to a sensitive field or goes through a protected record type. | Choose other information, or use a field entered by hand. |
| The stat button always shows zero. | The chosen relation field does not point to the carrying record, or the restriction is too narrow. | Open the button and check the relation field and the restriction. |
| A field disappeared after an update. | The setup was wiped and the integrity check has not run yet. | Wait for the next day's check, or run an update of the application again. |
| A filter stays invisible to the team. | It still has a user. | Delete the value in User on the filter's record. |