Lynx: ByteDance’s open-source cross-end UI framework

When you first see Lynx, it’s easy to have a misconception:
“Another cross-end framework for Flutter/RN?”

But if you follow its design all the way, you’ll see that it didn’t intend to participate in this game at all.

Lynx is more like answering a very specific question:

In an app that has been drained of performance budgets by information flow, dynamic UI, and complex interactions, can you continue to write interfaces in a front-end way?

The real difficulty of cross-end technology is never “being able to run”

In small-scale applications, the problems with cross-end frameworks are typical:

  • The API is incomplete
  • The native ability is not smooth enough
  • Some components are not easy to write

But in large-scale apps, the problem is completely different:

  • There are hundreds of components on a page
  • The UI structure changes frequently, but must be hot-updated
  • As soon as the frame drops by swiping, the indicator starts to alarm
  • Every communication between JS and Native costs money

At this time, “elegant abstraction” may be a negative asset.

Lynx’s presence starts here.

Lynx’s core attitude: Don’t let JS get too busy

Lynx doesn’t hate front-end technology.
What it really warns about: let JS be the command center for the rendering system.

In Lynx, JS is more like:

  • Describe the UI structure
  • Organizational state changes
  • Express business logic

But the real scheduling, rendering, and performance control almost all pushed back to Native.

This is actually a very “engineering reality” idea:

JS writes fast and is fine.
But frame drops, stuttering, crashes, and in the end, it was Native who took the blame.

It’s better to let Native take back control in the first place.

Why doesn’t Lynx pursue full web semantics?

Many people see that Lynx does not intend to fully implement HTML/CSS, and subconsciously feel that it is “incomplete”.

But from an engineering point of view, this is precisely where it is most sober.

The Full Web Standard means:

  • Historical baggage
  • Blur boundaries
  • Performance is unpredictable

Lynx uses it for highly controllable internal business:

  • Module forms are limited
  • UI patterns are highly repetitive
  • It is not written casually for third parties

Under this premise, restraint is more important than compatibility.

It’s not like RN, it’s not like Flutter

The biggest features of Lynx are:
It has no ambition to become a “universal solution”.

  • RN wants to lower the barrier to entry for front-end to native
  • Flutter wanted to build a platform-independent UI world
  • Lynx only cares about:
    “In an already heavy app, stop letting the UI be an instabilizing factor.”

This is also why it looks:

  • Not friendly enough
  • Not versatile enough
  • Even a bit of an “internal tool smell”

But that’s exactly where it really is.

So is it worth watching?

If your goal is:

  • Find a cross-end solution that you can get started with right away
  • Or make a standalone app

Then Lynx basically has nothing to do with you.

But if you care:

  • What are the real problems encountered by large factories?
  • How does the project in turn limit abstraction when scale gets out of control
  • What shape the UI system will take under extreme pressure

That Lynx is a very honest sample.

It doesn’t seem like it’s telling you “what to do.”
It’s more like saying:

When you have no way out, the project will force you to make a choice.

Github:https://github.com/lynx-family/lynx
Tubing:

Scroll to Top