Skip to content

Releases: iamgio/quarkdown

Development build

13 May 22:31
99bec90

Choose a tag to compare

v2.0.1

04 May 06:55

Choose a tag to compare

Added

 

Execution timeout

The new --timeout flag sets the maximum time, in seconds, allowed for the entire program execution to complete. Defaults to 30 seconds; 0 disables the timeout.

quarkdown c main.qd --pdf --timeout 120

 

New locales

New locales have been added: Polish, Portuguese, Russian and Ukrainian.

Thanks @emsspree!

 

Changed

 

Added link-to-root in new docs projects

When creating a docs project, quarkdown create now links the top-left title to the root document, for easier navigation back to the home page.

 

Fixed

 

Fixed trailing \ in Quarkdoc multiline signatures

When a function signature in Quarkdoc was long enough to split across multiple lines, the last parameter line incorrectly displayed a trailing \ before the return type.


Sponsors

Thanks to our sponsors! 🎉

@vitto4

Falconer

v2.0.0

23 Apr 06:06
4cb27e5

Choose a tag to compare

Added

 

Permission system

Quarkdown's permission system controls what a document can access during compilation, for increased safety.
If the compiler attempts an action that requires a permission it doesn't have, an error is raised.

You can grant or revoke permissions with the --allow and --deny flags:

quarkdown c main.qd --allow global-read --deny native-content

Available permissions: project-read (default), global-read, network, native-content (default), all. See the wiki page for more details.

 

Line continuation in function calls

A backslash (\) at the end of a line lets you split a function call's arguments across multiple lines.
This improves readability for calls with many parameters:

.container alignment:{center} \
           background:{red} \
           padding:{1px}

 

HTML static assets

A public/ directory in your project root lets you ship arbitrary files, such as robots.txt or CNAME, alongside the compiled output. Quarkdown copies the entire contents into the root of the output directory, preserving the original structure, without any processing.

 

HTML options, sitemap and canonical links

The new .htmloptions function configures HTML-specific generation settings. It accepts a baseurl parameter which, when set:

  • Emits a <link rel="canonical"> tag in each page's <head>, pointing to the canonical URL of the root document or subdocument.
  • Generates a sitemap.xml with absolute URLs for the root and all subdocuments, enabling search engine discovery.
.htmloptions baseurl:{https://quarkdown.com/wiki}

 

Keybindings

The new .keybinding {keys} function displays a keyboard shortcut as styled key labels.
Modifier keys are platform-aware: on macOS, they automatically display native symbols (e.g. instead of Ctrl).

Press .keybinding {Mod+Shift+K} to delete the line.
Keybinding

 

Linked cross-references for all referenceable types

Cross-references (.ref) to figures, tables, code blocks, math equations, and custom numbered blocks are now rendered as clickable links that navigate to the referenced element. Previously, only heading references were linked.

 

Root path symbol (@) in links and images

When compiling to HTML, the @ symbol at the start of a URL resolves to the root of the output, where the main HTML file is located. This makes it easy to reference shared assets from any subdocument, particularly useful in combination with the new public/ directory.

[Home](@)

![Logo](@/assets/logo.png)

In the previous example, @/assets/logo.png resolves to ./assets/logo.png, which is where public/assets/logo.png is copied from the source to the output.

This @ symbol is internally called media passthrough prefix, as it prevents the media storage system from registering the path as a media reference, and instead treats it as a passthrough to be copied verbatim.

 

.image primitive function

The new .image function creates images with fine-grained control over their properties, including media storage opt-out. The mediastorage:{no} parameter lets an image reference a fixed relative path, useful in combination with the new public/ directory for shared assets.

.image {photo.jpg} label:{A photo} title:{A caption} width:{200px} mediastorage:{no}

 

Changed

 

Changed default output directory to ./quarkdown-output (breaking change)

The default output directory (--out) was changed from ./output to ./quarkdown-output to avoid conflicts and ambiguity. If you were relying on the old default, please update your workflow accordingly or compile with --out ./output explicitly.

 

Fully offline HTML output

HTML documents now render entirely offline. Assets such as fonts, opt-in libraries and code highlighting themes, are now bundled in the Quarkdown installation and copied to each generated document. Previously, the output relied on CDNs and Google Fonts, which meant that opening a document without an internet connection could lead to broken styling and missing features.

With this change, output directory size is larger, but it comes with more predictable rendering and significantly faster page loads. First-time compilations may take slightly longer due to the additional copying step, but subsequent compilation times should be unaffected thanks to checksum validation.

As before, opt-in libraries, such as Mermaid and KaTeX, are still only included if used in the document, so they don't affect performance or output size if not needed.

Note

Due to the excessive file size, Chinese-specific fonts (loaded from .doclang {zh}) are still loaded remotely.

Note

User-picked fonts from Google Fonts are still loaded remotely.

 

Parallel rendering

Rendering now runs in parallel across sibling elements, improving performance on large documents.

 

Static preview output file name (breaking change)

When launching with --preview (without --out-name), the output directory name no longer matches .docname, because its dynamic nature may easily break the preview. Instead, it's now preview-<mainfile>-<hash>.
In order to get the .docname-based output name, consider compiling without --preview.

 

Lightweight media storage IO

IO over the media storage system is now more lightweight and secure, as media files are now copied by reference rather than by content. Each media export now also comes with a checksum that's validated on subsequent exports to avoid unnecessary copying.

 

Renamed Injection stdlib module to Html

The Injection module, which contains functions related to raw HTML injection, was renamed to Html.
This change breaks previous references to the documentation of the module and its functions.

 

Fixed

 

Fixed live preview flashing with dark themes

Fixed an issue that caused live preview to display white flashes when using dark color themes, during the crossfade transition.
The transition background now matches the target's background color.

 

Fixed broken wiki links in Quarkdoc

Wiki links at /docs now correctly point to the new wiki.


Sponsors

Thanks to our sponsors! 🎉

@vitto4

Falconer

v1.15.1

31 Mar 06:24

Choose a tag to compare

Changed

Subdocument link to nonexistent file now produces a visual error

A subdocument link pointing to a nonexistent file now produces a clear visual error in the output document, rather than silently rendering [???].

Reduced code block font size on small screens

Code blocks in plain and docs documents now use a smaller font size when viewed on small screens, improving readability on mobile devices.

Plain documents are start-aligned on small screens

Text alignment in plain documents switches from justified to start-aligned on small screens.

Reduced caption font size on small screens

Captions for figures and tables in plain and docs documents now use a smaller font size on small screens.

Upgraded to Reveal.js 6

Upgraded Reveal.js, the library powering slides documents, to v6.0.0.
No breaking changes are expected in the rendered output.

Fixed

Split paragraphs in paged documents now justify the last line correctly

When a paragraph is auto-split across a page break in a paged document, the last line of the first part is now correctly justified, rather than start-aligned.

Thanks @OverSamu!

Fixed live preview not updating when an anchor is present

Fixed an issue that caused live preview to skip updates when navigating to an anchor link of the same document, e.g. from the navigation sidebar.

Thanks @OverSamu!

Fixed .filetree's 'ellipsis' text color

Ellipsis (...) items in file trees now display the correct color.

Thanks @cyphercodes!

Fixed captions not following global line spacing

Captions now follow the global configuration for line spacing and letter spacing.

Fixed Quarkdoc Wiki page broken links if they contain anchors

The @wiki documentation tag now correctly preserves # anchor separators in wiki URLs.


Sponsors

Thanks to our sponsors! 🎉

@vitto4

Falconer

v1.15.0

24 Mar 05:37
61459ae

Choose a tag to compare

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 style parameter now accepts a CSL style identifier (e.g. ieee, apa, chicago-author-date, nature). The default style is now ieee.

    Breaking change: plain and ieeetr styles do not exist anymore, and have been replaced by ieee.

  • Along with BibTeX (.bib) files, the following file formats are now accepted:

    • CSL JSON (.json)
    • YAML (.yaml/.yml)
    • EndNote (.enl)
    • RIS (.ris)
  • 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.

![Pi](pi.png "The symbol of *pi*, which approximately equals .pi")
Formatted caption

 

Scoped page formatting

.pageformat now supports scoping formats to specific pages in paged documents via two combinable parameters:

  • side (left or right): 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.md

Bold 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! 🎉

@vitto4

Falconer

v1.14.1

06 Mar 06:40

Choose a tag to compare

Added

Escaped characters in numbering formats

A backslash (\) in a numbering format string now escapes the next character, treating it as a fixed symbol. For example, \1 produces a literal 1 instead of a decimal counter.

Fixed

Fixed live preview sometimes timing out on Windows

Fixed an IPv6-related issue that caused connections to Quarkdown's server to time out on Windows. Please also update to the latest version of the VS Code extension to v1.1.2 or later.

Fixed block function call incorrectly matching lines with trailing content

Fixed an issue that caused a line like .sum {1} {2} .sum {3} {4} to be incorrectly lexed as two block function calls rather than a single paragraph with two inline function calls.

Changed

Improved lexer performance

The lexer no longer restarts its regex search from scratch when a function call advances the scan position, resulting in slightly improved performance, especially for documents with many function calls.


Sponsors

Shout out to our sponsors! 🎉

@vitto4

Falconer

v1.14.0

19 Feb 07:04

Choose a tag to compare

This version is the biggest release to date, with a large number of new features and improvements, and a new official wiki, written in Quarkdown, that fully replaces the GitHub wiki for a better experience.

Going forward, next minor releases will be smaller and more frequent.

Thank you for using Quarkdown!

Added

docs document type

docs is the fourth document type available in Quarkdown, alongside plain, paged and slides. It is designed for technical documentation, wikis and knowledge bases.

It derives from plain, and adds a customizable navigation sidebar, a ToC sidebar, a header, accurate client-side search, and next/previous page navigation buttons.

You can see it in action in the new official wiki! To get started with a new docs document, you can rely on quarkdown create as usual.

 

New themes: Galactic (color) and Hyperlegible (layout)

Inspired by Astro, this new theme combination is the one used in the new wiki for improved readability and modern look.

Galactic+Hyperlegible

 

GitHub-style alerts

GitHub's alert syntax is now supported, making it easier to migrate from other tools:

> [!NOTE]
> This is a note

Note that Quarkdown's original syntax is still supported and recommended, especially for English documents:

> Note: This is a note

 

Subdocument links now allow anchors

Links to Quarkdown subdocuments now support anchors, to link to specific sections:

[Page](page.qd#section)

 

Customizable page numbering format

The .formatpagenumber {format} function overrides the page numbering format from the current page onward. It accepts the same format specifiers as .numbering, and applies to both page counters and table of contents.

.pagemargin {topcenter}
    .currentpage

# First page

.formatpagenumber {i}

# Second page

# Third page

Page number format example

Thanks @OverSamu!

 

Horizontal/vertical gap customization of .grid

The .grid function now accepts hgap and vgap parameters to customize the horizontal and vertical gaps between grid items. gap still works as a shorthand for both.

Thanks @OverSamu!

 

none is now converted to null

When invoking a native function from the stdlib, none is now supported by nullable parameters, and converted to null.

Before:

.function {rectangle}
    width height background?:
    .if {.background::isnone}
        .container width:{.width} height:{.height}
    .ifnot {.background::isnone}
        .container width:{.width} height:{.height} background:{.background}

After:

.function {rectangle}
    width height background?:
    .container width:{.width} height:{.height} background:{.background}

 

Icons

The new .icon {name} function relies on Bootstrap Icons to display pixel-perfect icons in your documents.

Quarkdown is on .icon {github}

 

New output target: plain text

Quarkdown can now render to plain text (.txt) via --render plaintext.

This has no particular use case. It was needed to implement the docs search feature in the first place.

 

Get path to root directory

The new .pathtoroot {granularity?} function returns the relative path from the current source file to the parent directory of:

  • the root document, if granularity is project (default)
  • the subdocument, if granularity is subdocument

 

Changed

.css doesn't require !important anymore

The .css function now applies !important automatically at the end of each rule.

 

Revised navigation sidebar

The navigation sidebar, visible in plain and paged documents on web view, is now easier to navigate, with all entries visible at once, and more accessible for screen readers.

Sidebar

Additionally, its generation is now performed at compile time rather than runtime, providing major performance improvements for large documents.

 

Flexible naming strategy for subdocument output files

--no-subdoc-collisions was removed in favor of --subdoc-naming <strategy>, which is a flexible way to choose how subdocument output files are named:

  • file-name (default): each subdocument output file is named after its source file
  • document-name: each subdocument output file is named after its .docname value
  • collision-proof: former --no-subdoc-collisions

 

Revamped create CLI

The quarkdown create command is now more intuitive, for a smoother onboarding experience.

 

Libraries now include content

.include {library} now also includes top-level Markdown content from the library, just like .include {file.qd} does for regular files.

 

Page content border adjustments

Page content border (.pageformat bordercolor) is now supported in plain documents, and refined for slides documents, especially in PDF output.

 

Improved code diff styling

Code blocks using the diff language now have improved and clearer styling for added and removed lines.

 

Fixed

Major improvements to live preview

Live preview has undergone major performance improvements and increased reliability, especially in combination with the new VS Code extension update.

Live reloading not being performed when editing subdocuments has also been fixed.

 

Fixed subdocument resolution from included files

Linking to subdocuments from files included via .include from a different directory now correctly resolves the subdocument path.

 

Fixed unresolved reference of local variables in body arguments

The following snippet used to cause an unresolved reference error for y:

.function {a}
    x:
    .x

.function {b}
    y:
    .a
        .y

.b {hello}

 

Fixed paragraph spacing with floating element

Fixed an issue that caused no spacing to be present between two paragraphs if a floating element was in-between, via .float.

 

Fixed ToC with no level 1 headings

Table of contents are no longer empty if no level 1 headings are present, or if all are decorative.

 

Fixed line spacing in table cells

Table cells now correctly apply the same line spacing as paragraphs and lists.


Sponsors

Shout out to our sponsors! 🎉

@vitto4

@serkonda7

Falconer

v1.13.0

16 Dec 07:44

Choose a tag to compare

🎄 This release focuses on Quarkdown as a reliable static site generator. The HTML output is now ready to be deployed straight out of the compiler, with enhanced SEO, polished responsiveness, and better support for multi-page (subdocuments) projects.

Check out iamgio.eu, my new personal website, for an example of a website fully powered by Quarkdown, with even a blog!

The sources are available here, and its deployment on GitHub Pages uses the brand-new Quarkdown GitHub Action.

Main features and changes

Enhanced metadata

Quarkdown now takes better care of HTML metadata for an improved SEO, to let your websites rank higher in search engines.

Additionally, new metadata functions are introduced: .docdescription and .dockeywords.

.docname {Quarkdown}
.docdescription {A Markdown-based typesetting system}

.dockeywords
  - markdown
  - typesetting
  - papers

 

Improved viewport for plain documents

Plain documents are now more beautifully responsive than ever, for portable websites.

  • On small (mobile) screens, the navigation sidebar is hidden, spacing is refined, font size is slightly increased, and footnotes appear at the bottom.
  • On very large screens, the maximum width of the content area is capped to improve readability.

 

Scoped page margins

When used in paged and slides documents, the .pagemargin function now takes effect only from the page where it's declared onward. This allows for different page margin settings in different parts of the document.

If you used to call the function at the start of the document to set global margins, this behavior is unchanged.

.pagemargin {topcenter}
    On all pages

# First page

# Second page

.pagemargin {topleft}
    From second page

# Third page
Scoped page margins

Thanks @sanoakr!

 

Page number resets

The new .resetpagenumber {from?} function allows overwriting the current page number at any point in a paged or slides document.

These changes are reflected in .currentpage and page numbers in the table of contents.

.pagemargin {topcenter}
  .currentpage

# First page

# Second page

.resetpagenumber from:{20}

# Third page
Page number reset

Thanks @sanoakr!

 

Page numbers in slides' table of contents

Along with paged documents, table of contents in slides documents now also shows page numbers for each entry.

 

List files in a directory

The new .listfiles function returns a collection of the files in a directory on the file system. It's unordered by default, or can be sorted by name or date.

The output can be iterated upon, or supplied to other functions. For example, it's possible to perform automatic bulk inclusions:

.includeall {.listfiles {somedirectory} sortby:{name}}

 

Subdocument function

A new .subdocument {path} {label?} function has been added as a more flexible alternative to the [Label](path.qd) syntax to register subdocuments to the knowledge graph and link to them.

As opposed to the static link syntax, the function accepts dynamic paths. Thus, it's possible to use .listfiles to automatically link all documents in a directory.
Great for blogs!

.foreach {.listfiles {somedirectory}}
    path:
    .path::subdocument label:{.path::filename extension:{no}}
List files

The example also shows the new .filename {path} function, which allows retrieving a file name from its path.

 

Control over .include's sandbox

The main difference between inclusion and subdocuments is how the included document is sandboxed:
by default, .include lets all changes propagate to the parent document, while subdocuments isolate them.

Now, .include accepts an optional sandbox parameter to control this behavior. In ascending order of isolation:

  • share (default): all changes propagate to the parent document.
  • scope: like share, but function and variable declarations do not propagate.
  • subdocument: changes, including metadata and layout options, do not propagate.

 

Rich content in CSV

mode:{markdown} can now be used in .csv to parse cell content as inline Quarkdown source code. This allows for formatting, rich content, and even function calls inside CSV.

 

Alphanumeric sorting

String sorting operations performed in the stdlib now prefer alphanumeric comparisons. This applies to .tablesort and .listfiles.

  • Before: abc120 < abc30
  • Now: abc120 > abc30

This is more natural and correct. .tablesort can now be used for real-world leaderboards!

 

Changed text replacement for em-dashes

Up to now, a dash (-) surrounded by spaces was replaced by an em-dash (). Now, it produces an en-dash () instead.

To get an em-dash, use two dashes (--), not necessarily surrounded by spaces.

 

Sidebar now ignores decorative headings

Decorative headings (#! Title) are now ignored in the navigation sidebar.

 

Document modifications in a subdocument do not affect the parent document

When importing a subdocument, modifications to document metadata, layout, or other properties no longer propagate to the parent document.

This allows, for instance, to call .docname in a subdocument to set its own title, which will be shown in the browser tab when viewing that subdocument.
Unset properties will still fall back to the parent document's values.

 

Working directory now correctly updates on .include

When including documents from different directories via .include, the working directory is now updated accordingly. This allows relative paths to work as expected inside included documents.

Consider the tree:

main.qd
dir/
|  other.qd
|  image.png

From main.qd:

.include {dir/other.qd}

Previously, in order to access image.png from other.qd:

![](dir/image.png)

Now, with the updated working directory:

![](image.png)

 

Changes to subdocument HTML export

When exporting multi-document projects as HTML:

  • Subdocuments are now directories rather than HTML files, for better URLs (example.com/subdoc rather than example.com/subdoc.html).
  • Each subdocument now has its own media storage (media subdirectory), rather than having a shared one for all subdocuments.

 

What's Changed

  • feat(postrenderer): export authors to html metadata by @iamgio in #248
  • feat(postrenderer): always set viewport meta by @iamgio in #249
  • feat(postrenderer): add document description metadata by @iamgio in #250
  • feat(project-creator): add document description by @iamgio in #251
  • feat: add .dockeywords metadata function by @iamgio in #252
  • feat(project-creator): add keywords metadata by @iamgio in #253
  • fix(theme): improve mobile responsiveness of plain doc margins by @iamgio in #255
  • feat(stdlib): add .listfiles by @iamgio in #260
  • feat(stdlib): add .subdocument by @iamgio in #261
  • feat(stdlib): add alphanumeric sorting by @iamgio in #262
  • feat!: let .include change the working directory by @iamgio in #266
  • fix(parser): trim initial spaces from fenced code block by @iamgio in #274
  • feat(stdlib): allow parsing inline Markdown in csv by @iamgio in #277
  • feat: let subdocuments edit their own document metadata by @iamgio in #278
  • feat!: add en-dash text replacement, change em-dash by @iamgio in #279
  • feat: Page number reset support with TOC integration by @sanoakr in #280
  • feat: Scoped page margins with reset support by @sanoakr in #281
  • feat: change subdocument HTML generation by @iamgio in #282
  • feat(stdlib): add sandbox parameter to .include by @iamgio in #283

Full Changelog: v1.12.1...v1.13.0

 

Sponsors

Shout out to our sponsors! 🎉

@vitto4

<a href="https://f...

Read more

v1.12.1

23 Nov 04:15

Choose a tag to compare

This version fixes two issues related to table parsing:

  • Escaping the cell separator (\|) now correctly renders | only, even inside inline code.
  • || is now parsed as a valid cell.

What's Changed

  • fix(parser): fix empty table header || being skipped by @iamgio in #245
  • fix(parser): unescape escaped table cell separators by @iamgio in #247

Full Changelog: v1.12.0...v1.12.1

Sponsors

Shout out to our sponsors! 🎉

@vitto4

Falconer

v1.12.0

03 Nov 18:53

Choose a tag to compare

Important

If you're using the VS Code extension, please update it to v1.0.4. The preview will fail to launch on previous versions.

Author's message
I, @iamgio, am currently relocating to a new country. I won't be able to dedicate much time to Quarkdown development for the next few weeks, so little patches will be most common.
Thank you for your understanding and support! Active development will resume as soon as I am fully settled.

Main features and changes

This small release comes with some quality-of-life improvements, especially for the CLI.

 

Pipe mode (--pipe)

The HTML output is no longer printed to stdout by default, and it's now replaced by a short message:

  • For normal compilation:

    Success @ <output path>
    
  • For live preview:

    Success in <elapsed time>
    

A new pipe mode has been introduced, which can be enabled with the --pipe option. In this mode, the HTML output is printed to stdout as before, files are not generated, and all other logs are suppressed.

This mode is useful for piping the output to other commands or files. For example:

quarkdown c input.qd --pipe > output.html

 

Enhanced error reporting

Error boxes now show a snippet of the affected source code.

Runtime errors, such as unresolved files in .read, now show more detailed information.

New error handling

 

Improved browser selection

The --browser (-b) option of quarkdown c and quarkdown start has been improved to support more flexible browser selection:

  • Lookup by name is no longer fixed to a predefined set. You can now specify any browser whose path is present in the environment variable BROWSER_<NAME> (e.g. BROWSER_OPERA for -b opera).
    The previous predefined names are still supported.

  • You can now also specify the full path to the browser executable (e.g. -b /usr/bin/firefox).

Note

Browser processes are launched as <path> <url>.
It must be the user's responsibility to ensure the genuinity of the executable.

 

Unnumbered headings in table of contents

The .tableofcontents function now accepts an optional includeunnumbered boolean parameter.

When set to true, decorative headings (#! Heading) are also included in the generated table of contents.

Thanks @sanoakr!

What's Changed

  • [dev] chore(deps): bump dependencies by @iamgio in #235
  • Add option to include unnumbered sections in table of contents by @sanoakr in #232
  • feat(cli): enhance browser selection by @iamgio in #236
  • [dev] refactor: make pipeline stages composable by @iamgio in #238
  • feat(cli): add --pipe option by @iamgio in #239
  • feat: enhance errors by @iamgio in #240

Full Changelog: v1.11.0...v1.12.0

Sponsors

Shout out to our new sponsor: @vitto4 🎉

Falconer