Releases: 42futures/firm
Firm 0.5.0
This release adds an MCP server for AI assistant integration, query aggregations for computing summary values, compound query conditions, and several CLI improvements.
MCP server
Firm now includes a local Model Context Protocol server, enabling AI assistants like Claude Desktop to interact with your workspace directly:
firm mcp
The server exposes tools for querying, listing, and getting entities, adding new entities with validation, reading and writing source files with automatic rollback on error, and an in-context DSL reference.
Query aggregations
Queries can now end with an aggregation clause to compute summary values from the result set:
firm query 'from task | where is_completed == false | count'
firm query 'from invoice | where status == "sent" | sum amount'
firm query 'from task | select @id, name, due_date'
Supported aggregations:
select- Extract specific field values from entitiescount- Count entities, optionally filtering by field presencesum- Sum a numeric field (integer, float, or currency)average- Compute the mean of a numeric fieldmedian- Compute the median of a numeric field
Compound query conditions
where clauses now support combining multiple conditions with and or or:
firm query 'from invoice | where status == "draft" or status == "sent"'
firm query 'from task | where is_completed == false and priority > 5'
New features
- Source command -
firm source <type> <id>locates the source file where an entity or schema is defined - Schema in get command -
firm get schema <name>displays schema details - Documentation site - mdbook-based docs deployed to GitHub Pages
Improvements
- Schema display now shows allowed enum values
- Invalid queries (unsupported operators, unknown entity types, invalid dates) now return descriptive errors instead of failing silently
firm listoutputs only entity IDs or schema names for a cleaner overview
⚠️ Breaking changes
Query return type: Query::execute now returns a QueryResult enum (entities or aggregation result) instead of Vec<&Entity>.
Full changelog: https://github.com/42futures/firm/blob/0.5.0/CHANGES.md
Firm 0.4.0
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
Firm 0.3.0
The first early release of Firm to the public.
The CLI is provided, cross-compiled for macOS, Linux and Windows. I have only tested macOS so far, so feedback on whether it works on other platforms is appreciated.
At the time of writing, Firm features:
- A declarative DSL for defining business entities
- Core data structures and graph management
- Parsing, converting and generating DSL to/from core entities
- A CLI to add, get, list and explore relationships for entities