A declarative UI framework in Swift for Linux: SwiftUI-style views, Yoga layout, HarfBuzz text and a Vulkan renderer — and a Wayland desktop built with it.
Developer toolsSwift · C++GitHub @nikitapnOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
A declarative UI framework in Swift and a wayland compositor.
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
A declarative UI framework in Swift, rendering through Vulkan.
The current application-facing API is documented in
docs/api.md. Coding agents: start from
AGENTS.md (architecture, layout, build, conventions).
Views are described the way SwiftUI describes them — a body returning nested
value types — but the whole stack underneath is here: layout via Yoga, text via
HarfBuzz and FreeType, and a single Vulkan pipeline that draws everything.
On a clean Debian or Arch machine the whole stack — packages, wlroots 0.19,
NPRPC, compositor, Swift clients — is:Read the full README ↗A declarative UI framework for Swift on Linux, with its own GPU renderer — and a Wayland desktop built on top of it.
struct Counter: View {
@State private var count = 0
var body: some View {
VStack(padding: 8) {
Text("count: \(count)", color: .accent)
Text("[ increment ]", onClick: { count += 1 })
}
}
}
If you have written SwiftUI, this will look familiar: views are small structs
with a body, state lives in @State, and the framework redraws what changed.
Everything underneath — layout, text, rendering — is part of this repository.
The repo has two halves:
LavaUI) — for writing desktop apps in Swift.Linux only for now.
On Debian or Arch:
git clone https://github.com/nikitapn/LavaUI.git && cd LavaUI
./scripts/bootstrap.sh --yes # installs everything, builds everything
swift run HelloWorld # the demo
docs/install.md explains what that does, and how to install only what the framework needs.
Add the package to your Package.swift and open a window:
import LavaUI
@main
struct MyApp {
static func main() {
guard let editor = LavaApp.open(title: "My App") else { return }
LavaApp.run(editor: editor) {
Text("hello from LavaUI", color: .accent)
}
}
}
Getting started walks through it from an empty directory, including the one manifest setting the package needs.
Every one of these is a LavaUI app and runs with swift run <name>:
| App | What it is |
|---|---|
HelloWorld | Demo of the framework's views |
LavaTerm | Terminal emulator |
LavaEditor | Text editor |
LavaExplorer | File manager — tabs, split panes, Trash |
LavaPass | KeePass-compatible password vaults — guide |
LavaView | Image viewer |
LavaPDF | PDF reader |
LavaPlayer | Video player |
LavaSpotify | Spotify player |
LavaWeather | Weather |
TraceLoom | Log viewer with an AI assistant |
LavaShot | Screenshot and annotation tool (needs the Lava desktop) |
The desktop itself — LavaPanel, LavaDock, LavaLauncher, LavaSwitcher,
LavaSettings — is made of LavaUI apps as well.
compositor/scripts/dev-run # try it in a window, inside your current session
compositor/scripts/start-lava-compositor setup # install it as a real session
See compositor/README.md.
| Getting started | From an empty package to a running window |
| API guide | Views, layout, modifiers, theming, animation |
| SwiftUI parity | What carries over from SwiftUI and what differs |
| How it works | The rendering pipeline and the repo layout |
| Installing | Packages, Docker, the test VM |
| Performance | Benchmarks and baselines |
| AGENTS.md | The in-depth guide for contributors and coding agents |
The docs site is at lavaui.nikitapn.com.
The full package lists are in packaging/deps/.
MIT — see LICENSE.