VexelRay
VexelRay design

Software that holds still while you use it.

Seven principles every VexelRay application is held to. Each one is already written down in the framework's own documentation, linked beside it.

Where a mockup and a principle disagree, the principle wins. vexplore/README.md
01 Pointer

Nothing moves under your hand.

Nothing appears, moves or grows on hover. The space a control needs is reserved before you get there, so a click that's already on its way lands on what you aimed at. Focus changes how a control looks, never its size or position.

  • Status barA slot's place never changes, only what it says.
  • OverflowA scrollbar appears when content overflows, not when the pointer comes near.
  • VexploreNothing it shows may cover anything else. Suggestions have their own place in the layout, and appear only there.
The pointer-target rule
Try it · hover the rows

Revealed on hover

report-final.txt
report-final-2.txt
notes.md

The row grows as you reach it, and the one below jumps away from your click.

Space reserved

report-final.txt
report-final-2.txt
notes.md

Hover changes colour only. Every target stays where it was.

An illustration in this page's HTML, not a VexelRay widget.

02 Response

Never a frozen window.

A component that gets stuck takes only its own lane with it. The window keeps painting and taking input, and you can always close it. Frames are drawn when something changed and skipped when nothing did, without trading smoothness for either.

  • LanesComponents run in their own lanes, so a stall in one never reaches the window's own drawing.
  • Last resortA watchdog outside every lane ends the process if nothing else worked.
Never a frozen window, in the overview
Kronometer · render on demand
UnfocusedParked until an event arrives0 fps
Focused, idleThe floor, so nothing waits longer than 200 ms5 fps
AnimatingPaced by the displaydisplay

From kronometer/docs/render-on-demand.md, measured on Win32 and Vulkan.

03 Keyboard

The keyboard reaches everything.

A link only a mouse can follow isn't a feature. Every control can be reached and used from the keyboard, there is always a way out of a field, and the key bindings belong to you.

  • Your bindingsRebind a key and it simply takes effect. A conflict dialog would ask you to resolve something you just resolved by pressing the key.
  • RepeatCommand keys auto-repeat. Typed characters never do.
How key bindings work
Keys every application honours
Shift+TabDeliberately left unclaimed by text fields, so there's always a keyboard way out.
Ctrl+EnterFollows the link under the caret.
Ctrl+ZUndoes the last change in this window, whichever control made it.
Ctrl+YPuts it back.

From keyboard-focus-text.md and navigation.md.

04 Look

Colour is a role, not a value.

Widgets ask the theme for a role, such as ink, page or accent, and never name a colour themselves. A build test fails any framework class that makes one up. That's how one set of roles serves both dark and light, and how the whole interface scales evenly when you zoom.

  • PaletteNine authored numbers, not a table of colours.
  • Hover & pressOne signed lightness step, computed in Oklab.
  • ZoomFrom 0.5× to 3×, and the whole UI scales together.
  • ChromeWhere the title bar's controls go is the framework's. How they look is the application's.
Theme, in the vexelray-gui README
From the docs

Colour is a role, never a literal.

vexelray-gui/README.md

A Palette is nine authored numbers, not a table of colours.

vexelray-gui/README.md

A lightness step applied in Oklab to whatever the control already is.

vexelray-gui/README.md, on hover and press
05 Change

Foreshadow it, show it, undo it.

Before a change happens, you see what it will do. After, you see what it did, in the place it did it. And when you undo it, you watch it go back: Ctrl+Z first takes you to where the change was made, then reverses it there. An undo that can't be applied is refused with a reason, never silently skipped.

  • Every controlToggles, sliders, number fields, choices and colour pickers record into their window's history on their own.
  • VexploreStates the effect first: the counts, the bytes and where they go. Then every move, copy, archive and delete can be undone.
  • VexA save cannot half-happen, and unsaved work is never remembered silently.
  • PixA picture that won't open says why, in place of the picture.
How undo is built
Try it · move two files

Documents

    Archive

      An illustration in this page's HTML, following how Vexplore and the window history behave.

      06 Automation

      Agents use the same hand, in plain sight.

      Macros and agents drive an application with the same hand a person has: the same pointer, the same keys, the same controls. They find a control by what it is, not where it was drawn. Automation is never hidden: whatever turned it on, the title bar says so.

      • The cursorStateful, and it never teleports.
      • AddressingBy role and name. Coordinates are exactly the thing that goes stale.
      • You stay in chargeA run an agent started can always be ended by the person at the desk.
      How automation works
      From the docs

      The automation cursor is stateful, and it never teleports.

      automation.md

      Whatever turned a socket on, the title bar says so.

      automation.md
      07 Suite

      Separate programs that know about each other.

      Each application stands on its own, but they share one look and pass work between them. A text file in Vexplore opens in Vex, a picture opens in Pix, and Vex can show any file in Vexplore.

      • One lookShared widgets and a shared palette, so a control behaves the same in every application.
      • UpdatesOther applications are asked to close, and you can skip or cancel. Nothing is ever forced.
      • Comes backWindows reopen where you left them, clamped to the screens you have now.
      The applications
      From the docs

      They are separate programs that know about each other.

      vexelray-framework docs

      Every failure mode degrades to defaults, never an exception at launch.

      vexelray-gui/README.md, on settings
      — Left out

      What we leave out.

      Some things are missing on purpose.

      Web pages inside the apps

      The applications are drawn by the framework itself, not by a browser engine. Vexplore's mockups are HTML, and its handoff says to translate them, not port them.

      vexplore/docs/design/HANDOFF.md

      Immediate-mode GUI

      The interface is a retained tree, not re-emitted every frame, so state lives in the widgets and the loop can sleep.

      architecture.md

      Blur and bloom

      Effects compose in one pass against a single light. Multi-pass effects are deliberately out of scope.

      vexelray-gui/README.md

      Drag and drop first

      It still works, but it's a fallback. Vexplore makes common tasks easy and guesses sensibly from context instead.

      vexplore design notes
      Next

      Animations and transitions with Kronometer.

      How motion is timed, why it's opt-in, and what reduced motion turns off.

      Coming soon