Zettlr 3.0 Public Beta

Zettlr 3.0 Public Beta

After half a year, it is time for an update of Zettlr. We've been working hard, and are looking forward to a great beta phase, before we can then finally release Zettlr 3.0 stable!

Zettlr 3.0 Public Beta

Zettlr 3.0 Public Beta

Today, we are excited to announce the start of the public beta for the upcoming release Zettlr 3.0. Since the release of 2.3 in June last year, a ton of stuff has changed inside the app, and after a very long waiting period we are happy to give you all the new stuff we packed into the program!

At a glance, here’s what changed since Zettlr 2.3:

Much has changed, and we recommend the update to the beta only in a relaxed hour, since you’ll need to adapt a few things after installing the update. If you missed the dialog indicating all the changes and which contains the “Read this first” section, we have copied it in here for your convenience so you know what you’ll need to do after updating. We also added the rest of the (current state of the) changelog so that you can have a look at what is to come before committing to the update.

Note that you can always find the most up-to-date Changelog by following this link. This changelog always contains all the upcoming changes including those that will follow during the beta of 3.0, as well as what has changed in any of the older updates.

Zettlr 3.0 Beta: Changelog


This update brings a host of changes and new features. If you're upgrading from an older version of Zettlr, you will have to re-do a few things because due to the extensive changes, we had to adapt how your data is persisted. Here's the quick list:

  1. Your open documents will have to be re-opened once. Regardless of which files were open previously, they will all be closed after the update.
  2. There are no more unsaved in-memory files.
  3. Two default settings have changed in order to maximize benefits from the new features: Avoid new tabs is now set to false (since split-panes also allows you to spread out your open documents across several panes and windows), and Always reload remote changes is now set to true by default. You may want to adapt your settings as well to these defaults and try them out.
  4. The defaults system has changed. You will see new export options that weren't there before, and you will see some weird export.format.yaml and import.format.yaml export options. These are the "old" profiles we have kept in case you made modifications. We suggest you copy over all changes to the new profiles and then delete them, or rename those old ones to more memorable names. Read more below.
  5. The TableEditor has received a better save strategy to prevent data loss. As it is impossible to fully control the data flow from the visual table element into the underlying Markdown document, this data flow is now explicit: Tables now feature a save button (with a disk icon) at the top of the table. Its background will be green as long as the table has not been modified. Once it it modified, the background will turn red. Click the button to apply all changes to the document.
  6. Quicklook windows are completely gone now.
  7. Footnote editing has changed: Instead of editing the footnote in-place by Cmd/Ctrl-clicking it, there is now an "Edit" button inside the footnote preview which, upon clicking, will bring you to the footnote context. This has the benefit that you will have full syntax highlighting support as well as any shortcuts and commands you may need.
  8. We have deprecated the Zettelkasten link start and end configuration settings. Both are now fixed to [[ and ]] respectively. We have figured that nobody needs to configure this, and it makes many parts of our code easier.

Split-Panes and Multiple Windows

A long awaited feature has made it into this version: Now you can open multiple windows and you can split the editor area in every window into multiple parts, so-called editor panes (sometimes we may call them "leafs" since internally they are represented as a tree structure. Feel free to remind us in that case that we're talking to humans, not our code). This means you can now open as many files as you wish at the same time, and you can spread them out across multiple windows. This will especially benefit workflows that rely on having open multiple files side by side to copy information or to read them. However, if you are happy with the old ways, you can of course opt not to use them. Here's how it works:

New Defaults/Profile File System

This update introduces a new way to work with defaults files. At a glance, here's what has changed:

Tag Manager Update

The tag manager has received a necessary face lift. Now, the tag manager shows all your tags and allows you to assign/un-assign colors and descriptions. This makes it easier to assign colors to certain tags without having to remember the tag first. Additionally, it gives you a better overview over your tags. The info is now being propagated better across the app, with more places showing the assigned colors for tags.

Additionally, you now have a better way to consolidate your tags: Within the tag manager, you can now rename tags in order to clean up your tagging system.

Migration Guide

There are two instances where you will want to migrate something.

Old defaults files

Since Zettlr will never remove any data without asking, it will keep the previous files in your defaults directory. Now that their filename is also meaningful, you can see them by their naming structure: import.format.yaml and export.format.yaml. You are free to remove them or rename and keep them.

Zettlr ships with a set of new files that are now additionally appropriately named. Those files are "protected". Protected files have a small lock icon next to their name. Protected means that if you delete or rename them, they will automatically be recreated. You can use this to your advantage: By deleting such a file, you are effectively resetting it to factory default (good if you forgot what you changed). By renaming such a file, you can effectively make a copy to have several versions of the same settings depending on your needs.

Reveal.js Presentations

Since we have now dropped our internal reveal.js exporter, there are a few changes you have to make to your existing reveal.js presentations. First, the theme must now be defined in a YAML frontmatter instead of via the dropdown. A minimal working YAML frontmatter will look like this:

theme: league

... the rest of the file

Supported theme values are:

Then, in order to get a working reveal.js presentation, you have to make sure that the property standalone: true is inside the profile (this is the default). In order to additionally copy everything into the HTML file to create a truly self-contained presentation, set the property self-contained: true.

All other things should work as before, but may require a small tweak here or there.

GUI and Functionality

Under the Hood