lavagna 2.1.9

The uncluttered blackboard
Documentation
# lavagna

> It's a blackboard, not a lasagna.

![preview](.lavagna.gif)

*Lavagna* is a collaborative blackboard, perfect for creating simple sketches
during online meetings. It has an (optional) minimal toolbar which can be
hidden to avoid distractions from your drawings. You can control colors and
line width using the keyboard or the toolbar.

It's just you, your peers, and your creativity.

## Online demo

An online demo is available: [demo](https://lavagna.devand.dev)

It supports passing options as url paramters:

- collaboration url: https://lavagna.devand.dev/?collab-url=wss://lavagna-server.devand.dev/demo
- debug pane: https://lavagna.devand.dev/?collab-url=wss://lavagna-server.devand.dev/demo&dbg=true
- ui: https://lavagna.devand.dev/?collab-url=wss://lavagna-server.devand.dev/demo&dbg=true&ui=true

## Keyboard bindings

| Button | Action   | Note                                 |
|--------|----------|--------------------------------------|
| C      | Color    | Change the chalk color               |
| M      | Grow     | Grow chalk size 2x                   |
| N      | Shrink   | Shrink chalk size 2x                 |
| X      | Clear    | Clear the whole blackboard           |
| U      | Toolbar  | Toggle toolbar visibility            |

## Installation

[Archives of precompiled binaries for *lavagna* are available for Windows, macOS
and Linux.](https://github.com/alepez/lavagna/releases/latest)

### Install from source

If you're a **Rust programmer**, *lavagna* can be installed with `cargo`.

- Note that the minimum supported version of Rust for *lavagna* is 1.61.0,
  although *lavagna* may work with older versions.

To install from sources:

```shell
git clone https://github.com/alepez/lavagna.git
cd lavagna
cargo install --path lavagna --locked
```

### Install from crates.io

To install from [crates.io](https://crates.io):

```shell
cargo install lavagna
```

Note that the version available in *crates.io* may be older than the one you
find on [latest release
page](https://github.com/alepez/lavagna/releases/latest).

## Instant collaboration

*lavagna* uses *WebRtc* for instant collaboration. So you can use it for online
meetings. You don't even need to install anything, because *lavagna* is available
as a web-app too.

You need a signaling server
like [`matchbox_server`](https://github.com/johanhelsing/matchbox/tree/main/matchbox_server)
installed somewhere.

Don't worry, for quick testing you can borrow *devand.dev* signaling server:

```shell
lavagna --collab-url wss://lavagna-server.devand.dev/YOUR_ROOM
```

Change `YOUR_ROOM` to your preferred name or a unique id. If you do the same on
different device, anything you draw will be visible on the other side (and vice
versa).

## Desktop app development

`lavagna` works on many operating systems:

- Linux (x86)
- Linux (ARM)
- macOS (x86)
- Windows

You just need to have a Rust toolchain installed. Run this from the project
directory:

```shell
cargo run
```

To print help information, just use:

```shell
cargo run -- --help
```

## Web app development

This script builds all the assets needed for a web application. You'll find them
on `www` directory, so you can use any http server able to serve static files.

```shell
./tools/build-web
cd www
python -m http.server 8000
```

See also `docker/lavagna-webapp/Dockerfile` as an example of how to publish the
web-app.