diff --git a/README.md b/README.md new file mode 100644 index 0000000..dd7fff1 --- /dev/null +++ b/README.md @@ -0,0 +1,69 @@ +# Furumi-ng + +Remote filesystem over gRPC. Mount a directory from a remote server as a local folder via FUSE. + +Designed for streaming media (video, music) over the network. + +## Architecture + +``` +furumi-server (gRPC) ←→ furumi-client-core (library) ←→ furumi-mount-linux (FUSE) +``` + +- **furumi-server** — exposes a directory over gRPC with optional Bearer token auth and Prometheus metrics +- **furumi-client-core** — cross-platform gRPC client library with attribute caching +- **furumi-mount-linux** — mounts the remote directory locally via FUSE (read-only) + +## Quick Start + +```bash +# Build +cargo build --release --workspace + +# Server +./target/release/furumi-server \ + --root /path/to/media \ + --bind 0.0.0.0:50051 \ + --token mysecrettoken + +# Client (on another machine) +mkdir -p /mnt/remote +./target/release/furumi-mount-linux \ + --server http://server-ip:50051 \ + --token mysecrettoken \ + --mount /mnt/remote + +# Use it +ls /mnt/remote +mpv /mnt/remote/video.mkv +``` + +## Configuration + +All options can be set via CLI flags or environment variables. + +### Server + +| Flag | Env | Default | Description | +|------|-----|---------|-------------| +| `--bind` | `FURUMI_BIND` | `[::1]:50051` | gRPC listen address | +| `--root` | `FURUMI_ROOT` | `.` | Directory to expose | +| `--token` | `FURUMI_TOKEN` | *(empty, auth off)* | Bearer token | +| `--metrics-bind` | `FURUMI_METRICS_BIND` | `0.0.0.0:9090` | Prometheus metrics endpoint | + +### Client + +| Flag | Env | Default | Description | +|------|-----|---------|-------------| +| `--server` | `FURUMI_SERVER` | `http://[::1]:50051` | Server address | +| `--token` | `FURUMI_TOKEN` | *(empty)* | Bearer token | +| `--mount` | `FURUMI_MOUNT` | — | Mount point directory | + +## Requirements + +- Linux with `libfuse3-dev` (for client) +- Rust 2024 edition + +## License + +MIT