How To Read This Matrix
Use this page to pick the first VFS to try. If you want the fastest path, start with RAM or disk. If you need real integrations, jump from the setup guide to the VFS docs. The Access column separates filesystem access from API actions.read, write, and exec are MountMode values; exec also lets python3 and js run code from the mount (see per-session mount modes) and is typically used with Disk or RAM. actions means the VFS also exposes mutating commands such as sending a message or creating an issue; run those commands on a WRITE mount. The Docs column shows where each VFS is available, with one icon per supported runtime: Python, TypeScript (Node), and TypeScript (Browser). Click an icon to jump to that runtime’s docs.
Sections below mirror the Setup sidebar so you can pick a category and follow the same path through credentials → VFS docs.
Every VFS accepts read: bounded. read: fresh, which revalidates cached bytes against the backend before serving them, is accepted today only by the S3-compatible family, GridFS, OneDrive, SharePoint, the Hugging Face Hub repos (models, datasets, spaces), Hugging Face Buckets, GitHub, Google Drive, Google Docs, Google Sheets, Google Slides, Dropbox and Box — the backends whose stat and read stamp the same kind of content token. It is also accepted by backends that cache listings but no bytes (Disk, Chroma, Qdrant, Airtable, W&B, and OPFS in the browser), where fresh checks the listings. On GitHub it revalidates a cached file against its blob sha; a file read for the first time comes from the mount’s listing, and the next read’s check corrects it. On Google Docs, Sheets and Slides the token is the file’s Drive modified time, and the check lists every file of that kind, so it costs one listing rather than one stat. On Dropbox the token is the file’s content_hash, which a listing row carries and every download names in its Dropbox-API-Result header, ranged or not; the check is one get_metadata for the file, never a listing of its folder. server_modified still gives the modified time but is not the token, since Dropbox can repeat it across same-size rewrites. On Box the token is the file’s sha1, which a listing row and GET /files/{id} carry; a download names none, so a whole read stamps the listed sha1 only when its bytes hash to it. The check is one GET /files/{id} by the id the mount last listed, trusted only when Box places the same active file at the same path, and otherwise a listing per level from the mount root. Any other mount declaring it is refused at mount time rather than downgraded. This list is maintained by hand for now and grows one backend at a time as each learns to stamp a read fingerprint.
Under fresh, a cached listing is checked too, and what it is checked against depends on the VFS (listing_version in spec/*/vfs.json; see listings under fresh):
mount: GitHub (Python, Node, browser) and HF Models, HF Datasets, HF Spaces (Python, Node). One check per command against the head commit; a GitHub mount pinned to a full commit sha sends none once its listings were fetched at that sha, since github.com refuses 40- and 64-hex branch and tag names (a GitHub Enterprise host is assumed to as well; a Hub mount checks every command, even at a full sha).folder: Disk (Python, Node). One local stat per listed folder.folder_versions: falseturns it off for that mount.none: every other VFS. A cached listing is re-listed once per command.
Infrastructure
No external setup, these run locally or against a connection string you already have.Object Storage
Google Workspace
Microsoft
Cloud Files
Code & DevOps
Messaging
Database
Knowledge
Memory
Notes
Others
Agent Frameworks
Mirage drops into the major agent application frameworks. Each adapter exposes aWorkspace as the agent’s filesystem and shell. Click an icon to jump to the integration docs.