- 웹 앱과 TypeScript 코드로 만든 Deno 프로젝트를 플랫폼별 재배포 가능한 데스크톱 앱 바이너리로 묶을 수 있음
- 출력물은 애플리케이션 코드, Deno 런타임, 웹 렌더링 엔진을 함께 포함하며, Deno v2.9.0에 들어갔지만 아직 안정 릴리스는 아님
- 기본 WebView 백엔드는 운영체제 내장 webview를 사용해 작은 바이너리를 지향하고, 렌더링 일관성이 필요하면 Chromium(CEF) 백엔드를 선택할 수 있음
- Next.js, Astro, Fresh, Remix, Nuxt, SvelteKit, SolidStart, TanStack Start, Vite SSR 프로젝트를 감지해 릴리스 모드와 --hmr 개발 모드에 맞게 서버를 실행함
- Deno 코드와 webview 간 통신은 소켓 기반 IPC가 아닌 인프로세스 채널을 쓰며, 교차 컴파일과 bsdiff 기반 자동 업데이트까지 범위에 포함됨
deno desktop의 역할과 현재 상태
- deno desktop은 Deno 프로젝트를 자체 포함형 데스크톱 애플리케이션으로 변환함
- 입력은 단일 TypeScript 파일부터 Next.js 앱까지 가능함
- 출력은 플랫폼별로 재배포 가능한 바이너리임
- 바이너리에는 애플리케이션 코드, Deno 런타임, 웹 렌더링 엔진이 포함됨
- 이 기능은 Deno v2.9.0에 포함되어 있지만 아직 안정 릴리스는 아님
- 지금 시험하려면 deno upgrade canary로 canary 빌드를 설치해야 함
- 명령어, 설정 키, TypeScript API는 안정화 전까지 바뀔 수 있음
백엔드 선택과 웹 프로젝트 실행
- 웹 기술을 데스크톱 UI 툴킷으로 쓰면서, 기존 웹 스택 기반 데스크톱 앱 도구의 트레이드오프를 줄이는 방향을 택함
- Electron, Tauri, Electrobun 같은 도구는 큰 바이너리, 플랫폼 지원 누락, JavaScript 생태계 부재, 내장 업데이트 부재, 프레임워크 통합 부재 같은 트레이드오프가 있을 수 있음
- 기본 WebView 백엔드는 운영체제의 webview를 사용해 작은 바이너리를 지향함
- Deno의 Node 호환 계층을 통해 npm 생태계를 사용할 수 있음
- macOS·Windows·Linux에서 같은 렌더링이 필요하면 번들된 Chromium인 CEF 백엔드를 선택할 수 있음
- 프레임워크 자동 감지는 기존 웹 프로젝트를 코드 변경 없이 데스크톱으로 실행하는 방식임
- 대상은 Next.js, Astro, Fresh, Remix, Nuxt, SvelteKit, SolidStart, TanStack Start, Vite SSR 등임
- 릴리스 모드에서는 프로덕션 서버를 실행함
- --hmr에서는 핫 리로드가 있는 개발 서버를 실행함
런타임 통신, 빌드, 업데이트
- 백엔드와 UI 통신에는 인프로세스 채널을 사용함
- 값은 호출 경계를 넘을 때 인코딩됨
- Deno 코드와 webview 사이에 교차 프로세스 왕복이 없음
- 한 머신에서 macOS, Windows, Linux용으로 교차 컴파일할 수 있음
- 백엔드는 로컬에서 빌드하지 않고 필요할 때 다운로드됨
- 자동 업데이트는 latest.json 매니페스트와 bsdiff 패치를 사용하는 내장 바이너리 차분 업데이트 방식임
- 런타임이 폴링, 적용, 실패한 실행에 대한 롤백을 처리함
간단한 예제와 문서 구성
- 한 파일짜리 데스크톱 앱은 Deno.serve()로 HTML 응답을 반환하는 main.ts를 만들고 deno desktop main.ts를 실행해 만들 수 있음
Deno.serve(() =>
new Response("<h1>Hello, desktop</h1>", {
headers: { "content-type": "text/html" },
})
);
deno desktop main.ts
- 컴파일된 바이너리는 Deno.serve() 핸들러에 바인딩된 로컬 HTTP 서버를 가리키는 창을 엶
- macOS/Linux에서는 ./main으로 실행함
- Windows에서는 .\main.exe로 실행함
- Deno.serve()는 webview가 이동하는 주소에 자동 바인딩되므로 포트나 호스트 이름을 넘길 필요가 없음
- 관련 문서는 설정, 백엔드, HTTP 서빙, 프레임워크, 창 관리, 바인딩, 메뉴, 트레이와 dock, 대화상자, 알림, HMR, DevTools, 자동 업데이트, 오류 보고, 배포, 비교, CLI 참조로 나뉨