Core Primitives
Repository
A repository in Mesa is a folder that has its own version history and permissions. Automatic versioning lets you view, undo, and redo modifications to documents without the fear of losing work.Changes
The core primitive of Mesa’s version history is theChange. Think of a change as a logical unit of work or modification to your repository. Each change has a unique identifier
and can contain an arbitrary number of file edits. You can optionally provide a change description.
A repository for an internal dashboard might have a change history like this:
base_change_id. The optional message serves as the change description.
When you mount MesaFS, your writes directly affect the
revision you’ve mounted at, ex
main.
To keep work separate, create a new change first with mesa new.
See Writing to a Mount for more details.Bookmarks
Git’s “branches” represent a new unit of work plus a name for that work. In Mesa’s JJ-based model, units of work (Changes) are not required to have human-readable names, however, you have the option to assign these using Bookmarks. A Bookmark is a lightweight pointer to a specific change in the change DAG that allows you to use reference that change more easily. Virtually every Mesa API gives you the choice to reference a change by either its ID or an associated bookmark. Bookmarks are mutable and can be moved from one change to another. Every repository on mesa has a default bookmark, which represents the canonical state of the project. Conventionally, the default bookmark is calledmain, although this is configurable when creating a repository.
puqltutt change and the feature/widget bookmark pointing to the qzvqqupx change.
To create a bookmark at a given change and move it onto a newer change later:
Conflicts
Conflicts work exactly how they do in JJ. This is mostly the same as Git, with the sole exception that conflicts are non-blocking. A change can be in a conflicted state and you can resolve the conflicts later or in some cases ignore them entirely. This prevents your agents from getting stuck and gives you maximum flexibility in how to handle conflicts. A conflict occurs when you’ve modified the same part of the same file in different ways on two separate branches and then try to merge them. We have multiple ways to resolve them. See dealing with conflicts for more details.Dealing with conflicts
A conflict happens when two branches start from the same base change and edit the same location differently Example: two separate branches editoverview.json and change the title property:
Before any merge
Both Chat A and Chat B have edited overview.json in the same place.
feature/chat-a into main Mesa will return an error because the new merge commit would be conflicted.
Because conflicts are non-blocking, a merge can produce a conflicted change that you resolve later. The conflicted state would look like this:
feature/chat-a bookmark still points to qzvqqupx (branched from original main change ovknlmro), while the conflicted merge change zxoosnnp combines both parents (qzvqqupx and puqltutt).
Comparing to Git and JJ
Mesa is Jujutsu-based while retaining full Git compatibility. You can essentially treat changes like commits and bookmarks like branches but there are some key differences:- There’s no staging area like in Git. You are always editing an existing change and changes can evolve as you edit them. When you create a new change in Mesa it is initially empty and then you can edit and modify files at that change. This is ideal for agents running in sandboxes because any edits they make are automatically persisted to a very specific place in the version tree rather than being saved in some dangling staging area.
-
Bookmarks are like branches in Git but lighter weight. They do not automatically move from one change to another but can be moved manually. The consequence of this is that you do not need to explicitly think about
branching ahead of time. If you have a
mainbookmark, you can just create a new change from it and that’s effectively an unnamed branch. You can name it later or leave it unnamed and create new changes on top of it or just move the main bookmark to point at the new change.
| Mesa Concept | Git | JJ |
|---|---|---|
| Repo | Repo | Repo |
| Change | Commit | Change |
| Bookmark | ~Branch | Bookmark |
Syncing to GitHub & GitLab
Mesa can sync with arbitrary upstream git repositories including ones hosted on GitHub or GitLab. This is useful if you want to create a Mesa repository based on a template repo that lives in GitHub or use Mesa mounts as a faster way to access a GitHub-hosted repo. Add an upstream to a Mesa repository, then trigger a sync viasyncUpstream in the SDK or the upstream syncs REST API. See GitHub for setup, auth options, and sync observability.
Next steps
- See Filesystem
- See Usage Patterns

