Simple XML. Native Windows UI. Fast desktop apps.
A minimal UFlow framework for building modern WPF applications with hot reload, declarative logic and single-file EXE builds.
Website · GitHub · Quick Start · Features
Uvel lets you describe desktop applications in readable XML instead of writing boilerplate XAML and repetitive C# for every screen. It is designed for quick tools, dashboards, internal apps, prototypes and lightweight Windows utilities.
- XML-first UI — build windows, layouts and components from a single
App.xml. - Hot reload — edit the XML and see UI/logic changes without restarting.
- Declarative logic — handlers, conditions, loops, HTTP calls, state updates and plugins from XML.
- Built-in DevTools — browser inspector for logs, state and runtime debugging.
- Plugin system — extend apps with C# plugins when XML is not enough.
- Single EXE builds — compile projects into standalone Windows executables.
- UFlow-ready style — clean, minimal and production-friendly defaults.
<?xml version="1.0" encoding="utf-8"?>
<App Name="My Uvel App" Width="720" Height="420" Theme="Dark">
<UI>
<Grid Background="#101010">
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
<TextBlock Text="Hello, Uvel!" FontSize="34" Foreground="White"/>
<Button Content="Click me" onClick="OnClick"/>
<TextBlock Name="status" Text="" Foreground="#888"/>
</StackPanel>
</Grid>
</UI>
<Logic>
<Handler Name="OnClick">
<Set Target="status" Property="Text" Value="Uvel is running."/>
<Toast Message="Welcome to Uvel" Type="success"/>
</Handler>
</Logic>
</App>Run it:
uvel run App.xml
uvel dev App.xml
uvel build App.xml --output ./dist --name MyAppMyProject/
├── App.xml
├── uvel.json
├── pages/
├── components/
├── assets/
└── plugins/
git clone https://github.com/uvel-engine/uvel.git
cd uvel/engine
build.batThe built binary is engine/bin/uvel.exe.
MIT — see LICENSE.
Made with UFlow · https://uflow.uz/uvel
uflow.uz/uvel includes a browser-based Uvel Workspace editor. Browsers cannot launch .exe files directly, so Uvel provides a local Windows bridge.
uvel install-protocol
uvel bridge --port 9327Then open:
https://uflow.uz/uvel#workspace
The Workspace connects to:
ws://127.0.0.1:9327/workspace
Supported realtime actions:
- Run XML — saves the XML to the local workspace and launches Uvel in dev mode.
- Hot reload — rewriting the XML file triggers Uvel's file watcher and updates the running window.
- Hot restart — stops the running Uvel process and starts it again with the latest XML.
- Realtime logs — bridge logs and app stdout/stderr stream back to the browser.
The bridge listens only on localhost and runs only after the user explicitly starts it.
Uvel apps can import reusable XML libraries and call namespaced handlers such as uvel.ui.* and uvel.backend.*.
<App Name="Library Demo" Width="720" Height="420" Theme="Dark">
<Import Package="uvel.ui" />
<Import Package="uvel.backend" />
<UI>
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
<TextBlock Name="status" Text="Ready" />
<Button Content="Ping backend" onClick="uvel.backend.ping" />
</StackPanel>
</UI>
</App>Supported forms:
<Import Package="uvel.ui" />
<Import Package="uvel.backend" />
<Import Package="uvel.net" />
<Import Package="uvel.data" />
<Import Package="uvel.all" />
<Import Source="components/shared.xml" />Imported XML may contain Styles, Logic, Bindings, and Components; Uvel merges those sections into the running app before parsing. In dev mode, changes to imported XML files are watched too, so reusable XML libraries hot reload with the app.
Uvel ships with a built-in XML library and a C# component source tree under engine/uvel/.
Namespaced mode:
<Import Package="uvel" />
<UvelInput Name="email" Placeholder="Email" />
<UvelButton Content="Continue" onClick="submit" />
<UvelCard>...</UvelCard>Global mode:
<Import Package="uvel" As="global" />
<Input Name="email" Placeholder="Email" />
<Button Content="Continue" onClick="submit" />
<Card>...</Card>Built-in packages:
uvel.ui— smooth UFlow-like UI primitives and handlers.uvel.backend— backend workflow handlers and state helpers.uvel.net— network helpers.uvel.data— data/state helpers.uvel.icons— offline UFlow icon package cache.uvel.all— imports everything.
The C# side is split by component folder:
engine/uvel/components/Button/{animation,frontend,logging,protocol,backend,plugin}.cs
engine/uvel/components/Input/{animation,frontend,logging,protocol,backend,plugin}.cs
engine/uvel/components/Card/{animation,frontend,logging,protocol,backend,plugin}.cs
...
This gives Uvel a real built-in library layer rather than only a few aliases.
Uvel now includes an experimental Uvel.Native2D source layer under engine/uvel/native/. The long-term goal is a pure Uvel UI runtime where XML is parsed into Uvel's own element tree and drawn with Win32/GDI/2D primitives instead of XAML. The stable engine still uses WPF today, but the new native layer is separated so the runtime can move component-by-component without breaking existing apps.
The native runtime recognizes the basic Uvel component set: View, Card, Button, Input, Text, List, ListView, ListItem, Scroll, Tabs, Tab, ContextMenu, Icon, Badge, Divider, Checkbox, and Select. Each component has a component folder with animation.cs, frontend.cs, logging.cs, protocol.cs, backend.cs, and plugin.cs for the growing native implementation.
