Capacitor plugins,
native on Lynx

The adapter is plugin-neutral — it reimplements Capacitor's JavaScript bridge contract so that any conforming plugin works without modification. It maps four Capacitor bridge APIs to one Lynx NativeModule interface.

CAPACITOR JS BRIDGE LYNX NATIVEMODULE registerPlugin(name, impl?) Creates a proxy that routes calls to native or web fallback Capacitor.toNative(plugin, method, opts) Dispatches a call from JS to the native layer Capacitor.fromNative(result) Receives results/events back from native Capacitor.addListener(plugin, event, cb) Subscribes to native events with retained callback NativeModules.CapacitorBridge .handleCall(jsonPayload, callback) Single entry point. Promises return once; listener events use retained native delivery. JS → Native call Native → JS result/event

registerPlugin()

Creates a plugin proxy that checks native availability. If native module exists, calls route through the bridge. Otherwise falls back to a WebPlugin implementation.

Capacitor: Plugin Registration

toNative()

Serializes the call as {callbackId, pluginId, methodName, options} and posts it to native via handleCall(json, cb).

fromNative()

The native callback or Android GlobalEventEmitter invokes this path. It resolves the stored Promise or invokes the listener with data or an error.

Contract: {success, data?, error?, save?}

addListener()

Calls toNative with method "addListener". iOS uses retained callback delivery; Android emits retained results through Lynx GlobalEventEmitter.

Capacitor: Event Guide

Every Plugin

All Capacitor plugins work out of the box. Install them from npm and the adapter handles the rest. No forks, no patches, no custom builds.

We verified 37 official plugins and 3 Community plugins with our demo app.

Native on both sides

One plugin contract, platform-native behavior.

The same ReactLynx gallery receives lifecycle events on iOS and presents unmodified Capacitor UI on Android. These are real Simulator and cloud-device captures, not mockups.

iOS Simulator showing a warm Deep Link delivered to the Lynx Capacitor demo
Deep Link lifecycle iOS 26.2
Android cloud device showing a native Capacitor Action Sheet
Native Action Sheet Android 10

Getting Started

Three steps to run any Capacitor plugin on Lynx.

Install the core adapter as an alias

Your plugin imports stay unchanged because npm installs the Lynx adapter at @capacitor/core.

npm install @capacitor/core@npm:@lynx-capacitor/core

Use a Capacitor plugin as usual

Install any Capacitor plugin directly from npm.

npm install @capacitor/device

Autolink the native side

Install the shared native runtime, then configure Autolink once in the host app. Autolink is recommended, but hosts can wire the runtime and plugins manually instead.

# Install the runtime with your target platform
npm install @lynx-capacitor/runtime @capacitor/ios
# Android: replace @capacitor/ios with @capacitor/android
# Podfile
plugin 'cocoapods-lynx-library'
plugin 'cocoapods-lynx-capacitor'

target 'YourApp' do
  use_lynx_library!
  use_capacitor_plugins!
end

// In your view controller
[[LynxGeneratedLibraryRegistry new] setup:config];

After the one-time Podfile setup, adding a plugin is npm install + pod install.