agent-joule/crates/extension_api/README.md
David Charlot 88a41bedd3 Rebrand Zed -> Joule across UI, docs, embedded assets, and legal
The fork shipped renamed binary/bundle but the product name "Zed" was still
shown everywhere in the UI. Rename the display name to "Joule" (tagline
"Energy-metered agentic coding") while preserving every load-bearing reference.

Display renames (105 .rs files): release_channel display_name, welcome +
onboarding + ai_onboarding, macOS app menu (About/Hide/Quit), window titles,
About panel, settings UI, notifications, update/collab messages, system specs.
Bundle display name (crates/zed/Cargo.toml) -> "Joule" so CFBundleName / the
menu-bar name and the .app are "Joule" (identifier science.transaction.AgentJoule
and the agent-joule binary are unchanged).

Docs (223 .md): product prose Zed -> Joule, fence-aware (code blocks untouched).
Embedded assets (12 JSONC): // comments only.
Legal (4 files): product -> Joule, entity "Zed Industries, Inc." -> "Transaction
Science, Inc.", domain zed.dev -> openie.dev. NOTE: these are structurally Zed's
inherited terms and need a real legal review, not just a rename.

Deliberately PRESERVED (renaming would break the app): font aliases ("Zed Plex
Sans"/".ZedMono" in text_system + assets), HTTP header names (X-Zed-Predict-*),
zed:: action ids, app/bundle identifiers (dev.zed.Zed*, Zed-Editor-* product ids),
zed.dev URLs, ZED_* env vars, crate/package names, "Zed Industries" in non-legal
attribution, and the {zed,Zed} config-dir glob.

Signed + notarized + stapled as Joule.app, installed to /Applications, verified
(Gatekeeper: Notarized Developer ID, FH93XC2VRR). Caveat: test-code string
literals were renamed too, so some `cargo test` assertions may need updating.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-07-03 02:23:35 -04:00

2.1 KiB

The Joule Rust Extension API

This crate lets you write extensions for Joule in Rust.

Extension Manifest

You'll need an extension.toml file at the root of your extension directory, with the following structure:

id = "my-extension"
name = "My Extension"
description = "..."
version = "0.0.1"
schema_version = 1
authors = ["Your Name <[email protected]>"]
repository = "https://github.com/your/extension-repository"

Cargo metadata

Joule extensions are packaged as WebAssembly files. In your Cargo.toml, you'll need to set your crate-type accordingly:

[dependencies]
zed_extension_api = "0.6.0"

[lib]
crate-type = ["cdylib"]

Implementing an Extension

To define your extension, create a type that implements the Extension trait, and register it.

use zed_extension_api as zed;

struct MyExtension {
    // ... state
}

impl zed::Extension for MyExtension {
    // ...
}

zed::register_extension!(MyExtension);

Testing your extension

To run your extension in Joule as you're developing it:

  • Make sure you have Rust installed
  • Have the wasm32-wasip2 target installed (rustup target add wasm32-wasip2)
  • Open the extensions view using the zed: extensions action in the command palette.
  • Click the Install Dev Extension button in the top right
  • Choose the path to your extension directory.

Compatible Joule versions

Extensions created using newer versions of the Joule extension API won't be compatible with older versions of Joule.

Here is the compatibility of the zed_extension_api with versions of Joule:

Joule version zed_extension_api version
0.192.x 0.0.1 - 0.6.0
0.186.x 0.0.1 - 0.5.0
0.184.x 0.0.1 - 0.4.0
0.178.x 0.0.1 - 0.3.0
0.162.x 0.0.1 - 0.2.0
0.149.x 0.0.1 - 0.1.0
0.131.x 0.0.1 - 0.0.6
0.130.x 0.0.1 - 0.0.5
0.129.x 0.0.1 - 0.0.4
0.128.x 0.0.1