Releases: Zettlr/Zettlr
Release v4.5.0
Task Indicator | Custom CSS Improvements | Bug fixes and performance improvements
This update primarily brings two new features to the table: A visual task indicator for long-running tasks, and great improvements in the experience for Custom CSS users.
First, our new long-running task indicator gives you a better overview and insight into any task that you perform in Zettlr that can take long, such as exporting projects to PDF. Now, whenever you start a task that might take a while, Zettlr will show an indicator in the toolbar. It encodes several pieces of information, such as how many tasks are running, how many have failed, and how many were successful. Click the indicator to see more details for each task, including an explicit run time. Once you "clear" the tasks, the icon will disappear again until you start new tasks. If you have hardware acceleration disabled, Zettlr will only show an icon, but if you keep it enabled, you will see an animation.
Second, we have cleaned up the editor CSS. More specifically, the editor themes now make use of CSS variables to style most of their content. This can greatly reduce the complexity for those of you who want to use custom CSS. However, this also means that some custom CSS may break during this update, so make sure you adjust any CSS after updating.
Besides this, this update fixes a few additional bugs, most visibly/notably missing icons in the status bar. See the changelog below for all changes.
Do you enjoy Zettlr? With the recent spikes in SSD and RAM costs, our server costs have skyrocketed. Consider donating to help us pay for the development costs. You can donate monthly on Patreon or once via PayPal. Additionally, you can directly sponsor Hendrik Erz on GitHub or send a tip on Ko-Fi. Thanks for your support!
Changelog
GUI and Functionality
- Feature: Long-running background tasks are now visually indicated with a
toolbar icon. This allows users to check on longer-running tasks such as
project exports or the re-indexing of new workspaces and observe the progress
as it happens. - Add HCL/Terraform fenced code block support (#6302).
- Fixed Mermaid Chart labels not showing up (#6313).
- Fixed icons in the statusbar not working.
- Update Spanish (
es-ES) translations (#6320).
Under the Hood
- Updated Electron to
v41.3.0. - Update
vue-virtual-scrollertov3.0.0. - Fixed an issue where the config provider would not emit the old version
correctly (context: #6311). - Breaking: Refactored the editor themes (#6229). Now styling the app with
Custom CSS is easier and should work more straight forward, since there are
many CSS variables that you can peruse to adjust groups of elements at once.
Note that this change might break your Custom CSS. Make sure to check
anything after setup, and adjust it according to your liking. - Centralized DOMPurify functionality and default configuration in a new utility
function, that also allows icons usingcds-icon. - Switch from
ts-nodetotsxfor running unit tests. - Explicitly declare Zettlr as a
CommonJSproject. - Change the
Object.create(null)contraption to hold BibTeX attachments to a
regular object to simplify the structure and unit tests.
New Contributors
- @a-goodarzi made their first contribution in #6302
- @lridalc made their first contribution in #6320
Full Changelog: v4.4.0...v4.5.0
Release v4.4.0
Security Fixes | File Manager Improvements | Bug Fixes
This update improves primarily on two fronts: the file manager and how you can navigate your files, and the security model of the app.
First, this update brings improvements in the file manager, making it easier for you to navigate all your files and folders. This includes a few bug fixes that improve the behavior of the file manager. For example, opening up folders of containing files now works more reliably, and the file manager once again scrolls any newly activated file into view.
Second, we have heavily increased the safety when using the app. We now disallow more potentially dangerous code from executing and have overhauled the security model of the app to better reflect how users interact with the app. As always, you can view the full changelog below.
Do you enjoy Zettlr? With the recent spikes in SSD and RAM costs, our server costs have skyrocketed. Consider donating to help us pay for the development costs. You can donate monthly on Patreon or once via PayPal. Additionally, you can directly sponsor Hendrik Erz on GitHub or send a tip on Ko-Fi. Thanks for your support!
Changelog
GUI and Functionality
- Feature: The app now remembers if the file manager was open or closed
across restarts and applies this setting on each start (#3679). - Feature: The names of open folders in the file manager tree will now
remain sticked to the top of the file manager as you scroll through its list
of children. This is especially helpful in the "combined" file manager mode
with folders containing many files and subfolders (such as reading notes or
Zettelkasten folders). - Add strikethrough to the Markdown AST parser (#6263).
- Fixed Markdown-to-HTML output to generate more valid HTML. This makes
comparisons with DOM-inserted HTML deterministic and should reduce the amount
of updates especially for complex widgets such as tables by a lot. - Reduced amount of image updates in the editor. This may increase performance
especially for long documents with many images. - Fixed containing directories not uncollapsing when a containing file was made
active. - Upon switching between files, the file tree now consistently scrolls to the
affected file, making working with larger workspaces easier. - The scroll-behavior for scrolling files into view has changed from instant to
smooth. - Fixed a small bug that could throw off switching between different file
manager modes. - Fixed the cursor scroll margin again. This means that, after years of it not
working, as you type there will now be some margin towards the top or bottom
of the editor window, preventing the cursor to "stick" to the edge of the
editor. - Update
pt-PTtranslations (#6282). - Fixed an issue that would lead to unexpected navigation behavior across the
file manager (#4329). - Fixed an issue where the file list would follow slightly different filtering
rules than the file tree due to different function implementations. - Harmonized font usage to System fonts across the app (#5125).
- Improve Mermaid chart error reporting (#6291).
Under the Hood
- Switch from
sanitize-htmltoDOMPurifyfor HTML sanitization, since the
latter has much, much less issues with various types of exotic XML-type tags
such as MathML. - Updated Electron to
v41.1.1. - Security: Disallow any and all inline-JavaScript across all browser windows.
- Security: Enforce loading remote resources using HTTPS.
- Security: Generously spread HTML sanitization across the application. The
following changes have been made:- Moved HTML sanitization to the edge (directly to the injection sinks).
- Removed HTML sanitization from the translation helpers. The reason is that
DOMPurify does not work out of the box in the main process, so we also
removed the sanitization from the renderer-translation helper. However, this
is safe since we do not insert the translations into HTML injection sinks.
Also, this way we can apply DOM sanitization at the edge, and no longer at
the beginning of the chain. - This also means that HTML is no longer allowed in translation strings.
- Armed the
v-html-rule again, and removed allv-htmldirectives, and in
instances where this was not possible, explicitly disable this with a
reason.
Full Changelog: v4.3.1...v4.4.0
Release v4.3.1
Bug Fixes and Performance Updates
For this small update, we've fetched the polishing cloth and improved things here and there, but nothing big has happened. The one notable fix is that Zettlr now properly escapes path names passed to shell commands during exports. In very specific circumstances, it was possible to make Zettlr execute unexpected commands during exports. This update improves this behavior so that it is no longer possible.
Do you enjoy Zettlr? With the recent spikes in SSD and RAM costs, our server costs have skyrocketed. Consider donating to help us pay for the development costs. You can donate monthly on Patreon or once via PayPal. Additionally, you can directly sponsor Hendrik Erz on GitHub or send a tip on Ko-Fi. Thanks for your support!
Changelog
GUI and Functionality
Under the Hood
- Escape file and directory paths passed to
runShellCommand. - Update Pandoc to
v3.9.0.2. - Updated some dependencies.
- Removed duplicate FSAL descriptor fetching.
- Improved resiliency of the descriptor fetching; now if a renderer requests an
array of paths, the FSAL does not fail. Instead, it simply omits those
descriptors from the return array and logs an error (context: #6272).
Release v4.3.0
New File Manager Controls | QoL Updates | Bug Fixes | Security Fixes
This release brings many great new things to Zettlr. Besides the obvious batch of bug fixes, this update focuses on improved citation quality, and findability of your files in the file manager. Specifically, this update improves the file manager by allowing you to sort your workspaces and add colors to your folders. You can also close all standalone files or workspaces with a few clicks, if you so wish. In terms of citation support, Zettlr now shows a tooltip after some delay if you hover over a citation with your mouse, showing you the generated bibliography for those items to make sure you actually cite the correct work.
Besides that, you now get CSS autocompletion in the Custom CSS editor. The boot sequence of Zettlr is now much more resilient towards missing files, folders, or weird permission errors, so you should have a much better experience in volatile contexts. We also fixed a few potential security issues where unsanitized HTML was rendered in the main window that could possibly be abused by malicious actors.
To see what exactly has changed in detail, please review the changelog below.
Do you enjoy Zettlr? Consider donating to help us pay for the development costs. With the recent spikes in SSD and RAM costs, our server costs have skyrocketed. You can donate monthly on Patreon or once via PayPal. Additionally, you can directly sponsor Hendrik Erz on GitHub or send a tip on Ko-Fi. Thanks for your support!
Changelog
GUI and Functionality
- Feature: Added a citation tooltip. When hovering over a citation cluster
in your documents with your mouse, this will generate a small bibliography of
just the items contained in the citation cluster and display it using the
tooltip. This allows you to quickly check which item you cited exactly. - Feature: The Custom CSS editor now offers autocomplete assistance (#6226).
- Feature: Added dedicated
mathcode block syntax highlighting to add
MathTeX to files without rendering (#6226). - Feature: You can now close all standalone/root files as well as all
workspaces from a new file manager context menu that opens via right-click
onto the section headers or with a click on the corresponding button. In
addition, you can collapse all folders with a simple click (#6209). - Feature: You can now manually change the sorting of your workspaces. By
default, Zettlr automatically sorts your workspaces by name. However,
sometimes you may wish to change the ordering. To do so, use the new file
manager context menu and select "Sort workspaces…". This will open a popover
that allows you to change the workspace ordering using drag and drop. As soon
as you overwrite the sort order manually, this will disable automatic sorting
from here on. Newly opened workspaces will simply be appended at the end of
the list of open workspaces. To re-enable automatic sorting of your
workspaces, use the new setting in the file manager preferences, or click the
corresponding button in the sort popover. - Feature: You can now assign custom accent colors to folders across your
workspaces to make them easier identifiable. This aids the existing custom
icons that you can already use to differentiate folders. You can assign one of
seven built-in colors to every directory: blue, purple, rose, red, orange,
yellow, and green. For friends of Custom CSS: These are specified as CSS
variables so that you can adjust them if you wish. The pattern is:
--accent-<color>. - Fixed potential crashes when standalone/root files or workspaces have been
removed while Zettlr was closed (#6223). Recognizes PR #6225 by @SergioChan
who started this effort. Previously, the re-indexing process when Zettlr boots
would not check for the existence of open paths, causing crashes. - Show citation menu when right-clicking on a non-rendered citation (#6213).
- Updated
ja-JPtranslations (#6227; #6230; #6249). - Updated
zh-CNtranslations (#6243). - Fixed an issue with improper HTML sanitization in the file preview tooltip,
which would escape unusual HTML (such as KaTeX equations) instead of allowing
it (#6221). - Fixed an issue that might prevent the correct app icon to show up for the
AppImage release of Zettlr. - Re-enabled the broken System Verilog syntax highlighting. However, the code
highlighting uses the Verilog parser, since no dedicated System Verilog parser
is available, so there may be inconsistencies in highlighting. - Allow more emojis in tags (#6202).
- Fix crashes when directories aren't accessible by the app (#6172).
- Improve autocorrect handling. Now, users can undo an unwanted replacement
(Ctrl/Cmd+Z) without losing the inserted space or new line (#6210). - Made the app more resilient in light of missing workspaces or root files. Now,
crashes on startup due to missing standalone files or workspaces should be
much less frequent and the app should be more stable. - Fixed a regression that would overlay the default menu on top of the citation
menu on non-macOS clients, rendering it unusable (#6213). - Fixed an issue that would make code blocks exceed the size of the preview
window in some instances. - Fix footnote preview styling in footnote tooltips.
- Fixed custom export profiles not working during project exports (#6235).
- Fixed text color of disabled menu items on Linux and Windows.
- Fixed "Find in file" menu item (#6234).
- Improve file name extension handling (#6194).
Under the Hood
- The
md2htmlutility function now has a new flag,sanitizeHTMLthat you can
use to make the function properly sanitize potentially harmful HTML in
situations where HTML shall be inserted into the DOM without endangering the
display of special elements such as equations. - The app now sanitizes HTML in more cases where it is inserted into the DOM.
This preemptively prevents attacks using malicious HTML in the table of
contents, the print window, and footnote tooltip rendering. Note that this
does not apply when copying Markdown as HTML, since in this case we expect the
user wishes to retain every bit of HTML (also, in that case, they usually have
seen the code, making possible attacks unlikely). - Updated various code syntax highlighting parsers from the legacy mode to the
corresponding dedicated parsers (#6226). - Since
JSON.stringifyis sensitive to object insertion order, we switched the
detection logic whether directory settings are all on default to
assert.deepStrictEqual. This means that we now compare the values of the
properties instead of their ordering. - Harden the TableEditor by properly sanitizing possibly unsafe HTML using the
newsanitizeHTMLoption on thenodeToHTMLfunction (viamd2html).
New Contributors
Full Changelog: v4.2.1...v4.3.0
Release v4.2.1
Bug Fixes | Updated Dependencies
This update only brings minor things to the table. Most notably, this update fixes the logic of Zettlr to handle extensions to Pandoc readers and writers. Previously, extensions were always removed from readers and writers whenever you imported or exported a file. Now, if you specify an extension, this will work again. This means, previously, if you specified a writer in your defaults files disabling the “smart” extension (e.g., writer: docx-smart), Zettlr would strip the extension away. Now, these extensions are retained correctly on each import or export.
In addition, this update fixes a few oddities after the Zotero 8 update, and updates all dependencies to the newest available versions.
Changelog
Fixed Pandoc Extension Parsing
If you ever used Pandoc extensions
with Zettlr, you may have wondered why they sometimes appeared not to work.
After a report by a user, we have found out that Zettlr never actually parsed
these correctly. We decided to make this a bit more visible in the changelog
since your exports may have been broken without you realizing. This way you can
verify any of your exports.
GUI and Functionality
- Fix indenting and tab insertion behavior (#6196).
- Fix Zettlr not correctly parsing Pandoc extensions (#6212).
- Improved error handling when opening PDF attachments.
- Make Zettlr more resilient when CSL JSON library files are malformed.
Under the Hood
- Add unit tests for
parseReaderWriterutility function. - Upgrade Electron to
v40.8.0. - Upgrade Pandoc to
v3.9.0. - Upgrade ESLint to
v10.0.3. - Properly parse and check the returned results from the BetterBibTex JSON RPC
API when querying PDF attachments. - Zettlr no longer assumes CSL JSON files are well-formed. Instead, each item is
checked for the presence of required keys, and is skipped if there is an
issue. This ensures library files can also be loaded partially.
Full Changelog: v4.2.0...v4.2.1
Release v4.2.0
Preview Mode Updates | Bug Fixes | Quality of Life Improvements
This update brings three distinct sets of improvements. First, it contains a series of new features for the preview mode, which make blockquotes now render with a vertical bar instead of italicized font. In addition, Pandoc divs and spans are now pre-rendered and apply any custom styling you have applied, if applicable.
Second, it contains a bunch of minor bug fixes and improvements of some annoying behavior so that the app works better for everyone. This also includes some big improvements of the Brazilian, Japanese, and German translations.
Last but not least, this update includes a fix for a bug that had been introduced by the recent Zotero 8 update. Some users were reporting that, after that update, Zettlr would stop suggesting citations, and that other parts of the citation pipeline would randomly fail. This update provides a fix to ensure that your citations should mostly work, even if the output from Zotero contains some minor problems.
Do you enjoy Zettlr? Consider donating to help us pay for the development costs. You can donate monthly on Patreon or once via PayPal. Additionally, you can directly sponsor Hendrik Erz on GitHub or send a tip on Ko-Fi. Thanks for your support!
Changelog
GUI and Functionality
- Feature: New utilities for working with native Pandoc Divs and spans
(#6032):- Added a new setting to switch between native highlights (
==mark==) and
using spans for this ([mark]{.highlight}). - Added a new toolbar button to insert divs and spans.
- Added new buttons to the formatting toolbar to insert underlined,
strikethrough, and highlighted spans.
- Added a new setting to switch between native highlights (
- Feature: Blockquotes are now rendered with a vertical bar (#6122).
- Feature: Users can now opt to display hidden files and folders
("dot-files") in the sidebar and/or filemanager in the settings (#6041). - Feature: Custom Pandoc
divs are now pre-rendered depending on the
corresponding setting (#6121). This allows you to preview any custom styling
you have applied to them within the editor. - Feature: You can now move document tabs to the start or end of the
tablist from the context menu (#6130). - Added an error message that explains to users that an import profile is needed
if they attempt to import a supported file with no profile. - Updated
pt-BRtranslation (#6154). - Updated
ja-JPtranslation (#6198). - Updated
de-DEtranslation. - Improved the tag recognition to allow for more varied Unicode characters in
tags than previously, including umlauts, accents, or emojis (#6155). - Improved pilcrow styling when whitespace rendering is on (#6152).
- Fixed the frontmatter linter never reporting any errors with the YAML (#6167).
- Fixed an issue where images that spanned multiple lines could cause the editor
to crash when image rendering was active. - Fixed the tab key not respecting the "Indent using tabs instead of spaces"
setting. Additionally, pressing tab now always inserts spaces in YAML
frontmatter blocks to maintain valid YAML syntax (#6168). - Fix: The formatting toolbar no longer grabs focus from the editor.
- Fix: Added a configuration setting to allow restoring the pre-4.0 behavior of
not showing the underlying Markdown syntax of pre-rendered elements when the
cursor merely touches the element. If the setting "Show Markdown syntax when
the cursor is adjacent or inside an element" is enabled (the default), the
editor will show the Markdown syntax both when the cursor is within the
element or if it is adjacent to it. - Fixed the table editor "Delete table" context menu item not working as
intended (#6088). - Updated MathJax URL in various HTML-based templates to v4 (#6148). Note that
Zettlr will not overwrite existing templates, so to benefit from this, you
will have to factory-reset the affected templates. - Fixed a bug starting with the Zotero 8 update in Zettlr would no longer
provide autocomplete for some users. The reason is that some of the items in
the exported CSL JSON files would lack an ID property (that is, the citekey),
while Zettlr assumed each item would have an ID.
Under the Hood
- Increased config retrieval speed in the renderers (#6140). This can speed up
some UI interactions.
New Contributors
- @Sankoza made their first contribution in #6154
- @kevinbader made their first contribution in #6167
- @asmaier made their first contribution in #6183
- @krisfremen made their first contribution in #6173
Full Changelog: v4.1.1...v4.2.0
Release v4.1.1
Bug Fixes and Performance Improvements
Did you always wonder what "bug fixes and performance improvements" in your app update notes referred to? Read our changelog below to see what this can entail! No new features this time, just some polishing.
Important Note for Windows Users
This is the last release published with the old code signing certificate. Going forward, the certificate will change. So please make sure to update to this release as soon as possible. Read more on our forum.
Changelog
GUI and Functionality
- Fix a bug where the preferences window would allow arbitrary tab sizes. Now,
tab sizes are bound between 2 and 10 (see #6131). - Fixed links not registering clicks when they are pre-rendered within table
cells of the TableEditor (#4557). - Fix application of custom tag classes.
- Fixed a bug that would not correctly apply the
codeclass to segments of
code in some circumstances (primarily when adding YAML front matters or
comments). - Fix syntax highlighting in code blocks, frontmatters, etc. Now, Zettlr assigns
more default-colors of the solarized code syntax theme. In addition, regular
text is now more readable, especially in light mode. - Fixes and improvements to the toolbar styling; simplify CSS rules.
- Made toolbar icons slightly larger.
- Update
ja-JPtranslation (#6132). - Fixed a bug that would not accept custom height constraints via Pandoc
attributes for images if the maximum image height was set to 100% in the
settings. - Fixed "Learn more" link on the citation page in the onboarding window (#6138).
- Fixed an issue that would make the file search crash on Windows, if a
workspace was located at a volume root (#6142). - Fixed an issue that would cause Mermaid graphs to still be pre-rendered in
"raw" mode (#6141). - Fixed a bug that would cause code files (JSON/YAML/TeX) to be formatted
weirdly if Zettlr opens with one of these files on startup, due to relevant
CSS never being loaded in this case. - Improved PDF viewer interaction (#6153).
Under the Hood
- Update dependencies:
- Electron:
v40.0 - Forge:
7.11.1 - Builder:
26.5.0
- Electron:
- The FSAL Cache now consistently utilizes asynchronous filesystem operations
(#5994). - Refactor Zettelkasten link and tag parsing (#5997).
- Number controls in forms now allow for providing
minandmaxvalues. - Increased strictness of the
@typescript-eslint/no-explicit-anyrule from
"off" (no checking) to "warn" to slowly start migrating away from any
remaininganyuses in the wild. - FSAL Improvements:
- Removed a lot of dead code in the FSAL.
- Moved the save functionality away from the
FSAL*-submodules, and divided
the responsibility between theDocumentsProviderand theFSALmodule.
Full Changelog: v4.1.0...v4.1.1
Release v4.1.0
Bug Fixes | Performance Improvements
This is the first minor update for Zettlr 4.0. It comes with many fixes and small improvements, but also two new features and a change that you should know about. The two features are that you can now additionally collapse YAML frontmatters and Pandoc divs with the collapse-arrows left of the editor area, and Zettlr furthermore remembers which sections you have collapsed on a per-editor basis.
The change pertains to a configuration update that will make downgrading from this version difficult, and which requires your attention. Read everything in the Changelog below.
Changelog
Read Before Updating
In this version, we perform a long-planned configuration change that affects
your loaded workspaces and files. Before installing this update, please take
note of which workspaces and files you have open, in case they are being closed
through this update. (No data will be actually deleted, but this helps you avoid
having to search for the folders.)
In addition, it is crucial to remember that once you update to this version,
there is no turning back. If you decide to downgrade to a previous version,
your files and workspaces will be closed, and you will have to re-open them
afterwards.
GUI and Functionality
- Feature: You can now collapse YAML frontmatters and Pandoc divs (#6115).
- Feature: Zettlr now remembers folded regions as long as the window remains
open, even when you close a document (#6115). - Change: Due to a configuration change, downgrading Zettlr (which we
generally discourage) after updating to this version will lead to your
workspaces being closed. - Fixed XCode Command Line Tools setup dialog on macOS (#5428).
- Fixed an issue that prevented opening Markdown files with tables that include
Pandoc attribute strings when the TableEditor was enabled (#6110). - Fixed footnote tooltip rendering (#6107).
- Fixed an issue preventing Zettlr from starting if the stats file contained
errors (#6127). - Improved link target extraction logic when following links (#6098).
- Performance improvements when following links (#6072).
- Hide reference link labels when previewing Markdown links (#6097).
- Improved performance on generating the preview-bibliography in the sidebar by
collecting citation keys from the document only in the main process (#6068). - Improved math parsing to fix certain cases (#6030).
- Relaxed filename restrictions for loading custom dictionaries (#6126).
- Improved Pandoc div parsing (#6120).
- Update
de-DEtranslation (#6081). - Update
ja-JPtranslation (#6086).
Under the Hood
- Moved the
openPathsproperty. TheopenPathsproperty was a simple array
holding all currently loaded root files and workspaces intermingled. This
setting stems from the time when Zettlr could not load arbitrary files, and
mixing files and folders is generally a bad practice. This property has now
been moved into the new namespaceappin the settings, and divided into
openFilesandopenWorkspaces. This will make a few future checks and
features easier to implement, as the separation into files and folders is made
explicit and not left to the OS. This will allow us to better clean up the
property (personal note: I've seen a colleague's config file which was full of
non-existing file paths, and I didn't like that). In rare situations, this
change may close all your workspaces, in which case you would have to re-open
them. - New utility function
disambiguateFilethat can be used to retrieve a
time-based non-existing path that can be used for backup purposes. - Added a new environment variable,
ZETTLR_DISABLE_UPDATE_CHECK. If that
variable is detected during build, this will hard-disable update checks in the
application. This can be used by package maintainers to ensure update checks
from within the app are disabled, and Zettlr instead must be updated via the
package manager. Please note that the build script will only check for the
presence of the variable, not its contents. To ensure you are building with
updates enabled, you need to ensure the variable is not set, for example by
runningunset ZETTLR_DISABLE_UPDATE_CHECKbefore commencing the build. For
more information, please see issue #6075. When this environment variable is
present during build, the resulting binary will exhibit this behavior:- The "Check for updates" menu item will not be present.
- The "Updates" and "Beta releases" preferences will not be present. Instead,
the updates-setting will be replaced by an informative message informing
that updates have been disabled for the app. - The update check itself in the update provider will never run.
- Zettlr will include an environment variable indicating whether updates are
disabled (1) or enabled (0) that is visible within the debug panel.
- Added a new environment variable,
BUNDLE_PANDOC. If this variable is set to
a value of0, this will prevent the build script from downloading and
bundling Pandoc during the build stage. This can be used by package
maintainers to reduce the package size when there is a better way to provide
Pandoc (e.g., by listing it as a dependency for Zettlr). This also means that
the build environment does not require the dependencies that are specifically
for the download script. - fix: The Pandoc Attribute parser does not throw an error on malformed
attribute strings anymore, and instead just returns an empty record (#6110).
New Contributors
- @ruediger101 made their first contribution in #6081
- @coolvitto made their first contribution in #6086
Full Changelog: v4.0.0...v4.1.0
Release v4.0.0
It's time to celebrate — Zettlr 4.0 is here! This update includes an incredible amount of improvements, new features, and bug fixes. There's a lot of ground to cover, so let's quickly highlight the most important changes:
- This update includes a fully rewritten table editor – no more data loss and no more frustration!
- Brand-new image and PDF viewer: Now you can open images and PDF files directly within the app!
- New citation parser — inserting, editing, and even cross-referencing has just become easier!
- Improvements to the Zettelkasten- and Footnote workflows!
- The FSAL has been rewritten from the ground up – no more missing files and changes in the app!
- Edit your Pandoc LUA filters directly in the app – with the new Lua editor!
Besides these "big" improvements, a lot of additional new features and improvements have made it into the app – too many to list here. Please carefully read the changelog below to see everything that has changed and read our accompanying blog post for this new release!
Last but not least, a special thanks goes out to @benniekiss for their amazing help in providing high-quality PRs to make this release a reality!
Changelog
Full TableEditor Rewrite
This release contains a full rewrite of the TableEditor. The old implementation
of the TableEditor had many bugs and inconveniences that made working with
Markdown tables barely less cumbersome than having to deal with raw Markdown
tables. Users criticized volatile data handling and experienced frequent data
loss. This is why we redesigned the TableEditor from the ground up. With this
release, we are finally able to give the new experience to you.
The most important improvement is that now data loss should be a thing of the
past. The new TableEditor makes full use of the available features of the editor
to keep the data as safe as possible. But we didn't want to stop there. Because
the TableEditor hadn't received a face lift in years, we asked ourselves what
else the TableEditor was missing.
From a user perspective, we have kept the design of the TableEditor as close to
the former UX as possible, while also fixing a few oddities. Specifically, the
buttons of the TableEditor have been fully redesigned to be more minimalist.
Also gone is the infamous "Save" button that was not able to help prevent data
loss. The new TableEditor now features proper syntax highlighting so that you
can more easily verify that you are authoring proper Markdown. In addition, the
new TableEditor is now faster, more memory efficient, and it should be simpler
to fill entire tables with data.
Lastly, one big improvement of the new TableEditor is that you don't have to use
it to be more efficient in authoring tables. Specifically, we decided to
implement all functionality fully keyboard-oriented. This means that for any
modification you may want to make there is now a shortcut. Adding and removing
rows and columns; clearing data from rows, columns, or the entire table;
aligning column text left, right, or center; swapping rows or columns; etc.
Anything is now possible either with the new built-in context menu, or a quick
keyboard shortcut.
There is only one thing we stopped to support: grid tables. Given that their
structure can be much more difficult to parse we wanted to err on the side of
caution. However, some keyboard shortcuts such as navigating between cells will
still work with grid tables. Since users will most of the time only edit simple
tables, we believe this to be an acceptable compromise — while not completely
ruling out supporting grid tables, especially since Pandoc has started heavily
investing in an improvement of their grid table support.
In any case, we hope that the new TableEditor will finally fix the issues you
experienced over the past years — and we would like to apologize that it took us
so long to fix all of these issues at once!
Changes to the snippet $FILENAME variable
In this update, we have implemented a change in which the $FILENAME variable
no longer includes the filename extension. This means that, while $FILENAME
has in the past resolved to my-file.md, it will now only include my-file.
If you rely on the $FILENAME-variable in any of your snippets, please make
sure to update it by adding the variable $EXTENSION behind it. In other
words, everywhere you need only the filename without its extension, you can
keep $FILENAME, but wherever you need both the file name and its file
extension, please use $FILENAME$EXTENSION. (The latter variable includes
the leading period of the extension, so do not write $FILENAME.$EXTENSION.)
Image Viewer and PDF Viewer
This update brings with it a great new feature for Zettlr: A built-in image
viewer and PDF viewer. Once you have selected in the settings that you wish to
open images or PDF files in Zettlr instead of the default behavior to open it
externally, Zettlr will open them in editor panes just like the editors. You can
rearrange them just like you can other files, and you have some options
available to inspect the files.
For images, the viewer offers various options to zoom and fit the images so that
you can view every detail of them while having other files open side-by-side.
In addition, the image viewer offers four background modes to accommodate
transparency and difficult-to-view colors in the images better: transparent
(the default), a black background, white background, and a translucent
checkerboard background.
The PDF viewer likewise allows you to preview PDF files using Chromium's built-
in PDF viewer that you may already know if you have opened PDF files in Google
Chrome or Edge. Due to restrictions in how this works, however, you will have to
manually "enable" such a viewer before being able to scroll it by clicking into
it. Whether an iframe is interactive is indicated by a small border around the
iframe.
Note that both image and PDF viewers are just that: viewers. As Zettlr is a text
app, we do not plan on implementing any ways of editing images or PDF files. To
annotate your PDF files, please continue using your existing workflow.
New Citation Parser
This release of Zettlr ships with a fully rewritten citation parser. We have
decided to do so because the existing citation parser was very coarse. It would
only detect and indicate entire citation nodes, but it could not distinguish
between the various parts of citations (such as prefix, citekey, and suffix). In
addition, there were quite many inefficiencies in how Zettlr would parse
citations.
The new citation parser aims at fixing these issues. It now mounts individual
nodes into the document for all individual parts of a citation node.
Specifically, it now detects formatting characters, the @-sign, the suppress-
author-flag (a hyphen preceding the @-sign), prefix, suffix, and the locator
individually. This not just makes styling individual citation parts possible,
but also makes all processing within Zettlr more efficient and faster.
Especially in documents with a lot of citations, you should be able to observe a
performance improvement.
Lastly, we took this opportunity to align the parser more with how Pandoc
Citeproc processes citations. Most notably, this includes relaxing some
requirements such as having to place commas after the citekey, and support for
curly brackets, which allows you more flexibility in defining citekeys (e.g.,
@{AuthorYear}) and locators (e.g., {pp. 23-24, 66-69}),
If you prefer to style Zettlr using Custom CSS, you can now style the individual
parts of your citations, using the following CSS classes:
cm-citation: The entire citation nodecm-citation-mark: Formatting characters ({}[];) except the@-sign and
the suppress-author-flagcm-citation-prefix: The citation prefixcm-citation-suppress-author-flag: The suppress-author-flagcm-citation-at-sign: The@-sign in front of your citekeycm-citation-citekey: The actual cite key (sans surrounding curly brackets)cm-citation-locator: The locator after your citekeycm-citation-suffix: The citation suffix
Modified Zettelkasten Link Workflow
With this update, we have updated the Zettelkasten link insertion workflow. This
is due to the new capabilities of Zettlr to understand link labels. To do so, we
have removed the previous settings "Link with filename only" and "When linking
files, add the document name …". Instead, we have added two new settings,
"Always use the file title as label for internal links" and "Use the file ID as
link target if possible."
The new workflow applies when you autocomplete a filename, and works as follows:
- If "Use the file ID" is enabled, Zettlr will use a file's ID, if the file has
one, and fall back to the filename only where no ID is available. If it is
disabled, Zettlr will always use the filename to generate internal Wikilinks. - If "Always use the file title" is enabled, Zettlr will add the file's title
(YAML frontmatter title; first heading level 1; filename) as the link label.
If it is disabled, Zettlr will never add a link label automatically.
Footnote Workflow Improvements
This update improves the footnote handling workflow a lot. Until now, Zettlr was
only able to properly insert new footnotes. However, the footnote deletion
process still required you to manually delete both the footnote label and its
accompanying reference.
We have now implemented a few new functions that help you manage footnotes.
First, when you delete text by pressing Backspace, and you reach a footnote
label, Zettlr will now select the entire footnote label instead of deleting the
closing bracket of the label. When you press Backspace a second time, it will
remove the entire label at once. This gives y...
Release v4.0.0-beta.5
This is likely the last beta before Zettlr can move to 4.0 stable. This means: We would appreciate many people testing this release, and reporting any remaining crucial bugs and problems so we can fix them. However, we do believe that it should now work relatively flawlessly.
This release implements primarily fixes and a few remaining features that we wanted to include in this release:
- Horizontal rules are now rendered (this is especially important to note for users who have implemented custom CSS solutions for rendering horizontal rules)
- Misspellings from LanguageTool are now treated equivalently to dictionary misspellings, meaning you can add words to dictionary and handle them from the context menu
- Zettlr now includes parsers for Pandoc divs and spans
- Directories in the global search are now fixed
- Recent documents should now open properly on Windows and Linux
- Visual line indentation logic has been improved
Changelog
Full TableEditor Rewrite
This release contains a full rewrite of the TableEditor. The old implementation
of the TableEditor had many bugs and inconveniences that made working with
Markdown tables barely less cumbersome than having to deal with raw Markdown
tables. Users criticized volatile data handling and experienced frequent data
loss. This is why we redesigned the TableEditor from the ground up. With this
release, we are finally able to give the new experience to you.
The most important improvement is that now data loss should be a thing of the
past. The new TableEditor makes full use of the available features of the editor
to keep the data as safe as possible. But we didn't want to stop there. Because
the TableEditor hadn't received a face lift in years, we asked ourselves what
else the TableEditor was missing.
From a user perspective, we have kept the design of the TableEditor as close to
the former UX as possible, while also fixing a few oddities. Specifically, the
buttons of the TableEditor have been fully redesigned to be more minimalist.
Also gone is the infamous "Save" button that was not able to help prevent data
loss. The new TableEditor now features proper syntax highlighting so that you
can more easily verify that you are authoring proper Markdown. In addition, the
new TableEditor is now faster, more memory efficient, and it should be simpler
to fill entire tables with data.
Lastly, one big improvement of the new TableEditor is that you don't have to use
it to be more efficient in authoring tables. Specifically, we decided to
implement all functionality fully keyboard-oriented. This means that for any
modification you may want to make there is now a shortcut. Adding and removing
rows and columns; clearing data from rows, columns, or the entire table;
aligning column text left, right, or center; swapping rows or columns; etc.
Anything is now possible either with the new built-in context menu, or a quick
keyboard shortcut.
There is only one thing we stopped to support: grid tables. Given that their
structure can be much more difficult to parse we wanted to err on the side of
caution. However, some keyboard shortcuts such as navigating between cells will
still work with grid tables. Since users will most of the time only edit simple
tables, we believe this to be an acceptable compromise — while not completely
ruling out supporting grid tables, especially since Pandoc has started heavily
investing in an improvement of their grid table support.
In any case, we hope that the new TableEditor will finally fix the issues you
experienced over the past years — and we would like to apologize that it took us
so long to fix all of these issues at once!
Changes to the snippet $FILENAME variable
In this update, we have implemented a change in which the $FILENAME variable
no longer includes the filename extension. This means that, while $FILENAME
has in the past resolved to my-file.md, it will now only include my-file.
If you rely on the $FILENAME-variable in any of your snippets, please make
sure to update it by adding the variable $EXTENSION behind it. In other
words, everywhere you need only the filename without its extension, you can
keep $FILENAME, but wherever you need both the file name and its file
extension, please use $FILENAME$EXTENSION. (The latter variable includes
the leading period of the extension, so do not write $FILENAME.$EXTENSION.)
Image Viewer and PDF Viewer
This update brings with it a great new feature for Zettlr: A built-in image
viewer and PDF viewer. Once you have selected in the settings that you wish to
open images or PDF files in Zettlr instead of the default behavior to open it
externally, Zettlr will open them in editor panes just like the editors. You can
rearrange them just like you can other files, and you have some options
available to inspect the files.
For images, the viewer offers various options to zoom and fit the images so that
you can view every detail of them while having other files open side-by-side.
In addition, the image viewer offers four background modes to accommodate
transparency and difficult-to-view colors in the images better: transparent
(the default), a black background, white background, and a translucent
checkerboard background.
The PDF viewer likewise allows you to preview PDF files using Chromium's built-
in PDF viewer that you may already know if you have opened PDF files in Google
Chrome or Edge. Due to restrictions in how this works, however, you will have to
manually "enable" such a viewer before being able to scroll it by clicking into
it. Whether an iframe is interactive is indicated by a small border around the
iframe.
Note that both image and PDF viewers are just that: viewers. As Zettlr is a text
app, we do not plan on implementing any ways of editing images or PDF files. To
annotate your PDF files, please continue using your existing workflow.
New Citation Parser
This release of Zettlr ships with a fully rewritten citation parser. We have
decided to do so because the existing citation parser was very coarse. It would
only detect and indicate entire citation nodes, but it could not distinguish
between the various parts of citations (such as prefix, citekey, and suffix). In
addition, there were quite many inefficiencies in how Zettlr would parse
citations.
The new citation parser aims at fixing these issues. It now mounts individual
nodes into the document for all individual parts of a citation node.
Specifically, it now detects formatting characters, the @-sign, the suppress-
author-flag (a hyphen preceding the @-sign), prefix, suffix, and the locator
individually. This not just makes styling individual citation parts possible,
but also makes all processing within Zettlr more efficient and faster.
Especially in documents with a lot of citations, you should be able to observe a
performance improvement.
Lastly, we took this opportunity to align the parser more with how Pandoc
Citeproc processes citations. Most notably, this includes relaxing some
requirements such as having to place commas after the citekey, and support for
curly brackets, which allows you more flexibility in defining citekeys (e.g.,
@{AuthorYear}) and locators (e.g., {pp. 23-24, 66-69}),
If you prefer to style Zettlr using Custom CSS, you can now style the individual
parts of your citations, using the following CSS classes:
cm-citation: The entire citation nodecm-citation-mark: Formatting characters ({}[];) except the@-sign and
the suppress-author-flagcm-citation-prefix: The citation prefixcm-citation-suppress-author-flag: The suppress-author-flagcm-citation-at-sign: The@-sign in front of your citekeycm-citation-citekey: The actual cite key (sans surrounding curly brackets)cm-citation-locator: The locator after your citekeycm-citation-suffix: The citation suffix
Modified Zettelkasten Link Workflow
With this update, we have updated the Zettelkasten link insertion workflow. This
is due to the new capabilities of Zettlr to understand link labels. To do so, we
have removed the previous settings "Link with filename only" and "When linking
files, add the document name …". Instead, we have added two new settings,
"Always use the file title as label for internal links" and "Use the file ID as
link target if possible."
The new workflow applies when you autocomplete a filename, and works as follows:
- If "Use the file ID" is enabled, Zettlr will use a file's ID, if the file has
one, and fall back to the filename only where no ID is available. If it is
disabled, Zettlr will always use the filename to generate internal Wikilinks. - If "Always use the file title" is enabled, Zettlr will add the file's title
(YAML frontmatter title; first heading level 1; filename) as the link label.
If it is disabled, Zettlr will never add a link label automatically.
Footnote Workflow Improvements
This update improves the footnote handling workflow a lot. Until now, Zettlr was
only able to properly insert new footnotes. However, the footnote deletion
process still required you to manually delete both the footnote label and its
accompanying reference.
We have now implemented a few new functions that help you manage footnotes.
First, when you delete text by pressing Backspace, and you reach a footnote
label, Zettlr will now select the entire footnote label instead of deleting the
closing bracket of the label. When you press Backspace a second time, it will
remove the entire label at once. This gives you both a visual indication that
you are about to delete a footnote, and make it easier (since it requires you to
press Backspace only twice, instead of at least four times).
Note that some functionality does not apply to footnote labels that contain text
other than numb...