A read-only FUSE filesystem for browsing Weights & Biases runs, artifacts, and files directly from your local filesystem.
- π Browse W&B entities, projects, and runs as a directory tree
- π Access run files directly without downloading
- π― Navigate artifacts by collection and version
- π Artifact aliases (e.g.,
latest,best) as symlinks - π Separate input/output artifacts for each run
- π Human-readable run names instead of IDs
- π Secure API key authentication
- β‘ Lazy Loading: Files and metadata are fetched only when accessed
- π‘οΈ Read-Only: Ensures data integrity by preventing modifications
- Rust 1.70+ (install from rustup.rs)
- FUSE library:
sudo apt-get install fuse libfuse-dev(Ubuntu/Debian) - W&B API key (get from wandb.ai/authorize)
git clone <repository-url>
cd wandbfs-rust
cargo build --release- Set your API key:
export WANDB_API_KEY=your_api_key_here- Mount the filesystem:
# Mount to default directory (./wandbfs)
cargo run
# Or specify a custom mount point
cargo run -- /tmp/wandb- Browse your data:
# List entities
ls /tmp/wandb/
# Navigate to a project
cd /tmp/wandb/your-entity/your-project/
# View runs
ls runs/
# Access run files
cat runs/run-name/file.txt
# Browse artifacts
ls artifacts/
ls runs/run-name/artifacts/input/
ls runs/run-name/artifacts/output/
# Use artifact aliases
cat runs/run-name/artifacts/output/model/latest/model.ckpt- Unmount when done:
fusermount -u /tmp/wandb
# or just Ctrl+C in the terminal running wandbfsWandBFS is a FUSE (Filesystem in Userspace) implementation that leverages the W&B GraphQL API to fetch metadata and files on-demand.
βββββββββββββββββββ
β User Space β
β (ls, cat, etc) β
ββββββββββ¬βββββββββ
β
ββββββΌββββββ
β FUSE β
β Kernel β
ββββββ¬ββββββ
β
ββββββββΌββββββββ
β WandBFS β
β (src/fs.rs) β
ββββββββ¬ββββββββ
β
ββββββββΌβββββββββ
β WandB Client β
β(src/client.rs)β
ββββββββ¬βββββββββ
β
ββββββββΌβββββββββ
β W&B GraphQL β
β API β
βββββββββββββββββ
Each run has an artifacts directory containing:
input/- Artifacts used as input to the runoutput/- Artifacts produced by the run
These are fetched using the inputArtifacts and outputArtifacts fields from the GraphQL API.
Artifact aliases like latest, best, etc. are created as symlinks:
- Fetched from the
aliasesfield in the GraphQL response - Represented as
FileKind::ArtifactAliasLinkwith a target version readlink()returns the target (e.g., "v10")- Version aliases (e.g., "v0", "v1") are skipped to avoid duplication
Files with / in their names are sanitized by replacing / with _:
- Prevents invalid directory entries
- Applied to both run files and artifact files
/tmp/wandb/
βββ entity-name/
β βββ project-name/
β βββ runs/
β β βββ run-display-name/
β β βββ file1.txt
β β βββ file2.csv
β β βββ artifacts/
β β βββ input/
β β β βββ dataset/
β β β βββ v0/
β β β βββ v1/
β β β βββ latest -> v1
β β βββ output/
β β βββ model/
β β βββ v0/
β β βββ best -> v1
β β βββ latest -> v2
β βββ artifacts/
β βββ collection-name/
β βββ v0/
β βββ v1/
β βββ latest -> v1
Provide your API key via:
- Environment variable:
export WANDB_API_KEY=... - Interactive prompt (if not set)
HTTP requests timeout after 30 seconds by default. This can be modified in src/client.rs.
- No Caching: Every file read downloads the full file
- Pagination: Limited to first 50 items in most queries
- Blocking I/O: File downloads block until complete
- No Prefetching: Metadata fetched on-demand
Mount fails with "File exists":
fusermount -u /tmp/wandbFilesystem not visible in df:
FUSE filesystems may report 0 blocks and be hidden by default. Use -a to see them:
df -ah | grep wandbCtrl+C doesn't work during file read:
- Wait up to 30 seconds for timeout
- The filesystem is designed to respect Ctrl+C better now
Empty artifact directories:
- Check your API permissions
- Verify the run has artifacts with
debug_runtool
GraphQL Errors:
- "Cannot query field X on type Y": The GraphQL schema may have changed. Verify field names using W&B GraphQL playground.
FUSE Errors:
- "Transport endpoint is not connected": Filesystem crashed or was forcefully unmounted. Unmount and restart.
- "Input/output error": Filename contains invalid characters (should be sanitized).
# Debug build
cargo build
# Release build (optimized)
cargo build --release
# Run tests
cargo testsrc/
βββ lib.rs # Library exports
βββ main.rs # CLI entry point
βββ client.rs # W&B API client
βββ fs.rs # FUSE filesystem implementation
MIT License. See LICENSE file for details.
Contributions welcome! Please open an issue or PR.