Skip to content
Lucent
SEARCH LUCENT

Search guides, APIs, and examples.

GitHub

Very early and experimental. The language, the generated native code and every package API change without notice. Do not use Lucent in production.

Lucent, Expo Modules, Nitro and Turbo Native Modules

What each one has you write, how it reaches native code, what it can do today, and when to pick it.

Expo Modules, Nitro Modules, Turbo Native Modules and Lucent all let JavaScript call native code synchronously over JSI. They differ in the languages you write, how the interface is declared, and how much of the platform you reach today.

LucentExpo ModulesNitro ModulesTurbo Native Modules
You write
A TypeScript subsetmodules in *.lucent.ts and components in *.lucent.tsx, compiled to C++20Swift + KotlinC++, or Swift + KotlinSwift and Kotlin each cover one platformObj-C++ + Java/Kotlin, or C++Swift needs Objective-C++ glue
Interface defined by
The implementationits exported functions, types and classesA Swift/Kotlin DSLthe module definitionA TypeScript spec*.nitro.ts; Nitrogen (optional) generates the native interfacesA TS or Flow specCodegen generates the native interfaces
Codebases per module
121 or 21 in C++; plus the spec2, or 1 in C++C++ still needs a small platform registration layer; plus the spec
Call path
JSI → C++one pure C++ TurboModuleJSIthrough Expo's module layerJSI → C++Hybrid Objects on jsi::NativeState; Swift and Kotlin through generated bridgesJSIC++ modules directly, others through the platform interop layer
Platform SDKs
Mosttyped from your Xcode and Android SDK, Swift-only and Kotlin-only APIs included through generated Swift and Kotlin; lucent sdk coverage lists what can't be bound yet. See SDK typesFullFullFull
Views
ExperimentalUIKit and Android views, and SwiftUI and Jetpack Compose written as JSX, behind an internal switch. See the announcementYesView in the module definitionYesNitro Views; React Native 0.78+, New ArchitectureYesFabric Native Components, a separate API
Bare React Native / Expo
BothReact Native 0.88, Expo SDK 58Bothbare apps install the expo packageBothReact Native 0.75+Both
Maturity
Experimentalsee the roadmapProductionthe Expo SDK is built on itProductionused by widely adopted published librariesProductionpart of React Native core

Native code of any of these kinds needs a development build: it doesn't run in Expo Go. How a module becomes native code shows what Lucent generates.

Lucent calls go through JSI into C++, like Nitro Modules and C++ Turbo Native Modules. We publish no speed comparison between these tools. lucent bench measures your own module against the same code run as JavaScript.

  • Expo Modules: your team already writes Swift and Kotlin, or you need views and full platform SDK access today.
  • Nitro Modules: you want the most performance, write C++, Swift or Kotlin, and like declaring the interface in TypeScript first.
  • Turbo Native Modules: you are writing a library that should depend only on React Native core.
  • Lucent: you want native code without adding Swift, Kotlin or C++ to the codebase. You can do without views and an npm release for now.

The other tools were last checked on 2026-09-23, and Lucent's rows updated on 2026-10-01. Corrections are welcome.