LiveKit-based alternative to Mumble and Discord
  • Rust 51.5%
  • TypeScript 46.9%
  • CSS 1.1%
  • Nix 0.4%
  • Dockerfile 0.1%
Find a file
Sebastian Benjamin dcf6f5f9a2
Some checks failed
CI / test (push) Successful in 7m38s
CI / test-ui (push) Successful in 44s
Deno / lint (push) Successful in 11s
Rust / lint (push) Successful in 5m31s
Rust / build (push) Successful in 7m1s
Release / build (linux, docker, x86_64-unknown-linux-gnu) (push) Failing after 3m13s
Release / build (macos, docker, universal-apple-darwin) (push) Failing after 23s
Release / build (windows, docker, x86_64-pc-windows-msvc) (push) Failing after 1m25s
Release / release (push) Has been skipped
Add various additional audio controls (#90)
Closes #52. Closes #53. Closes #56. Relies on #89 to be merged.

- Adds volume controls to input/output
- Reorganizes the audio settings panel to not suck as much
- Adds push-to-talk via rdev subprocess

Co-authored-by: Sebastian Benjamin <hex@hextraza.moe>
Reviewed-on: #90
Reviewed-by: Graham <red.iron2345@fastmail.com>
Co-authored-by: Sebastian Benjamin <sebastiancbenjamin@gmail.com>
Co-committed-by: Sebastian Benjamin <sebastiancbenjamin@gmail.com>
2026-05-31 10:42:13 -07:00
.cargo Add a bunch of tests (#89) 2026-05-29 14:45:48 -07:00
.forgejo/workflows Add a bunch of tests (#89) 2026-05-29 14:45:48 -07:00
.storybook Add a bunch of tests (#89) 2026-05-29 14:45:48 -07:00
.vscode init tauri app 2026-02-10 18:22:49 -08:00
.zed Add a bunch of tests (#89) 2026-05-29 14:45:48 -07:00
app Add various additional audio controls (#90) 2026-05-31 10:42:13 -07:00
proto Add a bunch of tests (#89) 2026-05-29 14:45:48 -07:00
public Setting up react-router and shadcn 2026-02-11 19:29:18 -08:00
server Add a bunch of tests (#89) 2026-05-29 14:45:48 -07:00
src-tauri Add various additional audio controls (#90) 2026-05-31 10:42:13 -07:00
stories Add a bunch of tests (#89) 2026-05-29 14:45:48 -07:00
.dockerignore Add a bunch of tests (#89) 2026-05-29 14:45:48 -07:00
.gitattributes Adding server url page and channels sidebar 2026-02-18 17:28:39 -08:00
.gitignore #82 Changing target directory for client on windows (#82) 2026-04-10 14:38:57 -07:00
components.json Adding server url page and channels sidebar 2026-02-18 17:28:39 -08:00
deno.jsonc Add a bunch of tests (#89) 2026-05-29 14:45:48 -07:00
deno.lock Add a bunch of tests (#89) 2026-05-29 14:45:48 -07:00
Dockerfile Add a bunch of tests (#89) 2026-05-29 14:45:48 -07:00
flake.lock Adjusting flake for mac build (#92) 2026-04-14 16:38:22 -07:00
flake.nix Adjusting flake for mac build (#92) 2026-04-14 16:38:22 -07:00
package.json Add a bunch of tests (#89) 2026-05-29 14:45:48 -07:00
react-router.config.ts Add a bunch of tests (#89) 2026-05-29 14:45:48 -07:00
README.md Add a bunch of tests (#89) 2026-05-29 14:45:48 -07:00
tsconfig.json Add a bunch of tests (#89) 2026-05-29 14:45:48 -07:00
tsconfig.node.json Add a bunch of tests (#89) 2026-05-29 14:45:48 -07:00
vite.config.ts Add a bunch of tests (#89) 2026-05-29 14:45:48 -07:00
vitest.config.ts Add a bunch of tests (#89) 2026-05-29 14:45:48 -07:00
vitest.shims.d.ts Add a bunch of tests (#89) 2026-05-29 14:45:48 -07:00

microclimate

A LiveKit-based alternative to Mumble and Discord.

Requires

  • Rust
  • Deno
  • protoc, the protobuffer compiler
  • A server/.env file, see server/.env.example for required values

Project structure

The server and Tauri client are separate Cargo workspaces. Most server-side Cargo commands should be run from the server/ directory; most client-side commands are run from the project root (via Deno tasks) or src-tauri/.

Setup

Server

The server uses SQLx compile-time query verification, which requires either a live database or a pre-generated query cache. The cache is already committed to the repository under server/.sqlx/, so a live database is only needed when you change the schema.

# Copy and fill in the environment file
cp server/.env.example server/.env

# JWT_SECRET is required — the server uses it to sign session tokens issued
# after a successful ATProto OAuth login. Use a long random value, e.g.:
#   openssl rand -base64 32

# (First time only, or after changing migrations) Install sqlx-cli and
# run migrations to set up the database
cargo install sqlx-cli --no-default-features --features sqlite
cd server && sqlx migrate run

# (After changing migrations) Regenerate the SQLx query cache and commit it
cd server && cargo sqlx prepare

Note: In production, migrations run automatically when the server starts.

Client

Install dependencies with deno i

If on windows create a windows.toml file in the .cargo folder then add the following:

[build]
target-dir = "C:/t"

Without it vite will choke itself scanning the target folder, and the application will never run.

Running

# Start the gRPC server (from server/)
cd server && cargo run

# Start the Tauri desktop app (from project root, use cmd.exe on Windows)
deno task tauri dev

Note: cargo build from the project root only builds the Tauri client. To build the server, run cargo build from server/.

Tips

  • If you're developing on Windows, I've observed that the Tauri app will not render when executing deno task tauri dev from Powershell. Using cmd seems to work just fine, though.
  • On Windows, set CARGO_TARGET_DIR=C:/t (or another short path) to redirect Cargo build artifacts off the project tree.
  • I recommend using Yaak for testing gRPC features without a client
  • Use cargo test export_bindings from src-tauri/ to generate TypeScript types from structs using ts-rs