[0.47.1] - 2026-08-16
Fixed
- Fix active writes returning
ESTALEwhen a background WAL flush refreshes repository paths - Ensure that all CLI commands derive the organization from
MESA_ACCESS_TOKENso thatMESA_ORGis no longer required - Fix slow
mount()initialization for layouts that specify a checked-out revision withat
[0.47.0] - 2026-08-14
Fixed
- Fix reads, writes, truncation, mode changes, and mtime updates through file descriptors after unlink or rename replacement without recreating the removed path or changing its replacement, while checkout-stale mutations remain rejected with
ESTALE
[0.46.0] - 2026-08-13
Changed
- Breaking:
layout.jsonfiles no longer accept repos with a top-levelbookmark/changeIdfield. To specify a checkout revision, useat. - Allow CLI mounts to run with only
MESA_ACCESS_TOKEN
Added
- Add
branchedFromto layout entries to fork a new change the first time a repo is opened
Removed
- Breaking: Remove
--vcs-url,MESA_VCS_URL, anddebug.__service-vcs-urlconfiguration options.
[0.45.0] - 2026-08-11
Added
- Add
mesa open --repo <org/repo> --mode --pathwith--ator--from/--as/--describeto open a repository checkout (create change → optional--asbookmark → publish checkout; omit--asfor an anonymous tip;--repois auto-detected from CWD when omitted; custom--pathFUSE presentation lands with mount layouts)
[0.44.1] - 2026-08-09
Changed
- Split filesystem write batches to the server-advertised VCS operation and message-size limits
[0.44.0] - 2026-08-07
Added
- Add support for custom filesystem layouts with
mesa mount --layout <file>: the layout defines the complete namespace, mounting the selected repositories at the paths it declares with per-repositoryro/rwmodes. Repository names resolve within the organizationMESA_ORGselects, or the sole configured organization whenMESA_ORGis unset. Without a layout,mesa mountexposes the organization browse tree as before - Add
mesa checkpoint [-m <message>]to flush pending writes (serializing concurrent writes and tree mutations in the same repo), optionally describe the current change, create a new descendant change, and advance bookmarks onto that descendant (requires the checkout to already be on a bookmark). Concurrent bookmark-tip races raise a retryable conflict (distinct from not-on-a-bookmark and from a half-applied checkout failure). Omit-mto preserve the existing description; pass-m ''to clear it; any other-mvalue overwrites. Prints the now-active change id on the first line (same asmesa new/mesa edit) andsaved <id>for the described change on the second line
Changed
mesa rootand repository-aware commands now work from custom and nested layout paths- Change
mesa bookmark createso recreating an existing bookmark at the same commit succeeds (exit 0); creating the same name at a different commit still fails withalready exists. Success output is nowBookmark '<name>' is at the requested revision.for both create and same-target recreate
Fixed
- Fix writes through unlinked file descriptors recreating deleted files or overwriting replacements
- Fix fresh pathname reads and metadata remaining stale while a descriptor from before a checkout or realtime update stays open
[0.43.0] - 2026-08-02
Changed
- Breaking: Expand
mesa bookmark moveto select multiple bookmarks by name, glob, or repeated--from; make-t/--tocanonical with-r/--revisionaliases; and require-B/--allow-backwardsfor backward or sideways moves
[0.42.0] - 2026-07-16
Changed
- Stop checking for newer CLI releases automatically when commands run; use
mesa version --checkto check explicitly so intentionally pinned installations are not prompted to upgrade
Fixed
- Fix realtime mount updates after a local write so subsequent remote creates, deletes, and renames appear without remounting
[0.40.0] - 2026-07-12
Changed
- mesa on macOS no longer requires macFUSE — installing or upgrading via Homebrew now sets up everything automatically, with no kernel extension, security approval, or reboot. If you previously installed macFUSE for mesa, you can uninstall it
[0.39.0] - 2026-07-08
Added
- Add the
mesa diffcommand. - Add
MESA_CACHE_BLOCK_SIZE/cache.block-sizeto tune the MesaFS disk-cache block size and reduce file-descriptor pressure for large disk caches.
Changed
mesa lognow shows your whole change tree instead of just the current checkout’s ancestry, so a change you started but never pointed a bookmark at no longer disappears from the log. Pass-r <revision>to scope the log to a single revision’s history as before.- Distribute mesa on macOS as a Homebrew cask instead of a formula;
install.shmigrates existing formula installs
Fixed
- Cap auto-sized MesaFS disk caches by the process open-file limit so large free disks do not exhaust file descriptors during mount startup.
[0.38.0] - 2026-06-22
Changed
- Pass the short change ID shown in
mesa log— or any unique prefix — to any command that takes a revision (mesa edit,mesa new,mesa show,mesa log,mesa describe,mesa bookmark).mesa lognow prints each change at its shortest unambiguous length, so the ID you see is always one you can type. mesa shownow leads with the change ID — the handle you act on — and moves the commit hash to a secondary line.
Removed
- No longer expose the synthetic
user.mesa.daemon-pidxattr
Fixed
- Fix newly created files transiently disappearing from the mount during bursts of writes
[0.37.0] - 2026-06-17
Added
- Install a specific CLI version on Linux with
curl -fsSL https://mesa.dev/install.sh | sh -s -- --version <X.Y.Z>. The version is pinned through your package manager (apt/apk/dnf) using the existing repository. - Add environment variables for every remaining config file option:
MESA_DAEMON_LOG_FILE,MESA_DAEMON_LOG_COLOR,MESA_PREFETCH_ENABLED,MESA_PREFETCH_MAX_DEPTH,MESA_PREFETCH_MAX_CONCURRENCY,MESA_PREFETCH_CACHE_PRESSURE_LIMIT, andMESA_MESAIGNORE_PATH(explicit global.mesaignorelocation) - Add
MESA_REPO_REVSto pin per-repo revisions from the environment, e.g.MESA_REPO_REVS="acme/web=bookmark:main,acme/api=change-id:abc123" - Add
MESA_NO_CONFIG_FILEto skip reading any (deprecated) config file, for sandboxes and other hermetic environments
Changed
- When you mount a repo, writes now alter the revision you mounted at. Previously, the first write on a mount would create a new change on top of your specified revision. To emulate the old behavior, use
mesa newafter mounting. - Mount every repo the API key can access, always;
mount = "explicit"in a config file is now ignored with a deprecation warning, and access is restricted by scoping the API key. Per-repo overrides (rev pins, read-only) still apply - Deprecate
mesa repo openandmesa repo close; both are now hidden no-ops that warn and exit 0, since there is no explicit mount list to edit - Change
mesa repo listto list repos from the API instead of the local mount configuration;--allis a hidden deprecated no-op - Deprecate TOML config files (
config.tomlandcredentials.toml): existing files are still read with environment variables taking precedence, butmesanow logs a warning naming the environment variable replacement for every setting the file contains. A future release will stop reading config files entirely — that removal will be the breaking change - Deprecate
-y/--non-interactive; the flag still parses but has no effect now that config files are never created - Deprecate
mesa doctorandmesa dump-config-template; both still work but only exist to support deprecated config files - Change the daemon to exit at startup with a clear error when no organizations are configured, instead of mounting an empty filesystem
Removed
- Remove the interactive onboarding wizard;
mesano longer creates config files on first run — configure it withMESA_ORGandMESA_API_KEYinstead
Fixed
- Make
MESA_API_KEYtake precedence overcredentials.toml. Previously a per-org[organizations.<org>].api-keyentry incredentials.tomloutrankedMESA_API_KEY, so a stale file key silently shadowed the environment key and produced confusing401errors. Credentials now resolve asMESA_ORGS→MESA_API_KEY→ per-orgcredentials.toml→ top-levelcredentials.toml
[0.36.0] - 2026-06-09
Added
- Support installing Mesa on RPM-based Linux distributions with
dnf, including Amazon Linux 2023 environments such as Vercel Sandbox. - Add the
MESA_ORG(organization to configure) andMESA_API_KEY(credential for this process) environment variables.MESA_API_KEYaccepts an API key or an access token, so a short-lived token minted outside a sandbox can be injected without the raw API key ever entering it.
Changed
- The mesa daemon now runs mounts on a self-expiring access token signed locally from your API key, instead of mounting with the raw key. The mount lasts up to 24 hours and then expires.
Removed
- Remove the MesaFS secret store, the
mesa authcommands, and legacy secret backend configuration. Mesa CLI now reads API keys only fromMESA_API_KEYor a plaintextcredentials.tomlnext toconfig.toml.
[0.34.0] - 2026-06-01
Added
- Enable realtime updates by default for MesaFS mounts. Edits from other clients checked out on the same change now appear automatically. If simulatenous edits conflict, both edits will show up in the file, delimited by conflict markers.
Changed
- MesaFS FUSE
flush(2)no longer blocks waiting for confirmation that writes were received by the Mesa backend - Update global
.mesaignorehandling: the CLI now loads.mesaignorefrom the same directory as the activeconfig.toml; if no file exists, Mesa uses its built-in default ignore rules. A custom.mesaignorefully replaces those defaults, so an empty file disables global ignore rules for that mount. SDK and other non-CLI mounts no longer inherit ignore rules from the CLI config directory.
Removed
- Remove the experimental CRDT-backed multiplayer mode and related real-time filesystem event handling. Realtime is now enabled by default in MesaFS.
[0.33.0] - 2026-05-26
Added
- Add per-repo
read-onlyto[organizations.<org>.repos.<repo>]inconfig.toml. Setread-only = trueand the daemon rejects writes to that repo withEROFS, while other repos in the same mount stay writable. - Mount and resolve conflicted changes in the filesystem. Checking out a conflicted change (e.g. after a conflicted merge) now succeeds: conflicted files read back with JJ-style conflict markers (
<<<<<<<…>>>>>>>),stat()reports the materialized marker size, and writing marker-free content back resolves the conflict and persists across remounts. Previouslymesa editon a conflicted bookmark failed with “commit has no tree OID” because the server stored the structural tree separately from the commit row; the server now records it on the commit directly so the daemon mounts the conflicted commit through the normal tree-fetch path.
[0.32.0] - 2026-05-22
Added
- Real-time kernel filesystem events in multiplayer mode. When peers modify files in a shared session, the FUSE layer now delivers inotify/FSEvents notifications so editors and build tools pick up changes without polling.
[0.30.0] - 2026-05-19
Added
- Add
mesa new -m, --message <MESSAGE>for setting the description of a newly created change. Omitting the option creates the change with no description.
[0.29.2] - 2026-05-17
No user-facing changes.[0.29.0] - 2026-05-15
Added
- Support POSIX extended attributes on any path in a mounted Mesa repo.
setxattr/getxattr/listxattr/removexattr(and theirl*xattrsymlink variants) round-trip values under theuser.mesa.*namespace; usesetfattr/getfattron Linux orxattron macOS. Names outsideuser.mesa.*(including the broaderuser.*, plussecurity.*,system.*,trusted.*) are short-circuited at the FUSE layer — set rejects withEPERM, get/remove answerENODATAinstantly with no VCS round-trip, so kernel-issued queries (e.g.getxattr(security.capability)on everyexec(2)) don’t penalize file-heavy workloads likenpm install. Per-attribute values capped at 64 KiB and names at 255 bytes; per-path total is storage-bounded (~64-72 KiB raw, base64-inflated under the hood). Synthetic xattrs (user.mesa.org,user.mesa.repo,user.mesa.daemon-pid) win over user-set values with the same name on read
Fixed
- Empty repos are now usable without workarounds —
mesa edit, bookmark create, write, and remount all work on freshly created repos wheremainpoints at ZERO_OID (MES-1387)
Changed
- The
RevRPC type gains anEmptyRootunit variant for empty-repo bootstrap. Restart the mesa daemon after upgrading — a new CLI connecting to an old daemon will fail to deserialize the new variant.
[0.28.1] - 2026-05-06
Added
- Add
mesa showsubcommand for inspecting a revision’s commit metadata and patch. Supports--name-only,--summary,--stat, and--no-patchflags with colorized output.
Changed
mesa lognow shows change history instead of commit history, matching the mental model of changes as the primary unit of work.- Coordinate cache budgets across
mesainstances in the same process; unsetcache.max_sizeandcache.max_memory_sizeinconfig.tomlnow auto-size against system resources instead of being unbounded
Fixed
- Fix
rgand other tools that resolve/..in just-bash mode by clampingresolve_pathat the filesystem root.
[0.28.0] - 2026-05-03
Added
- Added support for
.mesaignorefiles which exactly follow.gitignoresemantics. - Added support for a global
.mesaignorefile as a sibling to theconfig.tomlfile.mesacreates this file for you during first launch. Existing users can usemesa dump-default-mesaignore. - Added
mesa dump-default-mesaignoreto print out the default.mesaignoreinstalled during onboarding. - Added support for conflicts in
mesa’s filesystem. Conflicting files renderjj-style conflict semantics.
Fixed
- Fixed race condition in cache deallocation theoretically causing crashes.

