A language and toolchain for Android
Declarative UI. File-based routes. Compiles straight to Kotlin and Compose.
curl -fsSL https://whitehall.sh/install | bash@prop val user: User
<Column class="gap-16 p-20">
<Image src={user.avatar} class="w-64 h-64" />
<Text class="text-xl font-bold">
{user.name}
</Text>
@if (user.isVerified) {
<Badge color="primary">Verified</Badge>
}
<Button onClick={() => $navigate("/profile")}>
View Profile
</Button>
</Column>Compiles to Kotlin and Compose. Nothing of Whitehall ships in the APK.
varAssign to it and the screen recomposes. No remember, no mutableStateOf.
Drop a file in routes/. Get a screen, a layout, and a back stack.
Java, Gradle, and the SDK install themselves. You never open Android Studio.
Everything you'd otherwise wire together yourself, already in the language.
$fetch, same as the web. Disk caching with cache = "1d".
Screen transitions, list reordering, shared elements. One directive each.
$navigate with typed params, back-stack state, and deep links.
var for a screen, @store for the app, ViewModels when you want one.
$dispatch for one-off jobs, $periodic for recurring. WorkManager underneath.
Formatter, linter, and hot reload, in the compiler. No plugins to pick.
58 of shadcn's 63, ported to Compose. See the list.
shadcn tokens in a theme.toml. Light, dark, and seven base colors, switchable at runtime.
whitehall init my-app, then whitehall run. That's the whole setup.