VexelRay
Desktop applications built on the VexelRay stack, and the framework they are built with.
The applications
| Vexplore | A file explorer that suggests instead of asking, and where every action can be undone |
| Vex | A tabbed text editor with a file navigator, which comes back where you left it |
| Pix | An image viewer: one picture, as large as the window allows, and the rest of its folder a key press away |
| MainFrame | A terminal window for the shell you already have |
| Calculator | An ordinary-looking calculator that divides by zero |
| Fluid Sim | Fluid simulation experiments: dam breaks, mixing and heat, live on the GPU |
| Rigid Sim | Spheres that collide, bounce, spin and roll, live on the GPU |
| Maistro | A desktop client for Claude Code: the conversation beside a mind map its replies grow |
| VexelRay Inspector | DevTools for VexelRay applications, drawn as clockwork: a running app’s frame loop, beat by beat |
They are separate programs that know about each other: a text file in Vexplore opens in Vex and a picture in Pix, and Vex can show any file in Vexplore.
Install them with one line, for your user only. This is 0.1.1, an experimental prerelease. On Windows, in PowerShell:
irm https://sibarum.github.io/install.ps1 | iex
On Linux, in a terminal, with no sudo. These are snapshot builds (0.1.2-SNAPSHOT) of Vex, Pix, MainFrame,
Calculator and VexelRay Inspector; the others are not on Linux yet:
curl -fsSL https://raw.githubusercontent.com/sibarum/vexelray-dist/main/preflight/install.sh | sh
The framework
vexelray-framework is an application framework for GraalVM native-image desktop applications with
realtime graphics: compile-time dependency injection, typed configuration, and a frame-aware lifecycle.
Everything Spring Boot does with runtime classpath scanning, reflection and generated proxies, it does with
an annotation processor. An application compiles to a native binary with no reachability metadata of the
framework’s own, and starts up as fast as the equivalent hand-written main.
@VexelApp(name = "text-editor", title = "Vex", width = 800, height = 592,
icon = "/editor.ico", starters = AutomationStarter.class)
final class TextEditorApp {
public static void main(String[] args) {
VexelApplication.run(new TextEditorAppWiring(), args);
}
}
TextEditorAppWiring is generated from the annotation while the application compiles; nobody writes it.
The framework is before v1. The source and the tour are on GitHub.
| Document | What it is |
|---|---|
| Developer guide | Start here. From an empty folder to a published application, with an LLM or by hand, and a table of where everything else is |
| Getting started | From nothing to a running application, and a tour of what was generated |
| The repositories | Which repositories an application needs, which add something, and which to leave out |
| Overview | The architecture at a readable altitude: the stack, the wiring, phases, the frame, threads |
| What v1 means | The bar: an application built on v1 needs no major refactor afterwards |
| Readiness | The v1 surfaces graded by whether their shape is final, and where each capability lives |
| Architecture | The deep version, and the decision record |
| Threading conventions | Lanes, ownership, channels and lifecycle, each with whether anything enforces it yet |
| The component model | What a component is and what the framework owes it |
| Units of position and size | An audit of every position and size number on the stack |
| TODO | What is known about and not done, split by whether it blocks v1 |
The framework wires sibling repositories: vexelray (the Vulkan engine), vexelray-gui (retained-mode GUI), tactroller (input), atchung (the typed bus) and kronometer (time).