• Stars
    star
    100
  • Rank 339,868 (Top 7 %)
  • Language
    Rust
  • Created about 2 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

wayland compositor toolbox

runa - wayland compositor toolbox

Table of contents

Demo

demo.mp4

Project status, goals and plans

This project is still pretty much a "tech demo" in this stage. What you can see above is all that works. And it took a lot of short cuts to even get that far. (And please don't run cargo test.)

Creating a wayland compositor library from the ground up is a daunting task, and I don't think I can do this just by myself. That's why this project is announced in this state - because I wanted to attract interests, and potentially collaborators to this project.

I tried to document the code base in its current state as best as I can. Have a look at the documentation, or the code base, and get in touch if you are interested:

  • runa-core: base traits and types for a wayland compositor.
  • runa-orbiter: wayland protocol impls based on runa-core.

Chat room

I am currently hanging out in the #runa channel on libra.chat.

Roadmap

0.0.2

  • Have unittests for easily testable components.
  • All of the core and stable wayland interfaces implemented. No more "not implemented" error.
  • Fix interface versioning

0.0.3 - 0.0.4

  • Crescent able to run as DRM master
    • We likely want to create a crate for making accessing raw display devices and input devices easier. or use an existing crate. winit might become a viable option (rust-windowing/winit#2272)
  • Support hardware accelerated clients

0.1.0

  • Crescent can function as a minimal wayland compositor
  • A tutorial for writing compositors with runa

0.2.0

  • Xwayland support

Q&A

  • Why runa, instead of other wayland libraries like wlroots, or smithay?

    wlroots has a model that is not very suitable for a Rust binding - people has tried and failed at creating a binding for it. And even if I do manage to create a wlroots binding, it's not going to be ergonomic Rust.

    As for smithay, runa's design philosophy is pretty different. First of all, smithay was created quite a few years back, and Rust has evolved a lot in that time. runa tries to take advantage of new Rust features, most notably async, as much as possible. (this does unfortunately mean a nightly Rust compiler is required for now, at least until TAIT is stabilized).

    Also, runa took a page from other amazing Rust crates like smol and futures, and has a very modular design, unlike smithay which is everything inside a single crate. This way 1) users can bring their own implementation if what we provide is not suitable; 2) some of our crates can be useful outside runa.

More Repositories

1

picom

A lightweight compositor for X11
C
3,965
star
2

deai

One-stop automation system for Linux
C
170
star
3

index_camera_passthrough

Experimental Valve Index camera passthrough for Linux
Rust
33
star
4

job-security

job control from anywhere!
Rust
24
star
5

picom-xrdesktop-companion

picom's companion program to bring your desktop to XR
C
20
star
6

tooltip.nvim

Display tooltip for neovim
Python
12
star
7

wimp

WhereIsMyPointer
Rust
7
star
8

.files

Linux configuration
Nu
7
star
9

playgsf

GSF player with visualization (WIP)
C++
7
star
10

test.h

Header only C unit testing framework
C
6
star
11

SadOS

It makes me sad because I wasn't able to finish it
C
6
star
12

robot-stm32

A robotic vacuum cleaner
C
5
star
13

bcachefs-mount

A helper tool for mounting bcachefs
Rust
4
star
14

cvca

Contiguously Valued Cell Automata
JavaScript
4
star
15

protoplasm

A compiler for a simple language
Python
3
star
16

explain-algorithms

Computer algorithms in human readable format
HTML
2
star
17

cgrouper

cgrouper
C
2
star
18

entangle

Forward input devices over network
Rust
2
star
19

git-clang-format-lint

Shell
2
star
20

docconfig

Generate sample configuration file from serde serializable types
Rust
1
star
21

dotvim

Vim config
Vim Script
1
star
22

netsim

Content-aware file-sharing/video-streaming network simulator.
C
1
star
23

gentoo-overlay

Shell
1
star
24

tprj

~
C
1
star
25

ml_experiments

ML related experiments
Python
1
star
26

tinyvecdeq

Rust
1
star
27

misceltools

Miscellaneous tools
D
1
star
28

cfg.h

Header only config file & command line option library for C
C
1
star
29

pathogen

Generating parser directly from type definition
D
1
star
30

runa-adventure

Shell
1
star
31

borderless

a blogging system
CoffeeScript
1
star
32

puncher

A passive packet forwarder
C
1
star
33

DeTerminus

DeTerminus Font
Python
1
star
34

uchroot

chroot with user namespace
Rust
1
star
35

lethe

Shoot 'Em Up game engine WIP
D
1
star
36

evolve_image

Trianglize image using DNA algorithm
JavaScript
1
star
37

keygames

Implementation of key distribution schemes in different language
Rust
1
star
38

klipper

Klipper split out from plasma-workspace
C++
1
star
39

sync-bot

A wrapper of rsync for mirror sites.
Perl
1
star
40

antiad

youku antiad, a fork of http://git.oschina.net/kawaiiushio/antiad.git
JavaScript
1
star
41

inputsynth

X11 input synthesis
Rust
1
star
42

atomi

Fork of the AwesomeWM lua library
Lua
1
star
43

urstore

Universal Remote Store library (WIP)
C
1
star
44

dcon

Code snippet for programming contests
D
1
star
45

sorttabs

Tab sorting extension for firefox
TypeScript
1
star
46

ncproxy

NoCash Proxy
JavaScript
1
star
47

sdpc

Simple D Parser Combinator
D
1
star