Skip to content

Latest commit

 

History

38 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tauri Server Client

CI Release

A LAN-based client-server desktop application built with Tauri and Rust, with a Nuxt + Vue frontend. One person hosts a server on their machine, everyone else on the same network connects to it as a client — no internet or external infrastructure required.

Screenshots

Sign in
Sign in
Sign up
Sign up
Member home
Home — signed in as a member
Admin home
Home — signed in as an admin
Manage users
Admin — manage users
Add user
Admin — add a user directly

How it works

The app is a single desktop client that can act as either a host or a joiner:

  1. Welcome — choose to host a new session or join one that's already running on the LAN.
  2. Host spawns the server binary locally (bound to 0.0.0.0:8080), points the client at 127.0.0.1:8080, and takes you straight to sign up as the first (admin) user. The server process is killed automatically when the hosting window closes.
  3. Join asks for a server address (e.g. 192.168.1.10:8080) already running on someone else's machine, then takes you to sign in.
  4. Sign in / sign up authenticates against the connected server (JWT-based). New accounts created via sign-up are regular members.
  5. Home shows every account on the server with live online/offline presence over a WebSocket connection. Admins additionally see a settings shortcut into user management.
  6. Manage users (admin only) — promote/demote, disable/enable, remove accounts, or add a new user directly with a chosen role and password.

Route access is enforced by app/middleware/session.global.ts: you can't reach authenticated pages without a connected server and a valid session, and you're redirected forward automatically once both are satisfied.

Stack

Project structure

app/            Nuxt frontend — pages, components, composables
server/         Standalone Axum REST + WebSocket API (see server/README.md)
src-tauri/      Tauri desktop shell (Rust) — window, hosting, IPC commands
scripts/        Dev server orchestration, versioning, and release automation

Server

The server/ directory is a standalone Axum REST + WebSocket API (JWT auth, SQLite storage, real-time user presence) that the Tauri app and Nuxt frontend talk to over the LAN. See server/README.md for setup, configuration, and the API reference.

Desktop app

src-tauri/ is the Tauri v2 shell around the Nuxt frontend. When you choose to host, src-tauri/src/hosting.rs spawns the server binary as a child process with a generated JWT secret and an app-data-scoped SQLite database, waits for it to start listening, and exposes start_server/stop_server commands to the frontend (app/composables/useHosting.ts). This currently expects the server binary to already be built alongside src-tauri on the same machine — run bun run server:build before hosting from a packaged app.

Setup

Install dependencies:

bun install

Development

Start the app in development mode (Nuxt dev server + Tauri window):

bun run dev

Checks

bun run fmt:check   # oxfmt + cargo fmt --check
bun run lint        # oxlint + cargo clippy
bun run nuxt:typecheck
bun run test         # vitest

Release

Version bumps, changelog generation, and Tauri version sync are handled by scripts/release.ts:

bun run release patch   # or minor / major

This bumps package.json, generates the changelog, syncs the version into src-tauri/Cargo.toml, Cargo.lock, and tauri.conf.json, then commits, tags, and pushes. The release workflow picks up the pushed tag and builds/publishes the desktop app.

License

MIT

About

LAN-based client-server desktop application built with Tauri and Rust

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages