More screens. Only what changes travels.
Vitral turns tablets, phones, laptops and boards such as Raspberry Pi into extra monitors for Linux. Instead of sending a flat picture of the desktop, it sends it as layers.
cargo run -r --bin vitral-bench - 94%
- less data when scrolling
- >99%
- less data when moving windows
- 60 fps
- sustained on a local link
- ~3 ms
- round trip
- 0
- lines of unsafe code
Layers on the sender.
Memory on the receiver.
The sender describes the screen and the receiver remembers it. Only the difference travels between them.
Drag the window.
Compare how much data a flat display would send with what Vitral sends for the same action.
Drag the window with your mouse or finger
Vitral sends only the window’s new position: about 43 bytes per frame.
Drag: estimate based on the compression measured in the benchmark. Scroll, typing and video: measured at 1920×1080.
What you already own, as a monitor.
Desktop receiver for Linux, Windows and macOS, over the network.
Receiver app connected over USB, with touch and stylus.
Regular HDMI monitors, connected over USB.
Kernel driver: Linux sees a new monitor, no screen capture.
A small API. No magic.
The engine takes the state of each surface and decides what to send. The receiver only applies messages. All of it verifiable with one command.
// One layer per surface. Only changes leave the machine.
let mut engine = Engine::new(EngineConfig::default());
engine.add_output(0, 1920, 1080, 60_000)?;
engine.create_layer(WINDOW, 0, 864, 648)?;
// Every frame: report state, the engine diffs it.
engine.update_layer(WINDOW, rect, &pixels)?;
engine.place_layer(WINDOW, placement)?;
engine.move_cursor(0, cx, cy, true)?;
for msg in engine.commit(0, now_us)? {
link.send(&msg)?;
} $ cargo run --release --bin vitral-bench
scenario layered KB/f flat KB/f saving verified
idle 0.0 0.0 0% 61/61
typing 6.9 6.9 0% 61/61
scrolling 10.4 176.0 94% 61/61
window drag 0.1 213.7 100% 61/61
video 932.2 932.2 0% 61/61
verified: frames reproduced pixel for pixel. Describe every screen as layers and send only what changes.
- 01
Layers
The sender describes each screen as a stack of layers: background, windows, video and cursor.
- 02
Cache
The receiver keeps every layer. Whatever it already has never travels again.
- 03
Only changes
Only the exact area that changed is sent, compressed losslessly. Moving and scrolling cost bytes.
- 04
Atomic frames
The picture is assembled only when a frame is committed, never half-built. The cursor always goes first.
Six stages, each one measured.
- 01 Complete
Protocol core
Specification v0, engine, receiver, benchmark and tests.
- 02 Next
Real applications
Nested Wayland compositor: every real window is a layer.
- 03 Planned
Android receiver
App with hardware composition, USB, touch and stylus.
- 04 Planned
Boards over USB
Raspberry Pi receiver with direct HDMI output.
- 05 Planned
Linux driver
Vitral displays show up as real monitors.
- 06 Planned
Video layers
Hardware encoding and original video without recompression.
Open by design.
Vitral uses a different license for each part, according to its role.
| Component | License | Why |
|---|---|---|
| Specification and documentation | CC-BY-4.0 | Anyone can implement the protocol. |
| Protocol and receiver libraries | MIT or Apache-2.0 | Other projects and devices can embed them freely. |
| Engine and applications | GPL-3.0 | Improvements to the applications stay open. |
| Kernel driver | GPL-2.0 | Required to be part of Linux. |
Commercial licenses are available for manufacturers and companies.
Independent design: no part comes from proprietary drivers, firmware or documentation.
Extra displays deserve better.
For years, adding a USB monitor on Linux has depended on closed software that breaks with every update. Vitral starts from a different idea: an open, documented and measured protocol that anyone can implement on the devices they already own. No black boxes. No dependence on anyone.
Frequently asked questions.
Can I use my tablet as a monitor yet?
Not yet. The protocol core is finished and measured; the Android app arrives in stage 3.
Do I need a graphics card?
No. Vitral works with the CPU alone and will use the GPU when one is available.
Does it work on Windows or macOS?
The desktop receiver already runs on all three. The sender starts on Linux.
Is it free?
Yes. Vitral is open source. Companies that need it can obtain commercial licenses.
Let’s build more screens.
Collaborations, manufacturers, licensing or simple curiosity.
Support the project
Vitral is free and open. Your support pays for test hardware and development time.