Radical runs your web app in native shells
An introduction to Radical for developers who already use server-rendered web apps.
Radical runs a web UI in Android and iOS WebViews. The Vite plugin generates the native projects; an Effect bridge connects the UI to native capabilities. Your framework keeps routing, rendering, data fetching, and HTTP handling.
TanStack Start is the implemented adapter. React hooks expose capabilities; custom plugins use Effect Schema manifests.
Getting started
Install Radical in your own project and run browser and native apps.
Change an existing app
Package the UI, add capabilities, or configure native assets.
Look up an API
Find config fields, Effect services, hooks, and errors.
Understand the design
See the architecture, request boundaries, and generated shells.
Where the UI lives
| Mode | UI source | Server work | Offline startup |
|---|---|---|---|
| Remote, the default | Configured HTTP origin | Documents and data | Visited route snapshots or packaged fallback |
| Bundled | Packaged SPA assets | API and server functions | Packaged UI; remote data needs app-owned handling |
Both modes share the native bridge. Browser behavior depends on each capability.
Platform boundaries
| Capability | Android | iOS | Browser |
|---|---|---|---|
| CLI build and run | Gradle and adb; emulator or USB device | Xcode on macOS; iPhone simulator | Vite dev server |
| Physical device | CLI with adb target | App-owned signing and Xcode run | Not applicable |
| Native APIs | Enabled manifests | Enabled manifests | Capability-specific web services |
| UI delivery | Remote or bundled | Remote or bundled | Web origin |
Radical does not provide authentication, store distribution, or a database. Native context describes presentation and cannot prove identity.