Moose

Getting Started

5-Minute Quickstart

5-Minute Quickstart

5 minute setup
Zero config
Local ClickHouse, Redpanda, and APIs

Viewing:

Prerequisites

Before you start

Node.js 20+

Required for TypeScript development

Download →

Docker Desktop

For local development environment

Download →

macOS/Linux

Windows works via WSL2

Already have ClickHouse running?

Skip the tutorial and add Moose as a layer on top of your existing database


Step 1: Install Moose (30 seconds)

One-line install
bash -i <(curl -fsSL https://fiveonefour.com/install.sh) moose
You should see:

Moose vX.X.X installed successfully!


Step 2: Create Your Project (1 minute)

Initialize your project

Terminal
moose init my-analytics-app typescript
cd my-analytics-app
npm install

Start your development environment

Terminal
moose dev

Step 3: Understand Your Project (1 minute)

Your project includes a complete example pipeline:

    • index.ts
      • models.ts
      • transform.ts

Browse your project files

Review the files located within your /app directory to see start understanding how data flows from ingestion to analytics APIs.


Step 4: Test Your Pipeline (2 minutes)

Send test data

Open a new terminal window to run these commands
Open a new terminal window
moose workflow run generator

You should see logs like:

POST ingest/Foo
[POST] Data received at ingest API sink for Foo
Received Foo_0_0 -> Bar_0_0 1 message(s)
[DB] 17 row(s) successfully written to DB table (Bar)

Query your data

Terminal
curl "http://localhost:4000/consumption/bar"

You should see JSON data with your processed events.

Try adding a query parameter!
curl "http://localhost:4000/consumption/bar?limit=5"

Explore with OpenAPI UI

  1. Install the OpenAPI (Swagger) Viewer extension in your IDE
  2. Open .moose/openapi.yaml in your IDE
  3. Click the “Preview” icon to launch the interactive API explorer
  4. Test the POST /ingest/Foo and GET /consumption/bar endpoints

Step 5: Hot Reload Schema Changes (1 minute)

  1. Open app/ingest/models.ts
  2. Add a new field to your data model:
app/ingest/models.ts
export interface Foo {
  id: Key<string>;
  timestamp: Date;
  data: string;
  newField: string; // Add this line
}
  1. Save the file and watch your terminal

You should see Moose automatically update your infrastructure:

~ Table Foo with column changes: [Added(Column { name: "newField", data_type: String })]
~ API Endpoint: Foo - Updated validation schema
~ Topic: Foo - Schema updated

Schema changes are automatically applied across your stack.

That's it!

Your API, database schema, and streaming topic all updated automatically. Try adding another field with a different data type.

Recap

You’ve built a complete analytical backend with:

What's Working

Type-safe data ingestion API

Real-time stream processing

ClickHouse database with auto-schema

Analytics API with filtering

Hot-reload development

Where to Go Next?

Need Help?