Multiplayer canvas tool with programmable brushes!
				
			
		
				`f . x` is the same as `f x`, and is mostly useful when used as an argument to another function call. this allows us to simulate record field syntax very well: `d.Num` is the same as `d Num`, but with high precedence `a |f b` is the same as `f a b` and effectively allows you to turn any function into an arithmetic operator. it's the main reason behind + - * / having the same precedence---they now chain very nicely with pipes closes #126 (`|` operator) closes #127 (`.` operator)  | 
			||
|---|---|---|
| .cargo | ||
| admin | ||
| crates | ||
| docs | ||
| scripts | ||
| static | ||
| template | ||
| .editorconfig | ||
| .gitignore | ||
| .ignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| jsconfig.json | ||
| Justfile | ||
| README.md | ||
| rkgk.toml | ||
rakugaki - digital multiplayer graffiti
rakugaki is a multiplayer paint canvas with programmable brushes!
At the heart of rakugaki is the brush - a little program for manipulating pixels on a wall. Brushes are written in a tiny programming language called haku.
I wanna try it out!
Since the app is currently in very early alpha stages, there's no public instance at the moment.
You're free to spin up a server for your friends though! Here's the setup procedure for production instances.
# As of writing this, 1.81 is not yet released, so we have to use Rust nightly.
rustup toolchain install nightly-2024-08-11
rustup default nightly-2024-08-11
rustup target add wasm32-unknown-unknown
# We use `just` to wrangle the process of building the client-side WebAssembly and the server.
cargo install just
# Now it's time to run the backend!
just port=8080 profile=release
Then, you can connect to localhost:8080 to see the app in action.
For development, I recommend using cargo watch for live reloading.
just defaults to a sensible development configuration.
If you need to override the port, use the port variable as shown above.
cargo install cargo-watch
cargo watch -- just