- Snap(스냅챗)이 만든 Valdi는 iOS, Android, macOS에서 네이티브 성능을 제공하는 크로스플랫폼 UI 프레임워크로, 선언형 TypeScript로 작성된 UI를 각 플랫폼의 네이티브 뷰로 직접 컴파일함
- 웹뷰나 JavaScript 브리지 없이 동작하며, 자동 뷰 재활용, 최적화된 레이아웃 엔진, 뷰포트 기반 렌더링 등으로 높은 성능을 유지함
- 즉시 핫 리로드, VSCode 디버깅, TSX 문법 지원 등으로 개발 속도를 높이고, 기존 네이티브 앱과의 통합도 유연하게 지원함
- TypeScript와 네이티브 코드 간 타입 안전 바인딩, protobuf 지원, C++·Swift·Kotlin 연동 등으로 깊은 네이티브 통합 구조를 제공함
- 8년간 Snap의 프로덕션 앱에서 검증된 기술로, 대규모 애니메이션·제스처·멀티스레드 처리 등 고급 기능을 포함한 확장 가능한 UI 개발 기반임
Valdi 개요
-
Valdi는 Snap이 8년간 프로덕션 앱에서 사용해 온 크로스플랫폼 UI 프레임워크
- 선언형 TypeScript로 UI를 작성하면 iOS, Android, macOS의 네이티브 뷰로 직접 컴파일
- 웹뷰나 JavaScript 브리지 없이 네이티브 성능을 제공
- 현재 베타 단계이며, 오픈소스 환경에서의 도구와 문서 안정화가 완료되면 정식 버전으로 전환 예정
주요 특징 및 예시
- 기본 컴포넌트 예시는
HelloWorld클래스에서와을 사용해 간단한 UI를 구성 - TypeScript 기반의 선언형 컴포넌트 구조를 사용하며, 각 플랫폼에서 동일한 코드로 실행 가능
- 공식 문서, 설치 가이드, API 레퍼런스, Codelab 등 개발 자료 제공
성능 최적화
-
네이티브 성능 확보를 위해 다음과 같은 구조를 채택
- 자동 뷰 재활용: 전역 뷰 풀링 시스템으로 화면 간 뷰 재사용, 인플레이션 지연 최소화
- 독립적 컴포넌트 렌더링: 부모 렌더링에 영향 없이 개별 컴포넌트만 갱신
- C++ 기반 레이아웃 엔진: 메인 스레드에서 최소 오버헤드로 동작
- 뷰포트 인식 렌더링: 화면에 보이는 뷰만 인플레이트하여 무한 스크롤 성능 향상
- 관련 문서로 Performance Optimization Guide 제공
개발자 경험
- 핫 리로드 기능으로 코드 변경 후 즉시 반영
- VSCode 디버깅 지원: 브레이크포인트 설정, 변수 검사, 성능 프로파일링, 힙 덤프 캡처 가능
- TSX 문법과 타입 안정성으로 친숙한 개발 환경 제공
유연한 통합 구조
-
기존 네이티브 앱에 Valdi 삽입 가능 (
Embed Valdi in native) -
Valdi 내에서 네이티브 뷰 사용 가능 (
Embed native in Valdi) - Polyglot 모듈을 통해 C++, Swift, Kotlin, Objective-C 코드와 타입 안전하게 연동
- Full-stack 아키텍처로 백그라운드 워커 스레드를 활용한 전체 기능 구현 가능
네이티브 통합
- 자동 코드 생성으로 TypeScript 인터페이스를 Kotlin, Objective-C, Swift 바인딩으로 변환
- Polyglot 모듈을 통해 플랫폼 API 및 서드파티 네이티브 라이브러리에 직접 접근
- 양방향 통신으로 복잡한 데이터 구조와 콜백을 안전하게 교환
- protobuf 지원으로 효율적인 데이터 직렬화 가능
검증된 안정성 및 기능
- Snap의 주요 프로덕션 기능을 구동하는 핵심 기술
- 고급 애니메이션, 실시간 렌더링, 복잡한 제스처 시스템 지원
- Flexbox 레이아웃, 멀티스레드 워커, 네이티브 애니메이션, 고급 제스처 인식, 내장 테스트 프레임워크, Bazel 통합 빌드 등 다양한 기능 포함
지원 및 라이선스
- Discord 커뮤니티를 통한 지원 제공
- MIT 라이선스로 공개되어 자유로운 사용 및 기여 가능