YelpRadu Comaneci, Software EngineerProblem & solution
How Yelp Keeps Server-Driven UI Consistent Across Four Platforms
Summary
Yelp maintains two major applications across Web, iOS, and Android, which previously led to fragmented server-driven UI implementations with mismatched backend component representations. To unify its server-driven UI framework, CHAOS, with its cross-platform design system, Cookbook, Yelp built an automated bridge library called Konbini. Konbini reads centralized JSON interface definitions through Jenkins pipelines to automatically generate synchronized libraries for Python, Kotlin, Swift, and TypeScript. These generated libraries handle component serialization on the backend and deserialization on client platforms. To maintain backward compatibility when component interfaces introduce breaking changes, client requests pass versioned spec identifiers, prompting the backend to execute migration methods that downcast newer component models to older supported versions.
Context
Yelp supports two major applications (Yelp and Yelp for Business) across Web, iOS, and Android, resulting in six platform variations. Before CHAOS, server-driven UI development was fragmented across teams, creating differing backend component representations, varying action handlers, and inconsistent properties that lacked alignment with Yelp's internal design system, Cookbook.
Approach / What changed
Yelp created Konbini, an automated code-generation bridge library maintained by its Design Systems team. Centralized JSON component interface definitions trigger Jenkins pipelines to generate four synchronized libraries: Python for backend serialization, Kotlin for Android, Swift for iOS, and TypeScript for Web. Konbini manages backward compatibility using versioned client specs and backend migration methods that backport newer component schemas to older client-supported models.
Takeaways
Konbini generates four synchronized platform libraries from a single JSON component interface definition: Python for backend services, Kotlin for Android, Swift for iOS, and TypeScript for React on Web.
Automated Jenkins pipelines trigger code generation and package publishing whenever new commits are pushed to the component interfaces repository.
Client requests supply spec version identifiers (such as [email protected]), allowing backend services to invoke migration methods that transform newer component models into versions supported by older clients.
Source and freshness
- Source
- engineeringblog.yelp.com
- Published
- Added to Yomu
- Last updated
Summaries are generated from the original by a language model. Check the original before relying on it.
Keep reading
Related reading
The Good Stuff
Paid picks we use ourselves. Links carry a referral code — a subscription through one earns us a commission at no extra cost to you.
The best engineering reads, once a week
One useful email. Unsubscribe anytime.