February 28, 2026
This week Moose ships the new moose add command for streamlined component installation and a Semantic Layer API that lets you define metrics and dimensions once and expose them across REST APIs, AI tools, and MCP interfaces. On the Fiveonefour side, comprehensive query analysis dashboards land with performance filtering, environment variable support arrives for deployments with secure masking and organizational precedence, and a new CLI surfaces deployment and infrastructure commands.
Highlights
- New: Component installation via
moose addcommand - New: Semantic Layer API for metrics and dimensions
- New: Query analysis dashboard with performance filtering
- New: Environment variable support for deployments
Moose
New Features
Component installation via moose add command (@DatGuyJonathan)
New moose add command installs pre-built components (MCP server, chat panel) into existing projects with manifest-driven file copying and dependency management.
# Add MCP server to existing MooseStack service
moose add mcp-server --dir packages/moosestack-service
# Add chat UI to Next.js frontend
moose add chat --dir packages/web-app
# Generate API key for authentication
moose generate hash-token
# Start development servers
pnpm run devDocs: Moose CLI
Semantic Layer API for metrics and dimensions (@georgevanderson, @oatsandsugar) New Semantic Layer API defines metrics, dimensions, and filters once and exposes them as REST APIs, AI SDK tool calls, and MCP tools. Includes type-safe query modeling with composable helpers, fluent SQL builders, and validation utilities.
import { defineQueryModel, buildQuery, count, sum, sql } from "@514labs/moose-lib";import { OrdersTable } from "../datamodels/orders"; export const orderMetrics = defineQueryModel({ name: "query_orders", description: "Order analytics: revenue, count, avg order value by time/region", table: OrdersTable, dimensions: { region: { column: "region" }, day: { expression: sql`toDate(created_at)`, as: "day" }, }, metrics: { totalOrders: { agg: count(), as: "totalOrders" }, revenue: { agg: sum(OrdersTable.columns.amount), as: "revenue" }, avgOrderValue: { agg: sql`avg(amount)`, as: "avgOrderValue" }, }, filters: { region: { column: "region", operators: ["eq", "in"] as const }, createdAt: { column: "created_at", operators: ["gte", "lte"] as const }, }, defaults: { dimensions: ["day"], metrics: ["totalOrders", "revenue"] },}); export const ordersApi = async (params: { region?: string, start?: string }) => { return await buildQuery(orderMetrics) .dimensions(["day", "region"]) .metrics(["totalOrders", "revenue"]) .filter("region", "eq", params.region) .filter("createdAt", "gte", params.start) .execute(client.query);};Docs: Semantic Layer
Seed filtering configuration for OLAP tables (@phiSgr)
OLAP tables can specify seedFilter with limit and where clauses to control data seeding from remote sources. CLI flags --limit and --all override table-level settings.
import { OlapTable } from "@514labs/moose-lib"; interface GitCommit { hash: string; author: string; files_added: number; message: string; timestamp: Date;} export const commitsTable = new OlapTable<GitCommit>("commits", { orderByFields: ["hash"], seedFilter: { limit: 100, where: "author = 'torvalds' AND files_added > 5" }}); // CLI usage:// moose seed clickhouse --table commits # Uses seedFilter config// moose seed clickhouse --table commits --limit 50 # Overrides limit to 50// moose seed clickhouse --table commits --all # Ignores all limitsDocs: Model Table
ClickHouse projection support with _part_offset (@LucioFranco)
Adds projection support for alternative data ordering within table parts. Projections store data in different sort orders or pre-aggregated forms to speed up queries on non-primary-key columns.
import { OlapTable } from "@514labs/moose-lib"; interface UserEvents { id: string; userId: string; timestamp: Date; eventType: string; value: number;} export const userEventsTable = new OlapTable<UserEvents>("user_events", { orderByFields: ["id"], projections: [ { name: "proj_by_user", body: "SELECT _part_offset ORDER BY userId" }, { name: "proj_by_ts", body: "SELECT _part_offset ORDER BY timestamp" }, { name: "proj_aggregated", body: "SELECT userId, sum(value) as total ORDER BY userId" }, ],});Docs: Projections
Data lineage tracking for APIs and web apps (@callicles) Automatically tracks which infrastructure components APIs and web apps read from and write to, enabling dependency analysis, impact assessment, and data flow visualization.
Docs: Apis
Improvements
- Migration ignore for LowCardinality String differences: New ignore operation suppresses migration warnings when column types differ only by LowCardinality wrapper, reducing noise when ClickHouse automatically optimizes String columns. (@hh2110) Docs: Migrations
- Documentation improvements: Updated CLI documentation with new command structure. Added GitHub edit links in sidebar, fixed API reference headings in TOC, and included WSL performance warnings. (@callicles, @oatsandsugar, @LucioFranco) Docs: Moose CLI
- TypeScript compilation and version compatibility: Docker packaging honors custom tsconfig outDir settings. CLI validates @514labs/moose-lib version matches CLI version before running commands to prevent runtime errors. (@phiSgr) Docs: Typescript
Bug Fixes
- Fix page scroll for MCP chat component: Fixed layout overflow issue that prevented proper scrolling in the chat interface. (@DatGuyJonathan) Docs: Ai
- Fix aggregation function Merge suffix placement: Fixes -Merge suffix placement for aggregation functions with parameters (e.g.,
quantile(0.5)becomesquantileMerge(0.5)instead ofquantile(0.5)Merge). (@phiSgr) Docs: Aggregates - Fix ClickHouse SQL parameter handling and DDL parsing: Fixes SQL parameter ordering and column property parsing in ClickHouse DDL operations, resolving issues with comment and codec combinations in table migrations. (@phiSgr) Docs: Migrate
- Fix config file handling with read-only permissions: Gracefully handles externally-managed config files by skipping writes instead of failing. (@LucioFranco) Docs: Configuration
- Fix configurable ClickHouse native port in Docker Compose: Fixed Docker Compose to respect the configured native_port instead of hardcoding 9000. (@514Ben) Docs: Clickhouse
- Fix Redis port extraction from URL for Docker Compose: Docker Compose now correctly uses port from Redis URL instead of separate port field for host binding. (@514Ben) Docs: Redis
Fiveonefour Hosting
New Features
Environment variables in deployments (@onelesd) User-defined environment variables configured in the console are now injected into builds, so code that reads env vars at the top level during build (e.g. at module initialization) no longer fails. Variables resolve with org → project → branch precedence and are securely masked in build logs.
CLI deployment and infrastructure commands (@callicles) New CLI commands for fetching infrastructure maps and listing deployments. Infrastructure maps show resources and relationships with filtering. Deploy listing includes branch, status filtering, and pagination with deployment metadata.
Automatic MCP token generation for templates (@onelesd) Projects created from templates automatically generate MCP authentication tokens during setup using PBKDF2 hashing, eliminating the need to run the Moose CLI separately.
Vercel deployment synchronization (@georgevanderson) Vercel deployments now wait for Moose application deployment completion, preventing race conditions where frontend deployments complete before backend data infrastructure is ready.
Improvements
- CLI consistency and authentication improvements: Standardized project identifiers as positional args for single-object commands. Enhanced session validation with clearer error messages for invalid API keys. Updated branding from 'Boreal' to '514' throughout CLI. (@callicles, @LucioFranco)
- Enhanced repository import empty state: Improved empty state when no Moose project is found, now includes TypeScript/Python setup commands with copy buttons and getting started documentation link. (@okane16)
Bug Fixes
- Fix build log pagination limit: Added missing pagination limit to build logs fetch to prevent incomplete log display. (@LucioFranco)
- Fix read-only config file handling: Install script prevents errors when config.toml is read-only by checking write permissions before modifying. (@LucioFranco)