Added
CSL bibliography styles (breaking change)
Quarkdown's internal bibliography management is now powered by CSL (Citation Style Language).
-
A curated selection of citation styles from the CSL Style Repository is now supported. The
styleparameter now accepts a CSL style identifier (e.g.ieee,apa,chicago-author-date,nature). The default style is nowieee.Breaking change:
plainandieeetrstyles do not exist anymore, and have been replaced byieee. -
Along with BibTeX (
.bib) files, the following file formats are now accepted:- CSL JSON (
.json) - YAML (
.yaml/.yml) - EndNote (
.enl) - RIS (
.ris)
- CSL JSON (
-
Rendered bibliography entries are now localized to the document locale, set via
.doclang.
Multi-key citations
.cite now accepts a comma-separated list of keys (e.g. .cite {einstein, hawking}) to produce a single combined citation label, whose format depends on the active citation style (e.g. [1], [2] for IEEE, (Einstein, 1905; Hawking, 1988) for APA).
Formatted captions
Captions for all supported elements now accept inline formatting (including inline function calls), rather than plain text.

Scoped page formatting
.pageformat now supports scoping formats to specific pages in paged documents via two combinable parameters:
side(leftorright): restricts formatting to recto or verso pages, enabling mirrored margins and other asymmetric layouts.pages(e.g.2..5): restricts formatting to an inclusive range of page indices.
.pageformat size:{A4}
.pageformat side:{left} margin:{2cm 3cm 2cm 1cm}
.pageformat side:{right} margin:{2cm 1cm 2cm 3cm}.pageformat pages:{1..3} borderbottom:{4px}
New syntax: Tight function calls
Inline function calls can now be wrapped in curly braces to delimit them from surrounding content, without relying on whitespace.
abc{.uppercase {def}}ghi
.heading primitive function
The new .heading function creates headings with granular control over their behavior, unlike standard Markdown headings (#, ##, ...).
It allows explicit control over numbering (numbered), table of contents indexing (indexed), page breaks (breakpage), depth, and reference ID (ref).
.pagebreak primitive function
The new .pagebreak function provides an explicit way to insert a page break as an alternative to the <<< syntax.
File tree
The new .filetree function renders a visual file tree from a Markdown list.
.filetree
- src
- main.ts
- ...
- README.mdBold entries (**name**) are highlighted with a distinct background color, useful for drawing attention to specific items.
.filetree
- src
- **main.ts**
- utils.ts
- README.md
Better heading configuration for table of contents and bibliography
Both .tableofcontents and .bibliography now accept the following optional parameters to control the heading that precedes them:
breakpage: controls whether the heading triggers an automatic page break.headingdepth: the depth of the heading (1-6).numberheading: controls whether the heading is numbered in the document hierarchy.indexheading: when enabled, the heading is included in the document's own table of contents.
Subscript and superscript text
The .text function now accepts a script parameter with sub and sup values for subscript and superscript text.
Changed
Removed includeunnumbered parameter from .tableofcontents (breaking change)
The includeunnumbered parameter has been removed, in favor of the more granular heading configuration previously mentioned.
Now all indexable headings are included in the ToC by default, regardless of their numbering.
.container's margin now suppresses children's margins
When an explicit margin is applied to a .container, it now suppresses the margins of its direct children, for a more intuitive and flexible layout configuration.
.fullspan now relies on .container
.fullspan, used to create a block spanning over multiple columns in a multi-column layout, is now shorthand for .container fullspan:{yes}.
Fixed
Stabilized multi-column layout
The multi-column layout via .pageformat columns:{N} is no longer experimental, and now works reliably across all document types.
Added call stack limit
Infinite recursion in function calls is now detected and reported as a clear error.
Fixed default browser not opening on Linux (Wayland and XDG environments)
On Linux systems where the Java AWT Desktop API does not support the BROWSE action (e.g., Wayland), --browser default now falls back to xdg-open automatically.
Additionally, --browser xdg is now a supported named choice for the --browser CLI option.
Thanks @szy1840!
Fixed scroll position not fully restored during live preview on long paged documents
When editing long paged documents with live preview, the scroll position could sometimes be restored only partially because of long paged.js load times. The swap now reliably waits for the content to be fully loaded.
Fixed Mermaid diagrams preventing page breaks
Fixed an issue that caused Mermaid diagrams in paged documents to cause subsequent content to overflow instead of being pushed to the next page.
Fixed tree traversal not reaching non-body nodes
Fixed an issue that caused tree traversal-dependent features, such as cross-references, to not work in titles of .box and .collapse, and in block quote attributions.
Improved lexer performance
The lexer has been optimized to reduce regex builds to a minimum, resulting in significantly improved performance for large documents.
Sponsors
Thanks to our sponsors! 🎉
