VexelRay

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).