# How Yelp Keeps Server-Driven UI Consistent Across Four Platforms

[Yelp](https://yomu.fyi/company/yelp) · Radu Comaneci, Software Engineer · Apr 22, 2026

**Type:** Problem & solution

## 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 android@23.0), allowing backend services to invoke migration methods that transform newer component models into versions supported by older clients.

**Tags:** [Android](https://yomu.fyi/topic/android), [Architecture](https://yomu.fyi/topic/architecture), [iOS](https://yomu.fyi/topic/ios), [Python](https://yomu.fyi/topic/python), [TypeScript](https://yomu.fyi/topic/typescript)

[Read original post](https://engineeringblog.yelp.com/2026/04/keeping-server-driven-ui-consistent-across-platforms.html)
