ICN Cargo Workspace Structure in Magnitude: How the Inference Communication Node Is Organized

The ICN (Inference Communication Node) is structured as a Cargo workspace with 15 member crates under inference/, centralized versioning, shared dependencies, and feature-gated GPU backends.

The Inference Communication Node (ICN) forms the computational core of the Magnitude open-source AI engine. According to the repository source code, the entire ICN compiles as a unified Cargo workspace—a pattern that enables consistent builds, modular architecture, and flexible hardware acceleration. This article breaks down exactly how the workspace is defined, how crates share dependencies, and how feature gates control platform-specific capabilities.


Workspace Definition and Global Configuration

The root of the ICN workspace sits at inference/Cargo.toml. This file declares the [workspace] table and establishes the ground rules for all member crates.

Key workspace properties

  • resolver = "2" — Activates Cargo's newer dependency resolver, which handles duplicate versions across crates more predictably
  • members — Lists 15 member crates including icn-api, icn-engine, icn-speculative, icn-hardware, icn-contracts, and others
  • exclude — Removes llama-cpp-rs (the native implementation) from workspace resolution to isolate its build complexity

Centralized package metadata

The [workspace.package] section in inference/Cargo.toml pins three critical values for every crate:

[workspace.package]
version = "0.1.0"
edition = "2024"
license = "MIT"

Member crates reference these with version.workspace = true and edition.workspace = true, ensuring no drift between components.


Shared Dependencies and Version Locking

All ICN crates inherit identical versions of core libraries through [workspace.dependencies]. This table in inference/Cargo.toml includes:

  • anyhow — Error handling
  • axum — HTTP server framework
  • tokio — Async runtime
  • tracing — Structured logging

How member crates consume workspace dependencies


# In any crate's Cargo.toml

[dependencies]
tokio = { workspace = true, features = ["macros", "rt-multi-thread"] }
serde = { workspace = true }

Using workspace = true guarantees that icn-api, icn-engine, and all other crates link against the exact same compiled artifacts—eliminating subtle bugs from version mismatches.


Member Crate Structure and Responsibilities

Each ICN component lives in inference/crates/<crate-name>/ with its own Cargo.toml. These crates balance workspace inheritance with local specialization.

Common patterns in member Cargo.toml files

  1. Workspace package inheritance
[package]
name = "icn-api"
version.workspace = true
edition.workspace = true
license.workspace = true
  1. Binary target definitions

The icn-api crate defines an auxiliary binary for OpenAPI generation:

[[bin]]
name = "export-openapi"
path = "src/bin/export_openapi.rs"
  1. Crate-specific dependencies

Members can pull in sibling crates with feature flags:

[dependencies]
icn-contracts = { workspace = true, features = ["openapi"] }
icn-reasoning.workspace = true

Here icn-api enables the "openapi" feature only for itself, leaving other crates unaffected.


Feature Gating for Hardware Acceleration

The ICN workspace does not set default features at the workspace level. Instead, individual crates declare feature flags that cascade through dependencies.

Example: icn-engine feature flags

In inference/crates/icn-engine/Cargo.toml:

[features]
default = []
cuda = ["llama-cpp-2/cuda", "icn-hardware/cuda", "icn-speculative/cuda"]
metal = ["llama-cpp-2/metal", "icn-hardware/metal", "icn-speculative/metal"]
vulkan = ["llama-cpp-2/vulkan", "icn-hardware/vulkan", "icn-speculative/vulkan"]

Enabling a feature triggers the corresponding backend across three crates simultaneously. Build with:

cargo build -p icn-engine --features metal

Platform-specific dependencies

The icn-engine crate includes conditional dependencies for macOS:

[target.'cfg(target_os = "macos")'.dependencies]
libc = "0.2"

This pattern—repeated across relevant crates—keeps platform-specific code isolated and compilation fast on non-target platforms.


Adding a New Crate to the ICN Workspace

Create and integrate a new ICN component following these steps:


# 1. Create the crate directory

mkdir -p inference/crates/icn-new-feature
cargo new --lib inference/crates/icn-new-feature

# 2. Register in workspace root (edit inference/Cargo.toml)

# members = [

#   ...,

#   "crates/icn-new-feature",

# ]

Then configure the new crate's Cargo.toml:

[package]
name = "icn-new-feature"
version.workspace = true
edition.workspace = true
license.workspace = true

[dependencies]
tokio = { workspace = true, features = ["macros"] }
serde = { workspace = true }

Key Files in the ICN Cargo Workspace

File Purpose
inference/Cargo.toml Root workspace definition with members, resolver, and [workspace.dependencies]
inference/crates/icn-api/Cargo.toml HTTP API crate with export-openapi binary and OpenAPI feature integration
inference/crates/icn-engine/Cargo.toml Core inference engine with CUDA/Metal/Vulkan feature flags
inference/crates/icn-speculative/Cargo.toml Speculative decoding implementation, hardware-accelerated
inference/crates/icn-contracts/Cargo.toml Shared type definitions with optional OpenAPI schema generation
inference/crates/icn-hardware/Cargo.toml Hardware abstraction layer for GPU backends

Summary

  • The ICN Cargo workspace centralizes 15 crates under inference/Cargo.toml with resolver = "2"
  • [workspace.package] enforces uniform version (0.1.0), edition (2024), and license (MIT)
  • [workspace.dependencies] locks shared crate versions, preventing build inconsistencies
  • Member crates use workspace = true to inherit globals while defining local binaries and feature sets
  • Feature flags (CUDA, Metal, Vulkan) propagate across icn-engine, icn-hardware, and icn-speculative for composable acceleration
  • Platform-specific deps like macOS libc are gated with cfg(target_os) attributes

Frequently Asked Questions

How many crates are in the ICN Cargo workspace?

The ICN workspace contains 15 member crates as listed in inference/Cargo.toml. These include icn-api, icn-engine, icn-speculative, icn-hardware, icn-reasoning, icn-contracts, and supporting components for networking, storage, and observability.

Why does the ICN workspace use resolver = "2"?

Cargo's new resolver (resolver = "2") handles duplicate dependency versions more correctly than the legacy resolver. This matters for the ICN because multiple crates may transitively depend on different versions of the same crate (e.g., syn or quote), and the new resolver ensures builds are deterministic and feature unification works as expected.

How do ICN crates enable GPU acceleration?

GPU backends are controlled through feature flags defined in icn-engine/Cargo.toml. When you build with --features cuda, the flag propagates to llama-cpp-2, icn-hardware, and icn-speculative, enabling the CUDA code paths in each. The same pattern applies for Metal (macOS) and Vulkan.

Can I build a single ICN crate without compiling the entire workspace?

Yes. Use cargo build -p <crate-name> or cargo test -p <crate-name> to target individual crates. The workspace structure ensures that shared dependencies are reused from the target cache, so incremental builds remain fast even when working on isolated components.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →