Rust로 다시 짠 크로스플랫폼 인스톨러 + 자동 업데이트 프레임워크. 컴파일러 출력 폴더 하나로 — 설치자·델타 패키지·포터블 버전을 명령 하나로 만들어 준다. Squirrel 사용자에게 자동 마이그레이션 제공. C#·C++·JS·Rust SDK.
데스크탑 앱 배포의 숨겨진 큰 문제.
웹앱은 사용자가 새로고침만 하면 최신 버전이다. 모바일 앱도 앱 스토어가 자동 업데이트해 준다. 그런데 데스크탑 앱은 — 사용자가 직접 새 버전을 다운로드하고 설치하지 않으면 영원히 옛 버전에 머문다. 이 문제를 푸는 게 자동 업데이트 프레임워크다.
2010년대에 표준이 됐던 게 Squirrel(특히 .NET 진영의 Squirrel.Windows, JS 진영의 Squirrel.Mac). Slack·Discord·VSCode 같은 유명 앱이 다 Squirrel 기반이었다. 하지만 — Squirrel.Windows는 유지보수 중단, 코드는 낡았고 Windows 한정, 보안 이슈도 있다.
Velopack은 그 "포스트 Squirrel" 자리를 노리는 후속 프로젝트다. Rust로 처음부터 다시 짜서 Windows·macOS·Linux 모두 커버, Squirrel 사용자는 자동 마이그레이션, "한 명령으로 설치자·업데이트·델타·포터블 다 생성".
.exe(Windows), .dmg/.pkg(macOS), .deb/.rpm/.AppImage(Linux) 같은 형식. 단순 압축 해제만 하는 게 아니라 — 단축키 생성, 레지스트리 등록, 권한 설정, 이전 버전 정리, 코드 서명 검증까지 처리.전체 글의 핵심 메시지.
InstallShield 시대엔 전용 IDE + 별도 스크립트 언어 + 며칠 작업이 필요했다. WiX는 그보다 낫지만 여전히 XML 지옥. NSIS는 자체 스크립팅. 모두 한 플랫폼만.
Velopack은 "한 명령(vpk pack)으로 — 컴파일러 출력 폴더 → 인스톨러·업데이트·델타 패키지·포터블 zip이 한 번에" 나온다. Windows·macOS·Linux 모두. 사용자 측에선 업데이트 적용 후 재시작이 2초 안. UAC 프롬프트도 없다.
트렌딩 10위까지 올라온 맥락.
2024~2026년 데스크탑 앱 시장의 흐름이 두 가지로 정리된다 — 1) Electron·Tauri로 데스크탑 앱이 다시 늘어남, 2) 기존 인스톨러 도구들이 노후화. Velopack은 이 두 흐름의 교차점에 있다.
10년 넘게 표준이었던 도구가 사실상 죽었다. 새 Windows 11·macOS Sequoia에서 미묘한 버그들이 누적, 코드 서명 정책 변화 대응 안 됨. 큰 회사 앱들은 그래도 자체 fork로 버티지만, 새 프로젝트엔 부담스럽다.
Squirrel 기반 앱은 Velopack으로 — 코드 한 줄 수정 없이 자동 마이그레이션. 사용자가 옛 버전에서 새 버전(Velopack 기반)으로 업데이트하면 자동으로 이행. Squirrel의 모든 앱이 Velopack으로 갈아탈 수 있는 경로 제공.
전통적 인스톨러 도구는 — XML 천 줄, GUI 클릭 백 번, 별도 스크립트 언어 학습. "Hello World" 인스톨러 만드는 데 하루.
컴파일러 출력 폴더 위치만 넘기면 끝.
이 한 명령이 인스톨러·업데이트·델타·포터블을 다 만든다. "제로 설정(zero config)"이라는 표어가 헛말이 아니다.
Windows는 WiX/InstallShield, macOS는 .pkg/notarization, Linux는 deb/rpm/AppImage. 한 앱을 3OS에 배포하려면 3개의 다른 빌드 시스템.
같은 vpk pack 명령이 OS별로 적절한 포맷을 생성. CI/CD 한 워크플로우로 3OS 배포 가능. 크로스플랫폼 데스크탑 앱(Electron/Tauri) 시대의 표준 인프라.
Rust 코어 + 다언어 SDK.
패키지 생성·서명·업로드를 담당하는 명령줄 도구. "vpk pack" 한 줄로 인스톨러·업데이트·델타·포터블 zip을 동시에 생성. .NET global tool로 배포 — dotnet tool install -g vpk로 설치. (Rust로 작성된 것은 사용자 측 Update Runtime뿐임.)
사용자 측 앱에 들어가는 작은 Rust 바이너리. 백그라운드에서 업데이트 체크 + 다운로드 + 적용. 실행 중인 앱이 자기 자신을 못 덮어쓰는 문제는 별도 도우미 프로세스로 해결 — 메인 앱이 종료된 직후 그 자리에 새 버전을 풀고 재시작.
주력 사용자층. dotnet add package Velopack로 설치. WPF·WinForms·Avalonia·MAUI 등 .NET 데스크탑 앱이 첫 번째 타깃. Squirrel의 .NET 사용자가 그대로 옮겨올 수 있게 API 호환성 유지.
Electron·NW.js 같은 JS 기반 데스크탑 앱용. npm 패키지로 배포. UpdateManager 클래스로 업데이트 체크·다운로드·적용을 비동기 API로 제공.
네이티브 앱용. Velopack은 자체가 Rust로 작성됐기 때문에 Rust SDK는 단순 wrapper. C++ SDK는 C ABI를 노출. Qt·wxWidgets·네이티브 Win32 앱이 타깃.
Python 기반 데스크탑 앱용. src/lib-python/에 위치하며 PyPI로 배포. Qt(PyQt·PySide)·WXPython 등 Python GUI 프레임워크 앱을 지원. samples/PythonQt·samples/PythonWXPython 예제 앱 포함.
Velopack은 특별한 백엔드 없이 정적 파일 호스팅으로 동작. S3·Azure Blob·GitHub Releases·CDN 어디든. 클라이언트가 RELEASES 파일을 받아 어떤 버전이 있는지 확인 후, 해당 nupkg/delta 파일을 다운로드.
Windows의 Authenticode(EV 인증서·OV 인증서), macOS의 notarization(Apple 공증). vpk pack 명령에 인증서·키 경로만 넘기면 자동 서명. CI/CD에서 secrets로 관리 → 빌드 시 자동 서명.
"새 버전이 나왔다"부터 "사용자가 새 버전을 쓰고 있다"까지.
핵심 — "앱이 자기 자신을 업데이트 못 한다"는 OS의 본질적 제약을 별도 도우미 프로세스로 해결. 메인 앱이 종료된 직후 도우미가 일하고, 끝나면 새 버전을 띄운다. 사용자에겐 그냥 "재시작 한 번"으로 보인다.
다른 업데이트 도구들은 종종 자체 서버나 API를 요구하지만, Velopack은 RELEASES 파일 + nupkg 파일을 정적으로 호스팅하면 끝. S3·GitHub Releases·자기 nginx 어디든. "인프라 비용 0원으로 업데이트 시스템 구축"이 가능.
새 버전과 이전 버전 사이의 차분을 bsdiff·zstd로 압축. 100MB 앱의 5MB 변경이 1~3MB 델타로 떨어진다. 업데이트 다운로드를 평균 95% 줄임. 사용자 측은 전체 앱 다운로드 없이도 빠른 업데이트.
Windows에서 실행 중인 .exe는 잠겨 있어 다른 프로세스가 못 쓴다. Velopack의 해결책 — UpdateExe라는 작은 도우미가 별도 프로세스로 떠서, 메인 앱 종료를 기다린 뒤 파일 교체 + 새 버전 실행. 사용자 시점에선 "재시작" 하나로 보임.
전통적 인스톨러는 Program Files 같은 시스템 폴더에 설치 → 매번 UAC 프롬프트. Velopack은 사용자 폴더(%LocalAppData%)에 설치 → 관리자 권한 불필요 → 업데이트도 UAC 없이 진행. 자동 업데이트 UX가 매끄러워지는 핵심.
앱 시작 시 첫 줄에 VelopackApp.Build().Run()을 호출하면 — 업데이트 후 첫 실행 시 자동으로 후처리(단축키 갱신·이전 버전 마이그레이션) 처리, 일반 실행 시는 그냥 통과. "업데이트 후처리"를 앱이 자기 코드 안에서 처리 — 별도 인스톨러 스크립트 필요 없음.
Rust 코어 + 다언어 SDK 모노레포.
vpk(개발자 도구) + update(사용자 측 도우미) 두 바이너리가 여기서 빌드된다. 플랫폼별 차이는 platforms/로 격리. 라이브러리 부분은 두 바이너리에서 공유.
.NET 사용자가 가장 많이 만지는 부분. UpdateManager 클래스, VelopackApp.Build() 라이프사이클, SquirrelAwareApp 호환 레이어 등. 내부에서는 별도 프로세스(Process.Start)로 Rust update 바이너리(Update.exe)를 실행.
WPF·Avalonia·Electron·React·Vite·QT 등 다양한 프레임워크 예제 앱이 들어있다. 자기 스택에 맞는 예제를 fork해서 시작하면 5분 안에 첫 업데이트 사이클 동작. 학습 곡선이 가파르지 않은 핵심.
Docusaurus 기반 문서 사이트. Quick Start, 코드 서명 가이드, CI/CD 통합, FAQ 등. 컴파일된 결과물이 docs.velopack.io. 문서 품질이 Squirrel과 비교 안 될 정도로 정돈돼 있다 — 채택 가속의 큰 요인.
데스크탑 앱 배포의 표준 패턴.
실행 중인 프로세스가 자기 .exe를 못 덮어쓰는 OS 제약은 — 별도 도우미 프로세스로 푼다. 메인 앱이 종료된 직후 도우미가 파일을 교체하고 새 버전을 실행. 자기 데스크탑 도구를 만들 때도 같은 패턴.
100MB 앱의 5MB 변경 → 1~3MB 델타. 사용자 다운로드 시간·서버 대역폭 비용이 극적으로 줄어든다. bsdiff·zstd·xdelta 같은 차분 알고리즘 학습 가치 충분.
Program Files 설치는 매번 UAC 프롬프트. 사용자 폴더 설치는 권한 불필요. 자동 업데이트가 매끄러워지는 핵심 트릭. Chrome·Edge·Discord 등 현대 데스크탑 앱이 다 이 패턴.
RELEASES 매니페스트 + nupkg 파일을 S3·CDN·GitHub Releases에 그냥 올려두면 끝. 전용 API 서버·DB 필요 없음. 작은 앱이 대규모로 성장해도 운영 비용이 거의 안 늘어남.
Windows Authenticode + macOS notarization을 — vpk pack 명령의 옵션으로 처리. CI/CD에서 secrets로 인증서 관리. 별도 수동 서명 단계가 사라지는 게 큰 장점.
개발자/사용자 양쪽.
.NET 환경이면 dotnet tool install -g vpk. 또는 GitHub Releases에서 OS별 prebuilt 바이너리. macOS는 brew install velopack/tap/vpk.
.NET: dotnet add package Velopack. JS: npm install velopack. Rust: cargo add velopack. C++: 헤더·라이브러리 다운로드.
macOS dmg 생성은 macOS 빌드 머신 필요(Apple notarization 때문). Windows exe는 Windows에서 빌드 추천(Authenticode 통합 편의). Linux는 어디서든 OK. CI/CD에선 보통 3개 OS 러너를 매트릭스로 사용.
Windows 10+, macOS 10.15+, Linux(주요 배포판). 사용자는 그냥 인스톨러 받아 실행하면 끝 — Velopack의 존재를 알 필요 없음.
난이도 ★~★★★★★.
레포 clone → examples/CSharpWpf/ 같은 폴더로 가서 README 따라 빌드. vpk pack 한 번이 어떻게 인스톨러를 만들어 내는지 실제로 확인. 15분 작업.
WPF·Electron·Avalonia 등 자기가 자주 쓰는 데스크탑 프레임워크의 작은 앱을 — Velopack으로 패키징. v1.0 빌드 + 인스톨 → v1.1 빌드 → 첫 자동 업데이트 사이클 동작 확인.
자기 앱의 RELEASES + nupkg를 GitHub Releases에 자동 업로드(GitHub Actions). UpdateManager가 GitHub Releases URL을 가리키게 설정. 비용 0원의 자동 업데이트 인프라 완성.
GitHub Actions에 — Windows Authenticode 인증서, Apple Developer ID 인증서를 secrets로 등록. vpk pack 옵션으로 자동 서명 + notarization. "클릭 한 번에 3OS 서명된 인스톨러 배포" 파이프라인 완성.
실전 Squirrel 기반 앱(또는 그 fork)을 Velopack으로 옮긴다. 기존 사용자의 자동 마이그레이션이 작동하는지 검증. 대규모 사용자 베이스를 깨지 않고 인프라 교체가 핵심 도전.
4주 코스.
docs.velopack.io의 Quick Start를 자기 스택으로 완주. 실제 인스톨러·업데이트 사이클을 한 번 돌려 봄.
Squirrel(.Windows / .Mac), Sparkle(macOS), ClickOnce(.NET), Tauri Updater, Electron auto-updater 등 — 같은 문제를 푸는 다른 도구들과 비교. 각 도구의 디자인 트레이드오프를 이해.
Windows Authenticode(EV vs OV 인증서)·macOS notarization 정독. 보안 정책 변화(SmartScreen·Gatekeeper)도. "코드 서명을 빌드 파이프라인에 자동화하기"는 모든 데스크탑 앱 개발자의 필수 기술.
bsdiff·xdelta·zstd 같은 차분/압축 알고리즘 원리. 자기 도메인의 다른 큰 파일(빌드 아티팩트·게임 에셋·ML 모델)에도 같은 패턴 적용 가능. "전체 다운로드 vs 델타 다운로드"의 비용·복잡도 트레이드오프.
짧은 정의 모음.
레포·문서·관련 프로젝트.