Start here
Scope and non-goals
What Mica does, what it does not do and how to work without it, how it compares with other Git-based editors, and how to undo a publish.
6 min readMica is small on purpose. This page tells you what it does, what it does not do, and how to work without the missing parts. Read it before you choose Mica.
What Mica does
- It gives editors forms for the content model that you write in TypeScript.
- It keeps the content as JSON, Markdoc and media files in your Git repository, or in a repository of its own. It has no database.
- It saves changes as files that are not committed yet, and Publish makes one commit of the changes that the editor chooses.
- It handles photos, files such as GPX tracks, places on a map, and links to data that it does not edit. Large media can be in Git LFS.
- It keeps a value for each language in a localized field, shows the form in one language at a time, and the website falls back to another language when a translation is missing.
- It shows a live preview of saved changes in the local editor and in the self-hosted editor, and a link to the page on the website in both. The self-hosted editor needs a preview container of the website.
- It lets a coding agent edit the content over MCP, as drafts.
- It runs on your machine with
npx, with no sign-in, or as one container behind your identity provider. - Your Astro build reads the files. The website does not call Mica.
One Mica serves one site and one branch.
What Mica does not do
| Not in Mica | How to work without it |
|---|---|
| Roles | Each editor that your identity provider admits can do everything, Publish included. Admit only the people who may publish. For a review step, use a staging branch. |
| Approval workflows | Point a second Mica at a staging branch. Review and merge it on your Git host. |
| Scheduled publishing | Publish to a branch, and let a scheduled CI job merge it. |
| History and undo in the editor | Git has the history. See "Undo a publish" at the end of this page. |
| Publish for one language, and different fields in each language | The languages of an entry publish together, with the same fields. Content that is different in each language uses one collection for each language. See Localization. |
| An image inside a line of text, a table with aligned columns or with a list in a cell | Editors add images on a line of their own and tables with one line of text in each cell. A field that has the other forms already is read-only in the editor. |
| A page builder with blocks of different kinds | A repeater() has one shape for each item. Use a select() in the item for its kind, or several repeaters. |
| A branch switcher | Run one Mica for each branch. |
| Rename of a media file | Upload the file again, and change the entries that use it. |
| More than one site | Run one Mica for each site. |
| SSH remotes for the self-hosted editor | Use an HTTPS URL and a token. |
Mica also has no content API, no GraphQL, no build webhook, no media server and no plugins. A push starts your build.
Most of these can come in a later version without a breaking change. The reasons are in the decision record What 1.0 does not do.
Limits
Mica 1.0 is tested at these numbers. Above them, Mica can work, but nobody measured it.
- 1,000 entries in one collection.
- 5,000 files in the content root.
- 5 editors at the same time.
Other limits:
- A sortable collection can have at most 2,000 entries in its order.
- An uploaded file is at most
MICA_MAX_UPLOAD_BYTES, 25 MB by default.
Compared with other editors
Mica is for a team that wants the content model in code, the content in Git with no database, and an editor that it can run itself with one container. If you need full on-page editing or roles today, one of the other products fits better. Mica is also experimental and not ready for production.
The page Compare Mica with other editors has one table and one page for each of Keystatic, TinaCMS, Decap CMS, Sveltia CMS, Pages CMS and CloudCannon. It shows what their documentation said on 18 October 2026. These products change often, so read their documentation before you decide.
Undo a publish
Each publish is one commit with the line Published-with: Mica. To undo it, revert that commit on your machine:
git pull git log --oneline --grep "Published-with: Mica" git revert <commit> git push
The push starts your build, as a publish does. A self-hosted Mica gets the revert at its next sync, and editors see it in the editor. A revert undoes the whole publish. To undo only one entry, change it in the editor and publish again.