Zettlr

Your One-Stop Publication Workbench

GPL-3.0 License

Stars
9.7K
Committers
114

Bot releases are visible (Hide)

Zettlr - Release v3.1.1 Latest Release

Published by github-actions[bot] 6 months ago

Hotfix for crashes on Linux

Sometimes, waiting to update something is a smart idea. This time, we were not that smart and bumped the underlying Electron framework to version 30, which unfortunately made running Zettlr 3.1.0 on most Linux systems impossible. With this patch, we rolled back Electron to a working version. Apologies to all Linux users, we still love you!

Changelog

GUI and Functionality

  • Fixed a segmentation fault crash on startup across various Linux setups
    (#5135)

Under the Hood

  • Downgrade Electron to version 29.3.2 (cf. Electron issue #41839)
Zettlr - Release v3.1.0

Published by github-actions[bot] 6 months ago

Wikilink-Titles | Project Overhaul | LT Improvements | And much more

Today's the day! After more than half a year since the last bigger update we are absolutely stoked to announce the next major update to Zettlr! This update brings loads of improvements and a decent amount of new features with it. A lot of it is about improving many workflows around the app and making your life much, much easier. Also, this release contains the début of our UX/UI artist, Artem Barinov, who has spent almost the entirety of 2023 fully re-designing the preferences dialog from the ground up — a feature that was fully designed before the launch of 3.0.0 but narrowly didn't make it in that release. We are excited to hear what you have to say about it!

Zettlr is Free and Open Source (FOSS) software and is done entirely by volunteers. But, developing the app incurs a significant cost factor. Please consider becoming a regular sponsor via Patreon or send a one-time donation via PayPal. Every dollar counts!

zettlr_patreon

But now, let's get into what changed in 3.1.0. There are three categories of changes: new features, improvements to existing workflows, and significant changes to existing workflows. Please make sure to read the entirety of the Changelog below to know what has changed so that none of the changes take you by surprise! Here's the overview at a glance:

  • You can now specify titles for wikilinks
  • Plain links are now no longer auto-detected
  • The old link-title-syntax ([Title]([[Link]])) has been partially restored
  • Project settings overhaul
  • Full Preferences overhaul
  • LanguageTool Language detection improved
  • "Other files" in the sidebar are now relative to the current file, not the open directory
  • Removed the option for choosing the file time sorting; this setting is now tied to the file display time
  • Removed the option for automatic file creation; since this is now inferred from whether you have a Zettelkasten directory specified

Changelog

Changes to the link detection

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
<[email protected]>. 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.

Introducing Wikilink Titles

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.

Re-enabling old Link-Title-Syntax

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).

Preferences Window Overhaul

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!

Project Overhaul: Full Control Over Your Files

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).

LanguageTool Improvements

The first update to Zettlr's LanguageTool integration concerns the language
detection. This update ships with two improvements:

  1. Zettlr implements LanguageTool's "Preferred Variants" setting
  2. LanguageTool respects the lang frontmatter property

Those 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.

GUI and Functionality

  • Feature: Zettlr now supports titles in internal (wiki) links; the default
    setting instructs the parser to expect first the link, and then the title
    ([[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
  • Feature: Project Overhaul. Now you can properly manage which files will be
    exported in projects, and in which order
  • Feature: Zettlr can now suggest you emojis during autocompletion. Emojis
    use the same trigger character as the snippets autocomplete, a colon (:);
    and Emojis will always be sorted below your snippets -- you can turn this off
    in the editor settings
  • Feature: We've completely redesigned the preferences dialog; now it is
    more aligned with the system preferences on macOS and Windows, allows
    searching and follows a more stringent structure (special thanks to our UX/UI
    artist Artem for spending almost an entire year redesigning it from the ground
    up!)
  • Feature: The assets manager now provides buttons to open the defaults and
    snippets directories directly from within the app
  • Feature: The table insertion popover now displays how many rows and
    columns will be inserted
  • Feature: A new setting allows to highlight whitespace across the app
    (#1123)
  • Feature: Implemented the LanguageTool Preferred Variants setting; now you
    can select variants of certain languages (English, German, Portuguese, and
    Catalan) for cases in which the automatic detection may pick the wrong one
  • Feature: LanguageTool now respects the lang 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)
  • Change: The attachment sidebar no longer considers the "open folder" for
    fetching its "other files" -- instead it will use the last focused file's
    folder
  • Change: The shortcut for deleting a directory has been removed from the
    menu as it provided an opaque way of deleting a seemingly random folder; now
    deleting a folder requires right-clicking the corresponding directory which
    makes the process more transparent
  • Change: Removed the option for choosing to sort by either file creation or
    last modification time, since that can also be inferred from whichever time
    you choose to display
  • Change: Removed the option for activating or disabling automatic file
    creation upon following internal links; now this will happen automatically as
    long as the "custom folder" option points to an existing folder; to disable
    this functionality simply remove the folder path
  • Fixed a bug where recent documents would not turn up in the menu
  • Fixed the sidebar shortcut: It is now Cmd/Ctrl+Shift+0 (to align with the
    file manager shortcut, which is Cmd/Ctrl+Shift+1)
  • Custom protocols should now be opened without problems by Zettlr (#3853)
  • Added Tamil (India) translation (#4848)
  • Removed the custom plain link parser out of two reasons: (1) It was a tad too
    aggressive, detecting links even where none were wanted; (2) Pandoc doesn't
    support auto-links in such a way as we have implemented it, leading to
    inconsistencies in exports
  • The YAML frontmatter is now ignored for the purposes of previewing files,
    showing a more meaningful preview of its contents (#4598)
  • Improve pasting behavior: Now text from Microsoft Word or Excel will be pasted
    as text, instead of offering to insert an image of the selection
  • Fix pasting behavior: Now Zettlr should properly paste most formatted text
    without too much noise (in the form of comments, styles, and other additions)
  • Fix restart-dialog showing multiple times for the same options (#4768)
  • Fix the active typewriter line background color in dark mode
  • Fixed an issue where gutter markers were not equally offset when typewriter
    mode was active (#4918)
  • Fixed non-working file deletion menu item (#3894)
  • Fixed a bug that would not ask users to save their changes when closing the
    last main window on Windows or Linux (#4898)
  • Fixed a bug that would not properly restore the open directory on application
    boot (#3797)
  • Fixed an issue that would break drag & drop behavior of editor panes when the
    path name contained a colon on non-Windows systems (#4822)
  • Fixed an issue where the re-ordering of list item numbers would not ensure
    that lists start at 1
  • Fixed an issue that has removed the custom background color from the Bielefeld
    and Bordeaux themes (#4913)
  • Fixed broken context menu options for images (#4893)
  • Implemented superscript and subscript HTML rendering in the internal Markdown-
    to-HTML converter (#4943)
  • Improved the TableEditor to more reliably parse tables; also, when a table
    could not be rendered out of any reason, the editor will simply remain dormant
    and not render the table instead of messing up the entire document
  • Improvements to how the Markdown AST handles table parsing, which will improve
    Markdown-to-HTML conversion both within the TableEditor as well as when
    copying as HTML
  • Fixed an issue that would make a context menu on macOS appear offset from the
    actual mouse position if the window's GUI was scaled absolutely (as per the
    preferences); now the context menu should always appear exactly where it
    should be
  • Updated the CodeMirror dependencies to resolve an issue where users of
    keyboards with Alt-G being assigned to some character were unable to type
    that (specifically, Swiss-Mac keyboard users could not type an @)
  • Fixed a bug that would not properly highlight PHP syntax in code blocks
  • The link renderer will now also hide internal link/Wikilink links and only
    show the titles, if enabled
  • Internal link tooltips will now show regardless of where inside the link your
    mouse cursor is
  • Added a visible error message to two places in which saving documents may go
    wrong so that users have visible feedback if their changes are actually
    persisted to disk (#4229)
  • Re-enable following internal Links in the format [Title]([[Link]]) by
    clicking them with Cmd/Ctrl pressed
  • Fixed a bug that would not properly check for autocorrect values during a
    spell check
  • The cursor on the editor scrollbars should now be a regular pointer instead of
    a text cursor (#4441)
  • The global search now differentiates between the total amount of matches and
    the number of matched files
  • The search button in the global search will now be disabled during a search
  • Due to the new ability to add link titles, the default setting for "Link with
    filename" is now set to "never" for new installations; you may consider
    changing this as well
  • The updater now contains a message indicating when Zettlr last checked for
    updates (#4963)
  • Fixed a bug that would sometimes make the "New file" command hang (#4785)
  • Fixed a bug on Windows and Linux that would not make the context menu on the
    status bar's MagicQuotes handler appear
  • Fixed a bug in the print window (#4902)
  • Fixed a bug in the image pasting modal handler (#5007)
  • Fixed a bug caused by a workaround from a few years ago, making dialogs modal
    again (see #4952)
  • Fixed an issue that would prevent the status bar in Code editors to switch
    between light and dark
  • Fixed an issue that would not show the color picker's color in the tag manager
    on Windows
  • Fixed list item indentation in Markdown and Code files
  • Fixed a bug that would make Zettlr always save files with regular newlines
    (LF), even if the file originally uses carriage returns (CR) or a mixture
    (CRLF or LFCR), leading, among other things, to save issues (#4959)
  • Fixed a bug that would make opening and closing folders in the file manager
    very hard
  • The importer will ask for a target directory first now, and no longer use the
    openDirectory 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)
  • Fixed an issue with the AST parser that has made it impossible to successfully
    parse Markdown tables with empty cells (#5025)
  • Fixed an issue with inserting Markdown tables via the popover (#5028)
  • Add a somewhat more informative message to the directory selection in the
    file importing workflow
  • Improved how focusing the various open editors works (#4889)
  • Fixed an issue where some borders in between split views wouldn't be drawn in
    more complex layouts
  • Fixed an issue that would not add a newly created file outside the loaded
    workspaces to the list of standalone files, leading to various minor
    annoyances around other parts of the app
  • It should now be more difficult to add faulty autocorrect entries (#4961)

Under the Hood

  • Version updates:
    • Pandoc: 3.1.13
    • Electron: 30.0.2
  • Switched from the vue-recommended to the vue3-recommended ESLint ruleset
  • Removed the config option sortingTime since that can be inferred from the
    option fileMetaTime
  • Removed the config option zkn.autoCreateLinkedFiles, since that can be
    inferred from the option zkn.customDir
  • Simplified tab bar tab retention logic across reloads
  • Add the ability to programmatically open the assets window with specified tab
  • Failure to fetch a link preview will now simply log a verbose message instead
    of an error
  • Reimplement configuration guard options as Maps to allow for volatile state
  • Fully remove the renderers's dependency on Node.js's path module to prepare
    for fully sandboxing the window code; instead polyfill the required functions,
    testing them against the module's behavior
  • Completely sandbox renderers
  • Switched the popover logic away from deprecated plugin syntax to child
    components with Teleport (#4663)
  • No more JavaScript: With this update, the entire code base (sans build
    scripts) is written in TypeScript.
  • Migrated from Electron's deprecated clipboard API to the native Browser API
  • Migrated the entire main window store state from Vuex to Pinia
  • Fixed an issue with the FSALCache provider where we accidentally stored the
    descriptors as strings, increasing the complexity of loading the cache values
    (see #4269)
  • The internal Markdown-to-HTML converter now respects (potentially significant)
    whitespace in the Markdown source to construct the HTML
  • The TableEditor now parses any table directly from the underlying parser to
    ensure that the representation is (almost) identical to the parse state and
    reduce complexity when parsing the table; several edge cases remain
  • Removed a check for whether certain commands exist; instead we now attempt to
    run them, and if they do not succeed, we catch that error instead; removed
    commandExists as it appears to have a few minor issues on Windows installs
  • The config provider now allows specifying options that will cause an event to
    be emitted instructing every open MainEditor to reload itself; this can be
    used to change options that affect non-reloadable components such as the
    parser without having to manually close and re-open affected editors, or
    forcing a reload of the entire main window
  • MainEditors can now be programmatically instructed by the main process to
    reload themselves with the broadcast event reload-editors
  • Added the commands 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)
  • Fixed an issue with showing the appropriate platformVersion in the about
    debug info tab
  • Move preventNavigation utility function into the lifecycle handlers to
    reduce boilerplate code and make the app more secure
  • Switched to the new YAML parser (@codemirror/lang-yaml)
  • Improved linting to include plain JavaScript files, but exclude type checking
  • Add build number (= git commit hash) to the debug info of the about dialog
  • Simplify exporter types
  • Retire the test-gui command; instead now the start command does the same;
    similarly, start won't touch any existing Zettlr configuration anymore
  • Simplify CodeMirror theming, retire the themeManager and replace it with a
    simpler, more general darkTheme extension
  • Disallow fuzzy matching during updates of translation files; previously this
    has led to inaccurate results (see, e.g., #5042)
  • All renderer processes (= all windows) now have access to Pinia
  • Markdown AST parser is now its own module
  • Removed openDirectory functionality completely from the documents manager;
    instead it is now again managed entirely by using the config provider,
    removing tons of superfluous code
  • Properly unmount CodeMirror instances when the MainEditor is unmounted
  • Reinstated ability to style tags individually again; by targeting classes with
    the format .cm-zkn-tag-<tagName> (#4589)
  • Fixed a bug that would prevent rendering of citations in certain edge cases
    (#5069)
  • The citation parser is now more strict when it comes to @Author [p. 123]
    citations: Now only spaces are allowed between the citation key and the suffix
  • Improved the i18n runs over the software, improving translatability (#5122)

New Contributors

Full Changelog: https://github.com/Zettlr/Zettlr/compare/v3.0.5...v3.1.0

Zettlr - Release v3.1.0-beta.3

Published by github-actions[bot] 6 months ago

This is likely the last beta release before we will be releasing 3.1.0 stable. It includes a few fixes relating to opening the proper files from the file manager, and many issues relating to the translation. So if you're a translator for Zettlr, there are about ~50 new translation strings to translate now. Again, for all changes, see the changelog below.

Changelog

Changes to the link detection

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 supported 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
<[email protected]>. 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.

Introducing Wikilink Titles

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 to new installations; so you may consider to
change this setting manually yourself as well.

Re-enabling old Link-Title-Syntax

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 yet implemented the functionality of auto-renaming files
or showing tooltips on these links.

Project Overhaul: Full Control Over Your Files

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, since it makes it transparent which files are missing so you can
take the appropriate action (especially if it was an accidental deletion).

LanguageTool Improvements

The first update to Zettlr's LanguageTool integration concerns the language
detection. This update ships with two improvements:

  1. Zettlr implements LanguageTool's "Preferred Variants" setting
  2. LanguageTool respects the lang frontmatter property

Those 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 proper 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.

GUI and Functionality

  • Feature: Zettlr now supports titles in internal (wiki) links; the default
    setting instructs the parser to expect first the link, and then the title
    ([[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
  • Feature: Project Overhaul. Now you can properly manage which files will be
    exported in projects, and in which order
  • Feature: Zettlr can now suggest you emojis during autocompletion. Emojis
    use the same trigger character as the snippets autocomplete, a colon (:);
    and Emojis will always be sorted below your snippets -- you can turn this off
    in the editor settings
  • Feature: We've completely redesigned the preferences dialog; now it is
    more aligned with the system preferences on macOS and Windows, allows
    searching and follows a more stringent structure
  • Feature: The assets manager now provides buttons to open the defaults and
    snippets directories directly from within the app
  • Feature: The table insertion popover now displays how many rows and
    columns will be inserted
  • Feature: A new setting allows to highlight whitespace across the app
    (#1123)
  • Feature: Implemented the LanguageTool Preferred Variants setting; now you
    can select variants of certain languages (English, German, Portuguese, and
    Catalan) for cases in which the automatic detection may pick the wrong one
  • Change: The attachment sidebar no longer considers the "open folder" for
    fetching its "other files" -- instead it will use the last focused file's
    folder
  • Change: The shortcut for deleting a directory has been removed from the
    menu as it provided an opaque way of deleting a seemingly random folder; now
    deleting a folder requires right-clicking the corresponding directory which
    makes the process more transparent
  • Change: Removed the option for choosing to sort by either file creation or
    last modification time, since that can also be inferred from whichever time
    you choose to display
  • Change: Removed the option for activating or disabling automatic file
    creation upon following internal links; now this will happen automatically as
    long as the "custom folder" option points to an existing folder; to disable
    this functionality simply remove the folder path
  • LanguageTool now respects the lang 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)
  • Fixed a bug where recent documents would not turn up in the menu
  • Fixed the sidebar shortcut: It is now Cmd/Ctrl+Shift+0 (to align with the
    file manager shortcut, Cmd/Ctrl+Shift+1)
  • Custom protocols should now be opened without problems by Zettlr (#3853)
  • Added Tamil (India) translation (#4848)
  • Removed the custom plain link parser out of two reasons: (1) It was a tad too
    aggressive, detecting links even where none were wanted; (2) Pandoc doesn't
    support auto-links in such a way as we have implemented it, leading to
    inconsistencies in exports
  • The YAML frontmatter is now ignored for the purposes of previewing files,
    showing a more meaningful preview of its contents (#4598)
  • Improve pasting behavior: Now text from Microsoft Word or Excel will be pasted
    as text, instead of offering to insert an image of the selection
  • Fix pasting behavior: Now Zettlr should properly paste most formatted text
    without too much noise (in the form of comments, styles, and other additions)
  • Fix restart-dialog showing multiple times for the same options (#4768)
  • Fix the active typewriter line background color in dark mode
  • Fixed an issue where gutter markers were not equally offset when typewriter
    mode was active (#4918)
  • Fixed non-working file deletion menu item (#3894)
  • Fixed a bug that would not ask users to save their changes when closing the
    last main window on Windows or Linux (#4898)
  • Fixed a bug that would not properly restore the open directory on application
    boot (#3797)
  • Fixed an issue that would break drag & drop behavior of editor panes when the
    path name contained a colon on non-Windows systems (#4822)
  • Fixed an issue where the re-ordering of list item numbers would not ensure
    that lists start at 1
  • Fixed an issue that has removed the custom background color from the Bielefeld
    and Bordeaux themes (#4913)
  • Fixed broken context menu options for images (#4893)
  • Implemented superscript and subscript HTML rendering in the internal Markdown-
    to-HTML converter (#4943)
  • Improved the TableEditor to more reliably parse tables; also, when a table
    could not be rendered out of any reason, the editor will simply remain dormant
    and not render the table instead of messing up the entire document
  • Improvements to how the Markdown AST handles table parsing, which will improve
    Markdown-to-HTML conversion both within the TableEditor as well as when
    copying as HTML
  • Fixed an issue that would make a context menu on macOS appear offset from the
    actual mouse position if the window's GUI was scaled absolutely (as per the
    preferences); now the context menu should always appear exactly where it
    should be
  • Updated the CodeMirror dependencies to resolve an issue where users of
    keyboards with Alt-G being assigned to some character were unable to type
    that (specifically, Swiss-Mac keyboard users could not type an @)
  • Fixed a bug that would not properly highlight PHP syntax in code blocks
  • The link renderer will now also hide internal link/Wikilink links and only
    show the headers, if enabled
  • Internal link tooltips will now show regardless of where inside the link your
    mouse cursor is
  • Added a visible error message to two places in which saving documents may go
    wrong so that users have visible feedback if their changes are actually
    persisted to disk (#4229)
  • Re-enable following internal Links in the format [Title]([[Link]]) by
    clicking them with Cmd/Ctrl pressed
  • Fixed a bug that would not properly check for autocorrect values during a
    spell check
  • The cursor on the editor scrollbars should now be a regular pointer instead of
    a text cursor (#4441)
  • The global search now differentiates between the total amount of matches and
    the number of matched files
  • The search button in the global search will now be disabled during a search
  • Due to the new ability to add link titles, the default setting for "Link with
    filename" is now set to "never" for new installations; you may consider
    changing this as well
  • The updater now contains a message indicating when Zettlr last checked for
    updates (#4963)
  • Fixed a bug that would sometimes make the "New file" command hang (#4785)
  • Fixed a bug on Windows and Linux that would not make the context menu on the
    status bar's MagicQuotes handler appear
  • Fixed a bug in the print window (#4902)
  • Fixed a bug in the image pasting modal handler (#5007)
  • Fixed a bug caused by a workaround from a few years ago, making dialogs modal
    again (see #4952)
  • Fixed an issue that would prevent the status bar in Code editors to switch
    between light and dark
  • Fixed an issue that would not show the color picker's color in the tag manager
    on Windows
  • Fixed list item indentation in Markdown and Code files
  • Fixed a bug that would make Zettlr always save files with regular newlines
    (LF), even if the file originally uses carriage returns (CR) or a mixture
    (CRLF or LFCR), leading, among other things, to save issues (#4959)
  • Fixed a bug that would make opening and closing folders in the file manager
    very hard
  • The importer will ask for a target directory first now, and no longer use the
    openDirectory configuration value as a metric
  • Fixed an issue with the AST parser that would be unable to successfully parse
    Markdown tables with empty cells (#5025)
  • Fixed an issue with inserting Markdown tables via the popover (#5028)
  • Add a somewhat more informative message to the directory selection in the
    file importing workflow
  • Improved how focusing the various open editors works (#4889)
  • Fixed an issue where some borders in between split views wouldn't be drawn in
    more complex layouts
  • Fixed an issue that would not add a newly created file outside the loaded
    workspaces to the list of standalone files, leading to various minor
    annoyances around other parts of the app
  • It should now be more difficult to add faulty autocorrect entries (#4961)

Under the Hood

  • Version updates:
    • Pandoc: 3.1.13
    • Electron: 29.2.0
  • Switched from the vue-recommended to the vue3-recommended ESLint ruleset
  • Removed the config option sortingTime since that can be inferred from the
    option fileMetaTime
  • Removed the config option zkn.autoCreateLinkedFiles, since that can be
    inferred from the option zkn.customDir
  • Simplified tab bar tab retention logic across reloads
  • Add the ability to programmatically open the assets window with specified tab
  • Failure to fetch a link preview will now simply log a verbose message instead
    of an error
  • Reimplement configuration guard options as Maps to allow for volatile state
  • Fully remove the renderers's dependency on Node.js's path module to prepare
    for fully sandboxing the window code; instead polyfill the required functions,
    testing them against the module's behavior
  • Completely sandbox renderers
  • Switched the popover logic away from deprecated plugin syntax to child
    components with Teleport (#4663)
  • No more JavaScript: With this update, the entire code base (sans build
    scripts) is written in TypeScript.
  • Migrated from Electron's deprecated clipboard API to the native Browser API
  • Migrated the entire main window store state from Vuex to Pinia
  • Fixed an issue with the FSALCache provider where we accidentally stored the
    descriptors as strings, increasing the complexity of loading the cache values
    (see #4269)
  • The internal Markdown-to-HTML converter now respects (potentially significant)
    whitespace in the Markdown source to construct the HTML
  • The TableEditor now parses any table directly from the underlying parser to
    ensure that the representation is (almost) identical to the parse state and
    reduce complexity when parsing the table; several edge cases remain
  • Removed a check for whether certain commands exist; instead we now attempt to
    run them, and if they do not succeed, we catch that error instead; removed
    commandExists as it appears to have a few minor issues on Windows installs
  • The config provider now allows specifying options that will cause an event to
    be emitted instructing every open MainEditor to reload itself; this can be
    used to change options that affect non-reloadable components such as the
    parser without having to manually close and re-open affected editors, or
    forcing a reload of the entire main window
  • MainEditors can now be programmatically instructed by the main process to
    reload themselves with the broadcast event reload-editors
  • Added the commands 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)
  • Fixed an issue with showing the appropriate platformVersion in the about
    debug info tab
  • Move preventNavigation utility function into the lifecycle handlers to
    reduce boilerplate code and make the app more secure
  • Switched to the new YAML parser (@codemirror/lang-yaml)
  • Improved linting to include plain JavaScript files, but exclude type checking
  • Add build number (= git commit hash) to the debug info of the about dialog
  • Simplify exporter types
  • Retire the test-gui command; instead now the start command does the same;
    similarly, start won't touch any existing Zettlr configuration anymore
  • Simplify CodeMirror theming, retire the themeManager and replace it with a
    simpler, more general darkTheme extension
  • Disallow fuzzy matching during updates of translation files; previously this
    has led to inaccurate results (see, e.g., #5042)
  • All renderer processes (= all windows) now have access to Pinia
  • Markdown AST parser is now its own module
  • Removed openDirectory functionality completely from the documents manager;
    instead it is now again managed entirely by using the config provider,
    removing tons of superfluous code
  • Properly unmount CodeMirror instances when the MainEditor is unmounted
  • Reinstated ability to style tags individually again; by targeting classes with
    the format .cm-zkn-tag-<tagName> (#4589)
  • Fixed a bug that would prevent rendering of citations in certain edge cases
    (#5069)
  • The citation parser is now more strict when it comes to @Author [p. 123]
    citations: Now only spaces are allowed between the citation key and the suffix
  • Improved the i18n runs over the software, improving translatability (#5122)

Full Changelog: https://github.com/Zettlr/Zettlr/compare/v3.1.0-beta.2...v3.1.0-beta.3

Zettlr - Release v3.1.0-beta.2

Published by github-actions[bot] 6 months ago

This new beta release adds many smaller and a few bigger improvements. The bigger improvements of note for you are the following:

  • You can now enable whitespace highlighting for the editors, which will make any spaces visible
  • The LanguageTool linter now respects the lang property of YAML front matters
  • Zettlr now incorporates the “preferred variants” setting of LanguageTool
  • Improved project management, allowing you to properly select files and ordering for project exports

You can read more about those and all the other changes in the Changelog below. Besides that, this beta primarily fixes smaller issues and improves many things under the hood which won't be very visible, except making the experience more smooth.

Changelog

Changes to the link detection

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 supported 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
<[email protected]>. 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.

Introducing Wikilink Titles

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 ensure 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 to new installations; so you may consider to
change this setting manually yourself as well.

Re-enabling old Link-Title-Syntax

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 yet implemented the functionality of auto-renaming files
or showing tooltips on these links.

Project Overhaul: Full Control Over Your Files

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, since it makes it transparent which files are missing so you can
take the appropriate action (especially if it was an accidental deletion).

LanguageTool Improvements

The first update to Zettlr's LanguageTool integration concerns the language
detection. This update ships with two improvements:

  1. Zettlr implements LanguageTool's "Preferred Variants" setting
  2. LanguageTool respects the lang frontmatter property

Those 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 proper 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.

GUI and Functionality

  • Feature: Zettlr now supports titles in internal (wiki) links; the default
    setting instructs the parser to expect first the link, and then the title
    ([[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
  • Feature: Project Overhaul. Now you can properly manage which files will be
    exported in projects, and in which order
  • Feature: Zettlr can now suggest you emojis during autocompletion. Emojis
    use the same trigger character as the snippets autocomplete, a colon (:);
    and Emojis will always be sorted below your snippets -- you can turn this off
    in the editor settings
  • Feature: We've completely redesigned the preferences dialog; now it is
    more aligned with the system preferences on macOS and Windows, allows
    searching and follows a more stringent structure
  • Feature: The assets manager now provides buttons to open the defaults and
    snippets directories directly from within the app
  • Feature: The table insertion popover now displays how many rows and
    columns will be inserted
  • Feature: A new setting allows to highlight whitespace across the app
    (#1123)
  • Feature: Implemented the LanguageTool Preferred Variants setting; now you
    can select variants of certain languages (English, German, Portuguese, and
    Catalan) for cases in which the automatic detection may pick the wrong one
  • Change: The attachment sidebar no longer considers the "open folder" for
    fetching its "other files" -- instead it will use the last focused file's
    folder
  • Change: The shortcut for deleting a directory has been removed from the
    menu as it provided an intransparent way of deleting a seemingly
    random folder; now deleting a folder requires right-clicking the corresponding
    directory which makes the process more transparent
  • Change: Removed the option for choosing to sort by either file creation or
    last modification time, since that can also be inferred from whichever time
    you choose to display
  • Change: Removed the option for activating or disabling automatic file
    creation upon following internal links; now this will happen automatically as
    long as the "custom folder" option points to an existing folder; to disable
    this functionality simply remove the folder path
  • LanguageTool now respects the lang 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)
  • Fixed a bug where recent documents would not turn up in the menu
  • Fixed the sidebar shortcut: It is now Cmd/Ctrl+Shift+0 (to align with the
    file manager shortcut, Cmd/Ctrl+Shift+1)
  • Custom protocols should now be opened without problems by Zettlr (#3853)
  • Added Tamil (India) translation (#4848)
  • Removed the custom plain link parser out of two reasons: (1) It was a tad too
    aggressive, detecting links even where none were wanted; (2) Pandoc doesn't
    support auto-links in such a way as we have implemented it, leading to
    inconsistencies in exports
  • The YAML frontmatter is now ignored for the purposes of previewing files,
    showing a more meaningful preview of its contents (#4598)
  • Improve pasting behavior: Now text from Microsoft Word or Excel will be pasted
    as text, instead of offering to insert an image of the selection
  • Fix pasting behavior: Now Zettlr should properly paste most formatted text
    without too much noise (in the form of comments, styles, and other additions)
  • Fix restart-dialog showing multiple times for the same options (#4768)
  • Fix the active typewriter line background color in dark mode
  • Fixed an issue where gutter markers were not equally offset when typewriter
    mode was active (#4918)
  • Fixed non-working file deletion menu item (#3894)
  • Fixed a bug that would not ask users to save their changes when closing the
    last main window on Windows or Linux (#4898)
  • Fixed a bug that would not properly restore the open directory on application
    boot (#3797)
  • Fixed an issue that would break drag & drop behavior of editor panes when the
    pathname contained a colon on non-Windows systems (#4822)
  • Fixed an issue where the re-ordering of list item numbers would not ensure
    that lists start at 1
  • Fixed an issue that has removed the custom background color from the Bielefeld
    and Bordeaux themes (#4913)
  • Fixed broken context menu options for images (#4893)
  • Implemented superscript and subscript HTML rendering in the internal Markdown-
    to-HTML converter (#4943)
  • Improved the TableEditor to more reliably parse tables; also, when a table
    could not be rendered out of any reason, the editor will simply remain dormant
    and not render the table instead of messing up the entire document
  • Improvements to how the Markdown AST handles table parsing, which will improve
    Markdown-to-HTML conversion both within the TableEditor as well as when
    copying as HTML
  • Fixed an issue that would make a context menu on macOS appear offset from the
    actual mouse position if the window's GUI was scaled absolutely (as per the
    preferences); now the context menu should always appear exactly where it
    should be
  • Updated the CodeMirror dependencies to resolve an issue where users of
    keyboards with Alt-G being assigned to some character were unable to type
    that (specifically, Swiss-Mac keyboard users could not type an @)
  • Fixed a bug that would not properly highlight PHP syntax in code blocks
  • The link renderer will now also hide internal link/Wikilink links and only
    show the headers, if enabled
  • Internal link tooltips will now show regardless of where inside the link your
    mouse cursor is
  • Added a visible error message to two places in which saving documents may go
    wrong so that users have visible feedback if their changes are actually
    persisted to disk (#4229)
  • Re-enable following internal Links in the format [Title]([[Link]]) by
    clicking them with Cmd/Ctrl pressed
  • Fixed a bug that would not properly check for autocorrect values during a
    spell check
  • The cursor on the editor scrollbars should now be a regular pointer instead of
    a text cursor (#4441)
  • The global search now differentiates between the total amount of matches and
    the number of matched files
  • The search button in the global search will now be disabled during a search
  • Due to the new ability to add link titles, the default setting for "Link with
    filename" is now set to "never" for new installations; you may consider
    changing this as well
  • The updater now contains a message indicating when Zettlr last checked for
    updates (#4963)
  • Fixed a bug that would sometimes make the "New file" command hang (#4785)
  • Fixed a bug on Windows and Linux that would not make the context menu on the
    statusbars' MagicQuotes handler appear
  • Fixed a bug in the print window (#4902)
  • Fixed a bug in the image pasting modal handler (#5007)
  • Fixed a bug caused by a workaround from a few years ago, making dialogs modal
    again (see #4952)
  • Fixed an issue that would prevent the status bar in Code editors to switch
    between light and dark
  • Fixed an issue that would not show the color picker's color in the tag manager
    on Windows
  • Fixed list item indentation in Markdown and Code files
  • Fixed a bug that would make Zettlr always save files with regular newlines
    (LF), even if the file originally uses carriage returns (CR) or a mixture
    (CRLF or LFCR), leading, among other things, to save issues (#4959)
  • Fixed a bug that would make opening and closing folders in the file manager
    very hard
  • The importer will ask for a target directory first now, and no longer use the
    openDirectory configuration value as a metric
  • Fixed an issue with the AST parser that would be unable to successfully parse
    Markdown tables with empty cells (#5025)
  • Fixed an issue with inserting Markdown tables via the popover (#5028)
  • Add a somewhat more informative message to the directory selection in the
    file importing workflow
  • Improved how focusing the various open editors works (#4889)
  • Fixed an issue where some borders in between split views wouldn't be drawn in
    more complex layouts
  • Fixed an issue that would not add a newly created file outside the loaded
    workspaces to the list of standalone files, leading to various minor
    annoyances around other parts of the app

Under the Hood

  • Version updates:
    • Pandoc: 3.1.12.3
    • Electron: 29.2.0
  • Switched from the vue-recommended to the vue3-recommended ESLint ruleset
  • Removed the config option sortingTime since that can be inferred from the
    option fileMetaTime
  • Removed the config option zkn.autoCreateLinkedFiles, since that can be
    inferred from the option zkn.customDir
  • Simplified tab bar tab retention logic across reloads
  • Add the ability to programmatically open the assets window with specified tab
  • Failure to fetch a link preview will now simply log a verbose message instead
    of an error
  • Reimplement configuration guard options as Maps to allow for volatile state
  • Fully remove the renderers's dependency on Node.js's path module to prepare
    for fully sandboxing the window code; instead polyfill the required functions,
    testing them against the module's behavior
  • Completely sandbox renderers
  • Switched the popover logic away from deprecated plugin syntax to child
    components with Teleport (#4663)
  • No more JavaScript: With this update, the entire code base (sans build
    scripts) is written in TypeScript.
  • Migrated from Electron's deprecated clipboard API to the native Browser API
  • Migrated the entire main window store state from Vuex to Pinia
  • Fixed an issue with the FSALCache provider where we accidentally stored the
    descriptors as strings, increasing the complexity of loading the cache values
    (see #4269)
  • The internal Markdown-to-HTML converter now respects (potentially significant)
    whitespace in the Markdown source to construct the HTML
  • The TableEditor now parses any table directly from the underlying parser to
    ensure that the representation is (almost) identical to the parse state and
    reduce complexity when parsing the table; several edge cases remain
  • Removed a check for whether certain commands exist; instead we now attempt to
    run them, and if they do not succeed, we catch that error instead; removed
    commandExists as it appears to have a few minor issues on Windows installs
  • The config provider now allows specifying options that will cause an event to
    be emitted instructing every open MainEditor to reload itself; this can be
    used to change options that affect non-reloadable components such as the
    parser without having to manually close and re-open affected editors, or
    forcing a reload of the entire main window
  • MainEditors can now be programmatically instructed by the main process to
    reload themselves with the broadcast event reload-editors
  • Added the commands 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)
  • Fixed an issue with showing the appropriate platformVersion in the about
    debug info tab
  • Move preventNavigation utility function into the lifecycle handlers to
    reduce boilerplate code and make the app more secure
  • Switched to the new YAML parser (@codemirror/lang-yaml)
  • Improved linting to include plain JavaScript files, but exclude type checking
  • Add build number (= git commit hash) to the debug info of the about dialog
  • Simplify exporter types
  • Retire the test-gui command; instead now the start command does the same;
    similarly, start won't touch any existing Zettlr configuration anymore
  • Simplify CodeMirror theming, retire the themeManager and replace it with a
    simpler, more general darkTheme extension
  • Disallow fuzzy matching during updates of translation files; previously this
    has led to inaccurate results (see, e.g., #5042)
  • All renderer processes (= all windows) now have access to Pinia
  • Markdown AST parser is now its own module
  • Removed openDirectory functionality completely from the documents manager;
    instead it is now again managed entirely by using the config provider,
    removing tons of superfluous code
  • Properly unmount CodeMirror instances when the MainEditor is unmounted
  • Reinstated ability to style tags individually again; by targeting classes with
    the format .cm-zkn-tag-<tagName> (#4589)
  • Fixed a bug that would prevent rendering of citations in certain edge cases
    (#5069)
  • The citation parser is now more strict when it comes to @Author [p. 123]
    citations: Now only spaces are allowed between the citation key and the suffix

New Contributors

Full Changelog: https://github.com/Zettlr/Zettlr/compare/v3.0.5...v3.1.0-beta.2

Zettlr - Release v3.1.0-beta.1

Published by github-actions[bot] 7 months ago

This update changes a few minor but notable things from the previous beta release. Here they are at a glance:

  • Fixed a serious bug during save that would effectively remove any non-standard linefeeds (such as CRLF or LFCR) during save, leading to various issues with detecting external changes
  • The dialogs are now modal even on Linux. Previously, they weren't due to (likely) a bug in Electron. We've now undone this in the hopes that the original bug that this fixed doesn't re-occur, so please report any problems you may encounter.
  • The app now shows the precise git commit hash from which it was compiled (in the About Debug tab). This might help reproduce bugs in the future.
  • Fixed an issue with the visual list indentation. This should reduce the "wobble" some were experiencing when using tabular characters for indentation as well as line up the list markers with the rest of the text.
  • We've switched from the legacy YAML implementation to the new mode implementation. This means that some syntax highlighting has slightly changed, but this will give us more control over the various frontmatter blocks.
  • Removed fuzzy translation matching. This has led to our translation library gettext to auto-translate sentences that appeared similar, which has led to confusion. That being said, should you find odd-sounding translations if you're not using English (US) as your app language, this is likely an issue that can be easily solved and we would like to invite you to become a translator. All you need to know can be found on the project repository.
  • Other than that, we've fixed various minor things here and there.

For everything that has changed since v3.0.0, refer to the full changelog below.

Changelog

Changes to the link detection

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 supported 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
<[email protected]>. 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.

Introducing Wikilink Titles

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 ensure 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 to new installations; so you may consider to
change this setting manually yourself as well.

Re-enabling old Link-Title-Syntax

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 yet implemented the functionality of auto-renaming files
or showing tooltips on these links.

GUI and Functionality

  • Feature: Zettlr now supports titles in internal (wiki) links; the default
    setting instructs the parser to expect first the link, and then the title
    ([[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
  • Feature: Zettlr can now suggest you emojis during autocompletion. Emojis
    use the same trigger character as the snippets autocomplete, a colon (:);
    and Emojis will always be sorted below your snippets -- you can turn this off
    in the editor settings
  • Feature: We've completely redesigned the preferences dialog; now it is
    more aligned with the system preferences on macOS and Windows, allows
    searching and follows a more stringent structure
  • Removed the option for choosing to sort by either file creation or last
    modification time, since that can also be inferred from whichever time you
    choose to display
  • Feature: The assets manager now provides buttons to open the defaults and
    snippets directories directly from within the app
  • Removed the option for activating or disabling automatic file creation upon
    following internal links; now this will happen automatically as long as the
    "custom folder" option points to an existing folder; to disable this
    functionality simply remove the folder path
  • Fixed a bug where recent documents would not turn up in the menu
  • Fixed the sidebar shortcut: It is now Cmd/Ctrl+Shift+0 (to align with the
    file manager shortcut, Cmd/Ctrl+Shift+1)
  • Custom protocols should now be opened without problems by Zettlr (#3853)
  • Added Tamil (India) translation (#4848)
  • Removed the custom plain link parser out of two reasons: (1) It was a tad too
    aggressive, detecting links even where none were wanted; (2) Pandoc doesn't
    support auto-links in such a way as we have implemented it, leading to
    inconsistencies in exports
  • The YAML frontmatter is now ignored for the purposes of previewing files,
    showing a more meaningful preview of its contents (#4598)
  • Improve pasting behavior: Now text from Microsoft Word or Excel will be pasted
    as text, instead of offering to insert an image of the selection
  • Fix pasting behavior: Now Zettlr should properly paste most formatted text
    without too much noise (in the form of comments, styles, and other additions)
  • Fix restart-dialog showing multiple times for the same options (#4768)
  • Fix the active typewriter line background color in dark mode
  • Fixed an issue where gutter markers were not equally offset when typewriter
    mode was active (#4918)
  • Fixed non-working file deletion menu item (#3894)
  • Fixed a bug that would not ask users to save their changes when closing the
    last main window on Windows or Linux (#4898)
  • Fixed a bug that would not properly restore the open directory on application
    boot (#3797)
  • Fixed an issue that would break drag & drop behavior of editor panes when the
    pathname contained a colon on non-Windows systems (#4822)
  • Fixed an issue where the re-ordering of list item numbers would not ensure
    that lists start at 1
  • Fixed an issue that has removed the custom background color from the Bielefeld
    and Bordeaux themes (#4913)
  • Fixed broken context menu options for images (#4893)
  • Implemented superscript and subscript HTML rendering in the internal Markdown-
    to-HTML converter (#4943)
  • Improved the TableEditor to more reliably parse tables; also, when a table
    could not be rendered out of any reason, the editor will simply remain dormant
    and not render the table instead of messing up the entire document
  • Improvements to how the Markdown AST handles table parsing, which will improve
    Markdown-to-HTML conversion both within the TableEditor as well as when
    copying as HTML
  • Fixed an issue that would make a context menu on macOS appear offset from the
    actual mouse position if the window's GUI was scaled absolutely (as per the
    preferences); now the context menu should always appear exactly where it
    should be
  • Updated the CodeMirror dependencies to resolve an issue where users of
    keyboards with Alt-G being assigned to some character were unable to type
    that (specifically, Swiss-Mac keyboard users could not type an @)
  • Fixed a bug that would not properly highlight PHP syntax in code blocks
  • The link renderer will now also hide internal link/Wikilink links and only
    show the headers, if enabled
  • Internal link tooltips will now show regardless of where inside the link your
    mouse cursor is
  • Added a visible error message to two places in which saving documents may go
    wrong so that users have visible feedback if their changes are actually
    persisted to disk (#4229)
  • Re-enable following internal Links in the format [Title]([[Link]]) by
    clicking them with Cmd/Ctrl pressed
  • Fixed a bug that would not properly check for autocorrect values during a
    spell check
  • The cursor on the editor scrollbars should now be a regular pointer instead of
    a text cursor (#4441)
  • The global search now differentiates between the total amount of matches and
    the number of matched files
  • The search button in the global search will now be disabled during a search
  • Due to the new ability to add link titles, the default setting for "Link with
    filename" is now set to "never" for new installations; you may consider
    changing this as well
  • The updater now contains a message indicating when Zettlr last checked for
    updates (#4963)
  • Fixed a bug that would sometimes make the "New file" command hang (#4785)
  • Fixed a bug on Windows and Linux that would not make the context menu on the
    statusbars' MagicQuotes handler appear
  • Fixed a bug in the print window (#4902)
  • Fixed a bug in the image pasting modal handler (#5007)
  • Fixed a bug caused by a workaround from a few years ago, making dialogs modal
    again (see #4952)
  • Fixed an issue that would prevent the status bar in Code editors to switch
    between light and dark
  • Fixed an issue that would not show the color picker's color in the tag manager
    on Windows
  • Fixed list item indentation in Markdown and Code files
  • Fixed a bug that would make Zettlr always save files with regular newlines
    (LF), even if the file originally uses carriage returns (CR) or a mixture
    (CRLF or LFCR), leading, among other things, to save issues (#4959)

Under the Hood

  • Switched from the vue-recommended to the vue3-recommended ESLint ruleset
  • Removed the config option sortingTime since that can be inferred from the
    option fileMetaTime
  • Removed the config option zkn.autoCreateLinkedFiles, since that can be
    inferred from the option zkn.customDir
  • Simplified tab bar tab retention logic across reloads
  • Add the ability to programmatically open the assets window with specified tab
  • Bump the bundled Pandoc to version 3.1.12
  • Bump Electron to version 29
  • Failure to fetch a link preview will now simply log a verbose message instead
    of an error
  • Reimplement configuration guard options as Maps to allow for volatile state
  • Fully remove the renderers's dependency on Node.js's path module to prepare
    for fully sandboxing the window code; instead polyfill the required functions,
    testing them against the module's behavior
  • Completely sandbox renderers
  • Switched the popover logic away from deprecated plugin syntax to child
    components with Teleport (#4663)
  • No more JavaScript: With this update, the entire code base (sans build
    scripts) is written in TypeScript.
  • Migrated from Electron's deprecated clipboard API to the native Browser API
  • Migrated the entire main window store state from Vuex to Pinia
  • Fixed an issue with the FSALCache provider where we accidentally stored the
    descriptors as strings, increasing the complexity of loading the cache values
    (see #4269)
  • The internal Markdown-to-HTML converter now respects (potentially significant)
    whitespace in the Markdown source to construct the HTML
  • The TableEditor now parses any table directly from the underlying parser to
    ensure that the representation is (almost) identical to the parse state and
    reduce complexity when parsing the table; several edge cases remain
  • Removed a check for whether certain commands exist; instead we now attempt to
    run them, and if they do not succeed, we catch that error instead; removed
    commandExists as it appears to have a few minor issues on Windows installs
  • The config provider now allows specifying options that will cause an event to
    be emitted instructing every open MainEditor to reload itself; this can be
    used to change options that affect non-reloadable components such as the
    parser without having to manually close and re-open affected editors, or
    forcing a reload of the entire main window
  • MainEditors can now be programmatically instructed by the main process to
    reload themselves with the broadcast event reload-editors
  • Added the commands 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)
  • Fixed an issue with showing the appropriate platformVersion in the about
    debug info tab
  • Move preventNavigation utility function into the lifecycle handlers to
    reduce boilerplate code and make the app more secure
  • Switched to the new YAML parser (@codemirror/lang-yaml)
  • Improved linting to include plain JavaScript files, but exclude type checking
  • Add build number (= git commit hash) to the debug info of the about dialog
  • Simplify exporter types
  • Retire the test-gui command; instead now the start command does the same;
    similarly, start won't touch any existing Zettlr configuration anymore
  • Simplify CodeMirror theming, retire the themeManager and replace it with a
    simpler, more general darkTheme extension
  • Disallow fuzzy matching during updates of translation files; previously this
    has led to inaccurate results (see, e.g., #5042)
Zettlr - Release v3.1.0-beta

Published by github-actions[bot] 8 months ago

New Preferences UI | Link Improvements | Bug Fixes | Quality of Life Improvements

Thank you for testing Zettlr's beta releases and helping us create a stable and enjoyable release! Please report any bugs you find on GitHub. If you have any questions, we warmly welcome you on our Discord server. Finally, Zettlr is and will always remain Free and Open Source Software (FOSS), but every app requires some funding. If you enjoy Zettlr and would like to ensure it remains a viable alternative for professional writing, consider becoming a Patron on Patreon or use PayPal. If you prefer, you can also send over a small tip on Ko-Fi. You can find more information on our website.

Since the 3.0.0 major release, we've been hard at work at improving the app everywhere to aid your writing process even better. Zettlr 3.1 will contain a serious amount of improvements, all of which you can find in the changelog below. Let us highlight a few of the main things we have implemented:

A new preferences UI. Together with UI/UX designer Artem Barinov, we have spent the better half of 2023 thinking about how to improve the preferences UI. The result is a fully redesigned and much more accessible UI that allows you to find settings faster and adapt Zettlr to your own style.

A more accidental but nonetheless central theme of this release is links. One thing you may immediately note when testing out the beta is that the plain link detection has changed. You can read more below, but in short: What you see within Zettlr is now much closer aligned with what you actually get once you export your files.

Continuing with the Zelda link theme, Zettlr finally supports proper Wikilinks in: you can now add titles to them. This is a long-awaited feature that other editors already support, and we're happy that Zettlr now follows suit. This means, instead of the (depending on how you use them) cumbersome "Add filename after link" setting, you can now directly link them within proper, grammatical sentences. Activating the link renderer in the preferences will automatically hide the link and only show the title if applicable.

Finally, we have received many reports by users online and offline that their links broke after the release of v3.0.0. If you belong to this group of users, rejoice: We listen to the user base, and this release begins the work of re-enabling their functionality. Again, a more elaborate description can be found below.

Lastly, one issue that people have been wanting is an easy way of backing up snippets or export/import profiles. Until now this was a bit cumbersome, as you had to manually navigate into the application data directory. But no more! This version adds buttons to the appropriate places in the assets manager that allow you to open the corresponding folders directly, making it easy to simply copy and/or paste files into those folders, synchronizing that between your devices.

A lot more has changed, and we hope that these changes are all to your liking. Should something not work as expected, you know where to go!

Thank you again for helping the project by rigorously testing the beta releases.

Changelog

Changes to the link detection

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 supported 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
<[email protected]>. 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.

Introducing Wikilink Titles

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 ensure 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 to new installations; so you may consider to
change this setting manually yourself as well.

Re-enabling old Link-Title-Syntax

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 yet implemented the functionality of auto-renaming files
or showing tooltips on these links.

GUI and Functionality

  • Feature: Zettlr now supports titles in internal (wiki) links; the default
    setting instructs the parser to expect first the link, and then the title
    ([[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
  • Feature: Zettlr can now suggest you emojis during autocompletion. Emojis
    use the same trigger character as the snippets autocomplete, a colon (:);
    and Emojis will always be sorted below your snippets -- you can turn this off
    in the editor settings
  • Feature: We've completely redesigned the preferences dialog; now it is
    more aligned with the system preferences on macOS and Windows, allows
    searching and follows a more stringent structure
  • Removed the option for choosing to sort by either file creation or last
    modification time, since that can also be inferred from whichever time you
    choose to display
  • Feature: The assets manager now provides buttons to open the defaults and
    snippets directories directly from within the app
  • Removed the option for activating or disabling automatic file creation upon
    following internal links; now this will happen automatically as long as the
    "custom folder" option points to an existing folder; to disable this
    functionality simply remove the folder path
  • Fixed a bug where recent documents would not turn up in the menu
  • Fixed the sidebar shortcut: It is now Cmd/Ctrl+Shift+0 (to align with the
    file manager shortcut, Cmd/Ctrl+Shift+1)
  • Custom protocols should now be opened without problems by Zettlr (#3853)
  • Added Tamil (India) translation (#4848)
  • Removed the custom plain link parser out of two reasons: (1) It was a tad too
    aggressive, detecting links even where none were wanted; (2) Pandoc doesn't
    support auto-links in such a way as we have implemented it, leading to
    inconsistencies in exports
  • The YAML frontmatter is now ignored for the purposes of previewing files,
    showing a more meaningful preview of its contents (#4598)
  • Improve pasting behavior: Now text from Microsoft Word or Excel will be pasted
    as text, instead of offering to insert an image of the selection
  • Fix pasting behavior: Now Zettlr should properly paste most formatted text
    without too much noise (in the form of comments, styles, and other additions)
  • Fix restart-dialog showing multiple times for the same options (#4768)
  • Fix the active typewriter line background color in dark mode
  • Fixed an issue where gutter markers were not equally offset when typewriter
    mode was active (#4918)
  • Fixed non-working file deletion menu item (#3894)
  • Fixed a bug that would not ask users to save their changes when closing the
    last main window on Windows or Linux (#4898)
  • Fixed a bug that would not properly restore the open directory on application
    boot (#3797)
  • Fixed an issue that would break drag & drop behavior of editor panes when the
    pathname contained a colon on non-Windows systems (#4822)
  • Fixed an issue where the re-ordering of list item numbers would not ensure
    that lists start at 1
  • Fixed an issue that has removed the custom background color from the Bielefeld
    and Bordeaux themes (#4913)
  • Fixed broken context menu options for images (#4893)
  • Implemented superscript and subscript HTML rendering in the internal Markdown-
    to-HTML converter (#4943)
  • Improved the TableEditor to more reliably parse tables; also, when a table
    could not be rendered out of any reason, the editor will simply remain dormant
    and not render the table instead of messing up the entire document
  • Improvements to how the Markdown AST handles table parsing, which will improve
    Markdown-to-HTML conversion both within the TableEditor as well as when
    copying as HTML
  • Fixed an issue that would make a context menu on macOS appear offset from the
    actual mouse position if the window's GUI was scaled absolutely (as per the
    preferences); now the context menu should always appear exactly where it
    should be
  • Updated the CodeMirror dependencies to resolve an issue where users of
    keyboards with Alt-G being assigned to some character were unable to type
    that (specifically, Swiss-Mac keyboard users could not type an @)
  • Fixed a bug that would not properly highlight PHP syntax in code blocks
  • The link renderer will now also hide internal link/Wikilink links and only
    show the headers, if enabled
  • Internal link tooltips will now show regardless of where inside the link your
    mouse cursor is
  • Added a visible error message to two places in which saving documents may go
    wrong so that users have visible feedback if their changes are actually
    persisted to disk (#4229)
  • Re-enable following internal Links in the format [Title]([[Link]]) by
    clicking them with Cmd/Ctrl pressed
  • Fixed a bug that would not properly check for autocorrect values during a
    spell check
  • The cursor on the editor scrollbars should now be a regular pointer instead of
    a text cursor (#4441)
  • The global search now differentiates between the total amount of matches and
    the number of matched files
  • The search button in the global search will now be disabled during a search
  • Due to the new ability to add link titles, the default setting for "Link with
    filename" is now set to "never" for new installations; you may consider
    changing this as well
  • The updater now contains a message indicating when Zettlr last checked for
    updates (#4963)
  • Fixed a bug that would sometimes make the "New file" command hang (#4785)
  • Fixed a bug on Windows and Linux that would not make the context menu on the
    statusbars' MagicQuotes handler appear

Under the Hood

  • Switched from the vue-recommended to the vue3-recommended ESLint ruleset
  • Removed the config option sortingTime since that can be inferred from the
    option fileMetaTime
  • Removed the config option zkn.autoCreateLinkedFiles, since that can be
    inferred from the option zkn.customDir
  • Simplified tab bar tab retention logic across reloads
  • Add the ability to programmatically open the assets window with specified tab
  • Bump the bundled Pandoc to version 3.1.12
  • Bump Electron to version 29
  • Failure to fetch a link preview will now simply log a verbose message instead
    of an error
  • Reimplement configuration guard options as Maps to allow for volatile state
  • Fully remove the renderers's dependency on Node.js's path module to prepare
    for fully sandboxing the window code; instead polyfill the required functions,
    testing them against the module's behavior
  • Completely sandbox renderers
  • Switched the popover logic away from deprecated plugin syntax to child
    components with Teleport (#4663)
  • No more JavaScript: With this update, the entire code base (sans build
    scripts) is written in TypeScript.
  • Migrated from Electron's deprecated clipboard API to the native Browser API
  • Migrated the entire main window store state from Vuex to Pinia
  • Fixed an issue with the FSALCache provider where we accidentally stored the
    descriptors as strings, increasing the complexity of loading the cache values
    (see #4269)
  • The internal Markdown-to-HTML converter now respects (potentially significant)
    whitespace in the Markdown source to construct the HTML
  • The TableEditor now parses any table directly from the underlying parser to
    ensure that the representation is (almost) identical to the parse state and
    reduce complexity when parsing the table; several edge cases remain
  • Removed a check for whether certain commands exist; instead we now attempt to
    run them, and if they do not succeed, we catch that error instead; removed
    commandExists as it appears to have a few minor issues on Windows installs
  • The config provider now allows specifying options that will cause an event to
    be emitted instructing every open MainEditor to reload itself; this can be
    used to change options that affect non-reloadable components such as the
    parser without having to manually close and re-open affected editors, or
    forcing a reload of the entire main window
  • MainEditors can now be programmatically instructed by the main process to
    reload themselves with the broadcast event reload-editors
  • Added the commands 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)
  • Fixed an issue with showing the appropriate platformVersion in the about
    debug info tab
Zettlr - Release v3.0.5

Published by github-actions[bot] 9 months ago

Minor patch | Fixes Linux ARM | Drops support for macOS 10.13 & 10.14

This update includes a critical security fix. We therefore recommend all users install this update as soon as possible. If you run macOS below version 10.15, which is no longer supported in Zettlr 3.0.5, please upgrade to Zettlr 3.0.4 by downloading this from GitHub Releases, which includes the security patch but still works on macOS 10.13 and 10.14 until you are able to update your macOS to 10.15 or higher.

Immediately after v3.0.4, we decided to release a minor upgrade that bumps
the underlying Electron framework to the most recent version. This will stop
segmentation faults in Wayland environments and prevent the flagging of
Zettlr in repositories such as AUR due to outdated dependencies.

Dropping Support for macOS 10.13 and 10.14

Due 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).

Linux ARM builds functionally again

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.

Changelog

GUI and Functionality

  • Fix: Segmentation faults in Wayland environments (#4877)
  • Fix Linux ARM builds (#4910)

Under the Hood

  • Update Electron from v25 to the latest available release (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 supported
  • Switched to Zig compiler to enable successful compilation for Linux ARM
    targets (#4910)
Zettlr - Release v3.0.4

Published by github-actions[bot] 9 months ago

Security patch | Please Update immediately

Dear 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.

Thanks again to user "soulfood" for bringing this to our attention and for the
cooperation in fixing the issue in a timely manner.

Changelog

GUI and Functionality

Nothing changed.

Under the hood

  • Update Electron to the last version 25 update (v25.9.8)
  • Add Electron fuses support and disable those that allow certain debug commands
    to be sent to the binary (e.g., --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)
Zettlr - Release v3.0.3

Published by github-actions[bot] 11 months ago

Bug Fixes | Performance Improvements | CSS Changes

This patch includes a series of minor bug fixes and performance improvements. In addition, this patch refactors a lot of the theming of the app. This should not impact anyone, but may lead to some of you having to do minor updates to your Custom CSS, if you use any.

Are you satisfied with Zettlr?

Then please consider becoming a patron over at Patreon, or make a one-time payment via PayPal.

Changelog

A Note on Custom CSS

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.

GUI and Functionality

  • Fixed a visual issue that would handle overly long window titles improperly
  • Fixed Tab not indenting/unindenting code in the CodeEditors (snippets,
    profiles, etc.)
  • Fixed a precedence issue that would make it impossible to use autocomplete
    while filling in a snippet; now, accepting a potential autocomplete has a
    higher precedence than moving to the next tabstop of a snippet, making working
    with snippets more ergonomic
  • Images now render more appropriately in inline-contexts
  • Updated the German translation
  • Fixed the keyboard shortcut for inserting footnotes on Windows and Linux
  • Removed the accent color setting: now the accent color will always be the
    system accent color on macOS and Windows, and Zettlr's brand green on Linux;
    themes do not provide an accent color anymore
  • Restored syntax highlighting for inline math code
  • Fixes an issue that would frequently may make the cursor appear to jump or a
    dialog appearing warning of external changes (#4729; #4732)
  • Added some translations
  • Generating link previews no longer downloads the entire link target if the
    content is not preview-able
  • Improved layout of link previews
  • Overly long summaries of link previews are now shortened
  • Project properties now adequately resolve the readers and writers of the
    existing profiles, enabling the usage of profiles with extended
    readers/writers (#4699)
  • GraphView's labels are now rendered filled instead of stroked, to make it
    easier to read the labels.
  • The GraphView does now support multi-window, so clicking a link will open it
    in the last focused window. If the file is already open in a leaf, that file
    will be in that leaf, otherwise it will open the file in the last focused
    leaf.
  • Alt+Click in GraphView will force the document to be opened in a new tab.
  • Zettelkasten links and tags will now be output by our custom Markdown-to-HTML
    parser (i.e., in various places in the app as well as on Copy with Style)

Under the Hood

  • Moved all themes from the *.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
  • Remove unused color variable definitions
  • Move gray color palette to the Window Chrome component
  • Fixed an issue where the font definitions were borked and required usage of
    !important to make them work (#4719)
  • Upgraded all available CodeMirror components to the most recent version
  • Replaced fs.unlink with fs.rm in safeDelete to support recursive removal
    of directories
  • fsal-directory::removeChild now calls pathExists instead of isFile to
    make sure directories also are removed in removeChild
  • pathExists wraps fs.promises.access.
  • (CodeMirror) Move plugin-specific base styles from the main override as well
    as from the themes to the respective plugin files
  • Bump Pandoc to version 3.1.9
  • Fixed a weird layouting issue with the code block backgrounds
  • DocumentManager's openFile does now handle the case when windowId and leafId
    is undefined, by keeping track on the last used editor.

New Contributors

Zettlr - Release v3.0.2

Published by github-actions[bot] about 1 year ago

Bug Fixes | Quality of Life Updates | Security Improvements

This update fixed a few issues here and there that have been identified since the last release. This mainly refers to how link rendering is done, a potential data loss issue, and the file importer. Additionally, some translations have been updated. Finally, this update contains a security patch, so we recommend a swift update.

Changelog

GUI and Functionality

  • Fixed a bug that would not parse plain-text links at the end of a line
    completely
  • Added two heuristics to plain link parser: (a) if the matched link ends with a
    period, exclude the period; (b) if the matched link ends with a closing
    bracket that does not match an open bracket, exclude the closing bracket
    (remember that you can explicitly define the start and end of plain links by
    wrapping them in < and >)
  • Fixed an issue that could lead to data loss if "Always load remote changes"
    was checked in the settings (#4706)
  • Improved the Czech translation (#4688)
  • Improve the Chinese (Taiwan) translation (#4711)
  • Fixed an issue that would import Markdown files as LaTeX instead of simply
    copying the file
  • If multiple candidate profiles to import files are found, the user can now
    choose the correct one

Under the Hood

  • Increased the "immediate" save delay from 250 to 500ms to give slower systems
    more time to persist changes to disk
  • Replaced direct 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 user
  • Fixed a potentially (?) horrible bug where directory modification times were
    accidentally set to ctime instead of mtime, leaving any changes to the
    directory that do not also update ctime hidden from the FSAL
  • Fixed a misalignment of the InlineCode element for the Pandoc attribute
    parser
  • Upgrade Electron to v25.8.4, mitigating CVE-2023-5217

New Contributors

Zettlr - Release v3.0.1

Published by github-actions[bot] about 1 year ago

Bug fixes and performance improvements

This is a small update that fixes many minor nuisances that got reported since the release of 3.0. It also includes a security update, so we recommend this update for everyone.

If you enjoy Zettlr, consider supporting us on Patreon or send a one-time donation via PayPal.

Changelog

GUI and Functionality

  • Monospaced elements such as inline code elements are now rendered in monospace
    font again
  • Fixed a bug preventing assigning colors and descriptions to tags in the tag
    manager
  • Magic Quotes detect forward and backward slashes (/ and \) as non-word
    characters, behind which a starting Magic Quote can begin
  • Zettlr now properly uses a proper filename extension on export even when using
    extensions
  • The generic text input context menu shows proper labels (#4655)
  • Improved the French translation
  • Improved the Japanese translation
  • Improved the Catalan translation
  • Fixed link previews for short notes
  • Updated the notification and menubar (Windows/Linux) icons to the new logo
  • Fixed a bug that would prevent changing the directory sorting order (#4654)
  • Fixed a bug that would sometimes cause the autocomplete pop-up not showing
    when editing an existing Zettelkasten link (#4653)
  • Fixed a bug that would sometimes cause the last active tab(s) to not be
    remembered correctly on launch
  • Improved calendar view layout
  • Fixed a visual bug that would make a distraction-free editor overlay even
    pop-overs
  • Fixed a small glitch that would prevent proper visual indented alignment of
    images when inside of list items
  • Replace the long "Open image externally" message with an icon on prerendered
    images and move it to the title; also make the message translatable

Under the Hood

  • Fixed the plainPandocReaderWriter utility function to properly extract the
    plain reader/writer in all possible configurations
  • Improved performance of the math equation parser
  • Improved performance of the footnote parser
  • Improved performance of the plain link parser
  • Renamed the Catalan translation file from ca-CA to ca-ES
  • Moved the notification provider to a utility function
  • Refactored Popover logic to use props instead of data for initialization to
    ensure the data is available upon component instantiation, making the logic
    less brittle
  • Refactored a hacky solution that would not remember the previous editor state
    when entering distraction free mode and led to various other issues and bugs
  • Update Electron to v25.8.1 to mitigate CVE-2023-4863

New Contributors

Zettlr - v3.0.1

Published by nathanlesage about 1 year ago

Bug fixes and performance improvements

This is a small update that fixes many minor nuisances that got reported since the release of 3.0. It also includes a security update, so we recommend this update for everyone.

If you enjoy Zettlr, consider supporting us on Patreon or send a one-time donation via PayPal.

Changelog

GUI and Functionality

  • Monospaced elements such as inline code elements are now rendered in monospace
    font again
  • Fixed a bug preventing assigning colors and descriptions to tags in the tag
    manager
  • Magic Quotes detect forward and backward slashes (/ and \) as non-word
    characters, behind which a starting Magic Quote can begin
  • Zettlr now properly uses a proper filename extension on export even when using
    extensions
  • The generic text input context menu shows proper labels (#4655)
  • Improved the French translation
  • Improved the Japanese translation
  • Improved the Catalan translation
  • Fixed link previews for short notes
  • Updated the notification and menubar (Windows/Linux) icons to the new logo
  • Fixed a bug that would prevent changing the directory sorting order (#4654)
  • Fixed a bug that would sometimes cause the autocomplete pop-up not showing
    when editing an existing Zettelkasten link (#4653)
  • Fixed a bug that would sometimes cause the last active tab(s) to not be
    remembered correctly on launch
  • Improved calendar view layout
  • Fixed a visual bug that would make a distraction-free editor overlay even
    pop-overs
  • Fixed a small glitch that would prevent proper visual indented alignment of
    images when inside of list items
  • Replace the long "Open image externally" message with an icon on prerendered
    images and move it to the title; also make the message translatable

Under the Hood

  • Fixed the plainPandocReaderWriter utility function to properly extract the
    plain reader/writer in all possible configurations
  • Improved performance of the math equation parser
  • Improved performance of the footnote parser
  • Improved performance of the plain link parser
  • Renamed the Catalan translation file from ca-CA to ca-ES
  • Moved the notification provider to a utility function
  • Refactored Popover logic to use props instead of data for initialization to
    ensure the data is available upon component instantiation, making the logic
    less brittle
  • Refactored a hacky solution that would not remember the previous editor state
    when entering distraction free mode and led to various other issues and bugs
  • Update Electron to v25.8.1 to mitigate CVE-2023-4863

New Contributors

Zettlr - Release v3.0.0

Published by github-actions[bot] about 1 year ago

New Release | Zettlr v3

Hello everybody! It is finally time — after more than a year of constant development and improvement, we are more than proud to finally be able to deliver you the next iteration of Zettlr. We have been extra careful to provide you in this version a bug-free and enjoyable writing experience that you will love. Many things have changed; way too many to quickly go through them, so as with every release, we welcome you to do two things before updating:

First, please read our accompanying blog post, in which we place this update into perspective and explain the reasoning behind certain changes to the application.

After you are done, immediately read the "READ THIS FIRST!" section of the changelog below. This is crucial this time around, which is why it's in all caps. Afterwards, we invite you to also read the rest of the changelog, which you should do anyway.

Are you satisfied with Zettlr?

Then please consider becoming a patron over at Patreon, or make a one-time payment via PayPal. These contributions help us pay the server bills and the occasional coffee for tired developers ;)

Changelog

READ THIS FIRST!

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

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

New Icons on Windows and Linux

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.

Split-Panes and Multiple Windows

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

  • You can open a new window by choosing the corresponding menu item in the
    Windows submenu, or by pressing Cmd/Ctrl+Shift+N.
  • You can now drag document tabs not just within the tab bar, but also onto the
    editor area. If you move a document tab to the borders of the editor, a
    shimmer will appear that indicates that you can split the editor to that side.
    If you drop the file on one of the four borders of the editor, this will split
    the corresponding editor in two along the specified direction (left, right,
    top, bottom) and also move the file into that new pane.
  • You can also move document tabs between multiple panes by simply dropping them
    in the center of an editor pane. As long as there's no shimmer, the file will
    be moved instead. You can also drop a file onto a tabbar of one of the
    editors, which will have the same effect (but it will be indicated with the
    same blue shimmer as when you are splitting an editor).
  • After you have closed the last file inside such a pane, it will automatically
    close itself. If the pane was part of a split, the other pane will then occupy
    the place of the now closed editor pane. To create the pane again, simply drag
    another file to the correct border of an existing editor pane.
  • You can resize the panes at will. Unlike the sidebar and file manager, we have
    not implemented any size limits, so with a little bit of care, you can create
    your unique mosaic of files.
  • Since we are now not limited to one active file and one set of open files per
    window, these notions have changed their meaning. Now, every editor pane has
    one set of open files and one active file. Each window also remembers which
    pane was last active so that global features (such as the sidebar) can show
    you information based on the most recently focused editor pane's active file.
  • Most contextual information (table of contents, list of references, etc.) will
    now update based on the most recently focused editor. In order to make those
    places show information relating to one of the open editors, simply click with
    your mouse inside to focus them.

New Defaults/Profile File System

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

  • Zettlr now understands the reader and writer properties of defaults files
  • It uses those properties to determine if a file can be used for importing or
    exporting, and displays the appropriate files in the relevant places for you
    to choose
  • You can now create new defaults files, rename existing ones, or remove them
  • When changing the writer or reader for such a file, this change will be
    recognized by Zettlr and be treated accordingly
  • This also means that Zettlr will from now on only ship with a minimum set of
    profiles; but any additional import/export formats can be created by you with
    just one click
  • Additionally, because of this, you are now able to export LaTeX files directly
    without running them through a Markdown interpreter first, allowing you to,
    e.g., create beamer slides or write plain TeX files within Zettlr
  • Furthermore, we have dropped our internal reveal.js exporter, since Pandoc
    supports everything we did out of the box (and better) than our exporter

Tag Manager Update

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

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

Splash Screen

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.

Migration Guide

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

Old defaults files

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

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

Reveal.js Presentations

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

---
theme: league
---

... the rest of the file

Supported theme values are:

  • 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.

GUI and Functionality

  • New Feature: You can now open multiple main windows, each with their own
    files loaded
  • New Feature: You can now arbitrarily split the editor area into multiple
    editor panes to keep open as many files at the same time as you wish
  • New Feature: After a long time, you can now again drag and drop entries in
    the table of contents in the sidebar to rearrange sections of your file
  • New Feature: Overhauled, improved, and streamlined the defaults file
    system used by the importer and exporter
  • New Feature: You can now pin tabs, which prevents them from being closed
  • New Feature: The editor will now check your Markdown for potential style
    issues (can be disabled in the preferences)
  • New Feature: In the combined filemanager mode, you can now see writing
    targets as a ring progress bar in the position of the file icon
  • New Feature: Zettlr can now automatically update internal links (Wiki/
    Zettelkasten style) if you rename a file
  • New Feature: When you hover over a link, you can now get a link preview
  • New Feature: Zettlr now features a LanguageTool integration. You can turn
    it on in the Spellchecker settings and even provide your LanguageTool username
    and an API key to unlock premium features
  • New Feature: You can now activate a statusbar that shows some context-
    specific information for each editor pane you have open; this statusbar also
    shows you information for code editor panels, e.g., in the assets manager
  • New Feature: Changing a certain set of configuration options will make
    Zettlr ask you whether you wish to restart the app for the changes to take
    effect
  • New Feature: While modifying import and export profiles, Zettlr will now
    check them for validity, and inform you of any potential errors
  • New Feature: You can now specify the Pandoc working directory in a file's
    frontmatter with the property pandoc_working_dir within the zettlr
    object
  • New Feature: Right-clicking on a file or directory now also gives you the
    option to copy the absolute file or folder path to the clipboard
  • New Feature: There is now a new menu item that allows you to conveniently
    clear the FSAL cache in case of some errors
  • New Feature: A new gutter to the left side of the editor will now display
    arrow buttons next to footnote reference bodies that will select the
    corresponding footnote reference up in the text upon click
  • New Feature: Add splash screen to indicate FSAL loading progress
  • Note preview tooltips now display a sanitized HTML version of the note's
    Markdown contents
  • New Feature: Both entire YAML documents (including both profiles and
    regular files) as well as YAML frontmatter sections in Markdown documents are
    now linted, providing a visual indication that a piece of YAML code contains
    syntax errors that prevents, e.g., Zettlr from detecting the file's title or
    Pandoc from properly reading the metadata of the document
  • Removed the "Get LaTeX" menu item since (hopefully) now the advice in the docs
    and in the tutorial are sufficient
  • Replaced the old Markdown-to-HTML and HTML-to-Markdown converter with more up-
    to-date modules. This should not change how pasting from HTML or copying as
    HTML work, but it could.
  • The TableEditor now has a clear data saving strategy: Whenever you change a
    table, you need to manually click the disk icon at the top of the table to
    apply all your changes to the document so that it can then be saved
  • Quicklook windows are gone completely now, since they can be more than
    replaced by the new split views and multiple windows
  • The windows now finally correctly remember their positions, fixing an old bug
  • Improved the link tooltip inside the editor; it will show faster now and is
    easier to access
  • Zettlr now recognizes Quarto Markdown files (*.qmd)
  • Code files (e.g. *.tex or *.json) now have line numbers enabled and the
    margins of the main editor removed by default
  • The sidebar tabs are now static at the top, meaning you don't have to scroll
    up within a long list just to see the tabbar
  • Lists (especially in the assets manager) now also allow you to remove entries
    with a right click
  • Fixed the Simple PDF, Textbundle, and Textpack exporters
  • Added new variables for snippets:
    • CURRENT_ID: Holds the currently assigned Zettelkasten ID to the file
    • FILENAME: Holds the filename of the current file
    • DIRECTORY: Holds the directory path for the current file
    • EXTENSION: Holds the file extension for the current file
  • Fixed inability to move the text cursor while renaming files in the file tree
  • Fixed ability to case-sensitively rename files
  • Fixed an incredibly dangerous bug that would lead to data loss if the app was
    being shut down before the statistics provider has been booted up; in which
    case the provider would overwrite sometimes several years worth of statistics
    with empty data
  • Added the ability to use mouse buttons 4 and 5 for forward/backward navigation
  • Fixed a visual glitch on Linux where in dark mode the active tab would have no
    colored bottom border
  • Added a third exporter option: You can now have Zettlr ask you everytime where
    it should store an exported file
  • In case of an error, the error dialog will now also present the Pandoc error
    code
  • Fixed a minor bug in toolbar toggle controls that necessitated clicking them
    twice to bring them into the "active" state (holds especially true for the
    sidebar toggle)
  • Fixed faulty updates on Windows: Now the downloaded file should be opened
    without any errors
  • Middle-mouse clicks on the collapse/uncollapse indicators in the file tree
    should no longer trigger scrolling behavior on Windows
  • File tree items now show their absolute path on mouse hover
  • Clicking a directory will now also uncollapse it without having to click on
    the arrow
  • The graph view now uses as labels YAML frontmatter titles, first headings
    level 1, or a filename without extension based on the preferences
  • Fixed a usability issue on macOS where if you wanted to select a BibTeX file
    for your citations you had to click through intransparent buttons before being
    able to; now you can immediately select both CSL JSON and BibTeX files
  • Parsed links will now show the correctly resolved link as titles
  • The file tree now properly cuts too long file and directory names, indicating
    these with an ellipsis, rather than simply cutting off the text mid-letter
  • Pressing Cmd/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.
  • The editor now recognizes Pandoc attribute syntax (e.g., {.unnumbered})
  • Added lua syntax highlighting support
  • Improved the tutorial to make use of the new split views
  • Citation keys in the autocomplete dropdown are now sorted by number of
    occurrences in the text
  • Fixed the readability mode color gradient (red -> purple -> blue -> green)
  • The "Save changes" dialog is now simpler and easier to understand
  • The main editor is finally properly styled and looks more natural to work with
  • Pre-rendered citations within Zettlr now respect the composite flag, meaning
    that Some sentence by @Author2015 renders as
    Some sentence by Author (2015) instead of Some sentence by (Author 2015)
  • Tags now include a measure of informativeness or uniqueness, called Inverse
    Document Frequency (IDF); the higher this value the more informative a tag is.
    This number is shown in the tag manager, and tags are ordered by this in some
    places
  • The file autocomplete now also includes links to not-yet-existing files. This
    enables you to define links to files that you may want to create at another
    point in time and ensure that all files that link to this file include the
    correct link
  • The editor now uses the built-in search panel from CodeMirror
  • Added support for COBOL syntax highlighting
  • Zettlr can now recognize changes to the Zettlr directory files (where things
    such as sorting and project settings are stored), which means that, if you
    have Zettlr open on two computers and synchronize your files, changes you make
    in one app should be picked up by the other
  • Zettlr can now detect changes to the status of a directory as a git repository
    during runtime
  • The "Characters without spaces" info is no longer present in the toolbar
    counter widget; the "characters" count now represents always the count without
    spaces across the app
  • Mermaid charts now dynamically switch themes between default and dark
    depending on the app's display
  • In various parts of the app, URLs will now be displayed in a shortened format
    if they are long and the space is limited
  • If you make use of glob-patterns to filter which files will be exported during
    project exports, you will now get a visible error message if your glob-
    patterns have removed all files so that none remain to be exported
  • Clicking on the "Project Properties" button in a directory properties popup
    with activated project functionality now closes the popup
  • Redid the emphasis renderer to work on the SyntaxTree directly, which makes
    the emphasis render more properly and now works much faster than before
  • Users on macOS can now disable window vibrancy
  • Non-existing citekeys in the document no longer cause the list of references
    to be empty
  • Dark mode is now set to system by default for all operating systems, not
    just macOS/Windows
  • A new "match whole word" setting allows to control whether AutoCorrect can
    also correct partial words
  • The tutorial is now available in Dutch as well.
  • The combined file tree is now more verbose when it comes to icons: Folders
    now always have icons to indicate that they're folders (can be overridden with
    a project icon or a custom icon), and Markdown files have a more distinct icon

Under the Hood

  • Refactored the main editor component further
  • Refactored the Sidebar panels into their own respective components
  • Upgrade Electron to 25.x.x
  • Upgrade Pandoc to 3.1.6.2
  • Pandoc is now also available natively for Apple Silicon (darwin arm64)
  • Upgrade Chart.js to 4.x.x
  • Upgrade CodeMirror to version 6
  • Upgrade to Yarn v2
  • Exchange electron-devtools-installer with electron-devtools-assembler, as
    the former appears to be unmaintained
  • Moved from Electron Builder to Electron Forge for building Debian and RPM-
    packages, since Electron Builder seems to produce a few errors which Forge
    doesn't
  • Switch from deprecated @clr/icons to @cds/core
  • Pandoc logs are now logged in every case
  • Improve the display and functionality of log messages
  • Switched the configuration file management for the different service providers
    from the previously very bodged methods to the unified and new
    PersistentDataContainer
  • Changed the default ports for the logging server to 9001 to avoid collisions
    with PHP fpm installations on development systems
  • The yaml frontmatter title property is now its own property on file
    descriptors to centralize the extraction logic and save some code on the
    renderer's side
  • Extracted the ID extraction functionality to its own utility function
  • Fixed a bug that would incorrectly detect Python comments or C++ pragmas as
    tags
  • Removed all Meta descriptors; now all descriptors are unified across main
    and renderer processes
  • Documents are now no longer managed by the editor leafs. Instead, they are
    managed by the document provider
  • Completely removed all instances of hash; the FSAL cache now is being called
    with absolute file paths. Hashed paths are only used to determine the shard.
  • Exchanged 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 dictionaries
  • Fixed the build pipeline so that native Node modules are now code-signed and
    work on macOS and Windows, meaning that chokidar should not need to fall
    back to CPU intensive polling anymore
  • Sandbox print preview window iframe elements
  • The update check will no longer block the boot cycle, making start up times
    fast even in degraded Wifi contexts where there is a connection, but extremely
    slow
  • Zettlr now attempts to extract the version strings for supported external
    programs (such as Pandoc, Git, and Quarto) and displays them in the About panel
  • Exchanged Zettlr Translate system with gettext
  • Removed the translation provider, since its remaining functionality to list
    available dictionary files and translations has now been moved to the main
    command hub
  • Removed the Zettlr class; the last remnant of the old, class-based system
  • Remove deprecated modules svg-inline-loader, raw-loader, and file-loader
Zettlr - Release v3.0.0-beta.8

Published by github-actions[bot] about 1 year ago

Debian Installer Issues | Project Export Settings

This almost final beta for Zettlr 3.0 fixes a bunch of issues users were experiencing with the Debian installers. Additionally, we fixed the project export format selection, which unfortunately broke during the last beta.

Full Changelog: https://github.com/Zettlr/Zettlr/compare/v3.0.0-beta.7...v3.0.0-beta.8

Zettlr - Release v3.0.0-beta.7

Published by github-actions[bot] about 1 year ago

Custom Commands | Better WYSIWYG | Quality of Life

This release contains a few features and enhancements and another set of bug fixes. As always, the comprehensive list of bug fixes can be found in our changelog.

Most notably, this beta …

  • fixes an issue with persisting project settings
  • fixes further things regarding the citation engine
  • improves the WYSIWYG mode
  • allows to match whole words with AutoCorrect
  • adds the ability to define custom commands for your exports
  • better layouting
  • some additional bug fixes

New Contributors

All Changes since last version: https://github.com/Zettlr/Zettlr/compare/v3.0.0-beta.6...v3.0.0-beta.7

Zettlr - Release v3.0.0-beta.6

Published by github-actions[bot] over 1 year ago

Fixes in the Citation Engine, Exports, and Projects | Quality of Life Improvements

This beta release fixes many small nuisances. Most notably, it fixes:

  • the citation engine (better handling of file-specific libraries, better rendering, better autocompletes)
  • projects (handling of settings files, glob pattern application)
  • footnotes (better insertion, editing, and display)
  • exports (Simple PDF, Textbundle, and Textpack now work as expected)
  • opening of Zotero attachments
  • Update of all dependencies
  • Update of the Russian and Catalan translation
  • There is now an easy menu item allowing you to clear the FSAL cache should that be necessary

New Contributors

Full Changelog: https://github.com/Zettlr/Zettlr/blob/develop/CHANGELOG.md

Zettlr - Release v3.0.0-beta.5

Published by github-actions[bot] over 1 year ago

Layout Fixes | Tag detection | Autocorrect improvements

This update fixes a few more issues to the last beta and is mainly focused on layouting issues, tag detection, and autocorrect. It also includes an updated Taiwanese translation.

Note: If this is the very first beta you are switching to since 2.3, you may want to read the "Upcoming" section in our Changelog first.

What's Changed

New Contributors

Full Changelog: https://github.com/Zettlr/Zettlr/compare/v3.0.0-beta.4...v3.0.0-beta.5

Zettlr - Release v3.0.0-beta.4

Published by github-actions[bot] over 1 year ago

Performance Improvements | Bug Fixes

This next beta release for the upcoming 3.0 release mainly includes small improvements that further increase stability of the release. Most notable changes are:

  • Improved typing performance that has dropped in the last beta
  • Improved startup performance due to a bug in the FSAL subsystem cache
  • Fixed a few issues with the Markdown parser
  • Fixed a bug that could lead to corrupted layouts when opening and closing editor panes
  • Added novel Windows/Linux icons
  • Re-enabled clicking on plain links in the assets manager
  • Improved plain link colors (most notably in the changelog view)
  • Improved the RevealJS profile to match Pandoc 3.x options
  • Improve Portuguese (Brazil) translation and the French translation of the tutorial

What's Changed

New Contributors

Full Changelog: https://github.com/Zettlr/Zettlr/compare/v3.0.0-beta.3...v3.0.0-beta.4

Zettlr - Release v3.0.0-beta.3

Published by github-actions[bot] over 1 year ago

Stability and Performance Improvements

This fourth beta ships with a large amount of stability and performance improvements. This means that most changes have happened under the hood and should only be noticeable by you in terms of better response, better behavior, and smoother experience. Notably, the following changes have been made:

  • Upgrade the bundled Pandoc to version 3
  • Improvements to the status bar
  • The tag suggestions are now gone from the tag cloud
  • Improvements to the new Markdown AST parser
  • Re-enabled in-place editing of footnotes
  • Re-enabled minimized starting behavior
  • Better window management
  • Citation databases now properly reload on change
  • Copying and pasting has been improved
  • Upon changing certain settings, Zettlr will now automatically offer to restart
  • Improved a race condition on document save that could lead to data loss
  • Fixed the word and character counter
  • The FSAL file parser now utilizes the Markdown parser, ensuring that the detected metadata matches what the editor shows you

What's Changed

New Contributors

Full Changelog: https://github.com/Zettlr/Zettlr/compare/v3.0.0-beta.2...v3.0.0-beta.3

Zettlr - Release v3.0.0-beta.2

Published by github-actions[bot] over 1 year ago

Bug Fixes | Native Modules Support | No Windows ARM

This next beta again ships with a set of bug fixes. Here's the shortlist of what's changed since the last beta:

  • Native modules are now correctly compiled for the right architecture, so no more issues with wrong architecture crashes
  • This also means, however, that we cannot currently ship Windows ARM builds, as those have been consistently failing. We are on it, but cannot guarantee to maintain Windows ARM support for now.
  • The editor search now uses the build-in panel. It's larger than what Zettlr had previously, but will work much better than it.
  • LanguageTool authentification with a Premium plan should now work
  • Updated translations for French and Russian
  • Document tabs are now deduplicated, i.e. if you have two files with the same name open, Zettlr will show you the containing directory name as well
  • Unified the Markdown-to-HTML transpilation. This means that now copying and pasting "with style" (a.k.a. from and to HTML) should give you a more consistent experience

Changelog

READ THIS FIRST!

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

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

Split-Panes and Multiple Windows

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

  • You can open a new window by choosing the corresponding menu item in the
    Windows submenu, or by pressing Cmd/Ctrl+Shift+N.
  • You can now drag document tabs not just within the tab bar, but also onto the
    editor area. If you move a document tab to the borders of the editor, a
    shimmer will appear that indicates that you can split the editor to that side.
    If you drop the file on one of the four borders of the editor, this will split
    the corresponding editor in two along the specified direction (left, right,
    top, bottom) and also move the file into that new pane.
  • You can also move document tabs between multiple panes by simply dropping them
    in the center of an editor pane. As long as there's no shimmer, the file will
    be moved instead. You can also drop a file onto a tabbar of one of the
    editors, which will have the same effect (but it will be indicated with the
    same blue shimmer as when you are splitting an editor).
  • After you have closed the last file inside such a pane, it will automatically
    close itself. If the pane was part of a split, the other pane will then occupy
    the place of the now closed editor pane. To create the pane again, simply drag
    another file to the correct border of an existing editor pane.
  • You can resize the panes at will. Unlike the sidebar and file manager, we have
    not implemented any size limits, so with a little bit of care, you can create
    your unique mosaic of files.
  • Since we are now not limited to one active file and one set of open files per
    window, these notions have changed their meaning. Now, every editor pane has
    one set of open files and one active file. Each window also remembers which
    pane was last active so that global features (such as the sidebar) can show
    you information based on the most recently focused editor pane's active file.
  • Most contextual information (table of contents, list of references, etc.) will
    now update based on the most recently focused editor. In order to make those
    places show information relating to one of the open editors, simply click with
    your mouse inside to focus them.

New Defaults/Profile File System

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

  • Zettlr now understands the reader and writer properties of defaults files
  • It uses those properties to determine if a file can be used for importing or
    exporting, and displays the appropriate files in the relevant places for you
    to choose
  • You can now create new defaults files, rename existing ones, or remove them
  • When changing the writer or reader for such a file, this change will be
    recognized by Zettlr and be treated accordingly
  • This also means that Zettlr will from now on only ship with a minimum set of
    profiles; but any additional import/export formats can be created by you with
    just one click
  • Additionally, because of this, you are now able to export LaTeX files directly
    without running them through a Markdown interpreter first, allowing you to,
    e.g., create beamer slides or write plain TeX files within Zettlr
  • Furthermore, we have dropped our internal reveal.js exporter, since Pandoc
    supports everything we did out of the box (and better) than our exporter

Tag Manager Update

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

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

Migration Guide

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

Old defaults files

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

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

Reveal.js Presentations

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

---
theme: league
---

... the rest of the file

Supported theme values are:

  • 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.

GUI and Functionality

  • New Feature: You can now open multiple main windows, each with their own
    files loaded
  • New Feature: You can now arbitrarily split the editor area into multiple
    editor panes to keep open as many files at the same time as you wish
  • New Feature: After a long time, you can now again drag and drop entries in
    the table of contents in the sidebar to rearrange sections of your file
  • New Feature: Overhauled, improved, and streamlined the defaults file
    system used by the importer and exporter
  • New Feature: You can now pin tabs, which prevents them from being closed
  • New Feature: The editor will now check your Markdown for potential style
    issues (can be disabled in the preferences)
  • New Feature: In the combined filemanager mode, you can now see writing
    targets as a ring progress bar in the position of the file icon
  • New Feature: Zettlr can now automatically update internal links (Wiki/
    Zettelkasten style) if you rename a file
  • New Feature: When you hover over a link, you can now get a link preview
  • New Feature: Zettlr now features a LanguageTool integration. You can turn
    it on in the Spellchecker settings and even provide your LanguageTool username
    and an API key to unlock premium features
  • New Feature: You can now activate a statusbar that shows some context-
    specific information for each editor pane you have open
  • Replaced the old Markdown-to-HTML and HTML-to-Markdown converter with more up-
    to-date modules. This should not change how pasting from HTML or copying as
    HTML work, but it could.
  • The TableEditor now has a clear data saving strategy: Whenever you change a
    table, you need to manually click the disk icon at the top of the table to
    apply all your changes to the document so that it can then be saved
  • Quicklook windows are gone completely now, since they can be more than
    replaced by the new split views and multiple windows
  • The windows now finally correctly remember their positions, fixing an old bug
  • Improved the link tooltip inside the editor; it will show faster now and is
    easier to access
  • Zettlr now recognizes Quarto Markdown files (*.qmd)
  • Code files (e.g. *.tex or *.json) now have line numbers enabled and the
    margins of the main editor removed by default
  • The sidebar tabs are now static at the top, meaning you don't have to scroll
    up within a long list just to see the tabbar
  • Lists (especially in the assets manager) now also allow you to remove entries
    with a right click
  • Added new variables for snippets:
    • CURRENT_ID: Holds the currently assigned Zettelkasten ID to the file
    • FILENAME: Holds the filename of the current file
    • DIRECTORY: Holds the directory path for the current file
    • EXTENSION: Holds the file extension for the current file
  • Fixed inability to move the text cursor while renaming files in the file tree
  • Fixed an incredibly dangerous bug that would lead to data loss if the app was
    being shut down before the statistics provider has been booted up; in which
    case the provider would overwrite sometimes several years worth of statistics
    with empty data
  • Added the ability to use mouse buttons 4 and 5 for forward/backward navigation
  • Fixed a visual glitch on Linux where in dark mode the active tab would have no
    colored bottom border
  • Added a third exporter option: You can now have Zettlr ask you everytime where
    it should store an exported file
  • In case of an error, the error dialog will now also present the Pandoc error
    code
  • Fixed a minor bug in toolbar toggle controls that necessitated clicking them
    twice to bring them into the "active" state (holds especially true for the
    sidebar toggle)
  • Fixed faulty updates on Windows: Now the downloaded file should be opened
    without any errors
  • Middle-mouse clicks on the collapse/uncollapse indicators in the file tree
    should no longer trigger scrolling behavior on Windows
  • File tree items now show their absolute path on mouse hover
  • Clicking a directory will now also uncollapse it without having to click on
    the arrow
  • The graph view now uses as labels YAML frontmatter titles, first headings
    level 1, or a filename without extension based on the preferences
  • Fixed a usability issue on macOS where if you wanted to select a BibTeX file
    for your citations you had to click through intransparent buttons before being
    able to; now you can immediately select both CSL JSON and BibTeX files
  • Parsed links will now show the correctly resolved link as titles
  • The file tree now properly cuts too long file and directory names, indicating
    these with an ellipsis, rather than simply cutting off the text mid-letter
  • Pressing Cmd/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.
  • The editor now recognizes Pandoc attribute syntax (e.g., {.unnumbered})
  • Added lua syntax highlighting support
  • Improved the tutorial to make use of the new split views
  • Citation keys in the autocomplete dropdown are now sorted by number of
    occurrences in the text
  • Fixed the readability mode color gradient (red -> purple -> blue -> green)
  • The "Save changes" dialog is now simpler and easier to understand
  • The main editor is finally properly styled and looks more natural to work with
  • Pre-rendered citations within Zettlr now respect the composite flag, meaning
    that Some sentence by @Author2015 renders as
    Some sentence by Author (2015) instead of Some sentence by (Author 2015)
  • Tags now include a measure of informativeness or uniqueness, called Inverse
    Document Frequency (IDF); the higher this value the more informative a tag is.
    This number is shown in the tag manager, and tags are ordered by this in some
    places
  • The file autocomplete now also includes links to not-yet-existing files. This
    enables you to define links to files that you may want to create at another
    point in time and ensure that all files that link to this file include the
    correct link
  • The editor now uses the built-in search panel from CodeMirror
  • Added support for COBOL syntax highlighting

Under the Hood

  • Refactored the main editor component further
  • Refactored the Sidebar panels into their own respective components
  • Upgrade Electron to 22.x.x
  • Upgrade Pandoc to 2.19.2
  • Upgrade Chart.js to 4.x.x
  • Upgrade CodeMirror to version 6
  • Upgrade to Yarn v2
  • Switch from deprecated @clr/icons to @cds/core
  • Pandoc logs are now logged in every case
  • Improve the display and functionality of log messages
  • Switched the configuration file management for the different service providers
    from the previously very bodged methods to the unified and new
    PersistentDataContainer
  • Changed the default ports for the logging server to 9001 to avoid collisions
    with PHP fpm installations on development systems
  • The yaml frontmatter title property is now its own property on file
    descriptors to centralize the extraction logic and save some code on the
    renderer's side
  • Extracted the ID extraction functionality to its own utility function
  • Fixed a bug that would incorrectly detect Python comments or C++ pragmas as
    tags
  • Removed all Meta descriptors; now all descriptors are unified across main
    and renderer processes
  • Documents are now no longer managed by the editor leafs. Instead, they are
    managed by the document provider
  • Completely removed all instances of hash; the FSAL cache now is being called
    with absolute file paths. Hashed paths are only used to determine the shard.
  • Exchanged 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 dictionaries
  • Fixed the build pipeline so that native Node modules are now code-signed and
    work on macOS and Windows, meaning that chokidar should not need to fall
    back to CPU intensive polling anymore
  • Sandbox print preview window iframe elements
  • The update check will no longer block the boot cycle, making start up times
    fast even in degraded Wifi contexts where there is a connection, but extremely
    slow
  • Zettlr now attempts to extract the version strings for supported external
    programs (such as Pandoc, Git, and Quarto) and displays them in the About panel
  • Exchanged Zettlr Translate system with gettext
  • Removed the translation provider, since its remaining functionality to list
    available dictionary files and translations has now been moved to the main
    command hub
  • Removed the Zettlr class; the last remnant of the old, class-based system
  • Remove deprecated modules svg-inline-loader, raw-loader, and file-loader