This monorepo embraces a polyglot philosophy, using the best tool for each job:
- Go for the CLI (excellent for command-line tools, great ecosystem)
- Rust for WebAssembly components (performance, safety, WASM support)
- Multiple languages for SDKs (meet developers where they are)
- Go 1.21+ for the FTL CLI
- Rust 1.75+ with cargo for WebAssembly components
- Make for build automation
- cargo-component for building WebAssembly components
cargo install cargo-component
- Spin CLI for testing WebAssembly applications
curl -fsSL https://developer.fermyon.com/downloads/install.sh | bash
Build everything:
make allThis will:
- Build the FTL CLI (Go)
- Build WebAssembly components (Rust)
make devThis runs formatting, builds the CLI, and runs tests.
make testmake fmtmake lint# Using make (recommended)
make build
# Or directly with Go
go build -o bin/ftl ./cmd/ftlThe CLI binary will be at bin/ftl
# Using make
make build-components
# Or directly with cargo-component
cargo component build --workspace --release --target wasm32-wasip1Components will be in target/wasm32-wasip1/release/
Each SDK can be built/tested independently:
Rust SDK:
cd sdk/rust
cargo build
cargo testPython SDK:
cd sdk/python
pip install -e .
pytestTypeScript SDK:
cd sdk/typescript
npm install
npm run build
npm testGo SDK:
cd sdk/go
go build ./...
go test ./...Install the FTL CLI to your system:
# Install to ~/.local/bin (user installation)
make install
# Install to /usr/local/bin (system-wide, requires sudo)
make install-systemRun all tests:
make testRun specific test suites:
# Test Go CLI only
make test-cli
# Test Rust SDKs only
make test-sdk
# Test WebAssembly components
make test-componentsGenerate coverage reports:
make coverage
# Open coverage-go.html in your browserIf you see warnings about cargo-component not being installed:
cargo install cargo-componentIf you see warnings about spin not being installed:
curl -fsSL https://developer.fermyon.com/downloads/install.sh | bashIf you encounter Go module problems:
go mod tidy
go mod downloadEnsure you have the correct Rust toolchain:
rustup update
rustup target add wasm32-wasip1For optimized release builds:
# Build everything in release mode
make all
# The CLI will have version information embedded:
./bin/ftl --versionThe project supports cross-platform builds:
All components build natively on macOS.
All components build natively on Linux.
- Go CLI builds natively
- Rust components require WSL2 or Windows-native Rust toolchain
- Use Git Bash or WSL2 for make commands
See CONTRIBUTING.md for development guidelines and contribution process.