2026-03-10 15:59:14 +00:00
# Furumi-ng
2026-03-10 16:20:19 +00:00
Remote filesystem over encrypted gRPC. Mount a directory from a remote server as a local folder via FUSE.
2026-03-10 15:59:14 +00:00
Designed for streaming media (video, music) over the network.
## Architecture
```
2026-03-11 00:09:10 +00:00
furumi-server (gRPC + TLS) ←→ furumi-client-core ←→ furumi-mount-{linux,macos} (FUSE)
2026-03-10 15:59:14 +00:00
```
2026-03-10 16:20:19 +00:00
- **furumi-server** — exposes a directory over gRPC with auto-TLS, Bearer token auth, and Prometheus metrics
2026-03-10 15:59:14 +00:00
- **furumi-client-core** — cross-platform gRPC client library with attribute caching
2026-03-11 00:09:10 +00:00
- **furumi-mount-linux** / **furumi-mount-macos ** — mounts the remote directory locally via FUSE (read-only)
2026-03-10 15:59:14 +00:00
## Quick Start
```bash
# Build
cargo build --release --workspace
2026-03-10 16:20:19 +00:00
# Server — auto-generates TLS certificate, saves it for client
2026-03-10 15:59:14 +00:00
./target/release/furumi-server \
--root /path/to/media \
2026-03-10 16:20:19 +00:00
--token mysecrettoken \
--tls-cert-out /tmp/furumi-ca.pem
2026-03-10 15:59:14 +00:00
2026-03-11 00:09:10 +00:00
# Client (Linux) — automatically uses TLS, trusts server certificate
2026-03-10 15:59:14 +00:00
./target/release/furumi-mount-linux \
2026-03-10 16:52:13 +00:00
--server server-ip:50051 \
2026-03-10 15:59:14 +00:00
--token mysecrettoken \
--mount /mnt/remote
2026-03-11 00:09:10 +00:00
# Client (macOS)
./target/release/furumi-mount-macos \
--server server-ip:50051 \
--token mysecrettoken \
--mount /Volumes/remote
2026-03-10 15:59:14 +00:00
# Use it
ls /mnt/remote
mpv /mnt/remote/video.mkv
```
2026-03-10 16:20:19 +00:00
## Encryption
2026-03-10 16:52:13 +00:00
TLS is enabled by default. The server auto-generates a self-signed certificate on each start — no manual cert management required. The client automatically trusts the server's certificate for encryption.
2026-03-10 16:20:19 +00:00
2026-03-10 16:52:13 +00:00
To disable TLS (not recommended): `--no-tls` on both server and client.
2026-03-10 16:20:19 +00:00
2026-03-10 15:59:14 +00:00
## Configuration
All options can be set via CLI flags or environment variables.
### Server
| Flag | Env | Default | Description |
|------|-----|---------|-------------|
2026-03-10 16:20:19 +00:00
| `--bind` | `FURUMI_BIND` | `0.0.0.0:50051` | gRPC listen address |
2026-03-10 15:59:14 +00:00
| `--root` | `FURUMI_ROOT` | `.` | Directory to expose |
| `--token` | `FURUMI_TOKEN` | * (empty, auth off) * | Bearer token |
2026-03-10 16:20:19 +00:00
| `--metrics-bind` | `FURUMI_METRICS_BIND` | `0.0.0.0:9090` | Prometheus endpoint |
| `--no-tls` | — | `false` | Disable TLS |
2026-03-10 15:59:14 +00:00
### Client
| Flag | Env | Default | Description |
|------|-----|---------|-------------|
2026-03-10 16:52:13 +00:00
| `--server` | `FURUMI_SERVER` | `0.0.0.0:50051` | Server address |
2026-03-10 15:59:14 +00:00
| `--token` | `FURUMI_TOKEN` | * (empty) * | Bearer token |
| `--mount` | `FURUMI_MOUNT` | — | Mount point directory |
2026-03-10 16:52:13 +00:00
| `--no-tls` | — | `false` | Disable TLS |
2026-03-10 16:20:19 +00:00
## Prometheus Metrics
Available at `http://<metrics-bind>/metrics` :
- `furumi_grpc_requests_total` — request count by method and status
- `furumi_grpc_request_duration_seconds` — request latency histogram
- `furumi_bytes_read_total` — total bytes streamed
- `furumi_active_streams` — current streaming connections
- `furumi_file_open_errors_total` — file access errors
- `furumi_auth_failures_total` — authentication failures
2026-03-10 15:59:14 +00:00
## Requirements
2026-03-10 16:20:19 +00:00
- Linux with `libfuse3-dev` and `pkg-config` (for client)
2026-03-11 00:09:10 +00:00
- macOS with `macFUSE` installed (for macOS client)
2026-03-10 15:59:14 +00:00
- Rust 2024 edition
## License
MIT