[0.46.0] - 2026-08-13
Removed
- Breaking: Remove the Mesa Git Server API. Users can no longer use vanilla Git clients with Mesa. Our first-class Git sync feature continues to function as usual.
- Breaking: Remove the Mesa MCP server
Fixed
- Fix a bug causing older MesaFS FUSE clients to fail when using private-key-signed access tokens
[0.45.0] - 2026-08-11
Changed
- Stop recording API-key usage during authentication
Removed
- Remove stale last-triggered values from webhook target views
Fixed
- Fix gRPC not-found responses interrupting unrelated VCS requests on shared HTTP/2 sessions
- Fix HTTP/2 stream resets crashing API workers under concurrent VCS traffic
- Fix canceled VCS requests creating excess HTTP/2 sessions and stalled streams
- Fix VCS request stalls after task replacement by draining watch streams and replacing stale HTTP/2 sessions
- Fix API-key usage updates blocking authenticated requests under concurrency
- Fix concurrent writes returning internal errors instead of retrying transaction conflicts
- Fix VCS request stalls when long-lived watch streams exhaust shared HTTP/2 connections
[0.44.1] - 2026-08-09
Changed
- Re-shape VCS
ApplyOpsstreams at the gateway to the server-advertised operation and message-size limits, including requests from older clients
Added
- Add the maximum encoded request-message size to the existing VCS
ApplyOpspolicy response
Fixed
- Replace VCS upstream HTTP/2 connections after
ENHANCE_YOUR_CALMresets and spread requests across four long-lived connections
[0.44.0] - 2026-08-07
Changed
- Limit signing-key commit attribution to 100 ordered authors
- Name
allow_backwardsrather than the CLI-only flag spelling in theBOOKMARK_MOVE_HISTORY_REWRITEmessage - Allow Git sync to move rewritten branches and tags with exact old-OID leases
- Allow Git pushes to move rewritten branches and tags with exact old-OID leases
- Add a bounded online command to repair stale and same-Change physical ancestry
- Keep lightweight and annotated Git tags attached when their target Change commits are rewritten and omit invalid signatures from rewritten tag objects
- Rebase descendant Changes recursively when a parent Change evolves, preserving committed content and bookmark positions while rejecting descendants with pending writes
Added
- Add transparent pagination for Content API directory listings
- Report the refused bookmarks in
details.bookmark_namesonBOOKMARK_MOVE_HISTORY_REWRITEerrors - Use signing-key authors for Mesa commit writes and preserve Git authors and co-authors during pushes and sync
Fixed
- Fix Git sync rewrite races and partial branch/tag updates with atomic leased retries
- Fix clean ancestor bookmark merges that hang during conflict checks
- Fix duplicate changes across paginated merge histories with tied or nonmonotonic commit times
[0.43.0] - 2026-08-02
Changed
- Breaking: Require REST and MCP bookmark moves to advance history unless
allow_backwardsis set - Add atomic multi-bookmark moves to the VCS service
Added
- Support private-key-signed tokens for Mesa Git Server APIs and MCP
Fixed
- Fix webhooks not firing for repository mutations made through the Mesa CLI or MesaFS
- Retry transient webhook delivery failures
- Prevent VCS object reads from returning blob or tree content not registered to the requested repository
- Prevent
SetChangeBasefrom overwriting a change that evolved while its new commit was being computed
[0.42.0] - 2026-07-16
Added
- Add dashboard management for organization signing keys, including browser-local key generation, two-key rotation, revocation, and last-used activity
Fixed
- Fix the GET change RPC to report
filesandupdated_atcorrectly
[0.40.0] - 2026-07-12
Changed
- Breaking: Align repository names with GitHub’s naming rules — a single path segment of letters, numbers, periods, hyphens, and underscores. Slash-separated (nested) names are no longer accepted, and
.,.., and names ending in.gitare rejected. Periods are newly allowed (e.g..dotfiles,sdk-v1.2) - Breaking: Make repository names case-insensitively unique per organization — names keep the casing they were created with, but
MyRepoandmyreponow refer to the same repository and can no longer coexist
[0.39.0] - 2026-07-08
Changed
- Breaking: Reserve tag keys starting with
$for filter operators — creating or updating repository or API key tags with a$-prefixed key now returnsINVALID_REQUEST
Added
- Add structured JSON tag filters to
GET /v1/:org/repos, with$-prefixed case-insensitive operators ($and,$or,$not,$eq,$in,$contains,$starts_with,$ends_with,$exists) and case-insensitive tag matching
Deprecated
- Deprecate legacy comma-separated repo tag filters in favor of structured JSON tag filters
[0.37.0] - 2026-06-17
Added
- Include a
trace_idfield in 5xx error responses. Quote it when reporting an issue and Mesa support can pull up the exact failing request.
[0.36.0] - 2026-06-09
Added
- Accept access tokens (JWTs) as Bearer credentials on all v1 REST endpoints and the VCS gateway, anywhere an API key is accepted. Tokens are signed locally from an API key, with no token endpoint to call. Each request re-verifies the token against its signing key and clamps its scopes and repository access to the key’s current state, so disabling or revoking the key invalidates every token it signed
[0.35.0] - 2026-06-07
Added
- Add the Mesa MCP server, which lets you connect your coding agents and other AI tools to Mesa. Through it, an agent can:
- Create repositories, and list or look up existing ones
- Browse directories, read file contents, and inspect path metadata at any change or commit
- Inspect commit and change history, including a change’s full evolution, and diff any two changes or commits
- Create a change, write, edit, or delete files in it, then snapshot the result into durable history
- List, create, move, delete, and merge bookmarks to publish work
- Add
https://api.mesa.dev/mcpas a custom connector, sign in, and choose what access to grant to use the MCP server
Fixed
- Change writes that hit a concurrent modification now return
409 Conflictinstead of500.
[0.34.0] - 2026-06-01
Added
- Add shallow clone and partial clone support for Git fetch over protocol v2, including
--depth,--deepen,--unshallow,--filter=blob:none,--filter=blob:limit=<n>, and--filter=tree:0. - Add
ref-in-wantsupport for Git fetch over protocol v2, allowing clients to request refs directly during fetch.
[0.33.0] - 2026-05-26
Changed
- Breaking: Git fetch (
git-upload-pack) now speaks Git protocol v2 only.info/refs?service=git-upload-packalways returns a v2 capability advertisement (version 2,ls-refs=unborn peel,fetch=wait-for-done,object-format=sha1, etc.);POST /git-upload-packacceptscommand=ls-refsandcommand=fetchrequest framing. Pre-v2 Git clients can no longer fetch from Mesa — minimum supported client is Git 2.18 (≥ 2.26 strongly recommended, since 2.26 enables v2 by default). Push (git-receive-pack) is unchanged. TheGit-Protocolrequest header is now intentionally ignored on the upload-pack route. - Change responses now report parent change IDs instead of commit SHAs of prior versions of the same change.
[0.31.0] - 2026-05-21
Changed
- Breaking: Rename the content-metadata surface from
xattrstometadata.GET /v1/:org/:repo/contentresponses now expose ametadataobject instead ofxattrs; directory listings filter via repeatablemetadata[<key>]=<value>deepObject params instead ofxattr=<name>:<value>; and keys are bare (theuser.mesa.*namespace prefix is dropped).
[0.30.0] - 2026-05-19
Added
- Add optional
xattrsmetadata toGET /v1/:org/:repo/contentresponses. Files, symlinks, directories, and directory entries now include UTF-8 string extended attributes underuser.mesa.*when present. - Add repeatable
xattr=<name>:<value>filters toGET /v1/:org/:repo/contentdirectory listings, returning entries that match all supplied xattr filters.
Changed
- Change
POST /v1/:org/:repo/changesandPATCH /v1/:org/:repo/changes/:change_idmessage handling so omittedmessagecreates a change with no description on POST and preserves the existing description on PATCH, while explicit string values are accepted including""to clear a description. - Change
POST /v1/:org/:repo/bookmarks/mergeto accept an optionalmessage; omittedmessageuses a generated merge description, while explicit string values are accepted including""for no description.
[0.29.2] - 2026-05-17
Added
- Add
GET /v1/:org/:repo/bookmarks/:bookmarkfor direct bookmark lookup by name, and addglobfiltering toGET /v1/:org/:repo/bookmarks - Add optional
ref_globsfilters toPOST /v1/:org/:repo/upstream/syncs. Omit it to sync all supported branches and tags, or pass branch/tag glob strings such as{ "branches": "main" }
[0.29.0] - 2026-05-15
Added
- Add
upstreamfield to repository responses ({ url, auth_kind, latest_sync } | null). Upstreams are added, replaced, or removed viaPOST /v1/:org/reposandPATCH /v1/:org/:repo. Auth is write-only: pass{ kind: 'token', token, token_username? }or{ kind: 'username_password', username, password }; responses expose onlyauth_kind - Add
POST /v1/:org/:repo/upstream/syncsto enqueue a sync with the repository upstream. Pass{ "direction": "pull" }or{ "direction": "push" }. Returns thesyncrow; the worker processes it asynchronously. Readupstream.latest_sync, callGET /v1/:org/:repo/upstream/syncs/:syncId, listGET /v1/:org/:repo/upstream/syncs, or subscribe tosync.{queued,in_progress,completed,failed}webhooks - Add
GET /v1/:org/:repo/upstream/syncsandGET /v1/:org/:repo/upstream/syncs/:syncIdfor repository upstream sync history - Add
sync.queued,sync.in_progress,sync.completed, andsync.failedwebhook event types covering the lifecycle of a sync
Changed
- Change webhook delivery
User-AgentfromDepot-Webhook/1.0toMesa-Webhook/1.0
Removed
- Remove deprecated
X-Depot-Event,X-Depot-Delivery, andX-Depot-Signaturewebhook delivery headers
Fixed
- Empty repos created via
POST /:org/reposare now usable by mesa clients without manual seeding — the server lazily materializes an initial change on first write, advancing the default bookmark offZERO_OIDat the same time.git pushto a fresh repo continues to work as a ref-create without--force(MES-1387)
[0.28.2] - 2026-05-07
Changed
- Hide refs that point at (or descend from) an unresolved conflict from
git fetchandgit ls-remote. These refs previously failed mid-fetch
[0.28.1] - 2026-05-06
Added
- Add
X-Mesa-Event,X-Mesa-Delivery, andX-Mesa-Signaturewebhook delivery headers alongside existingX-Depot-*headers
Changed
- Rename raw-content response headers
X-Depot-Blob-HashandX-Depot-Blob-SizetoX-Mesa-Blob-HashandX-Mesa-Blob-Size - Deprecate
X-Depot-Event,X-Depot-Delivery, andX-Depot-Signaturewebhook delivery headers. Receivers must migrate to theX-Mesa-*equivalents by 2026-05-11 or signature verification will fail when the legacy headers stop being sent
[0.28.0] - 2026-05-03
Fixed
- Return 409 Conflict instead of 500 Internal Server Error on concurrent bookmark writes.
[0.27.0] - 2026-04-30
No user-facing changes.[0.26.0] - 2026-04-29
Added
- Add webhook management endpoints for creating, updating, and deleting repository webhooks.
- Add git tag support in receive-pack, info/refs, and upload-pack.

