zedex
Self-hosted Zed server. Serves Zed's HTTP API and its collaboration RPC protocol
so a client can talk to zedex instead of zed.dev.
Capabilities
Extensions
GET /extensions: index, filtered bymax_schema_version,filter,providesGET /extensions/updates: updates for a set of extension idsGET /extensions/:id: metadata for one extensionGET /extensions/:id/download,GET /extensions/:id/:version/download: archive
GET /releases/stable/latest/asset: latest version and download URLGET /api/releases/latest: same, for theapipathGET /api/release_notes/v2/stable/:version: release notes
GET /native_app_signin: anonymous sign-in, Zed receives an encrypted tokenGET /client/users/me: the signed-in user, with a generated session name and
/avatar/:id
POST /client/llm_tokens: LLM tokenGET /client/users/connect: websocket for cloud notificationsGET /account: account pageGET /client/system_settings,PATCH /client/system_settings
/handle-rpc)
- Channels: create, join, rename, delete, visibility, reorder, invite members,
- Channel notes: a CRDT buffer per channel, with operation history, replica ids
- Shared projects: share a project into a room, other participants join it and
- Rooms (calls): create, join, leave, participant locations
- Contacts: request, accept, decline, remove
- Notifications: list, add, update, delete, mark read
- Ping and keepalive
GET /api/*is proxied toZED_HOST- Extensions and releases can be proxied instead of served from disk
Usage
# Extension index into .zedex-cache/extensions.json
zedex get extension-index
All extension archives into .zedex-cache/<extension id>.tar.gz
jq -r '.data[].id' .zedex-cache/extensions.json | xargs zedex get extension
Latest release and its notes
zedex get latest-release
Serve
zedex serve --port=8080
Point Zed at it:
{
"server_url": "http://localhost:8080"
}
Flags
| Flag | Default | Effect |
| --- | --- | --- |
| --port | 8080 | listen port |
| --output-dir | .zedex-cache | where the extension index and archives live |
| --enable-extension-store | true | serve extensions from disk, false proxies to Zed |
| --enable-releases | true | serve the latest release from disk, false proxies to Zed |
| --enable-release-notes | true | serve release notes from disk, false proxies to Zed |
| --enable-login | true | handle sign-in requests |
| --debug | false | verbose logging |
Environment
| Variable | Default | Effect |
| --- | --- | --- |
| ZED_HOST | https://zed.dev | upstream host for proxied calls |
| ZED_API_HOST | https://api.zed.dev | upstream host for the extension API |
| BASE_URL | http://127.0.0.1: | public URL of this server, used for avatar URLs |
Edit prediction
Not served by zedex. Zed supports custom edit-prediction providers
(including OpenAI-compatible APIs) in its own settings, so configure them there.
zedex answers the edit-prediction endpoints with 501 so the client does not
retry in a loop.
Not implemented
Voice and video calls (LiveKit), agent threads, Delta, and the LSP and git RPC surfaces Zed uses for shared projects.
Building
make build