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.

Roadmap

What works today, what's next, and what's later, milestone by milestone.

A module runs as C++ in a bare React Native app and an Expo app, on iOS and Android.

StatusItem
doneA C++ runtime with JavaScript's numbers, strings, arrays, maps, sets and errors.
doneOne C++ TurboModule, autolinked on iOS and Android.
doneThe compiler: the TypeScript checker, then C++ with #line back to the source.
donelucent build, the Metro integration and the Expo config plugin.
doneEvery language feature tested against the same code run as JavaScript.

Self-contained modules, such as parsers, codecs and data structures.

StatusItem
doneStatements, expressions, destructuring and template literals.
doneObject types, unions, narrowing, enums and generics.
doneClasses with inheritance and interfaces, closures, generators, regular expressions and JSON.
doneasync and await off the JS thread, AbortSignal, JS callbacks and promises.
donebigint, with values of any size crossing to JavaScript exactly.
doneusing declarations and Symbol.dispose.
doneLucent code runs one piece at a time, so it has no data races.
doneHeavy work on worker threads with compute, checked so a task shares no state.
doneNativeBuffer, which hands bytes to tasks and JavaScript without copying them.

Call the iOS and Android SDKs directly from Lucent.

StatusItem
doneSDK types read from your Xcode and Android SDK on first import, then cached.
doneOne module for both platforms, with platform branches; platform files as an option.
doneDelegates, listeners and blocks; completion handlers as promises.
doneSwift-only APIs, such as StoreKit 2 and CryptoKit, through generated Swift.
doneKotlin-only APIs, such as suspend functions and Flow, through generated Kotlin.
doneNative 64-bit integers as bigint, so IDs and sizes stay exact.
doneCallback APIs as promises and subscriptions, with fromCallback and subscribe.
doneMembers of generic classes on both platforms, such as List<E>.get.
doneClasses extended in Lucent on both platforms, such as a UIViewController.
doneOS version checks and main-thread-only APIs, checked at compile time on both platforms.
doneThe current Activity and iOS scene, activity results and permission requests.
doneLibraries the app links: its pods on iOS, its Gradle dependencies on Android.
doneLucent packages on npm, with lucent.json for their native needs.
doneTyped native extensions: C code a package ships, checked against its header.
doneA coverage report of what each SDK binds, and why the rest is skipped.
donePinning the SDKs a project uses, and listing what an SDK update changes for your code.
donePorts of Expo and community modules, checked against the originals.
in progressNative libraries nobody has seen before, bound and run with no change to Lucent.
laterWeak references.
laterBinding the APIs of Swift Package Manager libraries.

Native views from Lucent components, rendered by React Native's Fabric.

StatusItem
doneComponents in .lucent.tsx that render UIKit and Android views, behind an internal switch.
doneSwiftUI and Jetpack Compose bodies written as JSX, from declarations read from your SDKs.
doneOne file per component, with each platform's body in a platform branch.
doneEvents, commands, requests that answer, recycling, sizing to content and React children.
doneViews that keep updating while JavaScript is blocked.
in progressJSX for any SDK view, keyed lists and Yoga layout.
nextA views preview with wrapper ports, such as maps, web views and video.
laterNative lists, gestures and animations, and media pipelines.

Ready for apps in production.

StatusItem
done@lucent-lang/lucent on npm, published from CI with provenance.
doneIncremental builds, and rebuilds as you edit, including linked packages.
doneCrashes and errors that point at .lucent.ts lines.
doneLucent's errors in the editor.
doneA warning when the installed app runs an older native build than your code.
doneA JavaScript lucent:core, so Jest and Vitest can run shared modules.
in progressPerformance budgets in CI.
nextTesting on physical devices; today, simulators and emulators.
laterBackground tasks, services and app extensions with no live JavaScript.
laterA tested support window of React Native and Expo versions.
laterPilots with independent library authors and real apps.

This page is generated from ROADMAP.md in the repository.