bash -i <(curl -fsSL https://fiveonefour.com/install.sh) mooseInitializes a new Moose project.
moose init <name> --template <template> [--location <location>] [--no-fail-already-exists]<name>: Name of your app or service<template>: Template to use for the project--location: Optional location for your app or service--no-fail-already-exists: Skip the directory existence checkLists available templates for project initialization.
moose template listBuilds your Moose project.
moose build [--docker] [--amd64] [--arm64]--docker: Build for Docker--amd64: Build for AMD64 architecture--arm64: Build for ARM64 architectureStarts a local development environment with hot reload and automatic infrastructure management.
moose dev [--mcp] [--docker]--mcp: Enable or disable the MCP (Model Context Protocol) server (default: true). The MCP server provides AI-assisted development tools at http://localhost:4000/mcp. See MCP Server documentation for details.--docker: Use Docker for infrastructure (default behavior in dev mode)The development server includes:
Starts Moose in production mode for cloud deployments.
moose prodChecks the project for non-runtime errors.
moose check [--write-infra-map]Clears temporary data and stops development infrastructure.
moose cleanSeed your local ClickHouse from a remote ClickHouse instance.
moose seed clickhouse [--connection-string <CONNECTION_STRING>] [--table <name>] [--limit <n> | --all]--connection-string: Remote ClickHouse connection string. If omitted, the CLI uses MOOSE_SEED_CLICKHOUSE_URL.--table: Seed only the specified table (default: all Moose tables).--limit: Copy up to N rows (mutually exclusive with --all). Large limits are automatically batched.--all: Copy entire table(s) in batches (mutually exclusive with --limit).Connection String Format: The connection string must use ClickHouse native protocol:
# ClickHouse native protocol (secure connection)
clickhouse://username:password@host:9440/databaseImportant:
remoteSecure() function. The remote ClickHouse server must have the native TCP port accessible (typically port 9440 for secure connections).--table <name> to seed a specific table that exists in both local and remote databases.User Experience:
Notes:
export MOOSE_SEED_CLICKHOUSE_URL='clickhouse://username:password@host:9440/database'Truncate tables or delete the last N rows from local ClickHouse tables.
moose truncate [TABLE[,TABLE...]] [--all] [--rows <n>]TABLE[,TABLE...]: One or more table names (comma-separated). Omit to use --all.--all: Apply to all non-view tables in the current database (mutually exclusive with listing tables).--rows <n>: Delete the last N rows per table; omit to remove all rows (TRUNCATE).Notes:
--rows, the command uses the table ORDER BY when available; otherwise it falls back to a timestamp heuristic.View Moose logs.
moose logs [--tail] [--filter <search_string>]--tail: Follow logs in real-time--filter: Filter logs by specific stringView Moose processes.
moose psView Moose primitives & infrastructure.
moose ls [--limit <n>] [--version <version>] [--streaming] [--type <type>] [--name <name>] [--json]--limit: Limit output (default: 10)--version: View specific version--streaming: View streaming topics--type: Filter by infrastructure type (tables, streams, ingestion, sql_resource, consumption)--name: Filter by name--json: Output in JSON formatView live metrics from your Moose application.
moose metricsView data from a table or stream.
moose peek <name> [--limit <n>] [--file <path>] [-t|--table] [-s|--stream]<name>: Name of the table or stream to peek--limit: Number of rows to view (default: 5)--file: Output to a file-t, --table: View data from a table (default if neither flag specified)-s, --stream: View data from a stream/topicExecute arbitrary SQL queries against your ClickHouse database during development.
# Direct query
moose query "SELECT count(*) FROM users"
# From file
moose query -f queries/analysis.sql
# From stdin
cat query.sql | moose query
# With limit
moose query "SELECT * FROM events" --limit 100<query>: SQL query string to execute (optional if using --file or stdin)-f, --file <PATH>: Read query from file-l, --limit <NUM>: Maximum rows to return (default: 10000)Requirements:
moose dev to be runningOutput:
Use the -c/--format-query flag to format SQL queries as code literals instead of executing them:
# Format as Python (raw string)
moose query -c python "SELECT * FROM users WHERE email REGEXP '[a-z]+'"
# Output:
# r"""
# SELECT * FROM users WHERE email REGEXP '[a-z]+'
# """
# Format as TypeScript (template literal)
moose query -c typescript "SELECT * FROM events"
# Output:
# `
# SELECT * FROM events
# `
# Works with file input
moose query -c python -f my_query.sql
# Prettify SQL before formatting (adds line breaks and indentation)
moose query -c python -p "SELECT id, name FROM users WHERE active = 1 ORDER BY name"
# Output:
# r"""
# SELECT id, name
# FROM users
# WHERE active = 1
# ORDER BY name
# """
# Use heredoc for multi-line SQL queries (no need to escape quotes)
moose query -c python -p <<EOF
SELECT
b.id,
b.name,
b.email,
COUNT(o.id) as order_count,
SUM(o.total) as total_spent
FROM local.Bar b
LEFT JOIN local.Orders o ON b.id = o.user_id
WHERE b.status = 'active'
AND o.created_at > '2024-01-01'
GROUP BY b.id, b.name, b.email
HAVING COUNT(o.id) > 5
ORDER BY total_spent DESC
LIMIT 50
EOF
# Supported languages: python (py), typescript (ts)
# Prettify flag: -p, --prettify (only works with --format-query)Use case: Iterate on SQL queries in the CLI, then format and paste into your application code without manual escaping. Use --prettify to clean up messy one-line queries.
Generate authentication tokens for API access.
moose generate hash-tokenGenerates both a plain-text Bearer token and its corresponding hashed version for authentication.
Create an ordered ClickHouse DDL plan by comparing a remote instance with your local code.
moose generate migration --url https://<remote-env> --token <api-token> --save./migrations/plan.yaml and snapshots remote_state.json and local_infra_map.json--save to output to stdout without writing filesmoose.config.toml:
[features]olap = trueddl_plan = trueRefresh EXTERNALLY_MANAGED table definitions from a remote ClickHouse instance.
moose db pull --clickhouse-url <URL> [--file-path <OUTPUT_PATH>]--clickhouse-url: ClickHouse URL (e.g., clickhouse://user:pass@host:port/database or https://user:pass@host:port/database). Native clickhouse:// is auto-converted to HTTP(S). Include ?database= or the CLI will query the current database.--file-path: Optional override for the generated external models file (defaults to app/externalModels.ts or app/external_models.py).Notes:
EXTERNALLY_MANAGED in your code are refreshed.Discover topics from a Kafka/Redpanda cluster and optionally fetch JSON Schemas from Schema Registry to emit typed external models.
moose kafka pull <bootstrap> [--path <PATH>] [--include <glob>] [--exclude <glob>] [--schema-registry <URL>]<bootstrap>: Kafka bootstrap servers, e.g. localhost:19092--path: Output directory for generated files. Defaults to app/external-topics (TS) or app/external_topics (Python).--include: Include pattern (glob). Default: *--exclude: Exclude pattern (glob). Default: {__consumer_offsets,_schemas}--schema-registry: Base URL for Schema Registry, e.g. http://localhost:8081Notes:
moose workflow <command> [options]Available workflow commands:
init <name> [--tasks <task-list>] [--task <task>...]: Initialize a new workflowrun <name> [--input <json>]: Run a workflowresume <name> --from <task>: Resume a workflow from a specific tasklist [--json]: List registered workflowshistory [--status <status>] [--limit <n>] [--json]: Show workflow historyterminate <name>: Terminate a workflowpause <name>: Pause a workflowunpause <name>: Unpause a workflowstatus <name> [--id <run-id>] [--verbose] [--json]: Get workflow statusDisplay infrastructure changes for the next production deployment.
For Moose Server deployments:
moose plan [--url <url>] [--token <token>]--url: Remote Moose instance URL (default: http://localhost:4000)--token: API token for authenticationFor Serverless deployments:
moose plan --clickhouse-url <url>--clickhouse-url: ClickHouse connection URL (e.g., clickhouse://user:pass@host:port/database)Integrate matching tables from a remote instance into the local project.
moose refresh [--url <url>] [--token <token>]--url: Remote Moose instance URL (default: http://localhost:4000)--token: API token for authenticationThis reference reflects the current state of the Moose CLI based on the source code in the framework-cli directory. The commands are organized by their primary functions and include all available options and flags.