This release introduces a query engine for exploring your entity graph, workspace initialization for complete schema configurability, as well as new field types and automation features.
Query engine
Firm now includes a SQL-like query language for filtering, traversing, and analyzing your entity graph:
firm query 'from project | where status == "in progress" | related(2) task | limit 10'The query engine supports:
- Filtering with
where- supports all field types and operators (==, !=, >, <, >=, <=, contains, startswith, endswith, in) - Graph traversal with
related- explore relationships with multiple degrees of separation - Sorting with
order- organize results by any field - Limiting with
limit- control result set size
Workspace initialization
New firm init command sets up workspaces with options:
- Default schemas created as editable DSL files in your workspace
.gitignoreconfiguration for graph files- Starter entities for faster setup
AGENTS.mdfile for AI context
New features
- Enum field type - Constrained string values with case-insensitive matching and interactive picker
- Non-interactive add mode - Automate entity creation with
--type,--id, and--fieldarguments for AI and automations - Field ordering - Schemas preserve insertion order, entities retain DSL field ordering
- Path autocomplete - Interactive path selection in CLI add command
Improvements
- Path fields now correctly resolve relative to source files
- Both interactive and non-interactive add CLI commands no longer builds the graph twice
- Updated documentation with new CLI command examples
⚠️ Breaking changes
-
Built-in schemas removed: Existing workspaces must run
firm initto create schema files. Schemas are now fully user-editable in your workspace. -
Module reorganization: DSL parsing moved from
parser::toparser::dsl::namespace in thefirm_langcrate. -
Entity field access: Changed from direct field ID indexing to
get_field()method or entity field index.
Full changelog: https://github.com/42futures/firm/blob/0.4.0/CHANGES.md