| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
oden is a language-neutral application runtime for WebAssembly components. odenctl is its control plane and deployment CLI. This repository contains both. The runtime embeds Wasmtime 48.0.2 and runs components built from Rust, MoonBit, or another language with compatible Component Model bindings.
The product workspaces are crates/oden and crates/odenctl. Build either independently with just oden-build or just odenctl-build; see the workspace guide for shared code and development tasks.
Documentation · Runtime quickstart · Deploy with odenctl · Rename guide
| Tool | Use it for | Entry point |
|---|---|---|
| oden | Run commands, serve HTTP, retain service state, test exports, rebuild during development | oden run, serve, test, dev |
| odenctl | Upload components, create deployments, publish routes, manage platform resources | pnpm odenctl |
| Deployment gateway | Route HTTP requests from a published snapshot to Wasmtime | just runtime |
| oden-host | Compile/invoke components and serve the gateway's internal protocol | Built by just rust-build |
oden fills the application-runtime role of Node.js for Wasm components. It does not currently execute JavaScript/TypeScript, resolve npm packages, or implement Node.js APIs. Running a compiled component with oden does not require Node.js. The management CLI and deployment gateway require Node.js 24 or later.
Install Git, Rust/Cargo 1.95 or later, and a native linker:
git clone https://github.com/mizchi/odenctl.git
cd odenctl
bash install.sh
export PATH="$HOME/.local/bin:$PATH"
oden --version
oden run examples/minimal-command/command.watThe WAT command exits successfully without output. oden accepts .wasm and .wat files in Component Model format directly. A bare core Wasm module must first be adapted into a component.
The installer builds this checkout. Use --prefix for another location, --with-odenctl to include the management CLI, and --force when updating an existing installation. See installation.
To start a Rust application with retained state and background tasks:
rustup target add wasm32-wasip2
oden dev examples/service-rust/app.jsonFrom another terminal, run curl http://127.0.0.1:8080 twice. The JSON count increases while starts stays at 1. Ctrl-C drains accepted requests and stops the service. For MoonBit setup and the equivalent app, follow the quickstart.
Generate an independent app with oden init my-app --language rust or --language moonbit. Each project includes its SDK and WIT contracts. See writing services.
| Mode | Command | Instance lifetime | HTTP response delivery |
|---|---|---|---|
| Command | oden run app.wasm | One execution, then exit | Not an HTTP server |
| HTTP | oden serve app.wasm | Fresh Store/instance per request | Streams within body and deadline limits |
| Resident service | oden serve app.wasm --resident or oden start app.json with mode: service | One instance for startup, requests, idle work, and shutdown | Buffered; handlers run serially |
| Deployment gateway | just runtime with a published HTTP deployment | Fresh Store/instance per cache miss | Buffered; optional public response cache |
Resident memory is lost on restart. The standalone runtime can call celld Durable Objects through oden:durable/objects@0.1.0; that does not persist a Wasmtime instance or provision a celld fleet. See Durable Objects.
The control plane stores projects, immutable artifacts/deployments, and mutable route pointers. Runtime gateways consume route snapshots; guest requests do not need a control-plane database query. Install the management CLI with bash install.sh --with-odenctl --force, or run it from this checkout with pnpm:
pnpm install --frozen-lockfile
pnpm odenctl --helpFollow the local deployment walkthrough to start both processes, create a project, publish a standard WASI HTTP component, and request it through the gateway. odenctl dev creates a deployment preview; oden dev app.json builds and watches a local application.
The static-site example demonstrates embedded HTML/CSS/JavaScript/PNG assets, gateway caching, release updates, and rollback.
| Capability | Status and scope |
|---|---|
| WASI CLI and HTTP | WASIp2/WASIp3 commands and HTTP; standard HTTP 0.3 for deployment nodes |
| Application development | Manifests, init, build, start, dev, inspect, check |
| Test runner | Exported -test functions from WAT, Rust, or MoonBit; fresh instances and deadlines |
| Rust and MoonBit SDKs | Lifecycle, HTTP, files, environment, timers, telemetry, celld calls; explicit host grants |
| Telemetry | Standalone host/guest traces, metrics, and logs; Node gateway request traces and counters |
| Public response cache | Optional bounded cache per Node gateway, deployment invalidation, authenticated local purge |
| Static sites | Files embedded in a component; real browser release/rollback example |
| AWS deployment | Standalone ECS/Fargate image and Terraform; local container tests and kumo validation with documented emulator limits |
| Guest Cache API, dynamic component loader, image transformations, CDN provisioning | Proposed; see the edge platform design |
Control-plane KV, secret, and Durable Object records remain management APIs. Their removed guest bindings are not supported by the standard WASI deployment adapter. Use the runtime configuration for standalone permissions and the deployment guide for gateway limits.
For development setup, TDD, repository tests, and WIT/SDK changes, see the contribution guide and developer documentation.
Upgrading from wasmplane changes command names, environment variables, and custom WIT package names. Existing components using those WIT contracts must be rebuilt. Read the migration guide before upgrading a running system.
| Back | FazBrowse Home | New Git URL |