Skip to content

Web Dashboard Guide ​

The Animus web dashboard ships as a set of standalone plugins. The CLI no longer bundles an in-process HTTP server. Instead, animus web discovers and spawns installed transport_backend and web_ui plugins.

Installing the Web Stack ​

Install the curated transport + UI set in one shot:

bash
animus plugin install-defaults --include-transports

Or install them individually:

bash
animus plugin install animus-ecosystem/animus-transport-http
animus plugin install animus-ecosystem/animus-transport-graphql
animus plugin install launchapp-dev/animus-web-ui

The exact curated tags live in crates/orchestrator-core/src/plugin_registry.rs, so prefer animus plugin install-defaults --include-transports when you want the checked-in set instead of unpinned latest releases.

Starting the Web UI ​

Spawn the installed transport plugins and report their bound URLs:

bash
animus web serve

Open the resolved UI URL in a browser:

bash
animus web open

animus web serve --open does both at once. If no transport plugins are installed, the command exits non-zero and prints the install commands above. With only animus-transport-http installed, animus web still starts and falls back to the API URL; adding animus-web-ui (or another plugin that advertises the $ui/web capability) upgrades that fallback to the browser UI. If an installed transport or UI plugin declares required env vars in its manifest, those vars must also be set before animus web will spawn it. Use animus plugin info <plugin-name> to inspect env_required when startup fails before a URL is reported.

How the Pieces Connect ​

PluginDefault addressServes
animus-transport-http127.0.0.1:8080REST API (/api/v1)
animus-transport-graphql127.0.0.1:8081GraphQL API, subscriptions at /graphql/ws
animus-web-ui127.0.0.1:8082The dashboard; proxies /graphql and /graphql/ws to the GraphQL transport

animus web serve starts the API transports first and passes the GraphQL transport's bound address to the web UI as api_origin, so the dashboard reaches the API even when the GraphQL transport isn't on its default port. Both transports talk to the daemon over its control socket, so start the daemon (animus daemon start) for the dashboard to show data.

The APIs have no login. The HTTP transport (v0.2.4+), the GraphQL transport and the web UI therefore answer only requests addressed to this machine: the Host header must be localhost, a 127.x.x.x address or [::1], and a browser Origin, when sent, must be one of those too. Other websites open in the same browser, including DNS-rebinding pages, get 403. To reach the HTTP transport through another host name on purpose, list it in ANIMUS_TRANSPORT_ALLOWED_HOSTS (comma-separated) in the environment of animus web serve. Under animus web serve the GraphQL transport and the web UI don't accept extra host names yet.

URL Override ​

animus web open --url https://my-tunnel.example skips plugin discovery and opens the supplied URL directly. Use --path /runs to append a sub-path to the resolved URL.

Architecture ​

The web stack lives in three external repositories: the two API transports under the animus-ecosystem org and the dashboard under launchapp-dev:

RepositoryRole
animus-transport-httpREST + SSE HTTP transport plugin
animus-transport-graphqlGraphQL transport plugin
animus-web-uiReact dashboard bundled by a wrapper plugin

The CLI discovers them through the standard plugin host registry and plugin search paths, then spawns them via PluginHost::spawn_with_options using the plugin manifest's env_required contract. Plugins return their bound URL in the transport/start reply (older plugins: the JSON-RPC initialize handshake or the optional transport/info call). See crates/orchestrator-cli/src/services/operations/ops_web.rs.

Released under the Elastic License 2.0 (ELv2).