# meta/sapling architecture

> Architecture diagram of the GitHub repository meta/sapling, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/meta/sapling
- Repository: https://github.com/meta/sapling

## Overview

Sapling is a cross-platform, Git-compatible source control system. Its user workflow spans command-line source-control operations and the Interactive Smartlog (ISL), which presents repository state and lets users act on it. The wider ecosystem also includes EdenFS for on-demand checkout files and Mononoke for distributed source control. The graph preserves these documented product branches and the major indexed modules; links between unsampled subsystems are omitted unless documented. Evidence is limited to the README, source index, and excerpts provided.

Main entry points: [`eden/mononoke/derived_data/manager/manifest_pipeline.rs`](https://github.com/meta/sapling/blob/main/eden/mononoke/derived_data/manager/manifest_pipeline.rs) (Derived Data Manager), [`eden/fs/cli/main.py`](https://github.com/meta/sapling/blob/main/eden/fs/cli/main.py) (EdenFS CLI), [`addons/isl/src/App.tsx`](https://github.com/meta/sapling/blob/main/addons/isl/src/App.tsx) (ISL App), [`addons/isl/src/ClientToServerAPI.ts`](https://github.com/meta/sapling/blob/main/addons/isl/src/ClientToServerAPI.ts) (Client API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Sapling Client"]
  node_sapling["Sapling CLI<br/>[server.py]"]
  node_sapling_json["CLI JSON<br/>[json.py]"]
end

subgraph group_isl["Interactive Smartlog"]
  node_isl_app["ISL App<br/>[App.tsx]"]
  node_isl_api["Client API"]
  node_isl_state["Server API State<br/>[serverAPIState.ts]"]
  node_isl_platform["Platform API<br/>[platform.ts]"]
  node_isl_shortcuts["ISL Shortcuts<br/>[ISLShortcuts.tsx]"]
  node_isl_internal["ISL Internals<br/>[Internal.ts]"]
  node_isl_jotai["Jotai Utilities<br/>[jotaiUtils.ts]"]
  node_isl_server["ISL Server<br/>[serverPlatform.ts]"]
  node_isl_proxy["ISL Proxy<br/>[server.ts]"]
end

subgraph group_eden["EdenFS"]
  node_eden_cli["EdenFS CLI<br/>[main.py]"]
  node_eden_util["CLI Utilities<br/>[util.py]"]
  node_eden_config["EdenFS Config<br/>[config.py]"]
  node_eden_mtab["Mount Table<br/>[mtab.py]"]
  node_eden_thrift["Thrift Client<br/>[client.py]"]
  node_eden_heartbeat["Daemon Heartbeat"]
end

subgraph group_mononoke["Mononoke"]
  node_mononoke_manager["Derived Data Manager"]
  node_mononoke_hg["Mercurial Derivation<br/>[pipeline.rs]"]
  node_mononoke_unodes["Unodes Derivation<br/>[pipeline.rs]"]
  node_mononoke_deleted["Deleted Manifest<br/>[pipeline.rs]"]
  node_mononoke_fastlog["Fastlog Derivation<br/>[pipeline.rs]"]
  node_mononoke_acl["ACL Manifest<br/>[pipeline.rs]"]
end

node_developer(("Developer"))

node_developer -->|"uses CLI"| node_sapling
node_developer -->|"uses UI"| node_isl_app
node_developer -->|"manages checkouts"| node_eden_cli
node_isl_app -->|"uses API"| node_isl_api
node_isl_app -->|"renders"| node_isl_shortcuts
node_isl_api -->|"uses platform"| node_isl_platform
node_isl_state -->|"uses API"| node_isl_api
node_isl_state -->|"uses utilities"| node_isl_jotai
node_isl_proxy -->|"creates platform"| node_isl_server
node_eden_cli -->|"uses utilities"| node_eden_util
node_eden_cli -->|"uses config"| node_eden_config
node_eden_cli -->|"uses mounts"| node_eden_mtab
node_eden_cli -->|"uses client"| node_eden_thrift
node_mononoke_manager -.->|"dispatches derivation"| node_mononoke_hg
node_mononoke_manager -.->|"dispatches derivation"| node_mononoke_unodes
node_mononoke_manager -.->|"dispatches derivation"| node_mononoke_deleted
node_mononoke_manager -.->|"dispatches derivation"| node_mononoke_fastlog
node_mononoke_manager -.->|"dispatches derivation"| node_mononoke_acl

click node_sapling "https://github.com/meta/sapling/blob/main/eden/scm/sapling/server.py"
click node_sapling_json "https://github.com/meta/sapling/blob/main/eden/scm/sapling/json.py"
click node_isl_app "https://github.com/meta/sapling/blob/main/addons/isl/src/App.tsx"
click node_isl_api "https://github.com/meta/sapling/blob/main/addons/isl/src/ClientToServerAPI.ts"
click node_isl_state "https://github.com/meta/sapling/blob/main/addons/isl/src/serverAPIState.ts"
click node_isl_platform "https://github.com/meta/sapling/blob/main/addons/isl/src/platform.ts"
click node_isl_shortcuts "https://github.com/meta/sapling/blob/main/addons/isl/src/ISLShortcuts.tsx"
click node_isl_internal "https://github.com/meta/sapling/blob/main/addons/isl/src/Internal.ts"
click node_isl_jotai "https://github.com/meta/sapling/blob/main/addons/isl/src/jotaiUtils.ts"
click node_isl_server "https://github.com/meta/sapling/blob/main/addons/isl-server/src/serverPlatform.ts"
click node_isl_proxy "https://github.com/meta/sapling/blob/main/addons/isl-server/proxy/server.ts"
click node_eden_cli "https://github.com/meta/sapling/blob/main/eden/fs/cli/main.py"
click node_eden_util "https://github.com/meta/sapling/blob/main/eden/fs/cli/util.py"
click node_eden_config "https://github.com/meta/sapling/blob/main/eden/fs/cli/config.py"
click node_eden_mtab "https://github.com/meta/sapling/blob/main/eden/fs/cli/mtab.py"
click node_eden_thrift "https://github.com/meta/sapling/blob/main/eden/fs/py/eden/thrift/client.py"
click node_eden_heartbeat "https://github.com/meta/sapling/blob/main/eden/fs/service/HeartbeatManager.cpp"
click node_mononoke_manager "https://github.com/meta/sapling/blob/main/eden/mononoke/derived_data/manager/manifest_pipeline.rs"
click node_mononoke_hg "https://github.com/meta/sapling/blob/main/eden/mononoke/derived_data/mercurial_derivation/src/pipeline.rs"
click node_mononoke_unodes "https://github.com/meta/sapling/blob/main/eden/mononoke/derived_data/unodes/pipeline.rs"
click node_mononoke_deleted "https://github.com/meta/sapling/blob/main/eden/mononoke/derived_data/deleted_manifest/pipeline.rs"
click node_mononoke_fastlog "https://github.com/meta/sapling/blob/main/eden/mononoke/derived_data/fastlog/pipeline.rs"
click node_mononoke_acl "https://github.com/meta/sapling/blob/main/eden/mononoke/derived_data/acl_manifest/pipeline.rs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_sapling,node_sapling_json toneBlue
class node_isl_app,node_isl_api,node_isl_state,node_isl_platform,node_isl_shortcuts,node_isl_internal,node_isl_jotai,node_isl_server,node_isl_proxy toneAmber
class node_eden_cli,node_eden_util,node_eden_config,node_eden_mtab,node_eden_thrift,node_eden_heartbeat toneMint
class node_mononoke_manager,node_mononoke_hg,node_mononoke_unodes,node_mononoke_deleted,node_mononoke_fastlog,node_mononoke_acl toneRose
class node_developer toneIndigo
```

## Components

### Sapling Client

- [Sapling CLI](https://github.com/meta/sapling/blob/main/eden/scm/sapling/server.py): `eden/scm/sapling/server.py`
- [CLI JSON](https://github.com/meta/sapling/blob/main/eden/scm/sapling/json.py): `eden/scm/sapling/json.py`

### Interactive Smartlog

- [ISL App](https://github.com/meta/sapling/blob/main/addons/isl/src/App.tsx): `addons/isl/src/App.tsx`
- [Client API](https://github.com/meta/sapling/blob/main/addons/isl/src/ClientToServerAPI.ts): `addons/isl/src/ClientToServerAPI.ts`
- [Server API State](https://github.com/meta/sapling/blob/main/addons/isl/src/serverAPIState.ts): `addons/isl/src/serverAPIState.ts`
- [Platform API](https://github.com/meta/sapling/blob/main/addons/isl/src/platform.ts): `addons/isl/src/platform.ts`
- [ISL Shortcuts](https://github.com/meta/sapling/blob/main/addons/isl/src/ISLShortcuts.tsx): `addons/isl/src/ISLShortcuts.tsx`
- [ISL Internals](https://github.com/meta/sapling/blob/main/addons/isl/src/Internal.ts): `addons/isl/src/Internal.ts`
- [Jotai Utilities](https://github.com/meta/sapling/blob/main/addons/isl/src/jotaiUtils.ts): `addons/isl/src/jotaiUtils.ts`
- [ISL Server](https://github.com/meta/sapling/blob/main/addons/isl-server/src/serverPlatform.ts): `addons/isl-server/src/serverPlatform.ts`
- [ISL Proxy](https://github.com/meta/sapling/blob/main/addons/isl-server/proxy/server.ts): `addons/isl-server/proxy/server.ts`

### EdenFS

- [EdenFS CLI](https://github.com/meta/sapling/blob/main/eden/fs/cli/main.py): `eden/fs/cli/main.py`
- [CLI Utilities](https://github.com/meta/sapling/blob/main/eden/fs/cli/util.py): `eden/fs/cli/util.py`
- [EdenFS Config](https://github.com/meta/sapling/blob/main/eden/fs/cli/config.py): `eden/fs/cli/config.py`
- [Mount Table](https://github.com/meta/sapling/blob/main/eden/fs/cli/mtab.py): `eden/fs/cli/mtab.py`
- [Thrift Client](https://github.com/meta/sapling/blob/main/eden/fs/py/eden/thrift/client.py): `eden/fs/py/eden/thrift/client.py`
- [Daemon Heartbeat](https://github.com/meta/sapling/blob/main/eden/fs/service/HeartbeatManager.cpp): `eden/fs/service/HeartbeatManager.cpp`

### Mononoke

- [Derived Data Manager](https://github.com/meta/sapling/blob/main/eden/mononoke/derived_data/manager/manifest_pipeline.rs): `eden/mononoke/derived_data/manager/manifest_pipeline.rs`
- [Mercurial Derivation](https://github.com/meta/sapling/blob/main/eden/mononoke/derived_data/mercurial_derivation/src/pipeline.rs): `eden/mononoke/derived_data/mercurial_derivation/src/pipeline.rs`
- [Unodes Derivation](https://github.com/meta/sapling/blob/main/eden/mononoke/derived_data/unodes/pipeline.rs): `eden/mononoke/derived_data/unodes/pipeline.rs`
- [Deleted Manifest](https://github.com/meta/sapling/blob/main/eden/mononoke/derived_data/deleted_manifest/pipeline.rs): `eden/mononoke/derived_data/deleted_manifest/pipeline.rs`
- [Fastlog Derivation](https://github.com/meta/sapling/blob/main/eden/mononoke/derived_data/fastlog/pipeline.rs): `eden/mononoke/derived_data/fastlog/pipeline.rs`
- [ACL Manifest](https://github.com/meta/sapling/blob/main/eden/mononoke/derived_data/acl_manifest/pipeline.rs): `eden/mononoke/derived_data/acl_manifest/pipeline.rs`

### Other components

- **Developer**

## Connections

- Developer → Sapling CLI: uses CLI (evidence: `README.md`)
- Developer → ISL App: uses UI (evidence: `README.md`)
- Developer → EdenFS CLI: manages checkouts (evidence: `README.md`)
- ISL App → Client API: uses API (evidence: `addons/isl/src/App.tsx`)
- ISL App → ISL Shortcuts: renders (evidence: `addons/isl/src/App.tsx`)
- Client API → Platform API: uses platform (evidence: `addons/isl/src/ClientToServerAPI.ts`)
- Server API State → Client API: uses API (evidence: `addons/isl/src/serverAPIState.ts`)
- Server API State → Jotai Utilities: uses utilities (evidence: `addons/isl/src/serverAPIState.ts`)
- ISL Proxy → ISL Server: creates platform (evidence: `addons/isl-server/proxy/server.ts`)
- EdenFS CLI → CLI Utilities: uses utilities (evidence: `eden/fs/cli/main.py`)
- EdenFS CLI → EdenFS Config: uses config (evidence: `eden/fs/cli/main.py`)
- EdenFS CLI → Mount Table: uses mounts (evidence: `eden/fs/cli/main.py`)
- EdenFS CLI → Thrift Client: uses client (evidence: `eden/fs/cli/main.py`)
- Derived Data Manager → Mercurial Derivation: dispatches derivation
- Derived Data Manager → Unodes Derivation: dispatches derivation
- Derived Data Manager → Deleted Manifest: dispatches derivation
- Derived Data Manager → Fastlog Derivation: dispatches derivation
- Derived Data Manager → ACL Manifest: dispatches derivation
