Open-source project
Zettlr/Zettlr avatar
Zettlr/Zettlr

Zettlr review: a GPL-3.0 Markdown workbench for people who have to hand in a file

Your One-Stop Publication Workbench

13,596 stars847 forksTypeScriptGPL-3.0

At a glance

What is it?
Zettlr is an Electron desktop editor that keeps plain Markdown on disk and hands the export to Pandoc, LaTeX and Textbundle. It suits researchers and students with a fixed publication pipeline, and it is a poor fit for anyone who wants a synced mobile client.
Who is it for?
Adopt Zettlr if your writing ends in a DOCX, PDF or LaTeX file and you are willing to install Pandoc and, for the full set of export profiles, LaTeX. Skip it if you need a phone or tablet client, or if you want a plugin marketplace rather than custom CSS and snippets.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What Zettlr is for, and who feels the problem

Zettlr describes itself as "Your One-Stop Publication Workbench", and the phrase points at a specific kind of user: someone who writes in Markdown but cannot deliver Markdown. A thesis, a journal submission or a course assignment usually has to arrive as DOCX or PDF, sometimes against a LaTeX template the institution supplies. The usual workaround is to write in one program, convert in a second, and fix the formatting in a third. Zettlr collapses that into one window, because it is built around Pandoc as the export engine rather than treating export as an afterthought.

The second audience is the note-taker who wants files, not a database. Zettlr is privacy-first in the sense the README uses: your notes stay as files you own, and the app is offline by design. That matters to people who have been burned by a notes app that stores everything in a proprietary format and offers an export button as a consolation prize. It also supports Zettelkasten-style linking, so the same folder of Markdown can serve both as a drafting area and as a linked note collection.

The people it is not for are worth naming early. There is no mobile app in the README, and no plugin marketplace. If either of those is a requirement, the rest of this review is academic.

The mechanism: Markdown files plus Pandoc as the export layer

Zettlr is an Electron application, which the README states directly and which the repository confirms: the top level holds webpack.main.config.js and webpack.renderer.config.js, and package.json points main at .webpack/main. The source is TypeScript, the package manager is Yarn, and the build tooling is Electron Forge with electron-builder for release artifacts. That stack is the reason the app is available on macOS, Windows and Linux with the same feature set, and also the reason there is no 32-bit build: the README says 32-bit is not supported.

The data flow is deliberately boring. Notes live as Markdown files in folders you choose. Citations come from an external reference manager, with the README naming Zotero and JabRef as the integrations it targets. Export goes through Pandoc, LaTeX and Textbundle. This means Zettlr itself does not own your content or your bibliography; it orchestrates tools that already have their own file formats. The trade-off is that export quality depends on software Zettlr does not ship. The README acknowledges this by pointing readers at a documentation page for installing LaTeX, framed as the way to "unlock all export profiles of the app".

Customisation follows the same pattern. Themes and dark modes exist, and beyond that you get custom CSS and snippets. Snippets automate insertion of boilerplate, which is useful for LaTeX preambles or recurring citation blocks. There is no plugin API described in the README, so anything beyond CSS and snippets means editing the source.

Installing Zettlr and running a first export

The README does not ask you to build anything. It says to download the latest release from zettlr.com/download and install it as you would any other app. Direct binaries are offered for macOS (Intel and Apple Silicon), Windows x64, Debian/Ubuntu x64 and ARM, Fedora/Red Hat x64 and ARM, and AppImage x64 and ARM. Community-maintained packages exist for Homebrew, Aptitude, Flathub, WinGet, Chocolatey and Arch Linux.

Once the app is open, point it at a folder of Markdown files. The app ships with a small tutorial covering the basics, and the README sends new users to the first time users guide in the documentation. For a first real export, install Pandoc and, if you want the LaTeX-backed profiles, LaTeX itself. Then select the export profile you need and run it. What you should see is a new file next to your note, in the format the profile names. If nothing appears, the usual cause is that Pandoc or LaTeX is not on the path the app expects, which is a system-level problem rather than a Zettlr bug.

Building from source is possible and documented. The README says you need NodeJS at version Node 22 or later (`lts/jod`) and Yarn, which you can install globally with `npm install -g yarn`. To check your Node version the README gives:

bash
node -v

Once the dependencies are in place, the README gives one command to build the app for your computer:

bash
yarn package

The package.json scripts also define per-platform packaging commands for mac, win and linux, each with x64 and arm variants. The README notes that no package-lock.json files are committed and that many commands require yarn, which is why yarn is the package manager rather than npm.

Where Zettlr stops: no mobile, no plugin API, no bundled typesetter

The clearest limitation is platform coverage. The README lists macOS, Windows and most Linux distributions, and says other Electron-supported platforms require you to build the app yourself. There is no Android or iOS client anywhere in the README. For a note-taking tool, that is a real constraint rather than a missing nicety, because it means capture on a phone is somebody else's problem. If your workflow depends on writing on a commute, Zettlr is the wrong end of the pipeline.

The second limitation is that Zettlr is a front end to other software. Export profiles that depend on LaTeX will not work until LaTeX is installed, and the README treats that as a separate setup step rather than a bundled dependency. This is a defensible choice: bundling a TeX distribution would balloon the installer. But it does mean a fresh install is not fully functional for academic output, and the failure mode is an export that does not produce the file you expected, with the cause sitting outside the application.

Third, extensibility is thin by modern editor standards. Themes, dark modes, custom CSS and snippets are the documented surface. There is no plugin system described in the README, so a feature you want and the maintainers have not built is a feature you patch yourself. That is normal for GPL desktop software and it is worth knowing before you plan around it.

The README does not document rollback of a failed export, and it does not describe an automatic backup mechanism for notes. Since notes are plain files, recovery is a matter of your own filesystem backups.

Zettlr against Obsidian, Joplin and Scrivener

The comparison people search for most is Zettlr versus Obsidian, and the difference is where each puts its weight. Obsidian is a knowledge base built on a vault of Markdown files with a large plugin ecosystem; Zettlr is a writing and export tool built on a folder of Markdown files with Pandoc in the middle. If your endpoint is a linked note graph you browse, Obsidian's model fits better. If your endpoint is a DOCX with citations that has to match a template, Zettlr's export profiles are the part that matters, and custom CSS is not a substitute for them.

Joplin takes the opposite storage decision. It is a note application with synchronisation across clients, which is precisely what Zettlr lacks, and it is not organised around Pandoc-based publication output. Choosing between them is choosing between sync and export.

Scrivener is the closest match on intent, since it also targets long-form writing and compilation. The approaches diverge sharply: Scrivener is proprietary and stores projects in its own format, while Zettlr keeps Markdown on disk and is licensed GPL-3.0. If you need Scrivener's corkboard and binder metaphor, Zettlr will feel austere. If you need your text to remain readable in any editor for the next twenty years, that austerity is the point.

Logseq sits in the outliner tradition, where the block is the unit and daily notes drive structure. Zettlr's unit is the document. Writers who think in outlines will find Logseq more natural; writers who think in chapters will find Zettlr closer to the shape of the final artifact.

Licence, maintenance and what an upgrade costs

Zettlr is licensed GPL-3.0, stated in the README badge and in package.json. For individual users this changes nothing. For organisations, the practical implication is the one that always comes with copyleft: if you distribute a modified build, the source of your modifications has to travel with it under the same terms. Internal use is unaffected. This is a description of the licence, not legal advice, and anyone embedding Zettlr in a product should read the licence text itself.

The maintenance picture is straightforward. The repository is not archived, and the last push was on 2026-09-20. Releases are frequent and versioned: v4.8.0 on 2026-09-18, v4.7.0 on 2026-07-26, v4.6.0 on 2026-06-14. That cadence suggests a project that ships rather than one that accumulates pull requests.

Upgrade cost is low for users and moderate for contributors. Because notes are plain Markdown and configuration is app-side, moving to a new release does not require migrating a content database. The friction sits on the build side: Node 22 or later, Yarn as the package manager, and webpack plus Electron Forge in the toolchain. Contributors who keep current with Electron releases will be fine; anyone maintaining a fork against an older Node version will have work to do. The default branch is develop, so the stable code you download is a tagged release rather than the tip of the repository.

Editorial conclusion

Adopt Zettlr if your writing ends in a DOCX, PDF or LaTeX file and you are willing to install Pandoc and, for the full set of export profiles, LaTeX. Skip it if you need a phone or tablet client, or if you want a plugin marketplace rather than custom CSS and snippets. Before committing a thesis to it, download the build for your platform from zettlr.com/download, open a small folder of real notes, and run one export through the profile you actually intend to use, because that is where Pandoc and LaTeX misconfiguration shows up first.

Frequently asked questions

What is Zettlr used for?

It is a desktop writing environment for drafting publications in Markdown and exporting them through Pandoc, LaTeX and Textbundle. The README also lists citation integration with reference managers such as Zotero and JabRef, plus Zettelkasten-style note linking.

How do I install Zettlr?

Download the release for your platform from zettlr.com/download and install it like any other app. The README also points to community packages for Homebrew, Aptitude, Flathub, WinGet, Chocolatey and Arch Linux.

Is Zettlr free and open source?

Yes. The README states Zettlr is Free and Open Source Software, and both the README badge and package.json give the licence as GPL-3.0.

Is Zettlr an Electron app?

Yes. The README describes it as an Electron-based app, and the repository contains webpack.main.config.js and webpack.renderer.config.js with package.json pointing main at .webpack/main.

Is Zettlr suitable for beginners?

The README says the app ships with a small tutorial covering the basics and points new users to a first time users guide, so the entry path is documented. The harder part is export: the README treats installing LaTeX as a separate step needed to unlock all export profiles.

How do I use Zettlr?

Open a folder of Markdown files, write in the editor, and export through a profile that calls Pandoc, LaTeX or Textbundle. The README directs new users to the documentation site and the built-in tutorial for the basics.

Official sources

  1. License: GPL-3.0
  2. Project website
  3. README
  4. Releases
  5. Zettlr/Zettlr on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/zettlr-zettlr.svg)](https://hysenlabs.com/projects/zettlr-zettlr)