Skip to content

Dependency Policy

Animus enforces a strict Rust-only dependency policy. No desktop shell frameworks or native webview dependencies are permitted in the workspace.

Rust-Only Rule

Animus is a CLI-first tool. All functionality must be implemented in pure Rust without relying on platform-specific GUI frameworks.

Prohibited Packages

The following packages are explicitly prohibited:

Exact Matches

PackageReason
tauriDesktop shell framework
tauri-buildTauri build tooling
wryWebview rendering library
taoWindow management library
gtkGTK bindings
gtk4GTK4 bindings
webkit2gtkWebKit2GTK bindings
webview2Windows WebView2 bindings
webview2-comWebView2 COM bindings

Prefix Matches

PrefixReason
tauri-plugin-*Any Tauri plugin

The policy check is case-insensitive and resolves renamed dependencies (via package = "..." in Cargo.toml) to catch aliased violations.

CI Enforcement

The policy is enforced in two ways:

Integration Test

crates/orchestrator-cli/tests/rust_only_dependency_policy.rs scans every workspace member's Cargo.toml for prohibited dependencies. This test runs as part of the standard cargo test --workspace suite.

The test:

  1. Reads the workspace root Cargo.toml to enumerate all members
  2. Parses each member's Cargo.toml including [dependencies], [dev-dependencies], [build-dependencies], and [target.*.dependencies] sections
  3. Resolves renamed packages (the package field in dependency declarations)
  4. Checks each resolved package name against the prohibited list
  5. Fails with a sorted, deterministic violation report if any prohibited packages are found

GitHub Actions Workflow

.github/workflows/rust-only-dependency-policy.yml runs the policy test in CI on every push and pull request, providing an additional gate beyond local testing.

Additional Constraints

The dependency policy test also enforces the narrow Rust-only boundary: no desktop shell frameworks or transitive equivalents should enter the workspace. External web UI and transport behavior belongs in plugins, not in a bundled desktop shell.

Adding New Dependencies

When adding a new dependency to any crate:

  1. Verify it is not on the prohibited list
  2. Run cargo test -p orchestrator-cli -- rust_only_dependency_policy to confirm
  3. Prefer workspace-level dependency declarations in the root Cargo.toml for dependencies used by multiple crates
  4. Use feature flags for optional integrations (e.g., jira, linear, gitlab on orchestrator-providers)

Released under the Elastic License 2.0 (ELv2).