Forge is now Canopy
We renamed the product to fit the Ironpine Labs family (Pith, Grove, Canopy) and clear the crowded 'forge' namespace. Everything you use keeps working — the API is preserved, license keys carry over, and ~/.forge migrates automatically on first run.
Short version: Forge is now Canopy. Same product, same features, same pricing, same license keys. The rename ships as v2.0.0 and touches everything about the surface — binary name, MCP tool prefix, config paths, domain — but preserves every interface you actually depend on via a migration helper and backward-compatibility shims.
If you’re a current trialist or paying customer, you don’t need to do anything. The next time you run any canopy subcommand, it’ll notice your old ~/.forge/ directory, copy it into ~/.canopy/, print a one-line notice, and carry on. Your indexes, your license key, your team configs — all preserved.
Why we renamed
Two reasons.
One — the “forge” namespace is saturated. Laravel Forge, Atlassian Forge, Autodesk Forge, Minecraft Forge, FerretDB Forge, and a dozen others all live in the software-tools space. Searching “forge self-hosted code intelligence” was a losing SEO battle before the product had traction. Fighting for a name that was never going to land on the first page of a Google search is expensive; picking a distinct name now is cheap.
Two — it fits the family. Ironpine Labs has three products that were always going to sit under a shared brand: Pith (an ADHD habit tracker), Grove (a reusable creature-engine runtime), and now Canopy. Botanical, hierarchical, all sitting under the Ironpine umbrella. The original Forge name came from a different era and didn’t fit where the company was heading.
We did this pre-commercial-launch specifically because the cost is bounded. Zero external paying customers are affected. Every forward reference — docs, tool names, binary, domain — gets renamed once. Doing the same rename with hundreds of customers on the old name would cost multiples more.
What actually changed
| Surface | Before | After |
|---|---|---|
| Product name | Forge | Canopy |
| Binary | forge | canopy |
| MCP tool prefix | forge_* (21 tools) | canopy_* (same 21 tools) |
| Config dir | ~/.forge/ | ~/.canopy/ |
| Per-repo config | .forge/ | .canopy/ |
| Env vars | FORGE_* | CANOPY_* |
| Domain | forge.ironpinelabs.com | canopy.ironpinelabs.com |
| GitHub | github.com/ironpine-labs/forge | github.com/ironpine-labs/canopy |
| systemd service | forge-mcp | canopy-mcp |
The public API surface — MCP tool signatures, CLI flag shapes, plugin YAML schema, SQLite schema — is behaviorally identical. Every tool that was forge_prepare is now canopy_prepare and accepts the same arguments, returns the same shape. Every CLI command that was forge index is now canopy index with the same flags.
What didn’t change
License keys. The Ed25519 signing key we use to sign license payloads is unchanged. Your Forge license key validates cleanly against Canopy v2.0.0. No re-keying, no re-purchase, nothing to do on your end except point your scripts at the new binary name.
Pricing and tiers. Solo, Pro, Team, Air-Gapped — same tier structure, same features per tier, same monthly and annual prices. The recent Solo monthly price drop ($24 → $19) is the only pricing change in this window, and it happened before the rename.
Supported languages. TypeScript, JavaScript, Python, Rust, Go. Q2 2026 brings C, C++, and C# (already on the roadmap); Q3 adds Java, Kotlin, Swift; Q4 adds Ruby, PHP.
Heartbeat protocol. Hashed license identifier, client version, platform. Nothing about your code leaves your machine. The heartbeat endpoint moves from heartbeat.forge.ironpinelabs.com to heartbeat.canopy.ironpinelabs.com, but the protocol shape is byte-identical.
The “no cloud” promise. Local-first, single binary, self-hosted, air-gapped-capable. That’s what Canopy is and what Forge was. The name changes; the architecture doesn’t.
How the migration works
The canopy-core crate ships a migration module that runs automatically on first invocation of any canopy subcommand:
pub fn migrate_forge_home_if_present() -> io::Result<MigrationOutcome> { // If ~/.forge exists and ~/.canopy does not, recursively copy // the entire directory tree, preserving file modes. Leave // ~/.forge in place so a v1.6.x rollback recovers cleanly.}Same helper runs per-repo when you invoke canopy index or canopy serve against a project that has a .forge/ directory. Both helpers are no-ops after the first successful run. The original .forge/ directories are retained until a follow-up release (2-3 weeks out) after which they’re removed. Roll back to v1.6.x at any time within that window without losing state.
Backward-compat shims still in place
For one release after v2.0.0, the following still work:
FORGE_REPOenv var is read as a fallback ifCANOPY_REPOis unset. A one-shot deprecation warning prints to stderr.- The
forgebinary name — if a shell alias or an old$PATHentry still invokesforge, the binary notices and continues executing normally after a one-line notice. forge-ignore: secret_scansuppression markers in your source code — accepted alongside the newcanopy-ignore:marker.- Old URL paths at
forge.ironpinelabs.com/*— 301-redirected to the canopy equivalent. Kept in perpetuity.
What you need to do
If you had Forge installed:
- Download the new
canopybinary from canopy.ironpinelabs.com. - Run
canopy statusonce. Your~/.forge/migrates to~/.canopy/automatically. - Update any scripts, CI configs, or MCP-client configurations that invoke
forgedirectly — change tocanopy. Theforgeshim works for a release but you’ll want this done eventually. - In your
.mcp.jsonor equivalent MCP client config, rename the server key (commonly"forge") to"canopy"and change thecommandfield fromforgetocanopy.
If you’re new to this and just seeing this post:
Welcome. Canopy is a self-hosted code intelligence engine for AI coding agents. One binary. No cloud, no credits, no vendor lock-in. 14-day free trial. The roadmap shows what’s coming through EOY 2026.
Thanks
To everyone who trialed Forge during the pre-commercial window — you’re the reason the rename happened now rather than later. Catching the naming mismatch before a hundred customers had Forge references baked into their internal docs saved everyone a lot of pain down the road. v2.0.0 ships cleanly because of your feedback.
The product doesn’t change. What we build and why remains identical. The name under which we do it is now Canopy.