1. MooseStack
  2. API Reference

On this page

Core Types`Key``JWT``ApiUtil``BaseModel``MooseClient``ApiResult`Configuration Types`OlapConfig` / `BaseOlapConfig`Infrastructure Components`OlapTable<T>``Stream<T>``IngestApi<T>``Api<T, R>``IngestPipeline<T>``MaterializedView<T>`SQL Utilities`sql` Template TagClickHouse UtilitiesTable Engine ConfigurationsTask Management`Task<T, R>``TaskConfig<T, R>``Workflow``WorkflowConfig`

API Reference

This is a comprehensive reference for @514labs/moose-lib, detailing all exported components, types, and utilities.

Core Types

Key

A type for marking fields as primary keys in data models.

// Exampleinterface MyModel {  id: Key<string>; // Marks 'id' as a primary key of type string}

JWT

A type for working with JSON Web Tokens.

// Exampletype UserJWT = JWT<{ userId: string, role: string }>;

ApiUtil

Interface providing utilities for analytics APIs.

interface ApiUtil {  client: MooseClient;  // Client for interacting with the database  sql: typeof sql;      // SQL template tag function  jwt: JWTPayload | undefined;  // Current JWT if available}

BaseModel

Not applicable in TypeScript - use TypeScript interfaces instead.

Not applicable in TypeScript - use TypeScript interfaces instead.

MooseClient

Client for interacting with ClickHouse and Temporal.

class MooseClient {  query: QueryClient;      // For database queries  workflow: WorkflowClient; // For workflow operations}

ApiResult

Not applicable in TypeScript - APIs return values directly.

Configuration Types

OlapConfig / BaseOlapConfig

Base configuration interface for OlapTable with common table configuration options.

interface BaseOlapConfig<T> {  // Optional database name (defaults to moose.config.toml clickhouse_config.db_name)  database?: string;   // Optional array of field names to order by  orderByFields?: (keyof T & string)[];   // Optional SQL expression for ORDER BY clause (alternative to orderByFields)  orderByExpression?: string;   // Optional table engine (defaults to MergeTree)  engine?: ClickHouseEngines;   // Optional settings for table configuration  settings?: { [key: string]: string };   // Optional lifecycle mode (defaults to MOOSE_MANAGED)  lifeCycle?: LifeCycle;   // Additional engine-specific fields (ver, isDeleted, keeperPath, etc.)  // depend on the engine type}

Infrastructure Components

OlapTable<T>

Creates a ClickHouse table with the schema of type T.

// Basic usage with MergeTree (default)export const myTable = new OlapTable<UserProfile>("user_profiles"); // With sorting configuration (fields)export const myConfiguredTable = new OlapTable<UserProfile>("user_profiles", {  orderByFields: ["id", "timestamp"]}); // With sorting configuration (expression)export const myConfiguredTableExpr = new OlapTable<UserProfile>("user_profiles_expr", {  // Equivalent to orderByFields: ["id", "timestamp"]  orderByExpression: "(id, timestamp)"}); // Disable sorting entirelyexport const myUnsortedTable = new OlapTable<UserProfile>("user_profiles_unsorted", {  orderByExpression: "tuple()"}); // For deduplication, explicitly set the ReplacingMergeTree engineexport const dedupTable = new OlapTable<UserProfile>("user_profiles", {  engine: ClickHouseEngines.ReplacingMergeTree,  orderByFields: ["id", "timestamp"],  ver: "updated_at",  // Optional: version column for keeping latest  isDeleted: "deleted"  // Optional: soft delete marker (requires ver)});

Stream<T>

Creates a Redpanda topic with the schema of type T.

// Basic usageexport const myStream = new Stream<UserEvent>("user_events"); // With configurationexport const myConfiguredStream = new Stream<UserEvent>("user_events", {  parallelism: 3,  retentionPeriod: 86400 // 1 day in seconds}); // Adding transformationsmyConfiguredStream.addTransform(  destinationStream,  (record) => transformFunction(record));

IngestApi<T>

Creates an HTTP endpoint for ingesting data of type T.

// Basic usage with destination streamexport const myIngestApi = new IngestApi<UserEvent>("user_events", {  destination: myUserEventStream});

Api<T, R>

Creates an HTTP endpoint for querying data with request type T and response type R.

// Basic usageexport const myApi = new Api<UserQuery, UserProfile[]>(  "getUserProfiles",  async (params, { client, sql }) => {    const result = await client.query.execute(      sql`SELECT * FROM user_profiles WHERE age > ${params.minAge} LIMIT 10`    );    return result;  });

IngestPipeline<T>

Combines ingest API, stream, and table creation in a single component.

// Basic usageexport const pipeline = new IngestPipeline<UserEvent>("user_pipeline", {  ingestApi: true,  stream: true,  table: true}); // With advanced configurationexport const advancedPipeline = new IngestPipeline<UserEvent>("advanced_pipeline", {  ingestApi: true,  stream: { parallelism: 3 },  table: {     orderByFields: ["id", "timestamp"]  }});

MaterializedView<T>

Creates a materialized view in ClickHouse.

// Basic usageexport const view = new MaterializedView<UserStatistics>({  selectStatement: "SELECT user_id, COUNT(*) as event_count FROM user_events GROUP BY user_id",  tableName: "user_events",  materializedViewName: "user_statistics",  orderByFields: ["user_id"]});

SQL Utilities

sql Template Tag

Template tag for creating type-safe SQL queries with parameters.

// Basic usageconst query = sql`SELECT * FROM users WHERE id = ${userId}`; // With multiple parametersconst query = sql`  SELECT * FROM users   WHERE age > ${minAge}   AND country = ${country}  LIMIT ${limit}`;

ClickHouse Utilities

Table Engine Configurations

ClickHouseEngines Enum

Available table engines:

enum ClickHouseEngines {  MergeTree = "MergeTree",  ReplacingMergeTree = "ReplacingMergeTree",  AggregatingMergeTree = "AggregatingMergeTree",  SummingMergeTree = "SummingMergeTree",  ReplicatedMergeTree = "ReplicatedMergeTree",  ReplicatedReplacingMergeTree = "ReplicatedReplacingMergeTree",  ReplicatedAggregatingMergeTree = "ReplicatedAggregatingMergeTree",  ReplicatedSummingMergeTree = "ReplicatedSummingMergeTree",  S3Queue = "S3Queue"}

ReplacingMergeTreeConfig<T>

Configuration for ReplacingMergeTree tables:

type ReplacingMergeTreeConfig<T> = {  engine: ClickHouseEngines.ReplacingMergeTree;  orderByFields?: (keyof T & string)[];  ver?: keyof T & string;  // Optional: version column for keeping latest  isDeleted?: keyof T & string;  // Optional: soft delete marker (requires ver)  settings?: { [key: string]: string };}

Replicated Engine Configurations

Configuration for replicated table engines:

// ReplicatedMergeTreetype ReplicatedMergeTreeConfig<T> = {  engine: ClickHouseEngines.ReplicatedMergeTree;  keeperPath?: string;  // Optional: ZooKeeper/Keeper path (omit for Cloud)  replicaName?: string; // Optional: replica name (omit for Cloud)  orderByFields?: (keyof T & string)[];  settings?: { [key: string]: string };} // ReplicatedReplacingMergeTreetype ReplicatedReplacingMergeTreeConfig<T> = {  engine: ClickHouseEngines.ReplicatedReplacingMergeTree;  keeperPath?: string;  // Optional: ZooKeeper/Keeper path (omit for Cloud)  replicaName?: string; // Optional: replica name (omit for Cloud)  ver?: keyof T & string;  // Optional: version column  isDeleted?: keyof T & string;  // Optional: soft delete marker  orderByFields?: (keyof T & string)[];  settings?: { [key: string]: string };} // ReplicatedAggregatingMergeTreetype ReplicatedAggregatingMergeTreeConfig<T> = {  engine: ClickHouseEngines.ReplicatedAggregatingMergeTree;  keeperPath?: string;  // Optional: ZooKeeper/Keeper path (omit for Cloud)  replicaName?: string; // Optional: replica name (omit for Cloud)  orderByFields?: (keyof T & string)[];  settings?: { [key: string]: string };} // ReplicatedSummingMergeTreetype ReplicatedSummingMergeTreeConfig<T> = {  engine: ClickHouseEngines.ReplicatedSummingMergeTree;  keeperPath?: string;  // Optional: ZooKeeper/Keeper path (omit for Cloud)  replicaName?: string; // Optional: replica name (omit for Cloud)  columns?: string[];   // Optional: columns to sum  orderByFields?: (keyof T & string)[];  settings?: { [key: string]: string };}

ClickHouseEngines Enum

Available table engines:

enum ClickHouseEngines {  MergeTree = "MergeTree",  ReplacingMergeTree = "ReplacingMergeTree",  AggregatingMergeTree = "AggregatingMergeTree",  SummingMergeTree = "SummingMergeTree",  ReplicatedMergeTree = "ReplicatedMergeTree",  ReplicatedReplacingMergeTree = "ReplicatedReplacingMergeTree",  ReplicatedAggregatingMergeTree = "ReplicatedAggregatingMergeTree",  ReplicatedSummingMergeTree = "ReplicatedSummingMergeTree",  S3Queue = "S3Queue"}

ReplacingMergeTreeConfig<T>

Configuration for ReplacingMergeTree tables:

type ReplacingMergeTreeConfig<T> = {  engine: ClickHouseEngines.ReplacingMergeTree;  orderByFields?: (keyof T & string)[];  ver?: keyof T & string;  // Optional: version column for keeping latest  isDeleted?: keyof T & string;  // Optional: soft delete marker (requires ver)  settings?: { [key: string]: string };}

Replicated Engine Configurations

Configuration for replicated table engines:

// ReplicatedMergeTreetype ReplicatedMergeTreeConfig<T> = {  engine: ClickHouseEngines.ReplicatedMergeTree;  keeperPath?: string;  // Optional: ZooKeeper/Keeper path (omit for Cloud)  replicaName?: string; // Optional: replica name (omit for Cloud)  orderByFields?: (keyof T & string)[];  settings?: { [key: string]: string };} // ReplicatedReplacingMergeTreetype ReplicatedReplacingMergeTreeConfig<T> = {  engine: ClickHouseEngines.ReplicatedReplacingMergeTree;  keeperPath?: string;  // Optional: ZooKeeper/Keeper path (omit for Cloud)  replicaName?: string; // Optional: replica name (omit for Cloud)  ver?: keyof T & string;  // Optional: version column  isDeleted?: keyof T & string;  // Optional: soft delete marker  orderByFields?: (keyof T & string)[];  settings?: { [key: string]: string };} // ReplicatedAggregatingMergeTreetype ReplicatedAggregatingMergeTreeConfig<T> = {  engine: ClickHouseEngines.ReplicatedAggregatingMergeTree;  keeperPath?: string;  // Optional: ZooKeeper/Keeper path (omit for Cloud)  replicaName?: string; // Optional: replica name (omit for Cloud)  orderByFields?: (keyof T & string)[];  settings?: { [key: string]: string };} // ReplicatedSummingMergeTreetype ReplicatedSummingMergeTreeConfig<T> = {  engine: ClickHouseEngines.ReplicatedSummingMergeTree;  keeperPath?: string;  // Optional: ZooKeeper/Keeper path (omit for Cloud)  replicaName?: string; // Optional: replica name (omit for Cloud)  columns?: string[];   // Optional: columns to sum  orderByFields?: (keyof T & string)[];  settings?: { [key: string]: string };}

Task Management

Task<T, R>

A class that represents a single task within a workflow system.

// No input, no outputexport const task1 = new Task<null, void>("task1", {  run: async () => {    console.log("No input/output");  },  retries: 3,  timeout: "30s"}); // With input and outputexport const task2 = new Task<InputType, OutputType>("task2", {  run: async (ctx) => {    return process(ctx.input);  },  onComplete: [nextTask]});

TaskConfig<T, R>

Configuration options for tasks.

interface TaskConfig<T, R> {  // The main function that executes the task logic  run: (context: TaskContext<T>) => Promise<R>;    // Optional array of tasks to execute after this task completes  onComplete?: (Task<R extends void ? null : R, any> | Task<R extends void ? null : R, void>)[];   // Optional function that is called when the task is cancelled.  onCancel?: (context: TaskContext<T>) => Promise<void>;    // Optional timeout duration (e.g., "30s", "5m", "never")  timeout?: string;    // Optional number of retry attempts  retries?: number;}

Workflow

A class that represents a complete workflow composed of interconnected tasks.

const myWorkflow = new Workflow("getData", {  startingTask: callAPI,  schedule: "@every 5s", // Run every 5 seconds  timeout: "1h",  retries: 3});

WorkflowConfig

Configuration options for defining a workflow.

interface WorkflowConfig {  // The initial task that begins the workflow execution  startingTask: Task<null, any> | Task<null, void> | Task<any, any> | Task<any, void>;    // Optional number of retry attempts  retries?: number;    // Optional timeout duration (e.g., "10m", "1h", "never")  timeout?: string;    // Optional cron-style schedule string  schedule?: string;}

Export Required

Ensure your Infrastructure Components is correctly exported from your app/index.ts file.

Example: export { myTable, myStream, myApi, myWorkflow, myTask, myPipeline, myView }

Learn more about export pattern: local development / hosted.

Important: The following components must be exported from your app/index.ts (TypeScript) or imported into main.py (Python) for Moose to detect them:

  • OlapTable instances
  • Stream instances
  • IngestApi instances
  • Api instances
  • IngestPipeline instances
  • MaterializedView instances
  • Task instances
  • Workflow instances

Configuration objects and utilities (like DeadLetterQueue, Key, sql) do not need to be exported as they are used as dependencies of the main components.

Note: The keeperPath and replicaName parameters are optional. When omitted, Moose uses smart defaults that work in both ClickHouse Cloud and self-managed environments (default path: /clickhouse/tables/{uuid}/{shard} with replica {replica}). You can still provide both parameters explicitly if you need custom replication paths.

Note: The keeperPath and replicaName parameters are optional. When omitted, Moose uses smart defaults that work in both ClickHouse Cloud and self-managed environments (default path: /clickhouse/tables/{uuid}/{shard} with replica {replica}). You can still provide both parameters explicitly if you need custom replication paths.

  • Overview
  • Quick Start
  • Templates / Examples
Fundamentals
  • Moose Runtime
  • MooseDev MCP
  • Data Modeling
MooseStack in your App
  • App / API frameworks
Modules
  • Moose OLAP
  • Moose Streaming
  • Moose Workflows
  • Moose APIs
Deployment & Lifecycle
  • Moose Migrate
  • Moose Deploy
Reference
  • API Reference
  • Data Types
  • Table Engines
  • CLI
  • Configuration
  • Observability Metrics
  • Help
  • Changelog
Contribution
  • Documentation
  • Framework
FiveonefourFiveonefour
Fiveonefour Docs
MooseStackTemplates
Changelog
Source506