Ara has first-class support for monorepo layouts through its workspace system. A workspace is a root manifest — either aDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/ara-home/ara/llms.txt
Use this file to discover all available pages before exploring further.
package.json or an ara.toml — that declares glob patterns pointing to member packages within the same repository. When you run ara install, Ara expands those globs, registers every discovered member as an implicit local dependency, and wires them together as live symlinks inside node_modules. No separate linking step, no stale copies — members are always in sync with their source directories.
Declaring workspaces
Theworkspaces field in your root package.json accepts an array of glob patterns. Each pattern is expanded against the filesystem to discover member package directories.
workspaces, reading from its packages key:
Declaring workspaces in ara.toml
If you prefer Ara’s native manifest format, list members explicitly under[workspace]:
Both
ara.toml and package.json workspace declarations support glob patterns — Ara expands every entry through the same glob engine. For example, members = ["packages/*"] in ara.toml will discover all immediate subdirectories of packages/ just as it would in a package.json workspaces array.Directory structure
A typical Ara monorepo looks like this:package.json lists the glob pattern; each subdirectory is an independent package with its own manifest:
Mixed manifests
Workspace members can use eitherpackage.json or ara.toml — the two formats can coexist freely within the same workspace. Ara detects which format each member uses and parses accordingly.
ara.toml to individual packages without touching the others.
How ara install works for workspaces
Runningara install at the monorepo root triggers a multi-stage process:
Parse the root manifest
Ara reads the root
package.json (or ara.toml) and extracts the workspaces glob patterns along with any root-level dependencies.Expand workspace members
Each glob pattern is expanded against the filesystem. Every matching directory that contains a manifest becomes a member. Ara registers an implicit dependency for each member so it is included in the resolution graph.
Resolve all dependencies
Ara runs Minimum Version Selection (MVS) across the entire dependency graph — root deps, member deps, and cross-member references included.
Symlink workspace members
Each workspace member is installed as a live symlink in
node_modules. For example, packages/ui becomes node_modules/ui → ../../packages/ui. No tarball is created; changes to the member’s source files are immediately visible to all consumers.Fetch and extract registry packages
Non-workspace dependencies are downloaded, security-scanned, and extracted to
node_modules as usual.node_modules looks like:
Cross-references between members
Members can depend on each other using theworkspace: protocol. The 03-cross-refs fixture demonstrates a chain where pkg-a depends on pkg-b, and pkg-b depends on pkg-c:
- ara.toml (root)
- pkg-a/ara.toml
- pkg-b/ara.toml
- pkg-c/ara.toml
pkg-a → pkg-b → pkg-c is available the moment ara install completes.
Mixing workspace and registry dependencies
The root manifest and any member manifest can freely combineworkspace: references with normal registry dependencies:
The lockfile
After a successful install,ara.lock records every dependency with its source type. Workspace members use source = "workspace"; registry packages use source = "registry". This distinction is what lets Ara skip the network entirely for local members on subsequent installs: