Skip to content

Development Environment

Document ID: IMPL-001
File Path: docs/19-implementation-guide/development-environment.md
Version: 2.0.0
Status: Current
Owner: Engineering Team
Last Updated: 2026-07-28


How to set up a local development environment for Wovyr.

This document was rewritten on 2026-07-28 to describe what the repository actually contains. The previous revision listed a NestJS BFF, pnpm, cargo nextest, a devcontainer, and a make run-svc SVC=… multi-service layout — none of which exist; Wovyr is a single Rust workspace producing one binary, plus an Angular dashboard.


ToolRequired?Purpose
Rust 1.85+ (Edition 2024)yesBuilds everything (ADR-0002). MSRV 1.85; developed against 1.93.
Node.js 20+ (npm)dashboard/SDK work onlyAngular dashboard, TypeScript SDK, website. npm, not pnpm.
wasm32-wasip1 targetplugin work only`wovyr plugin new
DockeroptionalContainer/gVisor sandbox backends and their integration tests; the Compose stack (compose). Tests skip cleanly when absent.
Postgres / Qdrant / RedisoptionalOnly for the capability-gated integration tests of those backends.

There is no devcontainer and no committed .vscode/ settings.

Nothing in the core loop needs Docker or a model API key: the deterministic mock provider makes build/test/dev/run-hello work fully offline.


Terminal window
git clone https://github.com/punarduttrajput/wovyr && cd wovyr
make setup

make setup adds the rustfmt/clippy components and the wasm32-wasip1 target, then builds the workspace. It is idempotent. There are no Git hooks — run make lint yourself before pushing (CI gates on exactly what that target runs).

If a build fails with attempting to make an HTTP request, but --offline was specified, your ~/.cargo/config.toml sets [net] offline = true. Override it for the first build, which must populate the dependency cache:

Terminal window
cargo build --workspace --config net.offline=false

Once ~/.cargo is warm, plain cargo build works offline.


Terminal window
make dev # the all-in-one server on 127.0.0.1:8080
make run-hello # one agent, end to end, with streaming output

make dev runs wovyr dev — the embedded single-node server (HTTP API + workflow engine + memory + durable state under ~/.wovyr). It does not start Compose backends, seed a tenant, or serve the dashboard; those are separate:

Terminal window
make compose-up # wovyr + Postgres + Qdrant containers
make dashboard-dev # Angular dashboard (proxies to a server on :8080)

WOVYR_ALLOW_ANONYMOUS=1 (which make dev sets) skips credential setup for local work. It is refused on any non-loopback bind, so it cannot be exposed to a network — see auth for a real deployment.


Configuration is environment-driven; there is no .env.example in the repo. The variables each subsystem reads are documented where that subsystem is (deployment for the server, wovyr_config::env for the shared WOVYR_* layer).

For provider keys during development, export OPENAI_API_KEY or ANTHROPIC_API_KEY in your shell — never commit them (secret management). With neither set, the gateway resolves the mock provider and logs that it did.


  • rust-analyzer for Rust. No editor settings are committed — configure yours as you like; cargo fmt/cargo clippy are the only style authority (see coding standards).
  • The dashboard uses Angular’s own toolchain; there is no committed ESLint/Prettier config at the repo root.

Terminal window
make build # cargo build --workspace
make test # cargo test --workspace
make lint # clippy -D warnings + fmt --check (what CI gates on)
make fmt # cargo fmt --all
make clean # cargo clean

Narrower loops, run directly:

Terminal window
cargo test -p wovyr-provider # one crate
cargo test -p wovyr-agent --test tool_loop # one integration-test file
cargo test -p wovyr-tools --features wasi # a feature-gated backend

Feature-gated code is not compiled by a plain cargo build. CI runs cargo hack clippy --each-feature, so a new feature-gated module will be linted under -D warnings on your PR even if it compiled fine locally. The exception is mistralrs (excluded — too heavy a compile).

There is no wovyr doctor command.


SymptomCause
attempting to make an HTTP request, but --offline was specifiedThe offline cargo config — see §3.1.
skipping: … in test outputA capability-gated test with its backend absent (Docker/Postgres/Qdrant/Redis/wasm32-wasip1). Expected locally; CI fails on these lines so they can’t silently skip there.
Sandbox integration tests not runningDeliberate — they need the sandbox-integration-tests feature. A plain cargo test --workspace compiles none of them.
Dashboard build fails on a fresh checkoutIt depends on @wovyr/ui-react via a file: path; make dashboard-* builds that first via npm pre* hooks. Use those targets rather than bare ng.
A test passes alone but fails in cargo test --workspaceShared state. Server tests must build state via AppState::for_test(), not from_env() (which resolves real paths under ~/.wovyr); a nested cargo invocation must clear CARGO_MAKEFLAGS.

There is no sccache configuration committed; builds are plain cargo.



VersionDateDescription
2.0.02026-07-28Rewritten against the real repository: removed the NestJS BFF, pnpm, cargo nextest, devcontainer, Git hooks, .env.example, make run-svc, wovyr doctor, and sccache references (none exist). Added the offline-cargo override, the optional-vs-required prerequisite split, feature-gated test guidance, and a troubleshooting table.
1.0.02026-06-27Initial Development Environment guide