github Zettlr/Zettlr v3.1.0-beta.2
Release v3.1.0-beta.2

latest release: v3.1.0-beta.3
pre-release13 days 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
<mail@example.com>. Note that the protocol (https://) is required, so
<www.google.com> will not work.

This changes brings Zettlr's link functionality much more into alignment with
other editors as well, since this is the way that many other applications handle
links as well.

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: v3.0.5...v3.1.0-beta.2

Don't miss a new Zettlr release

NewReleases is sending notifications on new releases.