zed-industries/zed. Atom과 Tree-sitter를 만든 팀이 다시 만든 고성능·멀티플레이어 코드 에디터다. 약 280개의 Rust 크레이트로 짜인 하나의 거대한 작업공간(모노레포)이며, 화면은 브라우저 엔진을 거치지 않고 자체 UI 프레임워크 GPUI가 매 프레임을 GPU에 직접 그린다. 2026년 들어 1.0 정식 출시(2026-04-29)와 함께 AI 에이전트를 에디터 안에 정식으로 들였다. (저장소: zed-industries/zed · 언어 Rust(edition 2024) · 라이선스 GPL-3.0(일부 Apache-2.0) · macOS·Linux·Windows · TrendShift 주간 라이브 멘션 등재)
"텍스트 편집의 모든 층을 Rust로 새로 짜서, '느려서 답답한 순간'을 구조적으로 없앤 에디터."
대부분의 인기 에디터(VS Code·Cursor 등)는 웹 브라우저 엔진(Electron) 위에서 돈다. 화면이 사실은 "웹페이지"라서, 큰 파일을 열거나 타이핑이 몰리면 미세하게 버벅인다. Zed는 그 층을 통째로 걷어내고 운영체제의 그래픽 카드(GPU)에 글자를 직접 그린다. 게임이 60·120프레임으로 부드럽게 도는 것과 같은 방식이다. 그래서 "에디터가 입력을 못 따라온다"는 느낌이 잘 들지 않는다.
핵심은 "빠름을 기능이 아니라 토대로 삼았다"는 점이다. 만든 사람들은 2010년대 초 Atom(GitHub의 해킹 가능한 에디터, Electron의 출발점)과 Tree-sitter(지금 거의 모든 에디터가 쓰는 코드 구문 분석기)를 만든 팀이다. 그들이 "Atom이 느렸던 이유"를 10년간 곱씹은 끝에, 처음부터 성능을 노리고 Rust로 다시 쓴 결과물이 Zed다.
crates/ 폴더 아래 약 280개의 크레이트를 하나의 워크스페이스로 묶은 모노레포(하나의 저장소에 모든 걸 담는 방식)다. "거대한 레고 박스 하나에 작은 부품 280개"라고 보면 된다.그리고 2026년의 Zed는 단순한 "빠른 에디터"를 넘어, 사람과 AI 에이전트가 같은 화면에서 함께 일하는 작업대로 방향을 잡았다. 실시간 공동편집(멀티플레이어)이 기본으로 들어 있고, 거기에 AI 에이전트를 표준 규약으로 꽂아 "사람 옆에서 같이 타이핑하는 동료"처럼 쓰게 만들었다. 이 문서는 그 구조를 한 층씩 뜯어본다.
"빠른 에디터" 자리에 안주하지 않고, 2026년 AI 코딩 흐름의 한복판으로 들어갔다.
Zed는 5년간 매주 빌드를 내놓다가 2026년 4월 29일 1.0을 찍었다. 그런데 화제가 된 건 버전 숫자가 아니라, "네이티브 속도" + "AI 에이전트"를 한 몸에 합친 첫 사례라는 점이다. 핵심 차별점을 하나씩 보자.
경쟁작 대부분은 Electron(브라우저 엔진) 위에 있다. Zed는 자체 UI 프레임워크 GPUI로 Metal(macOS)·DirectWrite/Direct3D(Windows)·wgpu/Vulkan(Linux)에 글자를 직접 올린다. 입력 지연과 프레임 시간을 줄이는 게 설계의 1순위라, 코드에는 아예 ZED_MEASUREMENTS 같은 프레임 시간 측정 스위치가 내장돼 있다.
Zed는 특정 AI 회사에 묶이는 대신, ACP(Agent Client Protocol)라는 공개 규약을 직접 만들어 1.0의 간판 기능으로 내세웠다. 덕분에 Claude 계열 에이전트, Codex, OpenCode 같은 여러 에이전트를 같은 방식으로 에디터에 꽂을 수 있다.
acp_thread·acp_tools·agent_servers 크레이트가 이 규약을 구현한다.2026년 4월 22일 Zed는 Parallel Agents(병렬 에이전트)를 내놨다 — 여러 AI 에이전트를 한 창에서 동시에 돌려 각자 코드의 다른 부분을 손보게 하는 기능으로, "네이티브로 병렬 에이전트를 지원한 첫 에디터"로 소개됐다. 이어 5월 20일에는 Terminal Threads가 추가돼, Claude Code 같은 CLI 에이전트를 에디터 사이드바에서 함께 굴릴 수 있게 됐다.
Zed는 처음부터 실시간 공동편집을 핵심으로 깔았다. 같은 파일에 여러 명이 동시에 커서를 두고 편집하고, 음성·화면 공유까지 붙는다(livekit_client·collab 크레이트). 에디터를 "혼자 쓰는 도구"가 아니라 "팀이 같이 들어오는 공간"으로 본 셈이다.
다음에 칠 코드를 미리 제안하는 edit prediction에 Zed는 Zeta2라는 공개 가중치(open-weight) 모델을 쓴다. 범용 추론보다 "코드 자동완성 속도"에 맞춰 튜닝된 모델이다. 관련 코드는 edit_prediction*·zeta_prompt 크레이트에 모여 있다.
| 항목 | Zed | VS Code / Cursor | JetBrains |
|---|---|---|---|
| 토대 | 네이티브 Rust + 자체 GPU 렌더(GPUI) | Electron(브라우저 엔진) + TypeScript | JVM(자바 가상머신) |
| 속도 느낌 | 매우 가볍고 빠름 | 보통(큰 파일·확장 많으면 둔해짐) | 무거움(메모리 많이 씀) |
| 공동편집 | 기본 내장 | 확장(Live Share 등) | 제한적 |
| AI 에이전트 | ACP 표준 + 병렬 에이전트 내장 | Cursor는 강함 / VS Code는 확장 | 플러그인 위주 |
| 확장 | WebAssembly 확장 | 방대한 마켓플레이스(가장 큼) | 풍부함 |
VS Code가 "잘 만든 웹앱을 데스크톱에 담은 것"이라면, Zed는 "게임 엔진으로 만든 코드 에디터"에 가깝다. 같은 글자를 보여줘도, 하나는 웹페이지를 다시 그리는 방식이고 다른 하나는 GPU에 프레임을 쏘는 방식이다 — 그 차이가 "버벅임이 있나 없나"로 나타난다.
네이티브를 택한 대가로 확장 생태계는 VS Code보다 작다(마켓플레이스 규모·플러그인 수에서 한참 뒤). GPL-3.0 라이선스라 사내 포크·재배포에 제약이 있고, 공동편집·일부 AI 기능은 Zed의 클라우드 서버를 거친다(완전한 오프라인·자체호스팅은 아님). "무조건 우월"이 아니라 트레이드오프가 분명한 선택이다.
"에디터 하나에 OS·그래픽·언어·네트워크·AI가 다 들어간다 — 그걸 전부 Rust로."
Zed의 스택은 "프론트엔드/백엔드"라는 웹 구분이 잘 안 맞는다. 데스크톱 앱이라 UI 층 · 편집 엔진 · 언어 지능 · 협업/네트워크 · AI · 확장으로 나누는 게 자연스럽다. 루트 Cargo.toml(워크스페이스 설정)에서 실제로 끌어다 쓰는 부품들로 지도를 그려 보자.
| 구성 | 무엇 | 한 줄 설명 |
|---|---|---|
| Rust 2024 | 전체 언어 | 메모리 안전 + C++급 속도. edition = "2024" 최신 판 사용 |
| GPUI | 자체 UI 프레임워크 | 즉시+보존 혼합 모드의 GPU 가속 UI(crates/gpui) |
| wgpu / Metal | 그래픽 백엔드 | 리눅스·윈도우는 wgpu, macOS는 Metal로 픽셀을 쏨 |
| DirectWrite·Win32 / Wayland·X11 | OS 창·글자 | 플랫폼별 창 띄우기·글꼴 래스터화(gpui_windows·gpui_linux·gpui_macos) |
| taffy | 레이아웃 엔진 | 웹의 Flexbox식 배치를 네이티브로 계산 |
| 구성 | 무엇 | 한 줄 설명 |
|---|---|---|
| rope / sum_tree | 텍스트 자료구조 | 거대한 파일도 빠르게 편집하는 균형 트리(아래 4절 핵심) |
| text / multi_buffer | 버퍼 모델 | 편집 이력·여러 파일 조각을 한 화면에 모으는 멀티버퍼 |
| Tree-sitter | 구문 분석 | 코드를 문법 트리로 파싱(색칠·접기·구조 파악). Zed 팀의 또 다른 작품 |
| vim | 입력 모드 | Vim 키 조작을 1급 기능으로 내장(crates/vim) |
| 구성 | 무엇 | 한 줄 설명 |
|---|---|---|
| LSP | 언어 서버 규약 | 자동완성·정의로 이동·오류 표시를 언어별 서버에서 받아옴 |
| DAP | 디버그 어댑터 규약 | 중단점·변수 검사 등 디버거 연동(dap·debugger_ui) |
| tree-sitter-* 문법 | 언어별 문법 | Rust·TS·Python·Go·C++ 등 수십 개 문법을 기본 동봉 |
| 구성 | 무엇 | 한 줄 설명 |
|---|---|---|
| collab / rpc / proto | 실시간 협업 | 자체 RPC(원격 호출)로 편집을 실시간 동기화. 서버는 collab 크레이트 |
| LiveKit | 음성·화면 공유 | 공동 작업 중 통화·화면 스트리밍(livekit_client) |
| agent-client-protocol | ACP 구현 | 외부 AI 에이전트를 표준 방식으로 연결(acp_thread·agent_servers) |
| provider 크레이트들 | 여러 LLM 연결 | anthropic·open_ai·google_ai·ollama·mistral·deepseek·bedrock·x_ai 등 모델별 어댑터 |
| wasmtime | 확장 실행 | 확장(extension)을 WebAssembly로 안전하게 격리 실행 |
| sqlez (SQLite) | 로컬 저장 | 설정·상태를 로컬 SQLite에 보관하는 얇은 래퍼 |
"내가 'a'를 누르면, 그 글자가 화면에 찍히기까지 Zed 안에서 무슨 일이 벌어지나."
Zed의 구조를 한 장으로 그리면 이렇게 층층이 쌓인 탑이다. 아래일수록 "원초적인 글자·자료구조", 위일수록 "사람이 보는 화면·협업·AI"다.
10만 줄짜리 파일에서 맨 앞에 한 글자를 넣는다고 해 보자. 글 전체가 하나의 긴 문자열이라면, 그 한 글자 때문에 뒤의 모든 글자를 한 칸씩 밀어야 한다 — 끔찍하게 느리다. Zed는 텍스트를 작은 조각으로 쪼개 균형 트리에 담는다. 이게 Rope(로프)이고, 그 밑을 받치는 범용 트리가 SumTree다.
긴 글을 한 줄로 이어 붙인 두루마리로 들면, 중간을 고치려고 매번 두루마리 전체를 펼쳐야 한다. Rope는 글을 여러 장의 카드로 쪼개 트리에 꽂아둔 것이라, 고칠 카드 한 장만 갈아끼우면 된다. "어느 카드에 몇 번째 글자가 있나"는 트리가 빠르게 알려준다.
crates/sum_tree). 항목들을 균형 트리로 들고 있으면서, 각 가지마다 '요약 값(합계)'을 미리 계산해 둔다 — 예: 이 가지 아래 글자 수, 줄 수. 덕분에 "5만 번째 글자가 어디?"를 트리 전체를 훑지 않고 로그 시간에 찾는다. 텍스트(rope)뿐 아니라 파일 목록·편집 이력에도 같은 트리를 재사용한다.GPUI는 "상태를 담는 그릇(Entity)", "그 상태를 화면으로 바꾸는 규칙(View)", "실제 배치·렌더 단위(Element)" 세 층으로 UI를 만든다. 매 프레임마다 최상위 View의 render()가 호출돼 화면을 다시 구성하고, 결과를 GPU에 넘긴다(즉시 모드). 동시에 상태는 Entity가 오래 들고 있는다(보존 모드) — 그래서 "하이브리드"다.
// GPUI 앱의 가장 작은 뼈대 — README 예시를 단순화
use gpui::*;
fn main() {
// OS에 맞는 창·글꼴 백엔드를 자동으로 고른다
gpui_platform::application().run(|cx: &mut App| {
cx.open_window(WindowOptions::default(), |_, cx| {
// 여기서 루트 View(화면)를 만들어 돌려준다
cx.new(|_| HelloWorld)
});
});
}
// HelloWorld 가 Render 트레잇을 구현하면, GPUI가 매 프레임 render()를 부른다
위 코드가 말하는 건 딱 하나다 — "앱을 켜고(application), 창을 열고(open_window), 그릴 화면(View)을 하나 등록한다." 복잡한 렌더링·GPU 호출은 전부 GPUI 안에 숨어 있고, 개발자는 "무엇을 그릴지"만 적는다. 배치는 div()에 Tailwind 비슷한 메서드(.flex().p_4() 식)를 붙여 표현한다.
Zed는 스레드를 마구 띄우는 대신, OS 이벤트 루프와 통합된 비동기 실행기(async executor) 하나 위에서 작업을 돌린다(smol 런타임 계열). 그리고 모든 앱 상태는 GPUI가 소유하는 Entity로 관리되어, Rc(참조 카운트 스마트 포인터) 비슷한 핸들로만 접근한다. 이 두 가지가 합쳐져 "데이터 경쟁(race) 없이도 빠른" 단일 모델을 만든다 — Rust의 소유권 규칙이 컴파일 시점에 사고를 막아준다.
실시간 공동편집(다른 사람)과 AI 에이전트(모델)는 사실 Zed 입장에서 비슷한 일이다 — "내가 아닌 누군가가 버퍼를 고친다". 그래서 둘 다 편집 연산(operation)을 주고받는 같은 길을 탄다. 사람 편집은 rpc/proto로, AI 편집은 acp_thread·action_log로 흐르지만, 끝에서 만나는 곳은 같은 버퍼다. 그래서 "AI가 고친 걸 사람이 이어서 고치고, 그걸 또 다른 협업자가 보는" 일이 자연스럽다.
"크레이트가 280개라 무섭지만, 사실 6~7개 그룹으로 묶인다."
저장소 루트는 단순하다. 거의 모든 코드는 crates/ 안에 있고, 나머지는 확장·도구·문서다.
읽는 순서를 추천하면 이렇다. 처음 길을 잡을 땐 crates/zed(진입점) → crates/workspace(창 뼈대) → crates/editor(편집 화면) 순으로 따라가면 "앱이 켜지고 화면이 뜨는 흐름"이 잡힌다. UI 자체가 궁금하면 crates/gpui/README.md가 친절한 출발점이다.
Cargo.toml은 단일 소스 파일 크레이트를 codegen-units = 1로 빌드하는 등, 빌드 속도 자체도 세밀하게 튜닝해 둔 게 인상적이다."Zed 한 채에 현대 시스템 프로그래밍의 거의 모든 주제가 들어 있다 — 보물창고처럼 골라 배우자."
Zed는 "큰 Rust 코드베이스"의 모범 사례라, 읽기만 해도 배울 게 많다. 분야별로 무엇을 배울지 + 작게 실습할 아이디어를 정리했다.
배울 것: 소유권/빌림(borrow), 트레잇(trait) 설계, Rc/스마트 포인터로 상태 공유, 거대한 워크스페이스를 크레이트로 가르는 법, 빌드 프로파일 튜닝(Cargo.toml의 [profile.*]).
실습: crates/sum_tree나 crates/rope 같은 의존성 적고 자기완결적인 크레이트 하나를 골라 테스트부터 읽어보기. "이 자료구조가 무엇을 보장하나"를 테스트가 말해준다.
배울 것: 즉시+보존 하이브리드 렌더, Entity-View-Element 모델, Tailwind식 선언적 배치, 이벤트→액션 변환(키맵), 통합 async 실행기.
실습: gpui_platform::application()으로 "버튼 누르면 숫자 올라가는 카운터" 만들기. GPUI 저장소의 examples/를 베끼며 시작하면 빠르다.
배울 것: 소스코드를 문법 트리(AST 비슷)로 파싱하는 법, 그 트리로 색칠·코드 접기·구조 점프를 구현하는 원리. Zed가 만든 도구라 통합이 깊다.
실습: 작은 언어(예: 가짜 설정 언어)의 tree-sitter 문법을 직접 써 보고, Zed 확장으로 색칠이 먹는지 확인.
배울 것: 에디터와 언어 서버가 JSON-RPC로 주고받는 메시지(자동완성·정의 이동·진단). DAP로 중단점·변수 검사를 붙이는 구조.
실습: crates/lsp가 서버 프로세스를 띄우고 메시지를 주고받는 부분을 따라 읽기. 로그를 켜고 실제 오가는 JSON을 관찰.
배울 것: 왜 확장을 WASM으로 격리하나(악성·버그 확장이 에디터를 못 망가뜨리게), wasmtime으로 게스트 코드를 실행하고 host 함수를 노출하는 법.
실습: extensions/의 html·glsl 예시를 본떠 언어 하나 추가하는 최소 확장 만들기.
배울 것: 여러 사람이 같은 글을 동시에 고칠 때 충돌 없이 합치는 방법(편집 연산 동기화), 자체 RPC(rpc·proto) 설계, 서버(collab)와 클라이언트의 역할 분담.
실습: 친구와 Zed 프로젝트를 공유해 같은 파일을 동시에 편집해 보고, "내 커서/상대 커서"가 어떻게 표시되는지 관찰 → crates/text의 연산 합치기 코드로 거슬러 올라가기.
배울 것: 에이전트와 에디터를 잇는 표준 규약을 어떻게 설계하나, 에이전트의 "도구 호출"을 에디터 동작(파일 열기·편집)으로 안전하게 매핑하는 법(action_log로 추적·되돌리기).
실습: Zed의 Agent 패널에 ACP 에이전트를 붙여 보고, MCP 서버를 연결해 에이전트에게 도구를 추가해 주기.
"쓰는 건 가볍지만, 소스에서 빌드하는 건 묵직한 작업이다."
일반 사용은 가볍다. macOS·Linux·Windows용 빌드를 zed.dev/download에서 받거나 패키지 매니저로 설치한다. 단, GPU 렌더가 핵심이라 그래픽 가속이 되는 환경이 필요하다(아주 오래된 가상머신·헤드리스 환경에선 렌더가 제한될 수 있다). 웹 버전은 아직 없다.
| 플랫폼 | 필요한 것 |
|---|---|
| 공통 | 최신 stable Rust(rustup), 넉넉한 디스크·메모리(약 280개 크레이트 + 무거운 의존성 wasmtime·tree-sitter·livekit 등 → 첫 빌드는 길고 무겁다) |
| macOS | Xcode + command line tools(Metal 렌더·글꼴). xcode-select --switch로 정식 Xcode 지정 |
| Linux / FreeBSD | 창 백엔드 최소 1개(Wayland 또는 X11), Vulkan 드라이버(wgpu) |
| Windows | Win32 + DirectWrite(별도 폰트 설정 불필요) |
# 소스에서 Zed 빌드·실행 (개발 빌드)
git clone https://github.com/zed-industries/zed
cd zed
cargo run # 첫 실행은 수백 개 크레이트를 컴파일 → 시간 걸림(커피 한 잔)
# 프레임 렌더 시간을 stderr로 출력 (성능 비교용 — 코드에 내장된 스위치)
export ZED_MEASUREMENTS=1
cargo run --release
복사해서 그대로 쳐도 된다. 핵심은 cargo run 한 줄이면 Zed가 통째로 빌드돼 뜬다는 것 — 다만 첫 빌드는 부품이 많아 오래 걸린다는 점만 각오하면 된다. ZED_MEASUREMENTS=1은 "한 프레임 그리는 데 몇 ms 걸렸나"를 찍어주는, 성능을 1순위로 여기는 이 프로젝트의 성격이 드러나는 스위치다.
"읽기만 하면 안 남는다 — 난이도별로 손을 움직여 보자."
Zed를 설치하고 설정(JSON)·테마·키맵을 직접 바꿔본다. 그 다음 ZED_MEASUREMENTS=1로 켜서 "타이핑할 때 프레임이 몇 ms인지" 관찰. "내 입력이 몇 밀리초 만에 화면에 닿나"를 숫자로 느끼는 게 목표.
친구(또는 다른 계정)와 프로젝트를 공유해 같은 파일을 동시에 편집. 상대 커서·선택 영역이 실시간으로 보이는 걸 체험하고, "충돌이 왜 안 나는지" 궁금증을 메모해 둔다(→ 6절 기술⑥로 연결).
gpui 크레이트를 의존성에 넣고 application().run(...)으로 창 하나 + 버튼 + 카운터를 띄운다. div().flex().p_4() 식 배치 메서드를 익히는 게 핵심. GPUI examples/가 좋은 베이스.
extensions/의 예시를 본떠 언어 하나를 추가하는 WASM 확장을 만든다. tree-sitter 문법을 연결해 색칠이 먹는지 확인. "확장이 왜 WASM으로 격리되나"를 몸으로 이해하게 된다.
crates/zed(진입점)부터 workspace → editor로 "앱이 켜지는 길"을 디버거/로그로 따라간다. 그 뒤 CONTRIBUTING.md를 읽고 문서 오타 수정·작은 버그 같은 첫 PR을 시도. 큰 모노레포에 기여하는 흐름(이슈→브랜치→CI→리뷰)을 경험.
"Rust를 모르는 상태에서 Zed에 기여하기까지 — 7주 코스 예시."
아래는 "Rust 입문자가 Zed 코드를 읽고 작게 기여할 수 있는 수준"까지의 한 가지 길이다. 본인 속도에 맞춰 늘리거나 줄여도 된다.
| 주차 | 주제 | 무엇을 / 왜 |
|---|---|---|
| 1주 | Rust 기초 + 소유권 | The Book으로 소유권·빌림·트레잇까지. Zed 코드의 90%는 이 개념 위에 있다 |
| 2주 | 비동기 Rust | async/await와 실행기(executor) 개념. Zed의 smol 기반 단일 실행기를 이해하는 토대 |
| 3주 | GPUI로 작은 앱 | 카운터·할 일 목록을 GPUI로. Entity-View-Element와 선언적 배치를 손에 익힘 |
| 4주 | Tree-sitter & LSP | 구문 트리로 색칠이 되는 원리, 언어 서버와 주고받는 메시지 관찰 |
| 5주 | WASM 확장 | wasmtime·확장 API. 최소 확장을 만들어 마켓 흐름까지 체험 |
| 6주 | 자료구조 깊이 읽기 | sum_tree·rope 테스트부터 구현까지. "왜 빠른가"의 핵심 |
| 7주 | 협업·기여 | 편집 연산 동기화(text·rpc) 훑기 → CONTRIBUTING.md 보고 첫 PR |
Zed 코드베이스는 거대한 종합병원 같다. 처음부터 모든 과를 돌 필요는 없다. "응급실(진입점 crates/zed) → 내과(편집 엔진) → 영상의학과(GPUI 렌더)" 식으로 관심 가는 과 하나씩 깊이 보는 게, 280개 크레이트를 한 번에 삼키려다 체하는 것보다 낫다.
"이 문서와 Zed 코드에서 거듭 나오는 용어들 — 한 곳에 모아 풀었다."
SumTree 위에 구현된다.wgpu는 크로스플랫폼(리눅스·윈도우), Metal은 애플 전용. GPUI가 이들 위에서 돈다.wasmtime). 확장이 에디터 본체를 망가뜨리지 못하게 모래상자에 가둔다.공식 저장소·문서·개념 출처.
GitHub 저장소 · github.com/zed-industries/zed — 본체. crates/zed(진입점)와 crates/gpui/README.md부터 보면 좋다.
공식 사이트 · zed.dev — 다운로드·소개. AI 기능은 zed.dev/ai.
문서 · zed.dev/docs — 설치·개발·확장·AI 가이드(저장소 docs/가 원본).
Agent 패널 · zed.dev/docs/ai/agent-panel — AI 에이전트(ACP·MCP) 사용법.
블로그 · zed.dev/blog — 1.0·병렬 에이전트·Zeta2 등 발표 글.
TrendShift · trendshift.io/repositories/7272 — 트렌딩 추이.