A modern, powerful CLI tool for running Morphe compilation plugins using WebAssembly (WASM).
Kalo CLI enables the seamless compilation of Morphe models, entities, enums, and structures across different formats using WASM plugins. The tool is designed to be extensible, supporting multiple input and output formats through a flexible configuration system.
- WASM Plugin Support: Run compiled plugins in a secure WASM sandbox
- Flexible Configuration: Define input and output specifications in a YAML configuration file
- Environment Variable Support: Configure plugins using environment variables
- Multiple Format Support: Transform between different formats (YAML, Go, PostgreSQL, TypeScript, etc.)
- Dotenv Integration: Load environment variables from
.envfiles
macOS / Linux:
curl -fsSL https://raw.githubusercontent.com/kalo-build/kalo-cli/main/install.sh | shWindows (PowerShell):
irm https://raw.githubusercontent.com/kalo-build/kalo-cli/main/install.ps1 | iex# Install directly (auto-taps the repo)
brew install kalo-build/tap/kalo
# Or manually tap first
brew tap kalo-build/tap
brew install kalo# Add the bucket (one-time)
scoop bucket add kalo https://github.com/kalo-build/scoop-bucket
# Install
scoop install kalogo install github.com/kalo-build/kalo-cli/cmd/kalo@latestDownload the latest release from GitHub Releases.
git clone https://github.com/kalo-build/kalo-cli.git
cd kalo-cli
go build -o kalo ./cmd/kalo# Install all plugins from kalo.yaml (like npm install)
kalo install
# List available pipelines
kalo list
# Run a pipeline by name
kalo run compile
# Run a pipeline by alias (if configured)
kalo run up # alias for migrate-up
kalo run down # alias for migrate-down
# Run the default compile pipeline
kalo compile
# Install a specific plugin (adds to kalo.yaml if not present)
kalo plugin install @kalo-build/plugin-morphe-go-struct| Command | Description |
|---|---|
kalo install |
Download all plugins from kalo.yaml (like npm install) |
kalo list |
List all available pipelines with descriptions |
kalo run <name> |
Run a pipeline or plugin by name or alias |
kalo compile |
Shorthand for kalo run compile |
kalo plugin install <plugin> |
Install a specific plugin from registry |
Kalo CLI uses a YAML configuration file (kalo.yaml by default) to define stores, plugins, and pipelines.
Stores define data sources and destinations:
stores:
# Local filesystem store
KA_MIGRATIONS:
format: "KA:PSQL:MIGRATION1"
type: "localFileSystem"
options:
path: "./migrations"
# Git repository store (extracts files from a git ref)
KA_GIT_MAIN:
format: "KA:MO1:YAML1"
type: "gitRepository"
options:
repoRoot: "."
ref: "main"
subPath: "morphe/registry"
# Cloud SQL database store
DB_MAIN:
format: "KA:PSQL:LIVE"
type: "cloudSqlDatabase"
options:
provider: "gcp"
connection: "$DATABASE_URL"Pipelines define multi-stage workflows:
pipelines:
compile:
description: "Compile Morphe schemas to PSQL and Go"
stages:
- name: "psql-types"
steps:
- "plugin: @kalo-build/plugin-morphe-psql-types"
migrate-up:
description: "Apply pending migrations"
alias: "up" # Enables: kalo run up
stages:
- name: "up"
steps:
- "plugin: @kalo-build/plugin-morphe-db-manager"
config:
mode: "up"Configure plugin inputs, outputs, and settings:
plugins:
"@kalo-build/plugin-morphe-db-manager":
version: "v1.0.0"
inputs:
schema:
format: "KA:MO1:PSQL1"
store: "KA_MO_PSQL"
migrations:
format: "KA:PSQL:MIGRATION1"
store: "KA_MIGRATIONS"
output:
format: "KA:PSQL:LIVE"
store: "DB_MAIN"To create a WASM plugin for Kalo CLI:
# Build a Go plugin for WASM
GOOS=wasip1 GOARCH=wasm go build -o plugins/morphe-go-struct.wasm ./path/to/pluginReleases are automated via GitHub Actions using GoReleaser. To create a new release:
# Create and push a version tag
git tag v1.2.3
git push origin v1.2.3This triggers the release workflow which:
- Builds binaries for Linux, macOS, and Windows (amd64/arm64)
- Creates a GitHub Release with the binaries
- Updates Homebrew tap and Scoop bucket formulas
Use semantic versioning:
v1.0.0- Major releasev1.1.0- Minor release (new features)v1.1.1- Patch release (bug fixes)
Tags with prerelease suffixes are automatically marked as prereleases on GitHub:
# Prerelease examples
git tag v1.0.0-alpha
git tag v1.0.0-beta.1
git tag v1.0.0-rc.1
git tag v0.0.1-dev.123Prereleases:
- Are marked as "Pre-release" on GitHub Releases
- Are not installed by the quick install scripts (which fetch "latest")
- Are not pushed to Homebrew/Scoop (package managers only get stable releases)
To test a prerelease manually, download from the Releases page.
Kalo CLI supports loading environment variables from a .env file, which can be useful for setting up paths and other configuration values.
Example .env file:
BASE_DIR=/path/to/morphe/files