Zettlr © Hendrik Erz 2017–2025
Developed with between Sweden and Germany
On this page, you can view the release notes for all Zettlr versions. Click on an entry to expand its changelog. This page is automatically generated from the changelog file.
The "Upcoming" category refers to changes that have already been implemented but not yet released. If you install our nightly- or beta-releases, this section will contain the improvements and changes that are already part of your version.
This release contains a full rewrite of the TableEditor. The old implementation of the TableEditor had many bugs and inconveniences that made working with Markdown tables barely less cumbersome than having to deal with raw Markdown tables. Users criticized volatile data handling and experienced frequent data loss. This is why we redesigned the TableEditor from the ground up. With this release, we are finally able to give the new experience to you.
The most important improvement is that now data loss should be a thing of the past. The new TableEditor makes full use of the available features of the editor to keep the data as safe as possible. But we didn't want to stop there. Because the TableEditor hadn't received a face lift in years, we asked ourselves what else the TableEditor was missing.
From a user perspective, we have kept the design of the TableEditor as close to the former UX as possible, while also fixing a few oddities. Specifically, the buttons of the TableEditor have been fully redesigned to be more minimalist. Also gone is the infamous "Save" button that was not able to help prevent data loss. The new TableEditor now features proper syntax highlighting so that you can more easily verify that you are authoring proper Markdown. In addition, the new TableEditor is now faster, more memory efficient, and it should be simpler to fill entire tables with data.
Lastly, one big improvement of the new TableEditor is that you don't have to use it to be more efficient in authoring tables. Specifically, we decided to implement all functionality fully keyboard-oriented. This means that for any modification you may want to make there is now a shortcut. Adding and removing rows and columns; clearing data from rows, columns, or the entire table; aligning column text left, right, or center; swapping rows or columns; etc. Anything is now possible either with the new built-in context menu, or a quick keyboard shortcut.
There is only one thing we stopped to support: grid tables. Given that their structure can be much more difficult to parse we wanted to err on the side of caution. However, some keyboard shortcuts such as navigating between cells will still work with grid tables. Since users will most of the time only edit simple tables, we believe this to be an acceptable compromise — while not completely ruling out supporting grid tables, especially since Pandoc has started heavily investing in an improvement of their grid table support.
In any case, we hope that the new TableEditor will finally fix the issues you experienced over the past years — and we would like to apologize that it took us so long to fix all of these issues at once!
$FILENAME
variableIn this update, we have implemented a change in which the $FILENAME
variable
no longer includes the filename extension. This means that, while $FILENAME
has in the past resolved to my-file.md
, it will now only include my-file
.
If you rely on the $FILENAME
-variable in any of your snippets, please make
sure to update it by adding the variable $EXTENSION
behind it. In other
words, everywhere you need only the filename without its extension, you can
keep $FILENAME
, but wherever you need both the file name and its file
extension, please use $FILENAME$EXTENSION
. (The latter variable includes
the leading period of the extension, so do not write $FILENAME.$EXTENSION
.)
This update brings with it a great new feature for Zettlr: A built-in image viewer and PDF viewer. Once you have selected in the settings that you wish to open images or PDF files in Zettlr instead of the default behavior to open it externally, Zettlr will open them in editor panes just like the editors. You can rearrange them just like you can other files, and you have some options available to inspect the files.
For images, the viewer offers various options to zoom and fit the images so that you can view every detail of them while having other files open side-by-side. In addition, the image viewer offers four background modes to accommodate transparency and difficult-to-view colors in the images better: transparent (the default), a black background, white background, and a translucent checkerboard background.
The PDF viewer likewise allows you to preview PDF files using Chromium's built- in PDF viewer that you may already know if you have opened PDF files in Google Chrome or Edge. Due to restrictions in how this works, however, you will have to manually "enable" such a viewer before being able to scroll it by clicking into it. Whether an iframe is interactive is indicated by a small border around the iframe.
Note that both image and PDF viewers are just that: viewers. As Zettlr is a text app, we do not plan on implementing any ways of editing images or PDF files. To annotate your PDF files, please continue using your existing workflow.
This release of Zettlr ships with a fully rewritten citation parser. We have decided to do so because the existing citation parser was very coarse. It would only detect and indicate entire citation nodes, but it could not distinguish between the various parts of citations (such as prefix, citekey, and suffix). In addition, there were quite many inefficiencies in how Zettlr would parse citations.
The new citation parser aims at fixing these issues. It now mounts individual
nodes into the document for all individual parts of a citation node.
Specifically, it now detects formatting characters, the @
-sign, the suppress-
author-flag (a hyphen preceding the @
-sign), prefix, suffix, and the locator
individually. This not just makes styling individual citation parts possible,
but also makes all processing within Zettlr more efficient and faster.
Especially in documents with a lot of citations, you should be able to observe a
performance improvement.
Lastly, we took this opportunity to align the parser more with how Pandoc
Citeproc processes citations. Most notably, this includes relaxing some
requirements such as having to place commas after the citekey, and support for
curly brackets, which allows you more flexibility in defining citekeys (e.g.,
@{AuthorYear}
) and locators (e.g., {pp. 23-24, 66-69}
),
If you prefer to style Zettlr using Custom CSS, you can now style the individual parts of your citations, using the following CSS classes:
cm-citation
: The entire citation nodecm-citation-mark
: Formatting characters ({}[];
) except the @
-sign and
the suppress-author-flagcm-citation-prefix
: The citation prefixcm-citation-suppress-author-flag
: The suppress-author-flagcm-citation-at-sign
: The @
-sign in front of your citekeycm-citation-citekey
: The actual cite key (sans surrounding curly brackets)cm-citation-locator
: The locator after your citekeycm-citation-suffix
: The citation suffixWith this update, we have updated the Zettelkasten link insertion workflow. This is due to the new capabilities of Zettlr to understand link labels. To do so, we have removed the previous settings "Link with filename only" and "When linking files, add the document name …". Instead, we have added two new settings, "Always use the file title as label for internal links" and "Use the file ID as link target if possible."
The new workflow applies when you autocomplete a filename, and works as follows:
mark
-
extension when exporting from Markdown if that is not already enabled. This
ensures that ==highlighted==
spans are properly considered in any output
format.$FILENAME
variable now does not contain the file
extension anymore. Users who also want the extension should update their
snippets to $FILENAME$EXTENSION
(#4191).it-IT
translations (#5831).da-DA
translations (#5868).de-DE
translations.EditorView
s that map the corresponding shortcuts but
don't have snippets installed.iframe
approach and
switching to the built-in Markdown-to-HTML parser.sublabel
feature to describe the context
menu items.38.2.0
.3.8
.curly
rule to ESLint, enforcing curly brackets for block-statement
declarations (if
, for
, while
, etc.).enabled
property of context menu items is now optional, and defaults to
true
.EditorPane
s will no longer load all documents at the same time, and instead
reuse the existing MarkdownEditor
component for a single document. This
greatly reduces memory consumption, especially for very full tab bars, since
only a single document will be actively rendered at any one time.type
keyword, and will
subsequently be removed.DirectedGraph
class from the link provider to the stats window.electron-devtools-assembler
to
electron-devtools-installer
; now the Vue.js devtools extension works again.rangeInSelection
utility function now accepts an optional parameter that
allows inclusion of adjacent selection ranges in calculating the result. This
allows, e.g., renderers to detect whether a selection touches a node-to-be-
rendered.Zettlr now features a set of several text transformation commands in the editor. Using these commands, you can transform various pieces of text in the editor using several strategies aimed at working with both regular text (which you can, e.g., transform between sentence or title case) and corrupted text (from which you can remove control characters, unnecessary line breaks, and clean up quotation marks). In total, Zettlr now ships with 13 such transform commands, but many more are possible.
To utilize these transformations, simply select the text you wish to transform, open the context menu on it, and select the corresponding transformation from the context menu.
The available transforms as of now are:
Zap gremlins
: Removes unwanted control characters (such as form feeds,
vertical tabs, and others), which sometimes end up in recognized PDF text.Strip duplicate spaces
: Removes any superfluous spaces.Italics to quotes
: Turns italic markers (e.g., *text*
) into quotes
("text"
).Quotes to italics
: Turns quotation marks (e.g., "text"
) into italic
markers (*text*
).Remove line breaks
: Removes superfluous linebreaks while retaining any
paragraphs (separated by two consecutive linebreaks).Straighten quotes
: Turns smart, or "magic quotes" into regular quotes.Ensure double quotes
: Turns any type of quotation (which includes backticks,
since those sometimes appear in text copied from PDF files!) into regular
double quotes.Double quotes to single
: Turns any straight double quotes to single quotes.Single quotes to double
: Turns single quotes into double quotes.Emdash — Add spaces around
: Ensures that all em-dashes (—
) in the text are
surrounded by spaces.Emdash — Remove spaces around
: Ensures that no em-dashes (—
) in the text
are surrounded by spaces.To sentence case
: Turns the selected text to sentence case.To title case
: Turns The Selected Text To Title Case.3.7.0.2
.37.2.0
.getAppServiceContainer
. This makes it possible to reduce a few
recursive dependencies on passing the service container down and will help
disentangle the main process services in the future.Enter
, Backspace
,
or quotes in code editors in the Assets Manager unusable (#5797).(nothing here)
top-level-division
,
whose meaning has changed which started to produce empty first pages during
Word exports (#5645).Ctrl-Shift-H
(#4668).mermaid
and the Pandoc-attribute style
{.mermaid}
class (#5734).Enter
to not accept autocomplete
suggestions in some contexts such as Markdown syntax elements (#5646).Ctrl-Shift-[
(Windows/Linux) or
Cmd-Alt-[
(macOS) for folding code, Ctrl-Shift-]
or Cmd-Alt-]
for
unfolding, Ctrl-Alt-[
for folding all, and Ctrl-Alt-]
for unfolding all.fr-FR
translation (#5738).cs-CZ
translation (#5775).EditorView
is parsed
using a Markdown parser before running.defaultKeymap
.**
as default bold and *
as default italic formatting for Markdown
commands if the config field is not present.pandocLinkParser
for properly parsing pandoc link attribute strings.wikilinks_title_after_pipe
or wikilinks_title_before_pipe
(depending on your settings) for every export from a supported (Markdown-
based) reader so that wikilinks/Zettelkasten links are properly parsed.de-DE
)fr-FR
, #5688)zh-TW
, #5656)reader
/writer
parser from
nathanlesage/pandoc-profile-generator
; retire getPlainPandocReaderWriter
.pandoc-maps.ts
to common pandoc-util
location.toc-heading-X
where X
is the level).v35.1.5
.v3.6.4
If you use Zettlr on Windows, there is a chance that you will be unable to install this update at first. This is because this update uses a different, new code signing certificate. There is a possibility that especially those of you who use a work computer on which you do not have administrative access, Windows will warn you of this update and prevent you from installing it. Based on initial communication, there are indications that this won't happen, but we wanted to let you know just in case.
If you are unable to install this update, please make sure you update to at least version 3.4.2, which has been released last week. If you did not update to version 3.4.2, you can find do so by clicking this link.
For more context, please read our blog post that outlines our roadmap for the code signing certificate change, as well as our Community Forum post. If you have any questions, please don't hesitate to ask them on the Community Forum, on Discord, or as a comment on our BlueSky or Mastodon accounts.
If you are able to install this update without issues, please let us know on our Discord channel, Community Forum, or on BlueSky or Mastodon.
zh_TW
translations (#5635).v26.x.x
.If you use Zettlr on Windows, we urgently recommend you to install this update. We will release a second update approximately one week after this update, which you may not be able to install on Windows right away due to Zettlr switching code signing certificates. Therefore, please absolutely make sure you install this update on your Windows computers.
For more context, please read our blog post that outlines our roadmap for the code signing certificate change, as well as our Community Forum post. If you have any questions, please don't hesitate to ask them on the Community Forum, on Discord, or as a comment on our BlueSky or Mastodon accounts.
[[filename|Some title]]
), links that use the old and not
recommended syntax of adding titles from the time when Zettlr did not support
titles ([Do not use this syntax]([[filename]])
) can no longer be
automatically replaced when renaming files (#5606).Å
character on macOS keyboards.v3.6.3
.v4.0.3
.v34.2.0
.vue-tsc
; in addition to stylistic and code-issues that are handled by ESLint
this will capture serious TypeScript issues as what happened during the patch
from 3.3.1 to 3.4.0 (see for context #5526); the new linting experience will
run by default, the old linter has been renamed from lint
to lint:code
,
and the new linter can be called individually using lint:types
.value
to target
in Markdown AST ZettelkastenLink
nodes to make it
more explicit that this field contains the value and never the title.targetRange
to Markdown AST ZettelkastenLink
nodes to
allow for easy manipulation of link targets.(nothing here)
uk-UA
(#5524)de-DE
3.6
IPCAPI
that can be used to type the various IPC
APIs the service providers use across the app.AssetsProvider
, DocumentAuthority
,
DocumentManager
, WindowProvider
, CiteprocProvider
(nothing here)
This update includes a change in the writing statistics. While we extensively
tested it, we would like you to backup your personal writing statistics. You can
do so by going into Zettlr's data directory and simply make a copy of the file
stats.json
before launching the update. Your data directory is located at
C:\Users\<your username>\AppData\Roaming\Zettlr
(Windows),
/Users/<your username>/Library/Application support/Zettlr
(macOS), or
/home/<your username>/.config/Zettlr
(Linux). Then, check if your writing
statistics still look proper. If not, please report this. Thanks!
%o
; #5424)w
: Executes a save command for the current fileq
: Executes a close-file command for the current filewq
: Attempts to save the current file and then close it!
argument for supressing the "Omit unsaved changes"
dialog will not work, as the editor does not have the authority to tell
main to simply omit work (this is a security feature)j
/k
) now account for line wrapping for a smoother
navigation experienceC-f
, C-t
, and C-c
in specific
modes to re-enable default editor behaviors like search and task item
shortcutsde-DE
)tr-TR
) (#5461)[[filename#heading-id]]
) and can handle
such links appropriately; the editors will not yet jump to the corresponding
headings, but this will improve compatibility with other editors who already
support this feature (#3727)Tab
v33.2.0
v7.5.0
PersistentDataContainer
now uses proper data types, making usage more
type-saferegisterFileProtocol
call with the new recommended
handle
call for handling safe-file://
calls
)de-DE
) translation (#5399)This update fixes a workaround that Zettlr had in place for a shortcoming of Pandoc regarding the automatic numbering of headings. This workaround is no longer necessary, since Pandoc has since fixed the issue.
Zettlr now ships with changed default profiles for various export formats. Since
Zettlr never overwrites any data, the new defaults will not be applied
automatically. You can apply the change manually by removing the following line
from the default profiles: shift-heading-level-by: 1
.
shift-heading-level-by: 1
line from default profilespascal
; #5368)es-ES
(#5372)==highlight==
)
as well as enabling spell checking of highlighted rangesmax-width: 100%
applied to them to
ensure they never overflow their parent container.md2html
utility function now allows a fourth parameter containing hooks
that allow the further customization of the produced HTML output<http://www.example.com>
will now remove the
angled brackets (#5285)it-IT
(#5233)zh-TW
(#5327)nl-NL
(#5319)ru-RU
(#5314)v32.1.0
v3.4
.eslintrc.json
config
with what ESLint calls "flat" configsWhen Zettlr v3.0.0 was released, we started receiving reports by users mentioning that some files wouldn't properly save, potentially leading to data loss. After searching for the underlying root cause, we have now identified it as improper newline handling in files. Specifically, we have accidentally introduced a bug that would render Zettlr incapable of properly detecting Windows-style CRLF newlines. This means that Zettlr was only sometimes able to properly read and modify such files.
This update fixes this bug. Now, Zettlr is able to properly read and modify any file, regardless of whether it has been created on Windows, macOS, Linux, or even some older systems. We would like to apologize for this bug and thank you for sticking with Zettlr despite it.
The filter field in the file manager has always applied OR-logic when searching for files and workspaces. In this latest update, Zettlr changes to AND file filtering logic, meaning that only items matching all queries will be displayed when entering phrases separated by spaces.
As an example: Until now, searching for "Niklas Luhmann" would've surfaced files that contained either "Niklas" or "Luhmann," or both. From now on, searching for "Niklas Luhmann" will only show files that contain both "Niklas" and "Luhmann" and exclude files that miss one of these phrases.
<link>
style links, the
link
text remains as plain text. When removing [title](link)
style links,
the title
text remains as plain text.v30.1.0
(cf. issue #5135 and Electron issue #41839)\n
across the entire app. The actual newlines from the files will
be stored in their respective file descriptor, and will be exclusively used on
file reads (to replace them with \n
) and file writes (to replace \n
with)29.3.2
(cf. Electron issue #41839)For a long time now, Zettlr would (sometimes aggressively so) detect plain links and display them in a rendered state. In some cases, this was nice as it would relieve you from having to surround such links with pointy or angled brackets.
However, especially in the latest evolution of this parser plugin, the link detection was a bit too aggressive and interfered, e.g., with emphasis highlighting. In this version, we have entirely removed our custom link detection and rely upon the more straight-forward way of detecting links.
Regarding your exporting experience, this should not have any impact, since the auto-link-detection feature wasn't enabled by default by Pandoc anyhow, but depending on how you have been writing, you may notice less detected links in your documents.
To add "plain" links (without using the full []()
-syntax) from now on, simply
surround them with angled brackets: <https://www.google.com>
or
<mail@example.com>
. Note that the protocol (https://
) is required, so
<www.google.com>
will not work.
This changes brings Zettlr's link functionality much more into alignment with other editors as well, since this is the way that many other applications handle links as well.
This update brings a long-awaited change to Zettlr's handling of internal links
(sometimes called Wikilinks). Specifically, with this version, Zettlr finally
supports optional titles in such links. Your old links in the format [[link]]
still work fine, but now you can add a title that is different from the link,
separated by a pipe, or vertical bar character (|
).
If such a title is given, Zettlr will use it in various ways to make your files more readable. For example, if you have the link renderer activated in the settings, it will take care of hiding the link target of Wikilinks as well as those of regular Markdown links.
Since there is no way of knowing which of the two parts is the link, and which
is the title, Zettlr follows Pandoc's solution in allowing you to specify how
internal links are structured for you. The default and recommended setting is to
put links first, and titles second ([[link|title]]
). This ensures
compatibility with VimWiki, MediaWiki, Obsidian, and others. However, should you
need to target GitHub wiki pages or another application that expects a title to
come first, you can select the alternative option ([[title|link]]
).
In order to make Pandoc aware of your choice, you can add one of the following
reader extensions to your export profiles: wikilinks_title_after_pipe
or
wikilinks_title_before_pipe
.
Lastly, due to this improvement, we have changed the default setting for "link with filename" from "always" to "never", since it will be more ergonomic to use a custom link title directly instead of having the filename pop up after the link. This default setting applies only to new installations automatically; so if you already installed Zettlr, you can manually switch it.
After the release of Zettlr v3.0.0, some users have complained that their
internal links have stopped working. It turns out that quite a lot were using
Logseq's syntax for adding titles to internal links ([Title]([[Link]])
), which
we broke during a refactor of the Markdown parser. This update partially
restores this link functionality, allowing you to Cmd/Ctrl-Click
them to
follow these links again.
Note that we have not implemented other parts yet, and we recommend the more
common [[wikilinks]]
or [regular markdown links](./file.md)
.
This release marks the debut of our UX/UI artist Artem Barinov who spent the better half of 2023 redesigning the entire preferences window from scratch. While this change narrowly didn't make it into 3.0.0, we are more than excited to introduce this new and sleek overhaul in this version.
The new window now follows a much more consistent design philosophy. While we have kept the broad tabbed outline, the settings have now been moved into smaller blocks that contain sets of related settings. Furthermore, instead of having to remember where a setting is located, you can now directly search for it using the new search bar.
We also took the opportunity to change, rename, relabel, and remove settings so that a bit of older remnants are now gone. Overall, the experience of changing the settings should now be much smoother, and we hope you like the change. In the coming updates, you can improve many more improvements on the UX side of things!
Projects are at the heart of Zettlr. As a writing toolbox primarily targeted at
academics, journalists, and writers, it must cater not just to simple note-
taking workflows, but also to serious writing. Because of this, Zettlr ships
with a project feature since the very beginning (since version 0.18.0
,
released on Jul 20, 2018, to be precise).
However, for a long time the feature attempted to piggyback on the way your files were displayed. This meant that (a) the order in which your files were weaved together into the project file depended on the sorting of the directory, and (b) there was no clear way to exclude files that naturally amass during the lifetime of a project, such as notes, backup files, and miscellaneous.
Zettlr 3.1.0 fixes this issue by introducing a rather small, but powerful change to the way projects work. We have removed the difficult to understand glob- patterns that were introduced in a less-than-ideal attempt to fix some of the complexity-issues that were introduced later (such as displaying file titles instead of filenames, and others). Instead, you can now explicitly select which files will be included in your bound export files – and in which order.
The new file list, which you can find in the project properties dialog, aims to be dead-simple to understand, yet give you back the certainty which files will end up where in your export – without a doubt.
This also means a change to your projects: After this update, the glob patterns
will be removed from your .ztr-directory
files and replaced with an (initially
empty) array of files to be included in your project. That means that you will
have to select the files you want to include in a project once after the update.
Managing this list in the project properties is simple: The "Files" tab includes a list of all files available within the project's folder structure. To select a file for export, click the "+"-button to move it up and include it in the export. Next, you can use the "Up"- and "Down"-buttons to change the order of the files within your export. The "-"-button removes a file again and moves it back down to the list of ignored files. Changes are immediately applied and persisted to your disk.
When you now export the project, Zettlr will use only the files you have selected, and put them in the appropriate order.
Should you have deleted a file that you originally included in the list of files, Zettlr will show you a warning message as soon as you export it so that you can have a second look to not send off a file that's missing a crucial part of your work. Such missing files are shown atop of the available files and feature a "-"-button which allows you to remove them from the list. We opted for this approach of you manually having to remove missing links, since it makes it transparent which files are missing so you can take the appropriate action (especially if it was an accidental deletion).
The first update to Zettlr's LanguageTool integration concerns the language detection. This update ships with two improvements:
lang
frontmatter propertyThose who prefer writing in British English (instead of, e.g., US English) had to resort to manually switching the automatically detected language from en-US to en-GB every time they opened a file. This has to do with fact that LanguageTool's auto-detector cannot reliably distinguish between variants of some languages (English, German, Portuguese, and Catalan). That is why LT implements a "Preferred Variants" setting that allows you to specify which variant you prefer when writing in any of these languages. Zettlr now implements this setting so that when LT auto-detects the language, it will choose that variant if it detects that, e.g., English is the language. You can adapt this in the settings.
Second, LanguageTool now respects the lang
property in YAML frontmatters. This
will come in especially handy for people writing bilingual and where
LanguageTool has troubles auto-detecting the primary language. By setting the
property lang
to the language of the document (e.g., en-CA
), LanguageTool
will default to that one instead of choosing the auto-detection. As an added
benefit, Pandoc also supports this property to localize some things here and
there (read more at https://pandoc.org/MANUAL.html#language-variables).
Note that both improvements only apply to the initial loading of a document. You can always override the language on a per-document basis using the status bar.
[[link|title]]
), which ensures compatibility to, e.g., VimWiki, MediaWiki,
or Obsidian, whereas the alternative setting ([[title|link]]
) is compatible
to GitHub wiki syntax. Remember that you need to enable the corresponding
option on the Pandoc Markdown reader (wikilinks_title_after_pipe
or
wikilinks_title_before_pipe
, respectively) if you wish to export files with
this option:
);
and Emojis will always be sorted below your snippets -- you can turn this off
in the editor settingslang
YAML frontmatter property
(if present and conforming to simple BCP-47 tags, e.g., de
or de-DE
),
instead of defaulting to "auto"; this allows you to specify the languages of
your documents instead of relying on LanguageTool to figure it out; may not
work with more exotic tag variants (such as de-DE-x-simple-language
)Cmd/Ctrl+Shift+0
(to align with the
file manager shortcut, which is Cmd/Ctrl+Shift+1
)Alt-G
being assigned to some character were unable to type
that (specifically, Swiss-Mac keyboard users could not type an @
)[Title]([[Link]])
by
clicking them with Cmd/Ctrl
pressedopenDirectory
configuration value as a metric (due to a limitation in the
dialog engine, this is a bit opaque and will be improved; for more info see
issue #5084)3.1.13
30.0.2
vue-recommended
to the vue3-recommended
ESLint rulesetsortingTime
since that can be inferred from the
option fileMetaTime
zkn.autoCreateLinkedFiles
, since that can be
inferred from the option zkn.customDir
Teleport
(#4663)commandExists
as it appears to have a few minor issues on Windows installsreload-editors
shortcut:install
and shortcut:uninstall
to add develop
shortcuts on Linux systems, allowing the simple launching of a binary compiled
from source (rather than the provided binaries)platformVersion
in the about
debug info tabpreventNavigation
utility function into the lifecycle handlers to
reduce boilerplate code and make the app more secure@codemirror/lang-yaml
)test-gui
command; instead now the start
command does the same;
similarly, start
won't touch any existing Zettlr configuration anymorethemeManager
and replace it with a
simpler, more general darkTheme
extensionopenDirectory
functionality completely from the documents manager;
instead it is now again managed entirely by using the config provider,
removing tons of superfluous codeMainEditor
is unmounted.cm-zkn-tag-<tagName>
(#4589)@Author [p. 123]
citations: Now only spaces are allowed between the citation key and the suffixDue to Zettlr's underlying Electron framework dropping support for macOS 10.13 (High Sierra) and 10.14 (Mojave), Zettlr drops support for these operating systems as well. To continue to use Zettlr on a Mac, ensure to update to at least macOS 10.15 (Catalina).
Since Zettlr v3.0.0, Linux users on ARM-machines had the issue that they could not run the app, as a dependency has been compiled for the wrong architecture. Thanks to efforts by @LaPingvino, this has now been finally fixed and you should be able to run the app again just fine on ARM computers with Linux.
v28.2.1
); this
fixes segmentation fault issues in Wayland environments (#4877) and ensures
that Zettlr keeps running a supported Electron version, which is especially
pressing for the Arch Linux repository (see #4887; thanks to @alerque for
bringing this to our attention), but also means that macOS 10.13 and 10.14 are
no longer supportedDear users,
a security researcher has brought to our attention an issue that can lead to a potential remote code execution (RCE) attack utilizing Zettlr's binary. This issue has been first discovered and exploited in 2023. It is unlikely that you have been affected, since the effort for this exploit is comparatively high and it requires you to take some non-trivial actions. However, since we are committed to making the app as safe as humanely possible to use, and the corresponding fix was pretty easy to implement, we decided to offer this security release that includes the same functionality as Zettlr v3.0.3, but with the added security patch included.
A CVE (Common Vulnerabilities and Exposures) number has been applied for at MITRE, but not yet issued. Once we know the number, we will publish a postmortem on our blog and include some background as well as details about what this issue exactly implied, how it could have been exploited, and how we have mitigated the issue in this patch.
Nothing changed.
v25.9.8
)--inspect
). This can be abused by malicious
actors for remote code execution (RCE) attacks (CVE number applied for at
MITRE; not yet issued; please see the Zettlr blog for updates)This update includes a full refactor of the theming: The editor themes (Berlin, Frankfurt, Bielefeld, Karl-Marx-Stadt, and Bordeaux) have now moved to their own theme files and do not come with standard CSS anymore. This heavily un-clutters the codebase, but it may impact your Custom CSS, should you use this feature. We have ensured that no class names change and that the styling is mostly the same, but the possibility of having to adapt the Custom CSS may arise for some of you.
Tab
not indenting/unindenting code in the CodeEditors (snippets,
profiles, etc.)Alt+Click
in GraphView will force the document to be opened in a new tab.*.less
-files into proper theme plugins for
CodeMirror v6; this means that they will not provide any global styles
anymore; any applicable styling has been moved to more appropriate places
(CodeMirror plugins as well as the WindowChrome and the various remaining
*.less
files). We tested the changes out and in our settings, no changes
were necessary; sometimes you may need to adapt class definitions!important
to make them work (#4719)fs.unlink
with fs.rm
in safeDelete
to support recursive removal
of directoriesfsal-directory::removeChild
now calls pathExists
instead of isFile
to
make sure directories also are removed in removeChildpathExists
wraps fs.promises.access
.3.1.9
openFile
does now handle the case when windowId and leafId
is undefined, by keeping track on the last used editor.<
and >
)access
and stat
calls for files and directories in the
FSAL with a wrapper that will later on allow us to keep different file systems
(e.g., WebDav versus local filesystem) opaque to the userctime
instead of mtime
, leaving any changes to the
directory that do not also update ctime
hidden from the FSALInlineCode
element for the Pandoc attribute
parserplainPandocReaderWriter
utility function to properly extract the
plain reader/writer in all possible configurationsca-CA
to ca-ES
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:
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.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.[[
and ]]
respectively. We have figured
that nobody needs to configure this, and it makes many parts of our code
easier.Moving lines that are part of an ordered list using 'Alt-UpArrow'/'Alt-DownArrow' will now also correct the list numbers of any affected lists after the move.
For 3.0, we decided that it's time to give our app icons a facelift. For the past six years, Zettlr sported working, but relatively bland icons to convey its existence on the taskbar to its users. The new icons still convey the same message, but you will notice that they now integrate much better into the new Windows 11 Fluent UI.
We decided to exchange the icons on Linux as well. They may not seamlessly integrate into your specific UI, but we feel they will definitely look more modern than the previous iteration of icons.
With this move, the Windows and Linux experience of Zettlr finally moves on par to the macOS experience, which has received an updated icon with the release of Zettlr 2.0.
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:
Cmd/Ctrl+Shift+N
.This update introduces a new way to work with defaults files. At a glance, here's what has changed:
reader
and writer
properties of defaults fileswriter
or reader
for such a file, this change will be
recognized by Zettlr and be treated accordinglyThe 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.
As more and more users have increasingly large workspaces, we receive an increasing amount of feedback that the app start seems sluggish. To indicate that nothing is wrong and Zettlr simply needs time to recreate the cache, we have implemented a splash screen that shows if the file loading isn't finished after one second and displays the boot process to show what is happening behind the hood.
There are two instances where you will want to migrate something.
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.
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:
beige
black
(the default, in this case you can omit the theme
variable)blood
league
moon
night
serif
simple
sky
solarized
white
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.
pandoc_working_dir
within the zettlr
object*.qmd
)*.tex
or *.json
) now have line numbers enabled and the
margins of the main editor removed by defaultCURRENT_ID
: Holds the currently assigned Zettelkasten ID to the fileFILENAME
: Holds the filename of the current fileDIRECTORY
: Holds the directory path for the current fileEXTENSION
: Holds the file extension for the current fileCmd/Ctrl+S
while a TableEditor is focused, this will now trigger an
update that applies the changes to the underlying document. In other words,
when editing a table, you can press Cmd/Ctrl+S
twice to first apply any
changes from the table to the document and second save the document itself.{.unnumbered}
)lua
syntax highlighting supportSome sentence by @Author2015
renders as
Some sentence by Author (2015)
instead of Some sentence by (Author 2015)
default
and dark
depending on the app's displaysystem
by default for all operating systems, not
just macOS/Windows25.x.x
3.1.6.2
4.x.x
electron-devtools-installer
with electron-devtools-assembler
, as
the former appears to be unmaintained@clr/icons
to @cds/core
Meta
descriptors; now all descriptors are unified across main
and renderer processeshash
; the FSAL cache now is being called
with absolute file paths. Hashed paths are only used to determine the shard.nspell
with nodehun
so that we can load any Hunspell-compatible
dictionary file in Zettlr, including the previously too-complex ones such as
the Italian or Portuguese dictionarieschokidar
should not need to fall
back to CPU intensive polling anymoregettext
Zettlr
class; the last remnant of the old, class-based systemsvg-inline-loader
, raw-loader
, and file-loader
info
property from YAML frontmatter blocks in Markdown ASTTab
while the query input is focused will now directly focus the
restrict-to-dir inputIDEA
-related files2.18
'
and ’
fortran
)openDirectory
would not
prevent Zettlr from startingThis update changes the scroll effect on the document tab bar to be smooth instead of snappy. To revert to the old behavior, you can use the following Custom CSS:
body div#tab-container {
scroll-behavior: auto;
}
tags
if the relation is based on
keywords, inbound
for incoming links, outbound
for outgoing links, and
bidirectional
for links from and to the said fileclickAndClear
functionality to its own helperfileDirectory
-style commentsThis update includes a long-awaited feature: Graph views. This brings Zettlr on par with other apps such as logseq or Obsidian. You will find the graph view in the stats window, which you can open as usual by clicking the statistics button on the toolbar. The graph will re-render as soon as something in the link structure of your notes changes. Rendering may take some time, however -- not because constructing or displaying the actual graph takes so much time, but rather, because resolving internal links (which can be either IDs or filenames) takes a long time.
Within the graph view, you can interact with it in a few ways:
+
and -
-buttons, you can zoom in and out of the graphNote that the graph view is still in its early stages. It works as advertised, but since networks can be very tricky, there is a lot of room for improvement. You will notice that we publish this new feature using a patch release (2.2.2 instead of 2.3.0). The reason is that we cannot finalize this feature in any way without the feedback from the community. So for this feature, we would like to invite you to provide feedback -- not just about potential bugs, but about things we should improve in the visual feedback the graph view gives you.
See this as an opportunity: Whereas the graph views of Roam, logseq or Obsidian are pretty much in a final stage, Zettlr's graph view is still a blank canvas upon which you can project your ideas that help us all make sense of the chaos that is the network of our files!
package.json
; lock to the version from
mermaidchildren
array; the attachments
array is
now gone for goodFSAL::findExact()
Attention: This update switches one preference in the exporters' defaults:
file-scope
is now removed. Remove this line from your defaults files, or reset
them to the (new) default, if you'd like to use this in your exports as well.
See for more info this issue.
global
in the renderer processes; instead properly type
the API provided via the window objectglobal
objectUse the CodeMirror default actions for Home and End
preference not
working on MacOSbody .tree-item clr-icon.special
(including platform/mode selectors)pandoc
and xelatex
config options@dts
as an alias to retrieve typingspath
module in renderer processesyarn package
and yarn test-gui
commands now skip typechecking,
reducing build time by a large margindot-notation
rule optionalopenDocuments
array from the Vue component data@providers
alias for easy referencing of service providersCmd/Ctrl+[
and Cmd/Ctrl+]
) so you can more quickly navigate your filesCmd/Ctrl-Click
-behavior on footnotes[link](#target)
as tags anymoreCtrl-Shift-V
to paste something as plain text will no
longer paste it twice on Windows and Linux--launch-minimized
, which means the main window will not be
shown after launching the app$on
, $off
, and $once
) in preparation for
Vue 3test-gui
configuration and not the regular
(potentially critical) main configuration; NOTE that this means you must run
the test-gui
command first to generate that data-dir in the first place
before starting the debuggerextractYamlFrontmatter
does not require the linefeed anymoreopenFile
method from the main Zettlr object. Use
getDocumentManager().openFile
instead to open a fileCITATION.cff
@common
as a shorthand alias for importing files within the common
-
directoryself-contained: true
instead of previously self-contained: false
-- make sure to update your
settings accordingly!#
in the tag cloudCtrl+Shift+F
).octave
UpdateProvider
so that it now has a unified state and a better
error reporting. It should work much better without unrecoverable states and
is more responsive. Additionally, removed a lot of old and dead code from it.No stable release works without bugs, and thanks to our community, we found them quickly! This patch fixes those initial bugs.
BrowserWindow
instances via
URLSearchParam
s instead of utilizing the additionalArguments
property on
the window constructor, since on Windows, Electron injects an additional
property prefetch:1
afterwards, rendering it pure luck to retrieve the
correct information across all Platforms.Sidebar
and the SplitView
components from v-show
-directives
to v-if
directives to prevent rendering while they are not in view.Since the last release, 1.8.9, there have been 1,921 commits and 823 files inside the codebase have changed (plus one or two commits after editing this changelog and bumping the version string). Thus, the changelog this time does not contain a meticulous list of every change. Rather, we focus on notable changes here. If you would like to see the full list of every change, please follow this link.
We do not ship any more 32bit builds. From 2.0.0 onwards, only 64bit builds (both Intel and ARM) are supported. For Windows ARM builds, Pandoc is not available, so to export and import files on Windows ARM you must install Pandoc manually, if possible.
Several existing configuration options have changed their format. This means that changes to these won't be recognised and they will reset to their default. In this case, you may have to re-adapt your preferences in several places. Please have a look at your settings after updating and see if they still are set the way you like.
Due to a change in the underlying data structure, this version of Zettlr will not recognise any writing target set by a Zettlr version 1.x. This means: Please note down the important writing targets you have set before updating and then once re-apply them. We would like to apologise for this inconvenience, but believe its benefits by far outweigh the single additional migration effort on your side.
The idea of "transitive files" we implemented in previous iterations of Zettlr proved to be counter-intuitive to many people. We now removed that feature in favor of a much better tab-management. By default, Zettlr will now try to avoid opening new tabs and instead attempt to replace existing tabs whenever you open any new file. You can force Zettlr to open a file in a new tab instead by either middle-clicking, or right-clicking the file and choosing "Open in a new tab." If you generally do not want tabs to be closed in favor of other files, you can uncheck the option "Avoid opening new tabs." Files with unsaved changes will never be replaced. This behavior is very closely aligned with how modern browsers handle links.
A few years ago we implemented auto-saving after a delay of five seconds with no
change to the current file. However, some people mentioned that they'd like to
choose what to do. Now you can switch between three modes of autosaving. "Off"
disables autosave and you have to manually save using Cmd/Ctrl+S
.
"Immediately" saves files after a very short delay of 250ms, that is basically
whenever you stop typing. "After a delay" (default) will save files after the 5s
delay you know from previous versions of Zettlr.
The PDF-Preferences window has been removed in favor of the new "assets manager." While it did prove to be a nice reminiscence of how LibreOffice or Word handled layout, it was not a scalable solution. Instead, we have now switched to defaults files, which are a little more complex than this dialog, but provide much more functionality and flexibility.
Instead of the old PDF-Preferences window, Zettlr now contains a so-called "assets manager." This is a new preferences window that allows you to customize settings which are stored in individual files. The first two tabs feature exporting and importing settings using so-called defaults files. Defaults files are written using YAML and provide Pandoc with sensible defaults for every export. We will shortly after the release of 2.0 include extensive documentation for how these work. The defaults we provide should work well for most users.
The third tab contains the custom CSS, and the fourth tab contains the new snippets feature.
The Custom CSS can now be edited directly in the assets manager instead of in its own dialog.
Previously, you could increase and decrease the editor's font size using the zoom shortcuts. Now, the zoom shortcuts will zoom the complete user interface. This is an accessibility feature, since several people with visual impairments as well as people with large external displays have mentioned they would like the user interface itself to be scalable.
The editor's font size can now directly be edited with a new setting in the editor settings tab.
Scroll-to-zoom has been removed, because too many people have accidentally held
down Cmd/Ctrl
while using the scrollwheel, causing many accidental zoom
operations.
In the past, you had the ability to modify the command that Zettlr would run to
export your files. However, several times we had to adapt the command, which
lead to frustration among users because we had to manually inform everyone of
these changes and they had to manually "reset" the command. Now that we have
switched to defaults files, the command that will be run in every case is
pandoc --defaults "/path/to/defaults.yaml"
. Instead of modifying the CLI
arguments, you can now adapt the defaults Pandoc will be run with, which is
possible because every CLI argument has a corresponding setting in defaults
files, which can be edited in the assets manager.
Another notable change is that now we have switched to a native user interface. This means that Zettlr does not have a completely custom design anymore, but rather orients itself at the various interface guidelines published by Apple, Microsoft, and the GNOME team. Thus, on macOS and Windows Zettlr now follows the Big Sur style and the Metro style respectively. On Linux, we have attempted to model the GNOME interface but had to make a few changes due to the fact that there are numerous different window managers with different aesthetics.
You will notice that there are now two different PDF exporting options, one is called "PDF Document", the other "PDF (LaTeX)". The first option enables you to export a document to PDF without the help of a LaTeX distribution. This way you can have PDF exports without installing such a distribution. The second option allows you to export to PDF as you know it from previous versions of Zettlr.
With the introduction of defaults files, there is less necessity to ship a full dialog just to edit a project's settings. Instead, the project settings have been moved to the novel "Properties" dialog of directories, which you can access via the context menu.
bibliography
-property.--data-dir="/path/to/directory"
switch. This allows portable installations.bcp-47
and nspell
.trans
helper to make sure it will
always work..js
or
.spec.ts
files respectively).Read our Postmortem on this issue and the last one on our blog.
This is a hotfix that fixes a potentially severe security-issue, reported to us by the Japanese cybersecurity organisation JPCERT/CC. It was reported that due to insecure iFrame handling on our side, malicious actors could take over users' computers using specially crafted iFrame-embed codes or Markdown-documents containing such an iFrame.
This release closes this vulnerability. Specifically, the following precautions were taken:
src
-- in the security disclosure, the attribute srcdoc
has been used to
maliciously access the test system. While this means that certain features
are not supported during preview (e.g., allowfullscreen
), remember that the
attributes will still be exported so that in HTML exports, they will work.Note that you can completely disable any iFrame pre-rendering in your display preferences.
We would like to apologise for the inconvenience. If you are interested in how it came to this situation, please read our Postmortem on this issue.
This is a hotfix that updates a vulnerable Electron version to a safe one. This is in response to a row of CVEs that have been detected in the source code of Chromium in the past days. With an outdated Electron-version (<12.0.6), it was possible for an attacker to take over your computer via Zettlr using a crafted HTML webpage.
This release fixes Zettlr 1.8.7, which was vulnerable to this kind of attack. It upgrades Electron from a vulnerable 11.x.x-version to the safe version 12.0.6.
DO NO LONGER USE ZETTLR 1.8.7! RELEASES PRIOR TO 1.8.8 MUST BE REGARDED AS UNSAFE!
electron-builer.yaml
config..Rmd
) to the list of supported file extensions for which Zettlr can be registered as a default handler.window.location
, because all of these events will be captured and navigation will be prevented. For opening local files and directories, make sure to prepend the path with safe-file://
, which is recognized by this listener.console.log
is also received in the main process so that we can intercept those and add them to our global logging interface as well. This way, debugging errors in the renderer process can be debugged together with users as well. Messages from the renderers are indicated by a [R] including the window identifier (e.g. "[Main Window]").electron-builder.yml
.node_modules
without type support reside within ./source
, whereas the service provider types are stored in ./source/app/service-providers/assets
.This version provides native Apple Silicon/M1 support, a.k.a. the darwin/arm64 architecture. Make sure to download the correct update file (either x64 for Intel-based Macs or arm64 for the new Apple Silicon chips).
If you possess one of the new Apple devices sporting Apple's M1 chip, please see whether or not the application is able to run the built-in pandoc (which is still compiled for 64 bit). If your bundled exporter fails, please report an issue.
As of the current development build, Microsoft has finished support for running 64 bit applications on ARM computers. However, this is not yet officially released, so the bundled Pandoc might not work and you have to return back to the system-wide installation. However, if the bundled 64 bit Pandoc does work on your ARM computer, please notify us so we know that we can officially support Windows ARM again!
Due to efforts within the file manager structure, we could re-enable the functionality to drag files out of the app without having to press any modification key before actually dragging something.
tags
frontmatter property. Please note that Pandoc does not recognize the tags
-property, so if you need tags to be processed by Pandoc, consider using the keywords
-property.--base-font-size
. You can set it in your custom CSS to increase or decrease the overall font-size of everything persistently. Remember to apply it to the :root
-pseudo element.Cmd/Ctrl+W
-shortcut without interfering with the open tabs in the main window anymore.electron-packager
to 15.2.0 to enable darwin/arm64 (Apple Silicon) builds.askOverwriteFile
to shouldOverwriteFile
to make it semantically more correct.file-rename
and file-new
commands to be the same when it comes to overwriting files.shortcut
property will send a shortcut-message to the currently focused window.darkTheme
to darkMode
.loadIcons
function to a more central place in the window registration module.This version ships with a debug notification that will inform users of deprecated operating systems about that fact. This debug notification cannot be turned off, but will be removed in Zettlr 1.8.5, which will use the bundled Pandoc version first of all. Beginning with Zettlr 1.9.0, we will no longer support 32 bit applications, so you have to make sure your operating system supports 64 bit. If your Windows is still 32 bit, there is a very high chance that your processor actually supports 64 bit. Please check this, if you want to continue using Zettlr.
.tex
-files as if they were directories in the file manager's tree view.%y
and %X
for Zettelkasten-IDs, which allow you to use a two-digit year or the unix epoch (seconds since Jan 1st, 1970) in your IDs (thanks to @cdaven for implementing)..rmd
) are now supported in general.prompt
-passthrough to the main Zettlr class../source/common/regular-expressions.js
-file (thanks to @Kangie for implementing).#
-symbol, the list will be filtered for files containing tags. Add a full tag behind it and the files containing that tag will be shown.title
-attributes inside YAML frontmatter would break down the complete file tree within which such a "malicious" file resides, resulting in the whole tree being offloaded and unusable.file-manager
was given twice.4.10.0
4.10.0
6.0.7
The default Pandoc command now targets Pandoc 2.11 and above. In order to use the new command, make sure to "reset" it once, or (if it contains customisations) replace $citeproc$
with --citeproc --bibliography "$bibliography$" $cslstyle$
. However, you can retain compatibility with older versions by replacing the new part --citeproc
with --filter pandoc-citeproc
. The new $bibliography$
variable will be replaced with /path/to/your/library.json
. Furthermore, the $cslstyle$
-variable will be replaced with --csl /path/to/your/style.json
, if applicable.
$citeproc$
and added the two variables $bibliography$
and $cslstyle$
.role="presentation"
set to not have the screen reader name all of those "unlabelled images" one by one.4.0.8
0.5.1
5.1.0
1.0.8
2.4.52
5.58.3
11.8.1
8.8.4
7.3.4
8.3.2
3.6.0
2.2.1
6.0.0-beta.54
6.0.0-beta.54
2.4.0
4.9.1
4.9.1
7.0.3
5.0.1
4.2.0
11.1.0
22.9.1
7.15.0
16.0.2
5.0.0
7.2.0
6.2.0
6.0.6
3.13.0
7.1.0
8.2.1
2.0.0
8.0.12
4.1.3
15.9.5
v8-compile-cache
requestIdleCallback
. This induces a small visual lag, but the documents load much faster, and arguably, it's better this way because one doesn't have to wait until the document has fully rendered before one can start to write. (Some testing with regard to long-term writing performance might make sense.)Ctrl+Alt+I
(was: Ctrl+Shift+I
) to resolve a conflict with the shortcut Ctrl+Shift+I
(insert images).Cmd/Ctrl+O
, which previously would let you open workspaces, now opens files. To open a workspace, use Cmd/Ctrl+Shift+O
. This is now in line with many other programs.Cmd/Ctrl+Alt+T
, you can activate the typewriter mode, which will keep the current line in the editor always centered so that you have to move your eyes less while editing a text. This also works in combination with the distraction free mode so that you can fully focus on what you're editing right at the moment.h1
to h6
-tags replacing the Markdown heading characters) finally serve a purpose: Clicking on them reveals a small menu which lets you quickly choose a different heading level.\
```), Zettlr now offers you to autocomplete the syntax highlighting language.diff
docker
/dockerfile
toml
/ini
.ztr-project
-migration code, which means you should update to Zettlr 1.7.x before updating to 1.8.x, if you still use an older version of Zettlr.Cmd/Ctrl+Shift+E
(focus the editor) and Cmd/Ctrl+Shift+T
(focus the file list).electron-forge
.---
), for instance for compatibility with Jeckyll, these will not render as tables anymore.zettlr://
, thunderlink://
) can now be up to 100 characters long to be recognized by Zettlr.F11
as an accelerator for fullscreen on Windows.WindowManager
module. The added benefits of this are:
window-controls
-commands4.0.4
6.0.0-beta.53
6.0.0-beta.53
2.3.0
4.5.0
4.5.0
5.0.2
0.16.4
3.4.3
2.4.48
5.58.2
2.9.4
6.1.0
10.1.5
7.8.1
19.0.1
2.22.1
4.0.2
7.0.0-beta.3
6.1.1
5.1.0
2.1.3
11.8.0
4.0.30
2.3.0
8.8.2
8.2.0
2.29.1
1.0.2
2.1.4
4.0.2
4.1.0
6.2.7
8.0.7
4.0.3
8.3.1
2.6.12
2.6.12
i18n_value
that allows you to translate something passing a value to the translation helper (e.g. {{i18n_value 'trans.identifier' someValue}}
).yarn
everywhere and cleaned up the code.afterSign.js
.common/util
-folder.moveSection
helper function to the common/util
-folder.safeAssign
.app.isPackaged === false
).ready
-event fires on the app
-object) and not when the Zettlr main class loads.app
which provides functionality that pertains only to the lifecycle of the application itself, such as boot and shutdown functionalities. Service providers have been migrated to there.en-US
-language of the CSL styles was loaded for the citation provider.native_modules
.register-window
).remote
-module.fs.promises
thoroughly.tab
-characters instead of spaces.getTokenAt
with getTokenTypeAt
, hopefully achieving performance gains on documents littered with renderable elements.Cmd/Ctrl+K
-shortcut now works with most domains and protocols (i.e. no matter which URL is in the clipboard, it should insert it now).joplin-turndown
which should result in better HTML-to-Markdown conversion on pasting.clojure
latex
/tex
---
of a YAML frontmatter would mistakenly be identified by the renderer as ATX-headings in readability mode, resulting in weird display of the last YAML frontmatter line.reveal.js
-presentations now do not have standalone-flags during export.icons
-directory before using!!app.getVersion()
instead of requiring the package.json
-file (thanks to @Aigeruth for implementing).node_modules
.[[contents]
or [contents]]
).smalltalk
/st
1.2.0
3.1.4
4.0.28
2.4.6
9.0.5
1.0.0
8.0.1
4.1.0
11.4.0
6.2.4
2.27.0
8.2.0
2.1.1
7.4.0
2.22.0
7.0.0-alpha.9
3.1.0
3.3.12
3.10.0
15.9.3
3.6.0
8.5.0
This release contains several breaking changes to 1.6 due to heavy internal refactoring.
.ztr-directory
-files, which means that you need to extract these files (or backup them) if you plan to roll back to 1.6 or earlier, lest you will lose the project settings.Cmd/Ctrl+W
will now attempt to close open tabs first before closing the window. To close the main window directly, use Cmd/Ctrl+Shift+W
.Cmd+Click
(macOS) or Ctrl+Click
(other platforms) on internal and external links as well as on tags in order to follow the link/start a search.Cmd/Ctrl+[1-9]
now do no longer toggle recent documents -- rather they select the corresponding tab!%W
).<!-- Lorem Ipsum -->
) are now also exempt from the word counting.elm
f#
/fsharp
hs
/haskell
vb.net
/vb
/visualbasic
html
xml
markdown
/md
julia
/jl
turtle
/ttl
sparql
verilog
/v
systemverilog
/sv
vhdl
/vhd
tcl
clisp
/commonlisp
scheme
powershell
code-block-line
-CSS class.~
) instead of backticks.%28
for the algorithm to successfully render the link.Cmd/Ctrl+Shift+L
to copy the active file's ID to the clipboard.F2
to trigger a file rename for the current file.export
module is now really a module..git
-directories are now ignored.--config /your/config/file.json
. It can also only be a stub (e.g. only containing certain selected configuration parameters), as Zettlr will set all missing properties to their respective defaults. If the path is relative, Zettlr will attempt to find the file either at the repository root, if app.isPackaged
is false
, or at the current executable's directory.yarn test-gui
to run Zettlr in that test environment, and do to the files whatever you want!flattenDirectoryTree
utility function. I have no idea why it worked for eleven months, but when it started throwing errors on the FSAL
I realized it did a lot of things but it should've never worked. JavaScript is magic. Update: Found a newer and more optimized utility function, objectToArray
, so I'm trashing it for good.package.json
configuration for electron-builder, because, well, Electron.--clear-cache
to programmatically clear the FSAL cache on startup.forceOpen
-functionality to a command.ZettlrEditor
class.ZettlrEditor
class.codemirror.css
into the geometry styles so we have one less dependency to include on startup.standalone
flag for Pandoc on all non-special exports.The macOS-build of Zettlr is now code-signed and notarized, which means you will be able to open it without having to explicitly add an exception in your security preferences.
--mathjax
-flag to your Pandoc command. If you did not modify the Pandoc command, you can "restore" the (new) default value, which will add the MathJax support for you.!"an exact phrase"
) and single terms (!word
).typescript
, ts
.Windows 32bit
build.showdown
to turndown
for converting HTML to Markdown on pasting contents. This makes pasting HTML formatted text much better than prior. Thanks to @Zverik for implementing!Alt-Up
and Alt-Down
will now swap lines in the editor window up or down.Ctrl+B
would also make text bold on macOS. Now, only Cmd+B
will work, while Ctrl+B
will only work on non-Apple systems.- [ ]
, + [ ]
, and * [ ]
.Ctrl+F
-shortcut on macOS.[[
.cslenvironment
to Zettlr's default TeX template so that Pandoc >2.8 does not throw errors. Thanks to @frederik-elwert for implementing!generate-keymap.js
and not scattered in all the plugins anymore.AppearanceProvider
class.openPaths
-property will be removed (because only directories can be "dead").-->
with →
, !=
with ≠
or perform certain default replacements, such as transforming hyphens and fullstops with their typographically correct symbols (...
-> …
and --
-> –
). You can edit the replacement table in the preferences and adapt them to your own needs. Please note that this feature will only be active when you are outside of codeblocks. This is meant to prevent unintended replacements, especially with certain languages such as R, where ASCII arrows are part of assignment operations."
(double quote) or '
(single quote), it will instead insert the typographically correct characters of your choice, for instance „…“
for German, or « … »
for French. Even 「…」
for Japanese are supported! Please note that this feature will only be active when you are outside of codeblocks. This is meant to prevent unintended replacements, as most languages require the ASCII quotes. Note also that having this feature active will deactivate the automatic bracket matching for quotes.title
is given, Zettlr will use this instead of the filename in the file list. If an array of keywords
is given, Zettlr will add them to the rest found within the file.#include
(used in C++ code) will no longer be recognised as a tag.Alt
-clicking files in the combined sidebar mode. Now this will also open QuickLooks.Cmd/Ctrl+Shift+E
to focus the editor and Cmd/Ctrl+Shift+T
to focus the file list.Cmd-Click
links and tags to open/follow them.%uuid4
to use Universally Unique Identifiers version 4 (random UUID) within certain strings in the app.Cmd/Ctrl+T
to create a task list. Thanks to @jeffgeorge for implementing!>
is not treated as a list-item anymore, meaning you don't have to Shift-Enter
into the next line anymore to prevent the blockquote from expanding unnecessarily.Ins
-key to toggle between inserting and replacing, Zettlr will graphically announce that you'll now be replacing characters rather than inserting. Please note that this will only look good for monospaced fonts -- the other themes will have characters that are bigger than the cursor.yarn release:app-image
(or npm run release:app-image
). Thanks to @yashha for implementing!localiseNumber()
helper is now capable of localising negative and floating numbers as well.adm-zip
to archiver
for zipping Textpack-files.6.1.2
.//
.==highlight==
or ::highlight::
..md
=== .MD
).This update will reset your sidebar mode to the initial value of thin.
From this update on, you will need to hold either the Alt
-key or the Ctrl
-key on your keyboard, if you plan to move a file out of the app.
$infile_basename$
(input filename without directory), $outfile_basename$
(output filename without directory) and $indir$
(the input file's directory)$1
in the replacement value will be replaced with the first capturing group$2
with the second capturing group#
somewhere within a word or a link. It must either be at the beginning of a line, or preceded by a space for the tag dropdown to appear.Citr
for more accurate results in previewing citations.Citeproc
engine is now a service provider.lang
-directory in the user data folder now take precedence over the shipped translations.EditorSearch
and did some fixing.make.sh
script to automatically infer the version to use from the source's package.json
.reveal:build
will now re-build the full revealJS templates with the installed revealJS version.sidebarMode
is finally called as such.ZettlrWindow::setTitle()
.devDependencies
so that everyone can use the same code style.Electron 6
.Attention, this update breaks three shortcuts: To view the file list, the tree view, and the attachment sidebar, you need to use Cmd/Ctrl+!
(for toggling the sidebar), and Cmd/Ctrl+?
for toggling the attachments. The shortcuts for Cmd/Ctrl+[number]
are now reserved for recent documents!
Attention: Due to changes in the configuration, this update resets your setting concerning text snippets. They are now called "file information" and the corresponding setting will be set to "Show", regardless of your current setting.
www.google.com
instead of https://www.google.com
), Zettlr will automatically assume https
as the protocol to make sure it can be opened by the web browser. Correctly configured servers should automatically redirect you to http
, if applicable.Cmd/Ctrl+Shift+C
.Home
and End
buttons bring you to the beginning and end of the visible lines, not the logical lines.index.htm
and moved it to a new main.js
in the renderer process.on-second-instance
event. This fix makes sure a window will be opened in any case if there is none prior to restoring Zettlr.build
-property electron-build
toolchain to the API.Electron 5.0.0
.chmod
-fix to the Linux distribution (see #134 for more information).Electron 5
Beta.textbundle
and textpack
files. Refer to textbundle.org for more information.File
menu! It resides no longer in the toolbar.tex
-template now doesn't break checkbox exports by including the amsmath
and amssymb
-packages.Ctrl+Enter
will insert a new line below the one in which you are currently, placing your cursor there. Pressing Ctrl+Shift+Enter
will do the same but above the current line.Alt
-key for dragging windows around it is now also possible to press the control key to follow links and initiate searches.shell
syntax highlighting (using keyword: shell
or bash
[for compatibility with Highlight.js]).Alt
or Ctrl
) is pressed.Shift
before you paste, so that the formatting will not be kept.ZettlrBody
class is now always instantiated anew.KaTeX.css
stylesheet to the newest version and removed some errors (thanks to @Wieke for doing this).TeX
-templates with Pandoc-Style $-variables. Additionally, now all occurrences will be replaced with the correct value.getLocale
-functions from ZettlrBody
and ZettlrRenderer
.ulem
-package to enable export of strikethrough and underline text.Cmd/Ctrl+V
in the editor and Zettlr will ask how to proceed. By pressing Return
the default action will be taken: The image will be saved into the currently selected directory using either the original filename or a simple hash (for instance if you took a screenshot and there's no associated URL available), and it will be inserted at the current cursor position as a standard Markdown image tag, using the filename as title. If you don't press Return
directly, you can adapt some options, such as the file size and the filename, and also choose a custom directory alternatively.Cmd/Ctrl+P
to open the print preview, which is essentially an exported HTML file. Click the printer icon in the titlebar to print it!More …
button in the statistics popup, the resulting dialog now presents you with a overhauled interface. Now you'll be able to filter your data by week, month, and year. Additionally, you can choose to compare the timeframe with the previous one (either week, month, or year). This way you'll be able to track your writing habits much more differentiated.example.com/page#anchor-name
) or words with hashes in them from being detected as tags.Droid Mono
to Liberation Mono
for displaying monospaced code and comment blocks because of better support for glyphs in the latter font.[[
). After accepting an autocomplete suggestion, Zettlr will either put the ID between the brackets, or the filename, if there is no ID.h1
, h2
, etc). Off by default.data-default-action
support for Dialogs. Now there can be a button with the attribute data-default-action="data-default-action"
(repetition necessary for ensuring a correct DOM structure) in each dialog that will be focused on instantiation of the dialog, thereby enabling a simple "default action".md5
for generating simple hashes.ZettlrDictionary
-class is now an EventEmitter
and emits update
-events whenever the composition of the loaded dictionaries changes.getWordCount
function out as a helper function.updateFile
method to the global.ipc
to enable files to update themselves silently if something changed.ZettlrStatsView
class to the main process's ZettlrStats
class.ZettlrStatsView
class and moved the triggering functionality to the ZettlrBody
class accordingly with the other popups/dialogs.ZettlrDialog
class so that all functionality is now provided by specialised dialog classes that inherit from the base class.require()
to a new file called autoload.js
in the assets directory to save space in the main ZettlrEditor
class.electron 3
for the time being, as electron 4
still has a nasty bug that renders the toolbar unusable when exiting fullscreen on macOS (see https://github.com/electron/electron/issues/16418 ).nspell
for spellchecking, as the correction-finding algorithm works smoother and the repository is not as old as Typo.js
.makeExport
now returns a Promise instead of the Exporter object. The exporter is now only returned if it's call succeeded (by passing it to resolve
).yarn less:extract
available which extracts the CSS class names and IDs from the prebuilt styles. Please note that you must run the yarn less
command beforehand.Alt
-click a virtual directory.#
-character, you are presented with a list of tags you already use inside your files, so you don't use similar (but not same) tags in different files.citeproc-js
integration: Now you can point Zettlr to a JSON CSL-file (ideally generated by Zotero) and it will automatically enable you to put @BibTex-ID
s or even complex Pandoc citations in your text, which will not only be automatically replaced by a correct citation (only Chicago supported, because it is only a preview), but also renders a preview bibliography! Additionally, if you point Zettlr to a CSL Style file in the settings of a project, it will use this file to generate your citations!sansfont
property of LaTeX
-documents, used mainly for headings.Up
and Down
. Also you can once again jump to the end of the list by pressing an arrow key while holding Cmd/Ctrl
.\
) to make sure they won't show up in the tag dropdown list and also won't render as tags./\w/
will select all words inside the editor, while \w
will literally search for that string.#tangos-photography-and-film
will match the heading # Tangos, Photography, and Film
. Simply use a standard Markdown link: [Go to Tangos, Photography, and Film](#tangos-photography-and-film)
.Cmd/Ctrl+L
, the generated ID will be pasted wherever your cursor is currently (e.g. inside all text fields). Zettlr tries to back up your clipboard's contents and restore them afterwards.@
and begin searching for a work to cite, you can now also search through the title and don't necessarily have to know the ID anymore!ZettlrValidation
..dmg
-installer file with a better background image.package.json
build fields.com.zettlr.www
to com.zettlr.app
. For the implications please check this link -- the change only affects Windows users.notify()
method in the renderer process for convenience.tern.js
for better autocompletion.paths-update
) not the whole object is sent towards the renderer because of app crashes arising from the use of synchronous messages via the new typo
-channel. Instead, a dummy list is sent containing only the properties that the renderer accesses anyway. This way not only the amount of data is reduced quite significantly, but also the app does not crash on file and directory operations.handlebars.js
templating engine.askSaveFile()
-dialog is now non-blocking.ZettlrFile
objects won't forcefully try to move a file to trash while handling watchdog events anymore.ZettlrRendererIPC
and ZettlrIPC
now access the ipc
-modules consistent with all other classes.askFile()
function in ZettlrWindow
for further purposes.ZettlrConfig
now acts as an event emitter and emits update
-events, whenever the configuration object changes. It can be subscribed to using global.config.on
(to unsubscribe use global.config.off
).global.ipc.notify
-function to easily send notifications to the renderer.common
directory, so that it makes sense that there can be multiple windows that share those files.yarn/npm less
and yarn/npm handlebars
before you run the application!ZettlrRenderer
class.ZettlrExport
class.Alt
-click to traverse back up to its parent directory.<iframe>
-tags will be rendered, so Twitter embed won't work, for example.Droid Sans Mono
as monospaced font family and updated the fonts around the app.@ID:<your-id>
anymore. Also the zkn-links can be customised.#
-characters inside tags.ID
-button from the toolbar. The command is still present in the menu and still works using the shortcut Cmd/Ctrl+L
.Return
to confirm the removal.ZettlrImport
to actually catch the errors that were thrown by this function.ZettlrConfig
-object is now reachable from within all classes in the app.ZettlrWindow
to create windows using programmatical boundaries.global.config.get
it is now possible in the renderer to access the configuration programmatically without the need to send events.ZettlrAttachment
.electron
3.app.makeSingleInstance
to app.requestSingleInstanceLock
as recommended by the docs.path
.defaultId
on confirmation dialogs.detach()
is now called only after the move operation of a ZettlrDir
has been completed to remove the parent
-pointer.Alt
-click on them, they will open the default email option (i.e. they are the same as clicking on any website's email addresses).TeX
-files. So in case you want to export something to PDF, you can add custom LaTeX
statements in their respective file to amend the styling Zettlr applies.LaTeX
files by using the extension .tex
when creating new files.runCommand
method in ZettlrEditor
.insertFootnote
command._editFootnote()
method in ZettlrEditor
.keyup
to keydown
.ZettlrEditor
.- [ ](some text)
).ZettlrImport
class for handling file imports.ZettlrRenderer
by a function to programmatically trigger global searches..tex
to the list of supported file types. Added a mode switch to ZettlrEditor
s open()
method.less.js
script. It now minimises the CSS output to further optimise the styling.ZettlrProject
, ZettlrFile
and ZettlrExport
to ensure relative image paths are accurately converted into absolute ones on exporting them.ZettlrWindow
title. Zettlrwindow::setTitle()
is now deprecated.ALT
-clicking files now opens them as QuickLook windows.net
command to check for updates with the better package got
, thereby reducing the amount of requests to one only. Therefore, is-online
also has been removed.2.0.8
._gen()
and select()
methods in ZettlrPreview
.code
-blocks in modals.* * *
) and escaped characters (e.g. \*
).tippy.js
-bubbles.\
``javascript`):
tippy()
function from the ZettlrRenderer
to the correct classes (ZettlrToolbar
and ZettlrPreview
).ZettlrEditor
.export.tex
LaTeX export template. It now provides the Shaded
-environment Pandoc requires on exporting files containing fenced code blocks.HTML
syntax highlighting.ZettlrRenderer
's setCurrentFile
method to reflect the actual process (it is being passed a hash, not a file object)._tags
-array in ZettlrPreview
. Now, the array is never completely regenerated, but resized according to the actual _data
-array. The changes have affected the functionality of the functions _gen()
and refresh()
in this class.remove()
method to Zettlr
for root files wanting to delete themselves.aaa_AAA.json
so that the app can detect the language by looking at the file name.Cmd/Ctrl+Alt+C
instead of Cmd/Ctrl+C
.getSupportedLangs()
: The function now returns a dynamically generated array of all available translations. This also includes language files that are placed inside the app's data directory (in the subdirectory lang
).i18n.js
to reflect the fact that a language could also be located inside the application data directory (it now first tries to load the file from within the app, and if this fails searches for the file in the app data directory).2.0.6
.package-lock.json
, because nobody uses them anyway and yarn 1.9.2
just complained about them.ZettlrConfig
that allowed non-markdown-files to be opened as root files.check()
to _fetchReleases()
.ZettlrEditor
.console.log
from ZettlrBody
.#todo
or #in-progress
) to have an overview over the work you need to do or categorise your files.NaN
instead of real numbers in the stats view. Now it should work on all systems just fine. (It only happened when there were less than thirty days of recorded statistical history available.)strong
element in the file tiles in the preview list to a simple p
to re-gain semantic correctness there.resizable
activated.requestDir()
function in ZettlrRenderer
.ZettlrDialog
.ZettlrRenderer
. Now the translation strings will be copied into the memory of the renderer process directly. This results in better overall performance, especially in dialogs, for which a lot of such strings are needed.electron
is now 2.0.4
, electron-builder
is now 20.19.2
and less.js
is now 3.5.3
.ZettlrBody
-proceed function.tippy.js
to the list of dependencies; replaced standard system titles with Tippy titles.acceptFirstMouse
option to the creation of new BrowserWindow
s.ZettlrToolbar
.ZettlrVirtualDirectory
.LaTeX
export template.ZettlrUpdater
.getRenderer()
-function to ZettlrDirectories
, so that the EmptyPaths
-object can send the respective event to the main process.setContent()
and save()
-functions in ZettlrFile
, because there was simply no need to have them separated. Also, removed the modified
-flag from the file.Cmd/Ctrl+1
and Cmd/Ctrl+2
will still toggle visibility of both preview and directory pane, but not in parallel anymore. So hiding the preview pane will automatically show the directory pane and vice versa. Also, if you are on the preview pane, moving with your mouse to the top of the pane will show an arrow that lets you enter the directory pane again. Zettlr will automatically switch to the preview pane in a number of cases: Selection of a directory, searches, and renaming of files.ZettlrPopup
to ensure popups can be displayed on screen and don't end up being cut off by the window.HTML
-export (e.g., for printing) does not rely on pandoc
to be present on the system anymore. In other words: HTML
-export is now working everywhere and has no prerequisites anymore. Attention: As we do not rely on pandoc for HTML exports anymore, this means that the HTML format is likely to suffer from some inconsistencies, as the rendering engine is way less advanced than pandoc. Yet, this should not pose a problem, as the HTML-export is intended to be for quick previews and prints only.@ID:yyyymmddhhmmss
).#tag
).[[<link-text>]]
).[[<link-text>]]
to <link-text>
).xelatex
engine to render PDF documents.Return
while inside the replacement-field to replace the next occurrence of your search term, or press ALT
+Return
, to replace all occurrences at once. The search is case-insensitive.Cmd/Ctrl+J
. This makes the editor fullscreen and mutes all lines except the one in which you are currently working.Ctrl+Alt+F
(Windows+Linux) or Cmd+Alt+R
(macOS).ZettlrExport
..ztr-virtual-directory
) and therefore can be used to create collections of files by manually adding files to them. You can only add files to these virtual directories that are present in the containing directory. Also, you cannot move them because they are bound to their parent directories.Cmd/Ctrl+I
or Cmd/Ctrl+B
a second time after you finished writing your strong/emphasised text, Zettlr will actually "exit" the bold/italic markings and not try to insert them a second time. (Note that it will still insert the end-markings if the characters directly after the current cursor position are not the end-markings).console.log
.indentlist
plugin directly in Zettlr core.Zettlr
and ZettlrDir
classes.Zettlr
class.ZettlrDir
-object to the renderer, but just the hash, because the renderer has a full copy of the objects in memory).RETURN
-key.ALT
-key now, the cursor will be automatically placed and you can edit the link exactly where you clicked without having to click the position twice._renderLinks()
-function in ZettlrEditor
._act()
in ZettlrAttachments
even if there are no attachments to be able to still open the directory in these cases._place()
in ZettlrPopup
.ZettlrToolbar
and ZettlrRenderer
classes.projectDir
option in the configuration constructor.PATH
-variables in ZettlrConfig
.ZettlrConfig
s set()
-function to only add valid options. Now set()
will return either true
or false
depending on whether the option was successfully set.ZettlrWindow
class.ZettlrWindow
s prompt()
function.ZettlrDir
class.ZettlrDir
constructor.ZettlrFilter
and ZettlrVirtualDirectory
.Zettlr
and ZettlrRenderer
classes.ALT
-key pressed will now remove the link and make it editable, as intended.export
to the CLOSING_COMMANDS
.package.json
, updated dependencies.continue
in _renderLinks()
in the ZettlrEditor
class.open()
function to the close()
function in ZettlrEditor
.paths-update
event.getWordCount()
function to return the wordcount of any given string.Zoom
menu entry from the Window menu on macOS.F5
.#
sign immediately followed by a delimiter character (e.g. spaces, line breaks or apostrophes) will not render a tag formatting).„
and “
.Clusterize.js
to keep huge lists renderable and reduce loading times.ListView
and ListViewItem
classes.file-revert
command handler in ZettlrIPC
.console.log
in ZettlrPreview
.isModified()
function in ZettlrRenderer
.ZettlrRendererIPC
to accomodate graceful saving procedure.Alt
-key pressed._sort()
-function in the ZettlrDirectories
-class..md
- and .markdown
files.@ID:<your-ID>
to give an ID to a file (generate one using the Toolbar Button or by pressing Cmd/Ctrl+L
). If multiple IDs are defined in such a way, the first found will take precedence.#hashtag
. Alt-Clicking on them will trigger a search for the tag.[[search terms]]
this will trigger a directory-wide search for the search terms. If the link contains an ID in the format [[@ID:<your-ID>]]
, Zettlr will try to get an exact match. If there is a file using that ID, it will be immediately opened. Also, a directory-wide search for all files referencing this ID will be conducted.ZettlrWatchdog
that prevented remotely added directories from being detected by the app.ZettlrFile
and ZettlrDir
more authority over what happens with them. Now they're handling all events by themselves.ZettlrFile
and ZettlrDir
instances.isFile()
and isDir()
helper functions to check if paths actually denote a valid file or directory.openPaths
configuration option to hold all opened paths and re-open them on every start.openPaths
option).Zettlr
main class and removed it.main.js
and make Zettlr definitively a single app instance.ZettlrWindow
that passed undefined
instead of the window to the showMessageBox
function.less.js
(dev-dependency) to latest version.chokidar
to latest version.electron-builder
(dev-dependency) to latest version.ZettlrWatchdog
can now add multiple paths to watchZettlrFile
can now also be root (e.g. have the Zettlr
-object as parent)chokidar
poll()
-functionthis
. Instead, use public functions (also, prevent calling of private functions from the outside). Second: Try to, again, move out some functionality from the Zettlr main class to shorten it.ignoreDir
and ignoreFile
helper functions to check whether or not a specific path should be excluded or not. This applies to directories and the watchdog. Ignored directory patterns (as regular expressions) reside in source/common/data.json
.jquery-ui.min.js
file on docs generation.data.json
ZettlrUpdater
with barebone functionality.additional_paths
in source/common/data.json
to automatically append to electron's PATH as to make sure the additional fields in the preferences are no longer needed (unless in special cases).() [] {} '' "" »« “” ‘’ ** __
.source/common/data.json
ESDoc
-support integrated for API documentation. Simply run npm run docs:build
to generate a full documentation in resources/docs
handleEvent()
functions from the main objects to the IPC classes.source/renderer/assets/toolbar/toolbar.json
as in the example of Electron Menu, to have more dynamic control over the generation of the toolbar.ZettlrPopup
-class for easy displaying of small forms and info texts, this will replace most ZettlrDialog
-forms, because we don't need such a massive dialog box for a single text field (or something else)1.8.2
, updated other dependencies.npm run start
: Start the development environmentnpm run less
: Same command as previous, now only with more outputnpm run build:quick
: Quick'n'dirty unpacked release for current platformnpm run release:this
: Build and pack the app for the current platformnpm run release:mac
: Build and pack for macOS x64 as DMGnpm run release:win
: Build and pack for Win x64 as NSIS installernpm run release:linux
: Build and pack for Linux x64 both as deb and rpmnotify
-event to the renderer or call notify()
on a body element.)trans()
methodCmd/Ctrl+Z
twice to remove the footnote/re-add the footnote)afterWindowStart()
has been removed and set in the renderer)This is an emergency patch. It fixes an error on Windows and Linux systems that disabled the complete main menu, making it unable to execute commands from the menu (e.g., opening a new root folder).
Program Files
-directorytrash
with electron internal shell.moveItemToTrash()
Cmd/Ctrl+1
and Cmd/Ctrl+2
Enter
instead of Cmd/Ctrl-G
to findNext
Cmd/Ctrl-B
boldens a selected text (or inserts bold-markers at cursor position). Accordingly, Cmd/Ctrl-I
emphasizes, Cmd/Ctrl-K
converts the selection into a link and Cmd/Ctrl-Shift-I
inserts an image.