Open-source project
Zettlr/Zettlr avatar
Zettlr/Zettlr

Zettlr keeps the vault local and pushes the publishing through Pandoc

Your One-Stop Publication Workbench

13,916 stars874 forksTypeScriptGPL-3.0

At a glance

What is it?
Zettlr is a GPL-3.0 Electron desktop app for people who write academic Markdown and hand it to LaTeX, Pandoc or Textbundle. It keeps citation keys pointing outward at Zotero or JabRef and pushes export to tools such as LaTeX that you may need to install yourself.
Who is it for?
Adopt Zettlr if your notes are Markdown files you intend to publish and your references already live in Zotero or JabRef. Skip it if you need a phone client, because no Android or iOS target appears in the release matrix.
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 received new commits within the last day.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

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

From daily snapshots

Star history

  • Zettlr/Zettlr13,916 ★ · +352
Star history
Repository2026-09-222026-11-14
Zettlr/Zettlr13.6k13.9k

352 Stars in the last 53 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

Forge builds the tree, electron-builder wraps it

Two build systems sit in the repository root: forge.config.js and electron-builder.yml. That split runs straight through the script names in package.json. The package scripts drive electron-forge, and the release scripts hand a prepackaged directory to electron-builder with --publish never, so a local build uploads nothing. Version 4.9.0 declares its entry point as .webpack/main, output that webpack.main.config.js and webpack.renderer.config.js produce, so the running app comes out of the compile step rather than from the TypeScript under source/.

One command builds for whatever target you name, and the per-architecture variants differ only in their arch arguments:

bash
yarn package
bash
cross-env NODE_ENV=production npm_config_arch=arm64 electron-forge package --platform=darwin --arch=arm64

Wrapping that output is a separate step, and it names the directory forge produced:

bash
electron-builder --mac --arm64 --publish never --prepackaged out/Zettlr-darwin-arm64/Zettlr.app

If you only want a directory to run locally, the first block is enough. Anything you intend to hand to other people needs the third.

Node 22, Yarn and jq sit between you and a working build

Zettlr is an Electron app that compiles a few native C++ modules, so the toolchain has to exist before the app runs at all. The README asks for NodeJS at least Node 22 (lts/jod) and for Yarn, chosen because no package-lock.json is committed and many commands assume yarn. Check your Node first, then install Yarn globally:

bash
node -v
bash
npm install -g yarn

Three command line utilities are listed separately because specific scripts fail without them: cURL and unzip are required by the Pandoc download script, and jq is required by the i18n script. On macOS the native build requirement is the XCode command line tools, which one command installs:

bash
xcode-select --install

On Windows the recommendation is the Windows Subsystem for Linux plus the free Visual Studio developer tools.

Three export targets, and LaTeX you have to install yourself

Export is why the project calls itself a publication workbench rather than a note taker. Three conversion targets are named: Pandoc, LaTeX and Textbundle. Pandoc carries the broad format range, LaTeX covers typeset output for submission, and Textbundle packages a folder another app can open.

A full LaTeX installation is a separate prerequisite, and the README tells new users to consider installing it so that every export profile is available inside the app. Without LaTeX on the machine, the profiles that need a typesetting toolchain stay out of reach. Snippets cover a different job. They insert repeated boilerplate into the document, which saves typing and changes nothing about the output format.

Citation keys point outward, Zettlr stores no bibliography

Citations are described as tight and ever-growing integration with your favorite reference manager: Zotero, JabRef, and many others.

Resolve one citation key end to end in your own setup before a deadline depends on it.

No mobile artifact, no 32-bit build, and uneven ARM support on Windows

The release matrix names macOS on Intel and Apple Silicon, Windows x64, Debian/Ubuntu and Fedora/Red Hat in x64 and ARM, and an AppImage in both architectures. 32-bit is not supported. Anything else Electron can target is reachable only by building the app yourself, which puts you back through Node, Yarn and the native toolchain described above.

Two gaps matter more than the rest of that list. No Android or iOS build appears in the release matrix, in the sentence naming supported platforms, or among the top-level repository entries, so the mobile app people search for is not something the project ships. Second, the ARM story is uneven. Linux and macOS get official ARM artifacts, while the Windows ARM release script in package.json passes --ia32 and --arm64 to a single electron-builder invocation. If you keep an ARM Windows device, confirm which file you actually receive before planning a workflow around it.

Obsidian, Logseq, Joplin, Scrivener: four different homes for a file

Scrivener is built around a manuscript binder rather than a linked corpus, so it suits someone assembling one long document and fits retrieval across thousands of notes poorly. Obsidian and Logseq treat the note as the primary artifact and grow through linking and extensions, putting the weight on graph structure instead of on output. Joplin is a notebook that imports formats beyond Markdown.

Zettlr puts the weight at the other end of the pipeline. Its named toolchain is Pandoc, LaTeX and Textbundle for output and Zotero or JabRef for sources. Read this as a difference in approach rather than a measured result. The question worth asking before you switch is where your bibliography already lives. If it sits in a reference manager that emits keys, the export path is the part you get. If it is scattered across your own notes, you have to rebuild it before anything works.

Last push on 2026-09-29, and six upgrade routes that behave differently

The repository is not archived and the last push was on 2026-11-02, with tagged releases v4.9.0 on 2026-10-25, v4.8.0 on 2026-09-18 and v4.7.0 on 2026-07-26. Three releases in roughly three months means the app will move under you, and CHANGELOG.md at the repository root is where you read about it first.

The six community package managers are not equal. Homebrew offers a cask, the Aptitude option comes from a separate repository at apt.zettlr.com, and the Arch option is a wiki page. Note which route you installed from before reporting anything. On licensing, package.json declares GPL-3.0 and the LICENSE file carries the same terms, so anyone redistributing a modified build inherits those obligations. A SECURITY.md exists at the root.

Editorial conclusion

Adopt Zettlr if your notes are Markdown files you intend to publish and your references already live in Zotero or JabRef. Skip it if you need a phone client, because no Android or iOS target appears in the release matrix. Before the first deadline, export one real document through the LaTeX route and confirm a citation key resolves end to end, since the README suggests installing LaTeX to unlock all export profiles.

Frequently asked questions

What is Zettlr used for?

Zettlr is a desktop application for writing and publishing that works on local Markdown files. It targets people who need citation keys from a reference manager such as Zotero or JabRef, LaTeX and Word template support, and export through Pandoc, LaTeX or Textbundle.

Is Zettlr suitable for beginners?

The app ships with a small tutorial covering the basics, and the documentation includes a first time users guide. Beginners still have to install LaTeX before every export profile becomes available, and building from source asks for Node 22, Yarn, cURL, unzip and jq.

How do I install Zettlr?

The README points to zettlr.com/download for installers covering macOS on Intel and Apple Silicon, Windows x64, Debian/Ubuntu, Fedora/Red Hat and an AppImage, in x64 and ARM. Homebrew, Aptitude, Flathub, WinGet, Chocolatey and the Arch Linux wiki are listed as community package managers.

Is Zettlr an Electron app?

Yes. The README states that Zettlr is Electron based, and the build depends on the platforms Electron itself supports. Every platform Electron supports can be built from source, but only the listed targets ship official binaries.

Is Zettlr a secure tool?

Zettlr describes its notes as local and privacy first, and the repository contains a SECURITY.md file. Check that file's contents before filing a vulnerability report.

Is Zettlr open source and free?

Yes. The license is GPL-3.0 in both the LICENSE file and package.json, and the README says the project is fully supported by community donations with a one-off or monthly option.

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)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/zettlr-zettlr.svg)](https://hysenlabs.com/projects/zettlr-zettlr)

Was this useful?