No description
Find a file
saberzero1 3539cf1e6a
fix: slugify wikilinks in frontmatter to prevent %20 in hrefs
Wikilinks appearing in frontmatter property strings (e.g. 'related:
"[[My Note]]"') were rendered with their raw target passed
directly to resolveRelative, leaving the space intact. The browser
then percent-encoded it as %20 in the rendered href, producing
broken links like './My%20Note' that never resolve.

The root cause was in renderTextWithLinks (NoteProperties.tsx):
the matched wikilink target went straight into resolveRelative
without going through slugifyFilePath, so spaces, ampersands, and
other characters that should be slugified survived into the href.
extractLinksFromValue (transformer.ts) had the same issue: it
stored raw target strings in file.data.frontmatterLinks instead
of canonical slugs.

Adds a shared slugifyWikilinkTarget helper in util/path.ts that
mirrors the slug+anchor contract CrawlLinks uses for body-content
links, so frontmatter wikilinks and body wikilinks now produce
identical hrefs. Both NoteProperties.tsx and the transformer's
extractLinksFromValue now go through this helper.

Also replaces the plugin's local slugTag/slugifyFilePath/
getFileExtension helpers with the shared @quartz-community/utils
versions. This eliminates slugification drift between plugins and
ensures that note-properties honors the same case-insensitive
matching that the rest of the Quartz ecosystem uses.

BREAKING CHANGE: tag URLs and frontmatter-wikilink slugs are now
lowercased (inherited from utils' case-insensitive matching).
Tags #MyTag, #mytag, and #MYTAG collapse into a single tag page
tags/mytag.
2026-04-16 22:22:10 +02:00
.github/workflows ci: add dist externals verification step 2026-03-17 19:41:47 +01:00
dist fix: slugify wikilinks in frontmatter to prevent %20 in hrefs 2026-04-16 22:22:10 +02:00
src fix: slugify wikilinks in frontmatter to prevent %20 in hrefs 2026-04-16 22:22:10 +02:00
test fix: slugify wikilinks in frontmatter to prevent %20 in hrefs 2026-04-16 22:22:10 +02:00
types chore: centralize type declarations and standardize tooling config 2026-03-16 18:55:26 +01:00
.eslintrc.json chore: centralize type declarations and standardize tooling config 2026-03-16 18:55:26 +01:00
.gitignore chore: commit dist/ and remove prepare script 2026-03-14 22:00:25 +01:00
.prettierignore chore: centralize type declarations and standardize tooling config 2026-03-16 18:55:26 +01:00
.prettierrc Initial commit 2026-02-22 15:03:10 +01:00
CHANGELOG.md fix: slugify wikilinks in frontmatter to prevent %20 in hrefs 2026-04-16 22:22:10 +02:00
LICENSE Initial commit 2026-02-22 15:03:10 +01:00
package-lock.json deps: update @quartz-community/utils 2026-04-16 22:14:19 +02:00
package.json fix: bundle non-shared deps into dist to prevent runtime resolution failures 2026-03-17 19:31:51 +01:00
README.md docs: update README for v5 unified config system 2026-02-25 16:07:03 +01:00
tsconfig.build.json fix: use separate tsconfig for DTS build to avoid vitest dependency 2026-03-22 13:12:01 +01:00
tsconfig.json Initial commit 2026-02-22 15:03:10 +01:00
tsup.config.ts fix: move tsconfig from dts object to top-level option 2026-03-22 13:25:12 +01:00
vitest.config.ts fix: remove template boilerplate test files and add passWithNoTests 2026-03-09 03:21:37 +01:00

@quartz-community/note-properties

Parses frontmatter properties and renders them as a visible properties view on the page, similar to Obsidian's properties panel.

Installation

npx quartz plugin add github:quartz-community/note-properties

Usage

This plugin serves as both a transformer (parsing frontmatter) and a component (displaying the properties view).

plugins:
  # Transformer (parses frontmatter)
  - source: github:quartz-community/note-properties
    enabled: true
    options:
      includeAll: false
      includedProperties:
        - description
        - tags
        - aliases
      excludedProperties: []
      hidePropertiesView: false
      delimiters: "---"
      language: yaml

  # Component (displays properties in the page layout)
  - source: github:quartz-community/note-properties
    enabled: true
    layout:
      position: beforeBody
      priority: 15

For advanced use cases, you can override in TypeScript:

import * as ExternalPlugin from "./.quartz/plugins";

ExternalPlugin.NoteProperties({
  includeAll: false,
  includedProperties: ["description", "tags", "aliases"],
  excludedProperties: [],
  hidePropertiesView: false,
  delimiters: "---",
  language: "yaml",
});

Configuration

Option Type Default Description
includeAll boolean false Whether to include all frontmatter properties.
includedProperties string[] ["description", "tags", "aliases"] Properties to include when includeAll is false.
excludedProperties string[] [] Properties to exclude when includeAll is true.
hidePropertiesView boolean false Whether to hide the rendered properties view on the page.
delimiters string "---" The frontmatter delimiter style.
language string "yaml" The frontmatter language ("yaml" or "toml").

Documentation

See the Quartz documentation for more information.

License

MIT