요즘 숏폼·유튜브 영상을 편집할 때 많이 쓰는 게 CapCut(캡컷)입니다. 쉽고 강력하지만, 영상을 회사 서버에 올려야 하고 기본 기능마저 점점 유료로 잠기고 있죠. OpenCut은 정확히 그 불만에서 출발한 프로젝트입니다 — "편집기는 쉬워야 하고, 무료여야 하고, 내 영상은 내 기기에 있어야 한다."
핵심은 모든 처리가 브라우저 안에서 일어난다는 점입니다. 보통의 온라인 편집기는 영상을 서버로 업로드해 거기서 렌더링하지만, OpenCut은 자르기·합치기·자막·내보내기까지 전부 사용자 컴퓨터에서 처리합니다. 그래서 업로드 대기 시간도, 프라이버시 걱정도 없습니다. 이걸 가능하게 하는 게 최신 브라우저의 미디어 처리 능력(WebCodecs)과 Rust를 브라우저에서 돌리는 기술(WASM)입니다 — 뒤에서 차근차근 풀어드릴게요.
옛날 사진관에는 필름을 현상하는 암실이 있었습니다. 필름을 외부 업체에 맡기지 않고 그 방 안에서 직접 현상했죠. OpenCut이 바로 그 암실입니다. 영상(필름)을 클라우드(외부 업체)로 보내지 않고, 브라우저라는 방 안에서 직접 자르고 색을 입히고 완성본을 뽑아냅니다. 방 밖으로 원본이 나가지 않으니 안전하고, 업체에 돈을 낼 일도 없습니다. 게다가 이 암실은 설치가 필요 없어서, 웹 주소만 열면 바로 작업대가 펼쳐집니다.
이 글에서 다루는 OpenCut-app/OpenCut는 2026년 현재 처음부터 다시 쓰는(ground-up rewrite) 대공사 중입니다. 지금 main 브랜치를 클론하면 풀 기능 편집기가 아니라 막 시작한 골격(스캐폴드)만 들어 있습니다. 실제로 동작하는, 50k 스타를 모은 그 편집기는 opencut-app/opencut-classic(아카이브됨)에 있습니다. 그래서 이 딥다이브는 두 가지를 함께 다룹니다 — ① 유명해진 클래식 편집기의 구조(배울 게 많음)와 ② 새 재작성판의 야심 찬 설계(어디로 가는가). 이 구분을 머릿속에 깔고 읽으면 헷갈리지 않습니다.
OpenCut이 트렌딩 상위에 오른 이유는 한 가지가 아닙니다. 가장 직접적인 동력은 CapCut의 유료화입니다. 무료로 쓰던 기본 기능들이 하나둘 구독 뒤로 잠기자, "그럼 오픈소스로 만들자"는 흐름이 생겼고 OpenCut이 그 깃발이 됐습니다. README가 내세우는 세 단어가 정확히 이 지점을 찌릅니다 — 프라이버시 · 무료 · 단순함.
두 번째는 프라이버시입니다. 영상은 종종 개인적이거나 미공개 콘텐츠인데, 그걸 모르는 회사 서버에 올리는 게 불편한 사람이 많습니다. OpenCut은 영상이 기기를 떠나지 않는다는 점 하나로 이 불안을 해소합니다. 세 번째는 화제성 — 짧은 기간에 ⭐50k를 넘기며 "오픈소스 CapCut"의 대명사가 됐고, Vercel·fal.ai 같은 곳의 후원도 받았습니다.
그리고 지금 가장 뜨거운 네 번째 이유는 과감한 재작성 선언입니다. 단순히 기능을 더하는 게 아니라, 편집기의 심장을 TypeScript에서 Rust로 옮기고, 그 Rust 코어 하나로 웹·데스크탑·모바일을 모두 굴리겠다는 계획입니다. 플러그인 우선 구조, AI 에이전트용 MCP 서버, 자동화를 위한 헤드리스 모드까지 로드맵에 담겨 있어, "오픈소스 편집기가 어디까지 갈 수 있나"를 보여주는 사례로 관심을 끕니다.
| 대안 | 방식 / 특징 | OpenCut과의 차이 |
|---|---|---|
| CapCut | 쉽고 강력하지만 클라우드 업로드 + 기능 유료화 | OpenCut은 로컬 처리·완전 무료·오픈소스 |
| Premiere / DaVinci | 전문가용 데스크탑 설치 프로그램 | OpenCut은 설치 없이 브라우저에서 바로, 입문 친화적 |
| Canva / Clipchamp | 웹 기반이지만 서버 처리 + 계정·구독 | OpenCut은 기기 내 처리라 프라이버시·오프라인성에 강함 |
| OpenCut Classic | 실제 동작하는 Next.js 편집기(아카이브) | 새 main은 이걸 Rust 코어로 재작성하는 차세대판 |
아닙니다. 앞서 짚었듯 현재 main은 재작성 초기 스캐폴드라 타임라인·내보내기 같은 편집 기능이 아직 없습니다. README도 "외부 기여를 받을 준비가 안 됐다"고 명시합니다. 당장 영상을 편집하고 싶다면 opencut.app(클래식 호스팅판)을 쓰거나 opencut-classic 저장소를 봐야 합니다. "트렌딩=완성품"이라는 가정이 여기선 틀립니다.
OpenCut 팀은 클래식판을 지우지 않고 opencut-classic으로 남겨 사용자가 계속 쓸 수 있게 하고, 재작성판은 new.opencut.app이라는 별도 주소에서 준비합니다. "지금 쓸 것"과 "곧 올 것"을 명확히 구분해 혼란을 줄인 거버넌스는 오픈소스 프로젝트가 큰 방향 전환을 할 때 참고할 만한 모범입니다.
이 프로젝트를 이해하는 열쇠는 "무거운 미디어 연산을 어디서 처리하느냐"입니다. 영상 편집은 디코딩·합성·인코딩이 전부 연산 폭탄이라, 자바스크립트만으로는 버겁습니다. 그래서 OpenCut은 브라우저 미디어 API + Rust→WASM 코어를 끌어와 무거운 일을 떠넘깁니다. 아래 표에서 각 라이브러리가 "편집기의 어느 근육"인지 짚어 보세요.
| 레이어 | 기술 / 버전 | 역할 |
|---|---|---|
| 프레임워크 | Next.js 16 + Turbopack · React 19 | 웹앱 골격·라우팅·서버 기능. Turbopack으로 빠른 개발 서버 |
| 미디어 엔진 | mediabunny 1.29 | 핵심. 브라우저에서 영상 디먹싱·디코딩·인코딩(내보내기) |
| 네이티브 코어 | opencut-wasm 0.2 (Rust→WASM) | 무거운 합성·효과 연산을 Rust로 짜서 브라우저에 주입 |
| 오디오 | wavesurfer.js · soundtouchjs | 파형 시각화(타임라인) · 속도/피치 변경 |
| 브라우저 ML | @huggingface/transformers 3.8 | 기기 내 AI(자막·배경 처리 등)를 서버 없이 실행 |
| 상태 관리 | zustand 5 | 타임라인·프로젝트·재생 상태를 가벼운 스토어로 |
| 타임라인 UX | @hello-pangea/dnd · react-window | 클립 드래그앤드롭 · 수천 프레임 가상 렌더(성능) |
| 데이터·인증 | drizzle-orm + postgres · better-auth | 프로젝트 메타·계정. upstash redis로 레이트리밋 |
| UI | radix-ui · Tailwind 4 · sonner · motion | 접근성 컴포넌트 · 스타일 · 토스트 · 애니메이션 |
| 배포 | OpenNext on Cloudflare | Next.js를 Cloudflare 엣지에서 구동(Vercel도 후원) |
| 레이어 | 기술 / 버전 | 역할 |
|---|---|---|
| 모노레포 | Turborepo + Bun 1.3.11 | apps/* 워크스페이스를 한 저장소에서 빌드·관리 |
| 빌드·프레임워크 | Vite 8 + TanStack Start | Next.js 대신 Vite 기반 풀스택 React로 전환 |
| 라우팅 | TanStack Router (파일 기반) | 타입 안전 라우팅. routeTree.gen.ts 자동 생성 |
| UI | React 19.2 · Tailwind 4 · shadcn · Base UI · Radix | 컴포넌트·디자인 시스템(템플릿 단계) |
| 배포 | Cloudflare Workers (@cloudflare/vite-plugin + wrangler) | 엣지에서 SSR. 빌드 산출물을 워커로 배포 |
| 품질 도구 | TypeScript 6 · Vitest 4 | 최신 타입 · 단위 테스트 (린트 미설정) |
| 계획된 코어 | rust/ (WGPU 컴포지터 · WASM 바인딩) · GPUI 데스크탑 | 로드맵: 한 Rust 코어로 웹·데스크탑·모바일 공유 |
ffmpeg.wasm(거대한 C 라이브러리를 통째로 WASM화)을 썼지만, 그건 무겁고 느렸습니다. mediabunny는 브라우저가 이미 가진 하드웨어 디코더(WebCodecs)를 직접 불러 더 빠르고 가볍게 처리합니다. "영상 파일을 풀었다 다시 묶는 만능 가위·풀"이라고 보면 됩니다.opencut-wasm이 바로 이것. "통역(JS) 대신 현지어(기계어)로 바로 말하게 하는 것"과 비슷합니다.핵심은 모든 단계가 브라우저 한 탭 안에서 돈다는 것입니다. 영상은 서버로 가지 않고, 브라우저의 로컬 저장소(OPFS)에 들어간 뒤, 상태 스토어(zustand)가 "어떤 클립이 몇 초에 놓였는지"를 들고, 프리뷰는 그 상태를 그려내고, 내보내기는 그 상태대로 새 영상을 인코딩합니다.
초보자가 가장 궁금해하는 "내가 마우스로 한 동작이 코드에서 어떻게 흐르나"를 해피패스(정상 경로)만 따라가 봅니다. 클래식 편집기 기준의 개념 흐름입니다.
// ① 미디어 패널에서 클립을 타임라인으로 드래그 // @hello-pangea/dnd 가 "어디에 놓였나(트랙·시각)"를 알려줌 onDrop(clip, trackId, startTime) // ② 상태 스토어에 "이 클립이 여기 놓였다"를 기록 (진실의 원천) timelineStore.addClip({ id, trackId, start, duration }) // ③ 스토어가 바뀌면 → 구독 중인 UI들이 자동으로 다시 그림 // 타임라인 막대, 프리뷰 화면, 속성 패널이 동시에 갱신 preview.render(timelineStore.state, currentTime) // ④ '내보내기'를 누르면 스토어 상태를 처음부터 끝까지 재생하며 // 각 프레임을 합성 → mediabunny 가 새 영상으로 인코딩 for (t of timeline) { frame = compose(state, t); encoder.add(frame) } const mp4 = await encoder.finalize() // 로컬 다운로드
풀어 쓰면 이렇습니다. ① 드래그앤드롭 라이브러리가 "클립이 어느 트랙 몇 초에 놓였는지"를 좌표로 알려줍니다. ② 그 사실을 zustand 스토어에 적습니다 — 여기서 중요한 설계가 "화면이 아니라 상태가 진실"이라는 원칙입니다. ③ 스토어가 바뀌면 그걸 구독하던 타임라인·프리뷰·속성 패널이 알아서 다시 그립니다(리액트의 반응형 렌더링). ④ 내보내기는 그 상태를 시간 순서대로 재생하며 프레임을 합성하고, mediabunny가 새 영상으로 묶습니다. 화면을 "녹화"하는 게 아니라 상태를 다시 계산해 깨끗하게 렌더한다는 점이 핵심입니다.
이 구조는 "악보와 연주"의 관계와 같습니다. zustand 스토어가 악보(어느 음을 언제 칠지)이고, 프리뷰 화면은 그 악보를 실시간으로 연주하는 것입니다. 내보내기는 같은 악보를 처음부터 끝까지 정확히 연주해 음반으로 녹음하는 셈이죠. 악보(상태) 하나만 잘 관리하면, 연주(프리뷰)와 녹음(내보내기)이 항상 같은 결과를 냅니다 — 이게 편집기에서 "프리뷰와 결과물이 일치"하는 비결입니다.
새 main의 야심은 편집기의 두뇌(컴포지터·효과·마스크)를 Rust로 한 번만 짜서 모든 플랫폼이 공유하는 것입니다. 웹에서는 그 Rust를 WASM으로, 데스크탑에서는 GPUI(네이티브 GPU UI)로, 모바일에서도 같은 코어로 돌립니다. TypeScript에 흩어져 있던 로직을 Rust 코어로 모으는 중이라 README가 "비즈니스 로직을 여기로 이전 중"이라고 적은 겁니다.
WGSL은 "GPU에게 픽셀을 이렇게 칠해라"라고 적는 작은 프로그램. 저장소 언어 통계에 WGSL 0.5%가 잡히는 이유입니다.지금 main은 Turborepo 모노레포이고, 안에 apps/web(TanStack Start 스캐폴드) 하나가 들어 있습니다. rust/·apps/desktop·docs/는 README가 예고한 계획이지, 아직 코드 트리에는 거의 없습니다(Cargo.toml·docker-compose.yml도 아직 없음).
| 위치 | 역할 |
|---|---|
| package.json (루트) | 모노레포 진입점. turbo dev로 모든 앱을 한 번에 구동 |
| turbo.json | 빌드·배포 의존 순서와 캐시 정의(^build = 의존 패키지 먼저) |
| apps/web/vite.config.ts | 스택의 심장. Vite에 TanStack Start·Cloudflare·Tailwind 플러그인 결합 |
| src/routes/ | 파일 하나가 곧 URL 하나. TanStack Router가 트리를 자동 생성 |
| src/components/ui/ | shadcn으로 깔아 둔 디자인 시스템 부품(편집기 UI의 토대) |
클래식의 실제 폴더명을 일일이 옮기기보다, 어떤 라이브러리가 어떤 기능을 맡는지로 구조를 잡는 게 초보자에겐 더 쓸모 있습니다(라이브러리 구성은 package.json으로 실측).
| 서브시스템 | 담당 기술 · 무슨 일 |
|---|---|
| 미디어 입출력 | mediabunny — 임포트 시 디코딩, 내보내기 시 인코딩 |
| 합성·효과 | opencut-wasm(Rust→WASM) — 무거운 프레임 합성·필터 |
| 상태 스토어 | zustand — 타임라인·프로젝트·재생 상태(진실의 원천) |
| 타임라인 UI | @hello-pangea/dnd(클립 끌기) + react-window(가상화) |
| 오디오 | wavesurfer.js(파형) · soundtouchjs(속도·피치) |
| AI 기능 | @huggingface/transformers — 기기 내 추론(서버 불필요) |
| 저장·계정 | drizzle-orm+postgres, better-auth, upstash redis |
"영상 처리는 서버에서 한다"는 통념을 깨는 지점입니다. 최신 브라우저는 WebCodecs API로 하드웨어 디코더/인코더에 직접 접근할 수 있고, mediabunny가 그 위에 편한 껍데기를 씌웁니다. 영상 파일을 풀어 프레임을 꺼내고, 편집한 뒤 다시 mp4로 묶는 전 과정을 브라우저에서 배웁니다.
📖 한 줄 풀이: 무거운 일(코덱)은 브라우저·GPU에 맡기고, 자바스크립트는 "지휘"만 한다는 분업이 핵심입니다.
OpenCut의 큰 베팅은 opencut-wasm — 합성·효과 같은 무거운 연산을 Rust로 짜서 WASM으로 컴파일해 브라우저에 넣는 것입니다. "전부 다시 쓰는 게 아니라 병목만 Rust로" 옮기는 점진적 전략을 실물로 볼 수 있습니다. wasm-pack으로 빌드하고 npm 패키지처럼 링크하는 워크플로우까지 익힙니다.
편집기는 상태가 끔찍하게 복잡합니다 — 트랙·클립·재생 헤드·선택·실행취소까지. OpenCut은 무거운 Redux 대신 가벼운 zustand로 이걸 다룹니다. "화면이 아니라 상태가 진실"이라는 원칙(프리뷰와 결과물 일치의 비결)을 코드로 배우고, 실행취소(undo)를 상태 스냅샷으로 구현하는 감각을 기릅니다.
타임라인은 클립이 수십 개, 파형이 수천 점이라 그냥 그리면 버벅입니다. OpenCut은 @hello-pangea/dnd로 끌어다 놓기를, react-window로 화면에 보이는 것만 그리는 가상화를 씁니다. "보이지 않는 건 그리지 않는다"는 웹 성능의 핵심 기법을, 영상 타임라인이라는 실전 맥락에서 배웁니다.
재작성판은 apps/web·apps/desktop을 한 저장소에 두는 모노레포입니다. Bun(빠른 패키지 매니저·런타임)과 Turborepo(빌드 캐시·의존 순서)를 함께 써, 큰 프로젝트를 어떻게 쪼개고 묶는지 배웁니다. turbo.json의 ^build 같은 표기가 "의존 패키지를 먼저 빌드하라"는 뜻임을 이해하면 모노레포가 덜 무섭습니다.
재작성판은 Next.js를 떠나 Vite + TanStack Start를 택했습니다. 파일 기반 타입 안전 라우팅(TanStack Router), Vite 플러그인 조립, 그리고 @cloudflare/vite-plugin+wrangler로 Cloudflare Workers 엣지에 배포하는 현대적 스택을 한 번에 경험합니다. "왜 Next를 떠났나"를 고민해 보는 것 자체가 좋은 아키텍처 공부입니다.
| 항목 | 요구사항 |
|---|---|
| 사용 환경(브라우저) | WebCodecs·OPFS·(가능하면)WebGPU를 지원하는 최신 브라우저 — Chrome·Edge 계열 권장. 로컬 처리라 RAM·CPU가 넉넉할수록 큰 영상이 쾌적 |
| 개발 — 공통 | Bun(클래식 1.2.18 / 재작성 1.3.11), Node 환경. 의존성 설치 bun install, 개발 서버 bun dev:web |
| 개발 — 클래식 DB | Docker + Docker Compose(선택) — 로컬 Postgres·Redis 구동용. 프론트만 만지면 생략 가능 |
| 개발 — 재작성판 | 현재 main은 웹만 켜면 됨(bun install → bun dev:web → Vite 개발 서버) |
| WASM 코어 빌드 | rust/wasm을 직접 고칠 때만: Rust 툴체인 + wasm-pack + cargo-watch |
| 데스크탑(예정) | GPUI 기반 — Rust 툴체인 + 데스크탑 네이티브 의존성(opt-in, 웹만 할 거면 불필요) |
| 셀프호스팅(클래식) | docker compose up -d → localhost:3100에서 프로덕션 빌드 구동 |
서버가 대신 일하지 않으므로, 4K 같은 큰 영상은 내 컴퓨터의 메모리·GPU가 감당해야 합니다. 또 WebCodecs·OPFS·WebGPU는 비교적 새 기능이라 사파리·구형 브라우저에선 일부가 빠지거나 다르게 동작할 수 있습니다. "어디서나 똑같이"가 아니라 "최신 크로미엄에서 가장 잘"이라는 전제를 깔고 접근하세요.
실제로 동작하는 편집기를 먼저 만져보는 게 출발점입니다. 가장 쉬운 길은 opencut.app에 접속하는 것이고, 소스를 보고 싶다면 클래식 저장소를 로컬에서 띄웁니다.
# 💡 하는 일: 클래식 소스 받아 로컬 개발 서버 띄우기 git clone https://github.com/opencut-app/opencut-classic cd opencut-classic bun install bun dev:web # http://localhost:3000 에서 편집기 열림
안심하세요 — 영상은 브라우저 안에서만 처리되니 시스템이 바뀌지 않습니다. DB가 필요하면 README의 docker compose up -d db redis를 먼저 돌리면 됩니다.
현재 main을 띄워 보면 "재작성이 어디까지 왔나"를 눈으로 확인할 수 있습니다. Vite·TanStack Start가 어떻게 켜지는지 보세요.
# 💡 하는 일: 재작성판 main 클론 → Vite 개발 서버 git clone https://github.com/OpenCut-app/OpenCut cd OpenCut bun install bun dev:web # Vite + TanStack Start 개발 서버 구동
src/routes/index.tsx를 열어 첫 화면을 고쳐보면, 파일 기반 라우팅이 어떻게 화면과 연결되는지 바로 체감됩니다.
OpenCut의 심장인 "브라우저 미디어 처리"를 작게 재현합니다. mediabunny(또는 WebCodecs)로 영상 하나를 읽어 길이를 자르고 다시 mp4로 내보내는 30줄짜리 데모를 만들어 보세요. "서버 없이도 영상이 가공된다"를 직접 확인하는 게 목표입니다.
📖 핵심 포인트: 입력 디코딩 → 프레임 조작 → 출력 인코딩의 3단계가 모든 영상 편집의 뼈대입니다.
편집기의 두뇌를 축소판으로 짜봅니다. zustand 스토어에 "클립 추가·이동·삭제"와 "재생 헤드 위치"를 두고, 그 상태를 구독하는 간단한 타임라인 막대 UI를 그려보세요. 상태를 바꾸면 화면이 따라오는 단방향 흐름을 손으로 익히는 게 핵심입니다. 여유가 되면 상태 스냅샷으로 실행취소(undo)까지 붙여 보세요.
"Rust 코드를 브라우저에서 돌린다"를 직접 경험합니다. 작은 Rust 함수(예: 이미지 픽셀 밝기 조정)를 wasm-pack으로 빌드해 웹앱에서 호출해 보세요. OpenCut README의 로컬 WASM 워크플로우(build:wasm → bun link)를 따라 하면 "왜 무거운 일을 Rust로 옮기는지"가 성능 차이로 체감됩니다.
# Rust 툴체인 + wasm-pack 설치 후 curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh cargo install wasm-pack wasm-pack build --target web # .wasm + JS 바인딩 생성
| 주차 | 주제 | 학습 자료 / 키워드 |
|---|---|---|
| 1주 | 브라우저 미디어 기초 | WebCodecs, mediabunny, OPFS·File System Access, 컨테이너(mp4)·코덱(H.264) 개념 |
| 2주 | React 에디터 상태·성능 | zustand(스토어·미들웨어), react-window(가상화), 드래그앤드롭, undo/redo 패턴 |
| 3주 | Rust → WASM + GPU 합성 | wasm-pack, wasm-bindgen, WebGPU·WGSL 셰이더, 이미지/영상 합성(compositor) |
| 4주 | 모노레포·배포·크로스플랫폼 | Turborepo·Bun, Vite·TanStack Start, Cloudflare Workers·wrangler, GPUI(Zed) 맛보기 |
이 4주는 "영상 편집기를 쓰는 사람"에서 "영상 편집기를 만드는 사람"으로 넘어가는 다리입니다. OpenCut은 브라우저 미디어 API, 상태 관리, Rust/WASM, GPU 셰이더, 모노레포·엣지 배포라는 현대 웹의 어려운 주제들이 한 제품에 모여 있는 드문 교재입니다. 각 주제를 따로 배우면 추상적이지만, "영상 편집기"라는 구체적 목표에 묶으면 왜 그 기술이 필요한지가 또렷해집니다.
| 용어 | 의미 |
|---|---|
| CapCut | 바이트댄스의 인기 영상 편집 앱. 유료화·클라우드 의존이 OpenCut 등장 배경 |
| 클라이언트 사이드 처리 | 서버가 아닌 사용자 브라우저/기기에서 직접 처리(프라이버시·즉시성) |
| WebCodecs | 브라우저가 하드웨어 코덱(디코더·인코더)에 직접 접근하게 하는 API |
| mediabunny | WebCodecs 위에서 영상 디코딩·인코딩을 쉽게 해 주는 JS 미디어 라이브러리 |
| WASM (WebAssembly) | Rust·C 코드를 브라우저에서 네이티브에 가깝게 돌리는 기술 |
| opencut-wasm | OpenCut의 Rust→WASM 코어(합성·효과 등 무거운 연산 담당) |
| WGPU / WGSL | 웹·네이티브에서 GPU를 부리는 표준과 셰이더 언어(영상 합성 가속) |
| 컴포지터(Compositor) | 여러 영상·이미지 레이어를 겹쳐 한 프레임으로 합성하는 엔진 |
| OPFS | 사이트 전용 비공개 브라우저 파일 저장소(큰 영상 로컬 보관) |
| zustand | 가볍고 단순한 React 상태 관리 라이브러리(편집기 상태의 진실원) |
| react-window | 화면에 보이는 항목만 렌더하는 가상화 라이브러리(타임라인 성능) |
| Turborepo | 여러 패키지/앱을 한 저장소에서 빌드·캐시하는 모노레포 도구 |
| Bun | 빠른 자바스크립트 런타임 겸 패키지 매니저(npm·node 대체) |
| TanStack Start | Vite 기반 풀스택 React 프레임워크(재작성판이 Next.js 대신 선택) |
| GPUI | Zed 에디터 팀의 Rust용 GPU 가속 UI 프레임워크(데스크탑 예정) |
| MCP | Model Context Protocol. AI 에이전트가 도구(편집기)를 조작하는 표준 통로 |
| 헤드리스 모드 | 화면(UI) 없이 명령으로만 일괄 렌더링·자동화하는 실행 방식 |
| OpenNext | Next.js 앱을 Cloudflare 등 서버리스 엣지에서 돌리는 어댑터(클래식 배포) |
| Biome / Ultracite | Rust로 만든 초고속 린터·포매터와 그 위의 엄격 규칙 세트. 클래식 저장소 루트에 biome.json이 있으나, 재작성판(main)에는 아직 미도입 |
| transformers.js | 브라우저에서 AI 모델을 서버 없이 돌리는 허깅페이스 라이브러리 |