Skip to main content
MesaFS is a FUSE-based virtual filesystem that mounts Mesa repositories as local read-only directories without cloning. It is ideal for agents, CI pipelines, and large monorepos where a full clone is impractical. MesaFS supports macOS and Linux. Effectively, when you’re running mesafs, all your Mesa repos become just a directory on your system:
MesaFS is early-stage, alpha software. We’ve tried our best to make it reliable, but you may encounter occasional performance issues.If you run into any issues, we urge you to open an issue.

Installing

The quickest way to install mesafs on macOS or Linux:
curl -fsSL https://raw.githubusercontent.com/mesa-dot-dev/mesafs/refs/heads/main/install.sh | sh
This will auto-detect your platform and install the latest stable release. Re-run the same command at any time to update.
On macOS, the installer uses Homebrew and requires macFUSE. Follow the official macFUSE guide to install macFUSE before running the installer.You must install the macFUSE kernel backend. To do so, you will need to:

Getting Started

The easiest way to get started is to run:
mesafs run
On first run, mesafs will walk you through an interactive configuration wizard and store the config for future use.
The default point point is ~/.local/share/mesafs/mnt.
You need a Mesa account.
Try browsing the Daytona source:
ls ~/.local/share/mesafs/mnt/<your-org>/daytona
When you’re done, hit Ctrl+C and mesafs will clean up after itself.
You can control the log level with the MESAFS_LOG environment variable (uses tracing filter syntax):
MESAFS_LOG=debug mesafs

Configuration

mesafs is configured through a TOML config file. The configuration file is searched for in the following locations (highest priority first):
  • $XDG_CONFIG_HOME/mesafs/config.toml (Linux only)
  • $HOME/.config/mesafs/config.toml
  • /etc/mesafs/config.toml
You can override the path to the config file with the --config-path flag.
An example config file:
# mesafs configuration file

# mount-point specifies where the local filesystem will be mounted.
# Each of your orgs will be available as a top-level directory within
# this mount point.
#
# In this example, the resulting file tree will look like this:
#
# /run/user/1000/mesafs/mnt/
# ├── hooli-corp/
# │   ├── my-repo1
# │   └── my-repo2
# ├── globex-corp/
# │   ├── my-repo1
# │   └── my-repo2
mount-point = "~/.local/share/mesafs/mnt"  # The default

# Daemon configuration.
[daemon]
# Path to the PID lock file.
pid-file = "~/.local/share/mesafs/mesafs.pid"  # The default

# You can register any number of private organizations here. Each
# organization will be mounted within the mesa mount point as a
# top-level directory.
[organizations.hooli-corp]
api-key = "" # Your Mesa API key for this organization.

[organizations.globex-corp]
api-key = ""

# MesaFS requires a local cache directory to store repository data.
[cache]
# Path to the cache.
path = "/run/user/1000/mesafs/cache"
# Maximum size of the cache (e.g. "10GB").
max-size = "10GB"

# Telemetry configuration.
[telemetry]
# Whether to send anonymous usage data to Mesa.
vendor = true

Daemon Mode

You can run mesafs as a background daemon:
mesafs run --daemonize
Daemon logging can be configured in the [daemon.log] section of the config file:
[daemon.log]
# Where to write logs: "stdout", "stderr", or a file path.
target = { file = "/var/log/mesafs.log" }
# Color mode: "auto", "always", or "never".
color = "auto"