- TypeScript 55.8%
- Rust 41.4%
- CSS 1.9%
- Nix 0.7%
- Dockerfile 0.2%
Closes #47. - Convert home.tsx into a set of tiles that lists the users connected to the current channel - Add a set of sub-buttons underneath the currently-active panel, one per user - Add the currently-logged in user to the bottom of the main sidebar (same component as the settings page) - Unify the atproto did/name/profile pic logic between the home.tsx tiles, the sidebar sub-buttons, and the logged-in user components - Add a connection strength dot + a reactive ActiveSpeakerChanged border to all 3 profile pic locations if connected to a channel - Add a button in the bottom-right of the home screen if connected to list connection strength statistics - Add endpoints to support the new connection strength/isSpeaking logic Co-authored-by: Sebastian Benjamin <hex@hextraza.moe> Reviewed-on: #84 Reviewed-by: Graham <red.iron2345@fastmail.com> |
||
|---|---|---|
| .cargo | ||
| .storybook | ||
| .vscode | ||
| .zed | ||
| app | ||
| proto | ||
| public | ||
| server | ||
| src-tauri | ||
| stories/ui | ||
| .dockerignore | ||
| .gitattributes | ||
| .gitignore | ||
| components.json | ||
| deno.jsonc | ||
| deno.lock | ||
| Dockerfile | ||
| flake.lock | ||
| flake.nix | ||
| package.json | ||
| react-router.config.ts | ||
| README.md | ||
| tsconfig.json | ||
| tsconfig.node.json | ||
| vite.config.ts | ||
| vitest.shims.d.ts | ||
microclimate
A LiveKit-based alternative to Mumble and Discord.
Requires
- Rust
- Deno
protoc, the protobuffer compiler- A
server/.envfile, seeserver/.env.examplefor 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 devfrom Powershell. Usingcmdseems 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_bindingsfromsrc-tauri/to generate TypeScript types from structs using ts-rs