# quiver: a browser-based commutative diagram editor that exports tikz-cd and fletcher

> quiver is a graphical editor for commutative and pasting diagrams that renders on screen and exports LaTeX via tikz-cd or Typst via fletcher. It runs at q.uiver.app; the repository is the source you host yourself.

**varkor/quiver** — A modern commutative diagram editor for the web.

- Repository: https://github.com/varkor/quiver
- Website: https://q.uiver.app
- Stars: 3,627 · Forks: 125
- Language: JavaScript
- License: MIT
- Published: 2026-09-23 · Updated: 2026-09-23 · Language: en
- Canonical page: https://hysenlabs.com/projects/varkor-quiver

## What quiver solves, and who it is for

Writing a commutative diagram by hand in tikz-cd or fletcher is slow. Every node needs a coordinate, every arrow needs a target and a style, and a small change in layout means editing several lines at once. quiver replaces that loop with direct manipulation. The README describes it as "a modern, graphical editor for commutative and pasting diagrams", and claims that creating diagrams with it is "orders of magnitude faster than writing the equivalent LaTeX or Typst by hand". That is the project's own framing, not a measured result.

The intended user is someone who already writes LaTeX or Typst and needs diagrams inside that output: category theorists, algebraists, topology students preparing lecture notes, anyone producing pullback and pushout squares, adjunctions, or higher cells. The editor is not a general vector drawing program. It knows about objects, arrows, labels, and the grid those labels sit on, and that knowledge is what makes the export possible.

## How the editor and its export pipeline work

The interface is a grid of objects with arrows between them. The README states that object placement "is based on a flexible grid that resizes according to the size of the labels", so a node labelled with a long expression widens its cell instead of overlapping its neighbour. Labels are typeset with KaTeX, which the Makefile vendors into src/KaTeX at build time, and the same mathematical content is what ends up in the exported source.

Arrow styling is composable rather than a fixed menu. The README shows a screenshot captioned "a wide range of composable arrow styles", and the diagram URLs in the README encode style objects with separate tail, body, and head parts, for example a tail named "hook", a body named "squiggly", and a head named "harpoon". Colours apply to labels and arrows independently, and there is a screenshot mode that hides the grid for clean captures.

Export is the point of the tool. Diagrams go out as LaTeX through tikz-cd or as Typst through fletcher, and the README says the goal is to "export LaTeX and Typst that looks as close as possible to the original diagram". The application itself is a static web app. There is no server-side rendering step in the repository layout: the top level holds src/, package/, service-worker/, screenshots/, a Makefile, and the tutorial. The service worker is built separately with node build.js under Node 20, which is what makes the editor work offline once loaded.

## Building quiver locally and drawing a first diagram

The README points users at q.uiver.app for a hosted instance, so the fastest path is simply to open that URL. Building from source is for people who want to host it themselves or modify it. The Makefile's default target vendors three things: KaTeX, two PNG icons, and the Workbox window script.

Run the default target from the repository root. It downloads KaTeX v0.18.1, unzips it, and moves it to src/KaTeX, then fetches the Workbox file from the version 7.0.0 CDN path and regenerates the icons.

```bash
make
```

The icon rules shell out to ImageMagick's convert, so that binary has to be on your PATH or those two rules fail. To build the service worker you need Node, and the Makefile pins the version explicitly.

```bash
make service-worker
```

That target changes into the service-worker directory, runs nvm use 20, then npm install and node build.js. If NVM_DIR is unset the nvm line is skipped, so the Node version you get is whatever is already active. After the build, serve the repository root over HTTP and open it in a browser; the README does not document a serve target beyond the phony name listed in the Makefile, so the static file server is your choice.

Once the editor is open, the workflow is: click on the grid to place an object, type its label, then drag from one object to another to create an arrow. The tutorial.md file in the repository covers keyboard-only editing, and the README notes that every action has a shortcut. When the diagram looks right, use the export control to copy tikz-cd or fletcher source into your document.

## Where quiver stops being the right tool

The scope is narrow by design. quiver handles commutative and pasting diagrams. If your figure is a string diagram, a graph with cycles and edge weights, a Feynman diagram, or a general TikZ picture with decorations and clipping paths, the editor gives you no vocabulary for it, and the export will not produce it. You would be fighting the tool, and hand-written TikZ would be faster.

The export is a translation, not a proof of equivalence. The README's stated goal is output that "looks as close as possible" to the on-screen diagram, which is an aspiration rather than a guarantee. Layout in tikz-cd depends on the surrounding document: column separation, font size, and the packages you load can all shift a diagram that looked correct in the browser. Expect to adjust the exported source for anything beyond a simple square.

Self-hosting has its own friction. The build reaches out to GitHub releases and a Google storage bucket for KaTeX and Workbox, so an offline or firewalled build fails at make unless those assets are already vendored. The Makefile also assumes a git branch workflow with master, dev, release, squash, and gh-pages branches; the release and gh-pages targets rebase between them and will not do anything useful in a plain clone with a single branch. On top of that, the service worker build is pinned to Node 20 through nvm, and the README does not document what happens on other Node versions.

## quiver against writing tikz-cd by hand

The obvious alternative is not another editor but the source format itself. If you already write tikz-cd, you can produce commutative diagrams with no extra tool in the loop, and you keep full control over every coordinate and style. The trade is speed of iteration: moving a node means editing its position and every arrow that references it, whereas in quiver you drag it. For a diagram you will draw once and never touch again, hand-written tikz-cd is often less work than learning an editor's shortcuts. For a diagram you will revise across drafts, the editor pays for itself.

A second alternative is a general-purpose drawing tool that exports TikZ. Those give you arbitrary shapes and free positioning, which quiver deliberately does not. What they lack is semantic knowledge of the diagram: they cannot offer an adjunction arrow style or a corner arrow, and their TikZ output tends to be a pile of coordinates rather than tikz-cd's matrix-and-arrow idiom. If your output has to read like idiomatic tikz-cd, a general drawing tool is the wrong layer.

The third option is Typst's fletcher package used directly. quiver exports to it, so if your document is already Typst, quiver is a front end for a format you could write yourself. The difference is the same as with tikz-cd: interactive placement against manual placement.

## Maintenance, licensing, and what upgrading costs

The repository is not archived, and the last push was on 2026-09-01. The project is MIT licensed, which permits commercial and academic use, modification, and redistribution provided the licence text is retained. That is a permissive licence, but it says nothing about the licence of the vendored dependencies: KaTeX and Workbox are pulled in by the Makefile from their own release channels and carry their own terms, so check those separately if you redistribute a built copy.

Upgrade cost is concentrated in two places. The vendored versions are hard-coded in the Makefile (KaTeX v0.18.1, Workbox 7.0.0), so bumping either means editing the Makefile and re-running the build. The service worker pins Node 20 via nvm, so a Node upgrade is a deliberate change in the service-worker target rather than something that happens automatically. There are no retrieved releases for this repository, which means there is no changelog to diff against; tracking what changed between versions means reading commits on master. For a self-hosted deployment, budget for re-running make and make service-worker after any pull, and re-test the editor in the browsers you support.

## Conclusion

Adopt quiver if you draw commutative or pasting diagrams regularly and want LaTeX or Typst output that matches what you see. Do not adopt it if you need a diagram type outside the commutative and pasting family, or if you cannot build the vendored assets. Before relying on it, open q.uiver.app, draw a small pullback square, export it, and check that the generated tikz-cd or fletcher compiles in your own document.

## FAQ

### What is quiver?

quiver is a graphical editor for commutative and pasting diagrams that runs in the browser. It renders diagrams for screen viewing and exports them to LaTeX via tikz-cd or Typst via fletcher.

### How do I install quiver?

You do not install it as a package. The README points to the hosted instance at q.uiver.app, and self-hosting means cloning the repository and running the Makefile's default target, which vendors KaTeX, the icons, and the Workbox script.

### How does quiver work?

You place objects on a flexible grid that resizes with label size, connect them with arrows whose tail, body, and head styles can be combined, and then export the result as tikz-cd or fletcher source. Labels are typeset with KaTeX.

### What licence is quiver under?

The repository is MIT licensed. The vendored dependencies fetched by the Makefile, KaTeX and Workbox, come from their own release channels and carry their own terms.

## Sources

- [Issues](https://github.com/varkor/quiver/issues)
- [License: MIT](https://github.com/varkor/quiver/blob/master/LICENSE)
- [Project website](https://q.uiver.app)
- [README](https://github.com/varkor/quiver/blob/master/README.md)
- [varkor/quiver on GitHub](https://github.com/varkor/quiver)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/varkor-quiver
