Step 19: Configuration Management

Version-control your schemas and entity tree with git-like branching, validation, and deployment.

Full reference

For complete details, field tables, and limitations, see the Configuration Management reference.

The Config Manager

ControlBird's configuration lives in two places: schemas that define entity types (fields, inheritance, behaviors) and the entity tree that defines the initial hierarchy of entities. The Config Manager app gives you version-controlled editing of this configuration with branching, validation, and safe deployment.

The fastest way to make a change is a config effort: a named, isolated draft you edit with the normal apps, then push to the live system when it is ready, and undo if it is wrong. The rest of this step covers that workflow plus the underlying branching and validation.

Schemas

config/schemas/

Define entity types with fields, data types, inheritance, and validation rules. A Pump schema might inherit from ProtocolMapper and add fields like FlowRate and Pressure.

Entity Tree

config/tree/

Define the initial entity hierarchy with parent-child relationships and default field values. Organize entities into logical folders like Sites, Equipment, or Controllers.

A templating-friendly format

Configuration files use a templating format that extends JSON with variables, functions, and imports. This lets you define reusable patterns and reduce duplication across your configuration.

Opening the Config Manager

Click the ControlBird logo in the taskbar and select Config Manager. The app opens with a familiar IDE-like interface:

Config Manager interface
Click to enlarge
The Config Manager with file tree, editor, and status panels
1
File Tree: Browse and edit schema and tree configuration files
2
Editor: Edit files with syntax highlighting and validation
3
Toolbar: Branch operations, apply/export, and validation
4
Sidebar Modes: Switch between files, branches, changes, history, and problems

Git-Like Branching

Configuration changes are managed with git-like branching. This lets you experiment with changes safely before applying them to the live system.

1
Create a Branch

Click the branch dropdown and select New Branch. Give it a descriptive name like add-pump-schema or reorganize-tree.

2
Make Your Changes

Edit files in the file tree. Modified files show a yellow indicator, new files show green, and deleted files show red.

3
Validate

Click Validate to check your changes. The Problems panel shows errors (must fix) and warnings (should review).

4
Preview & Apply

Click Apply to Live to see a diff of what will change in the running system, then confirm to deploy.

Editing in an Effort

Open the Efforts tab to work the modern way: create a named effort, then open the apps you already use against it instead of editing the live system directly.

1
Create an Effort

In the Efforts tab, click New effort and name it after the change, like add-pump or retune-alarms.

2
Open an App in the Effort

Pick an app (for example Device Manager) and open it in the effort. The window's titlebar shows an Effort badge so you always know you are editing a draft, not the live system.

3
Push to Runtime

When the change is ready, click Push. Config Manager applies the difference between the effort and the live system and reports how many entities changed.

4
Undo if Needed

If the result is wrong, click Undo last push. The revert is scoped to exactly what the push changed, leaving unrelated live activity alone.

Several efforts at once

Efforts are isolated, so you can keep more than one open and edit independent changes in parallel without them interfering. Each pushes on its own when ready.

Change Tracking

The Changes sidebar shows all uncommitted modifications in your current branch:

Modified: Existing files with changes
New: Newly created files
Deleted: Files marked for removal

Click any changed file to open a side-by-side diff view comparing your changes with the original version:

Side-by-side diff view
Click to enlarge
The diff viewer shows exactly what changed in each file

Validation & Problems

Before applying changes, always validate your configuration. The Config Manager checks:

  • Syntax errors: Invalid configuration syntax
  • Schema violations: Unknown field types, invalid inheritance
  • Reference errors: Entity references to non-existent paths
  • Circular dependencies: Schema inheritance cycles
Unknown field type "Presure" in the Pump schema
Did you mean "Pressure"?
Entity "/Sites/Building1/Pump1" has no mappers configured
This entity won't receive any live data

Fix Before Apply

You cannot apply configuration with errors. Warnings are allowed but should be reviewed, since they often indicate configuration that won't work as expected.

Applying Changes to Live

When your branch is ready, click Apply to Live to deploy the changes to the running ControlBird store. This process:

  1. Validates all configuration files
  2. Generates a detailed change report showing what will be added, modified, or removed
  3. Asks for confirmation before proceeding
  4. Applies changes atomically: all succeed or all fail
Apply changes preview
Click to enlarge
Review the change report before applying to the live system

Exporting from Live

Sometimes you make changes directly in the ControlBird UI (adding entities, modifying fields) and want to capture them in configuration files. The Export from Live feature does this:

Live Store
Export
Config Files

This is useful for:

  • Capturing UI-driven changes in version control
  • Creating a baseline configuration from a running system
  • Migrating configuration between environments

Worktrees for Parallel Work

Need to work on multiple changes simultaneously? Worktrees let different users or sessions work on separate branches without conflicts:

Worktree management panel
Click to enlarge
Each worktree is an isolated workspace for a branch

Worktrees are automatically created when you switch branches while another session is active. The Worktrees sidebar shows all active workspaces and lets you clean up stale ones.

Commit History

The History sidebar shows all previous commits on the current branch. You can see who made changes, when, and what was modified:

a3f2c1d
Add Pump schema with FlowRate and Pressure fields
Applied 2 hours ago
b7e4a9f
Reorganize tree structure for Building 2
Applied yesterday
c9d1e2b
Initial configuration setup
Applied 3 days ago

Best Practices

Use Descriptive Branch Names

Name branches after the change: add-hvac-schema, fix-sensor-inheritance

Validate Before Applying

Always run validation and review the change report before deploying to live

Keep Changes Focused

Make small, related changes in each branch rather than large mixed updates

Test in Development First

Apply changes to a dev node before production when possible

Troubleshooting

Changes not appearing after apply
  • Check the status bar: Make sure the apply completed successfully
  • Refresh the browser: Some UI elements may need a refresh to reflect changes
  • Check validation: Warnings might indicate why changes aren't working
Branch conflicts when merging

If two branches modified the same file, you'll see a merge conflict. The editor highlights conflicting sections so you can choose which version to keep or combine them manually.

"Config Controller offline" error
  • Check the Config Controller service: It may need to be restarted
  • Verify permissions: You need app.config-manager permission
  • Check node status: The node must be running and accessible
How do I revert a bad push?

In the Efforts tab, use Undo last push. It reverts exactly the entities and fields that push changed, so unrelated live activity is untouched. Pushes that added a new schema are not auto-undoable; back those out by pushing a follow-up effort that removes the type. For older history, you can also recover a known-good configuration from the commit history and push that.

Coming Up Next

With configuration management mastered, learn how to set up audio output for alarm notifications and custom sound feedback.