Jasonelle wraps your web application into a native iOS and Android app. Keep the web technologies you already know and ship a real native app, with a bidirectional JavaScript-to-native bridge.
// your web app calls native features
const device = await window.jasonelle.plugins.device.info();
console.log(device.platform); // "ios" | "android"
// native pushes an event back into your app
window.jasonelle.plugins.hello.handle = ({ event, ...payload }) => {
if (event === "ContentView.onAppear") cart.refresh(payload);
});
Your frontend runs inside a native container connected to the platform through a bridge that goes both ways.
A SwiftUI app on WKWebView for iOS and a Kotlin
Jetpack Compose app on WebView for Android.
JavaScript to native: device APIs, native UI, plugins. Native to JavaScript: code pushes data and events back into your app.
ArchitectureNative capabilities are plugins. Add the ones your app needs and Jasonelle grows with it, without leaving the web.
Create one
task gen assembles a complete, configured Xcode
and Android Studio project from the same sources.
lib/common/ is the base layer. Platform directories
override or extend it, same path, platform wins. Drop a file in
lib/<platform>/sources/ and it replaces the
stock file during the build.
After the last step each build/<platform>/
directory holds a complete native project ready to open and
build.
task gen
Every plugin is callable from your web code as
window.jasonelle.plugins.<name>.
Sign in with Apple through AuthenticationServices, plus a native button. iOS only.
plugins.appleSignIn()Persist web view cookies in the iOS Keychain and Android EncryptedSharedPreferences.
plugins.cookies.save()Counters and histograms from inside the app, on both platforms.
plugins.opentelemetry.counter()
Subclass the plugin base, declare it in your config and
task gen wires it into both projects.
Jasonelle is open source under AGPLv3. Add a Jasonelle Key and the MPLv2 license applies.
The short version of everything people ask before they start.
dist/. For iOS you need the
Xcode workspace. For Android, Gradle and the Android SDK
with the SDK path in local.properties.
lib/<platform>/sources/ and it replaces
the stock file from sources/<platform>/
during the build. Configuration cascades the same way:
lib/common/config/ first, platform overrides on
top.
Jasonelle is built in the open. Bugs, patches and wild ideas are all welcome.
File issues, send pull requests or browse the releases and the decision records behind each choice.
jasonelle/jasonelleProudly coded in Chile. Need something more? Ninjas builds web and mobile products for teams.
ninjas.cl