1
0
Fork 0
mirror of https://github.com/coko7/watari.git synced 2026-07-20 13:05:07 +00:00
Web GUI frontend for rustypaste with OpenID Connect SSO and optional client-side encryption.
  • Rust 73.4%
  • HTML 10.3%
  • JavaScript 9.6%
  • CSS 6.1%
  • Dockerfile 0.6%
Find a file
2026-07-06 20:24:50 +02:00
.github/workflows ci(release): add release-plz automation 2026-07-06 18:13:48 +02:00
assets feat(ui): redesign layout with sidebar navigation and dark mode 2026-07-06 20:22:38 +02:00
migrations refactor: rename project from KyoSabi to Watari 2026-07-05 11:30:46 +02:00
src feat(upload): add drag-and-drop file upload with size display 2026-07-06 18:40:48 +02:00
static feat(ui): redesign layout with sidebar navigation and dark mode 2026-07-06 20:22:38 +02:00
templates feat(ui): redesign layout with sidebar navigation and dark mode 2026-07-06 20:22:38 +02:00
.dockerignore feat: implement KyoSabi per kyosabi.md spec 2026-07-03 11:25:03 +02:00
.gitignore feat: implement KyoSabi per kyosabi.md spec 2026-07-03 11:25:03 +02:00
.release-please-manifest.json chore(main): release watari 0.5.0 2026-07-06 20:24:50 +02:00
Cargo.lock chore(main): release watari 0.5.0 2026-07-06 20:24:50 +02:00
Cargo.toml chore(main): release watari 0.5.0 2026-07-06 20:24:50 +02:00
CHANGELOG.md chore(main): release watari 0.5.0 2026-07-06 20:24:50 +02:00
CLAUDE.md refactor: rename project from KyoSabi to Watari 2026-07-05 11:30:46 +02:00
docker-compose.yml refactor: rename project from KyoSabi to Watari 2026-07-05 11:30:46 +02:00
Dockerfile refactor: rename project from KyoSabi to Watari 2026-07-05 11:30:46 +02:00
env.example feat: implement KyoSabi per kyosabi.md spec 2026-07-03 11:25:03 +02:00
LICENSE Initial commit 2026-06-30 23:13:07 +02:00
README.md feat(ui): redesign layout with sidebar navigation and dark mode 2026-07-06 20:22:38 +02:00
release-please-config.json ci(release): add release-plz automation 2026-07-06 18:13:48 +02:00
rustypaste-config.example.toml refactor: rename project from KyoSabi to Watari 2026-07-05 11:30:46 +02:00
token-bindings.example.yaml refactor: rename project from KyoSabi to Watari 2026-07-05 11:30:46 +02:00
watari.md refactor: rename project from KyoSabi to Watari 2026-07-05 11:30:46 +02:00

Watari

Watari is a web GUI frontend for rustypaste.

The project name comes from the japanese word 渡り (watari, also written as ワタリ in Katakana) which means "crossing, passage, transit" and symbolizes the relationship with rustypaste.

Watari banner image

Release info License: MIT Rust Tests

Warning

🚧 Early stages — big work in progress. Expect rough edges and breaking changes. 🚧

On top of providing a GUI, it comes with some additional features:

  • 🔐 OpenID Connect Single sign-on (tested against Zitadel)
  • 🗂️ Per-group token mapping
  • 🔒 Optional client-side (WebCrypto) password encryption

All built with a based technical stack: axum + Askama + HTMX + SQLite

This project has been vibe-scaffolded with Claude, you can find the full design here: watari.md

Watari UI screenshot

  1. cp env.example .env and fill in SESSION_SECRET (openssl rand -hex 32), OIDC_CLIENT_SECRET, and two distinct RUSTYPASTE_TOKEN_* secrets.
  2. cp rustypaste-config.example.toml rustypaste-config.toml and paste the same two rustypaste token values into auth_tokens/delete_tokens.
  3. cp token-bindings.example.yaml token-bindings.yaml and adjust the groups to match your IdP.
  4. Edit docker-compose.yml's OIDC_ISSUER_URL, OIDC_CLIENT_ID, APP_BASE_URL/RUSTYPASTE_PUBLIC_URL for your deployment.
  5. docker compose up -d --build

Running locally for development

Requires Rust (edition 2024, so a recent stable toolchain) and no external services besides an OIDC provider and a rustypaste instance to point at.

cargo build
cargo test
export $(cat .env | xargs)  # or set the vars below directly
cargo run

Required environment variables (see watari.md §5 for the full list with defaults): OIDC_ISSUER_URL, OIDC_CLIENT_ID, OIDC_CLIENT_SECRET, OIDC_REDIRECT_URI, SESSION_SECRET, RUSTYPASTE_INTERNAL_URL, RUSTYPASTE_PUBLIC_URL, APP_BASE_URL. A token-bindings.yaml must also exist at TOKEN_BINDINGS_PATH (default token-bindings.yaml), with each env_var it references set.

Database migrations run automatically at startup (DATABASE_PATH, default /data/app.db — for local dev, point this somewhere writable, e.g. ./dev.db).

Project layout

  • src/ — the Axum application; see CLAUDE.md for a module-by-module map.
  • templates/ — Askama HTML templates, compiled into the binary at build time.
  • static/ — served as-is at /static (vendored HTMX, app.css, app.js).
  • migrations/ — sqlx SQL migrations, embedded into the binary at build time.
  • token-bindings.example.yaml — OIDC-group → rustypaste-token mapping (§7).
  • rustypaste-config.example.toml — matching rustypaste server config.

License

AGPLv3 — see LICENSE.