Inside Valdi: What We Learned Exploring Snapchat’s New UI Framework

Featuring
Łukasz Chludziński
Engineering Manager
@
Callstack
Kewin Wereszczyński
Software Engineer
@
Callstack
Hubert Sosiński
Software Engineer
@
Callstack
Matt Hargett
Founder
@
Rebecker Specialties

During this week’s live session, Łukasz Chludziński, Kewin Wereszczyński, Hubert Sosiński, and Matt Hargett took a close look at Valdi: the newly released UI framework open-sourced by Snapchat. They approached it like any developer encountering it for the first time would,  exploring documentation, bootstrapping a project, and examining how Valdi differs from React-style workflows.

What Valdi is and why it exists

Valdi’s stated purpose is a cross-platform UI framework designed to bridge the tension between developer velocity and runtime performance. It has powered large parts of Snapchat’s production apps for eight years, which explains why it ships with a mature set of internal patterns. The framework was originally built to support Snap’s multi-platform ambitions while maintaining native-level performance characteristics.

Should Valdi be considered a framework or a development environment? Well, the boundary between the two is blurred when tools, build steps, and rendering pipelines are tightly integrated.

Architecture differences: render functions, not JSX returns

One of the central conversations focused on Valdi’s rendering model, which diverges from the familiar React component structure. The critical distinction is that Valdi uses render functions that return void rather than actual element objects. This lets Valdi evaluate render functions at the exact location where UI should be emitted, enabling fine-grained control over render paths and making incremental rendering cheaper by design. This model avoids some of the overhead inherent in React’s diffing process, shifting performance considerations toward compile-time and AOT strategies.

Working with the tooling and docs

Much of the stream focused on understanding how to get a Valdi project running. The hosts experimented with installing the CLI, navigating documentation, and filing through confusing or incomplete setup instructions. Several clues suggested that parts of the documentation originated as internal onboarding materials cleaned up for external release.

They also tested bootstrapping a new project using valdi bootstrap, stepping through prompts that generated an iOS, Android, and macOS application scaffold. Moments like these revealed both the strengths and growing pains of a framework that has only just been made public.

Demos: bootstrapping and hot reload

After generating a project, Łukasz explored the initial file structure, ran the application, and attempted to inspect components directly in the repo. Although some pieces were hard to locate, the team eventually reached a working setup and moved on to test Valdi’s hot reload.

A small change inside a module triggered a near-instant update in the running app once the file was saved. The quick turnaround suggested a different mechanism than the typical JavaScript-driven HMR loop and led to a discussion about how Valdi’s architecture might support this level of responsiveness.

Bigger picture: where Valdi fits

What are Valdi’s ambitions and long-term direction? Since Valdi compiles to native, some of the code may never run as JavaScript or Hermes, which positions it differently from frameworks that lean heavily on JS runtimes. The hosts also wondered how Valdi might scale to other Snap platforms, such as Spectacles, and what future evolution might look like based on internal feedback cycles at Snap.

Closing thoughts

Exploring Valdi live gives a practical sense of how the framework behaves beyond marketing claims. The setup experience, the rendering model, and the near-instant file-save updates showed that Valdi combines familiar ideas with a different execution path than React-style systems.

It’s early days, and several pieces still feel internal, but the underlying approach is clear enough to spark real curiosity. The session ends with a shared sense that Valdi is worth watching: not as a React Native replacement, but as another attempt to balance velocity and native performance with a typed, modern toolchain.

‍

Insights

Learn more about Cross-Platform

cover

Feb 27Article

Sparkling: The Missing App Layer for Lynx.js?

A hands-on look at Sparkling for Lynx.js: CLI, native navigation, and the tooling layer that turns Lynx into a full mobile app framework.

cover

Feb 12Live Stream

Sparkling: A New Framework for Lynx

Join the Lynx team live as we explore Sparkling, its boundaries with Lynx, core features, and bootstrap a project from scratch.

cover

Dec 19Article

Visualizing the Dual-Thread Model of Lynx JS

A practical look at Lynx JS’s dual-thread runtime, using real examples to show how main and background threads behave under load.

cover

Dec 2Live Stream

Two Threads of Lynx.js Part 2

Learn how Lynx.js uses a dual-threaded model, how its APIs work, and what it means for performance in this live session with Lukasz Chludzinski and Kewin Wereszczynski.

cover

Nov 27Live Stream

Exploring Lynx.js and Its Two-Thread Runtime

A recap of our live session exploring how Lynx.js splits work across a main thread and a background thread.

cover

Nov 7Article

Exploring Lynx JS: From Quick Start to CLI Workflows

Learn how to set up Lynx JS, explore its ecosystem, and use the Community CLI to build native apps with a familiar JavaScript workflow.

cover

Sep 19Podcast

React Native at Scale With NFL

Discover how the NFL uses React Native, Expo, and a monorepo to ship apps across iOS, Android, web, and TV with one stack.

cover

Aug 5Article

How Node-API Works in React Native: A Deep Dive

A closer look at how Node-API works in React Native, covering addon loading, bundling, the host package, and new build tools like cmake-rn and ferric-cli.

cover

Feb 7Article

Bringing WebAssembly to React Native With Polygen

Discover Polygen, a toolkit that brings WebAssembly to React Native, compiling WASM to C for near-native performance with no runtime overhead.

cover

Dec 20Article

From Native to Multiplatform Development: Unpacking Kotlin and Compose

Discover how Kotlin Multiplatform, Jetpack Compose, and Compose Multiplatform compare to React Native. Learn their roles, relationships, and use cases.

cover

Aug 7Podcast

Open Mobile Hub: Non-GMS and Cross-Platform Possibilities

When you build applications, do you ever consider users who may not have access to Google Mobile Services? They may not be your target audience now, but it's good to be aware of what options you have in store for non-GMS devices — which is exactly what we're talking about in this episode!

cover

May 31Podcast

Stepping Into New Dimension With React Native VisionOS

Try immersing yourself in the React Universe with React Native visionOS! Listen about the latest changes in the framework & watch a 3D app demo.

cover

Mar 19Tutorial

The Hard Way vs. The React Native AI SDK Way: Stop Writing Custom Modules for Every Model

Learn how React Native AI uses a unified provider model to switch between cloud and on-device LLMs without rewriting application logic, enabling reliable AI experiences online and offline.

cover

Mar 12Tutorial

Build Smarter Apps: Tool Calling & AI Orchestration Explained

Learn how on-device models in React Native can call tools, interact with external APIs, and return structured outputs you can use directly in application logic.

cover

Mar 5Tutorial

MLC LLM + React Native: On-Device AI Without the Pain

Learn how to run third-party on-device LLMs in React Native using MLC LLM. Choose your models, run them efficiently across platforms, and keep a unified JavaScript API with React Native AI.

cover

Feb 24Tutorial

Intelligent Fallbacks with Apple Intelligence in React Native

Learn how to use Apple’s built-in Foundation Models in React Native apps, reduce memory usage, and enable fast, fully on-device AI with React Native AI Apple.

cover

Feb 10Tutorial

What Is the React Native AI SDK? A Complete Intro & Quickstart

Learn why on-device AI matters for React Native apps, how local LLMs behave offline, and what problems React Native AI is designed to solve from day one.

cover

Jan 29Tutorial

Implementing an Android TurboModule with Kotlin

Learn how to implement a React Native TurboModule on Android, from the TypeScript spec and Codegen to the Kotlin implementation and package registration.

cover

Jan 19Tutorial

Working with Different Threads in Swift TurboModules

Learn how JavaScript, native module, background, and main threads interact in React Native TurboModules, and how to use GCD queues to run async work safely in Swift.

cover

Jan 9Tutorial

How to Add Type-Safe Constants to Swift TurboModules

Learn how to expose typed, immutable constants from a Swift TurboModule using Codegen, and get full end-to-end type safety between native and JavaScript.

cover

Dec 30Tutorial

Adding Event Emitters to Your TurboModule in Swift

Learn how to emit native events from a Swift TurboModule and subscribe to them in JavaScript, including proper memory management and Codegen integration.

cover

Dec 22Tutorial

Writing Your First TurboModule in Swift

Learn how to build a fully working TurboModule in Swift, integrate it with Codegen, and bridge it through Objective‑C inside an Expo app.