Flexible Streaming Ingest, Web App Integration, and Infra Visibility Upgrades. This two-week release pushes MooseStack forward on three fronts: flexible high-volume ingestion, developer experience for full-stack apps, and operational visibility.
Moose gained the ability to handle arbitrary JSON ingest, Kafka-backed streaming, IcebergS3 for data lake integration, and powerful modeling tools like materialized columns and per-column codecs. Meanwhile, Boreal added storage visualizations so teams can see how their data grows.
Define tables with ClickHouse's Kafka engine as an alternative consumer that reads directly from Kafka topics into ClickHouse, bypassing Moose's built-in streaming consumer. Use materialized views to transform and route the data. This is an experimental engine from ClickHouse.
// Create a Kafka engine table that consumes from a topicexport const KafkaSourceTable = new OlapTable<KafkaTestEvent>( "KafkaTestSource", { engine: ClickHouseEngines.Kafka, brokerList: "redpanda:9092", topicList: "KafkaTestInput", groupName: "moose_kafka_consumer", format: "JSONEachRow", },);PR: | Docs: |
Configure tables on Apache Iceberg with S3 storage.
export const AnalyticsEventsTable = new OlapTable<AnalyticsEvent>( "AnalyticsEvents", { engine: ClickHouseEngines.IcebergS3, path: "s3://my-data-lake/analytics/events/", format: "Parquet", awsAccessKeyId: "{{ AWS_ACCESS_KEY_ID }}", awsSecretAccessKey: "{{ AWS_SECRET_ACCESS_KEY }}", compression: "zstd", },);PR: #2978 | Docs: OlapTable | ClickHouse Iceberg Engine
Define materialized columns to automatically compute derived values at ingestion time—date extractions, hash functions, JSON transformations—without separate aggregations.
Why it matters: Cheaper, faster queries at scale. Materialized columns move expensive expressions into ingestion time so queries become simple scans over precomputed fields. This directly impacts infrastructure cost and query latency for time-series, metrics, and logs.
export interface MaterializedTest { id: Key<string>; timestamp: DateTime; userId: string; // Materialized columns - computed at ingestion time eventDate: string & ClickHouseMaterialized<"toDate(timestamp)">; userHash: UInt64 & ClickHouseMaterialized<"cityHash64(userId)">;}PR: #3051 | Docs: Supported types | ClickHouse Materialized Columns
New project template demonstrating Fastify framework with Moose, plus fixed WebApp support for Fastify's async initialization.
moose init <project-name> --template fastifyPR: #3068, #3061 | Docs: Fastify integration | Fastify template
cityHash64 for better data distribution in high-cardinality scenarios. PR #3031 | ClickHouse Primary KeysClickHouseCodec<"..."> type annotations. PR #3035 | ClickHouse CompressionMooseModel with {Column:col} format. PR #3024MOOSE_CLIENT_ONLY=true to import Moose data models without runtime, fixing HMR errors. PR #3057 | API Frameworksmoose ls – List web applications alongside tables, streams, and APIs with moose ls --type web_apps. PR #3054.npmrc files that caused npm install and Docker builds to fail when creating new MCP server projects. #3084, #3082, #3081server.tool API with Zod validation. #3075['a', 'b'] would fail to parse. Added fallback parser to handle ClickHouse-specific SQL. #3034moose peek and moose query failed on tables with LowCardinality(String) columns. Switched to HTTP-based ClickHouse client which supports all column types. #3025DateTimeString and DateTime64String<P> types that keep timestamps as strings to preserve full precision. New experimental page showing table storage usage over time with interactive charts. When enabled, a "Database" tab appears in your branch navigation with per-table storage area charts, date range filters, and granularity options (minute/hour/day).
Why it matters: Watch storage growth over time. Time-series charts of table sizes are crucial for capacity planning, catching runaway growth, and understanding which workloads drive storage cost.

This feature is behind an experimental flag. Contact support to enable it for your organization.
--clickhouse-url for ClickHouse commands (old flag still works). Improved connection string parsing for native protocol URLs. PR #3022