From 951dfee599a5c85f8658480d67f2a2b032cca2a5 Mon Sep 17 00:00:00 2001 From: saberzero1 Date: Wed, 3 Jun 2026 15:26:32 +0200 Subject: [PATCH 01/16] fix(i18n): explorer/graph missing mapping --- quartz.lock.json | 102 ++++++++++++++++++++++------------------------- 1 file changed, 48 insertions(+), 54 deletions(-) diff --git a/quartz.lock.json b/quartz.lock.json index 21f06ed21..92643e9d8 100644 --- a/quartz.lock.json +++ b/quartz.lock.json @@ -5,199 +5,193 @@ "source": "github:quartz-community/alias-redirects", "resolved": "https://github.com/quartz-community/alias-redirects.git", "commit": "c46bc82fb9c93612902de6ab6880d28d7789b471", - "installedAt": "2026-05-24T15:36:16.431Z" + "installedAt": "2026-06-03T13:16:37.148Z" }, "article-title": { "source": "github:quartz-community/article-title", "resolved": "https://github.com/quartz-community/article-title.git", "commit": "5c5f7c702c4f56c95cee881d5440ec21a8970ba8", - "installedAt": "2026-05-24T15:36:16.464Z" + "installedAt": "2026-06-03T13:16:37.524Z" }, "backlinks": { "source": "github:quartz-community/backlinks", "resolved": "https://github.com/quartz-community/backlinks.git", "commit": "51c8954108ec68a0293dc7924af703ae59c78f5a", - "installedAt": "2026-05-24T15:36:16.408Z" + "installedAt": "2026-06-03T13:16:37.530Z" }, "bases-page": { "source": "github:quartz-community/bases-page", "resolved": "https://github.com/quartz-community/bases-page.git", "commit": "ec5711f91e40b1e8477a101f6e2604926e4f0222", - "installedAt": "2026-05-26T16:15:16.668Z" + "installedAt": "2026-06-03T13:16:38.012Z" }, "breadcrumbs": { "source": "github:quartz-community/breadcrumbs", "resolved": "https://github.com/quartz-community/breadcrumbs.git", "commit": "2f7ec9a7ef80ad5128d18205548f1132a2cf150a", - "installedAt": "2026-05-24T15:36:16.467Z" + "installedAt": "2026-06-03T13:16:37.818Z" }, "canvas-page": { "source": "github:quartz-community/canvas-page", "resolved": "https://github.com/quartz-community/canvas-page.git", "commit": "2e6d05ce087cf9b6de4dc9fa72590a3047170daa", - "installedAt": "2026-05-22T23:14:25.465Z" + "installedAt": "2026-06-03T13:16:37.317Z" }, "citations": { "source": "github:quartz-community/citations", "resolved": "https://github.com/quartz-community/citations.git", "commit": "2ad133a123c5b15b7c41d4fb684d422622113081", - "installedAt": "2026-05-24T15:36:16.430Z" + "installedAt": "2026-06-03T13:16:37.060Z" }, "cname": { "source": "github:quartz-community/cname", "resolved": "https://github.com/quartz-community/cname.git", "commit": "ec4c81c91da13a6f6c2cbe1656daf5c14575dab3", - "installedAt": "2026-05-24T15:36:16.443Z" + "installedAt": "2026-06-03T13:16:37.301Z" }, "comments": { "source": "github:quartz-community/comments", "resolved": "https://github.com/quartz-community/comments.git", "commit": "278115200a9bacfc0ee4695b200a5843d15517f3", - "installedAt": "2026-05-24T15:36:16.462Z" + "installedAt": "2026-06-03T13:16:37.858Z" }, "content-index": { "source": "github:quartz-community/content-index", "resolved": "https://github.com/quartz-community/content-index.git", "commit": "34621a71940977a6af6b20abd5dc552d81181b6b", - "installedAt": "2026-05-24T15:36:16.460Z" + "installedAt": "2026-06-03T13:16:37.224Z" }, "content-meta": { "source": "github:quartz-community/content-meta", "resolved": "https://github.com/quartz-community/content-meta.git", "commit": "a148b4104e9fb6323a6459b2f13c46f9a92da487", - "installedAt": "2026-05-24T15:36:16.441Z" + "installedAt": "2026-06-03T13:16:37.638Z" }, "content-page": { "source": "github:quartz-community/content-page", "resolved": "https://github.com/quartz-community/content-page.git", "commit": "977d15f083f5b5de4b299c8f016e4e61fd422716", - "installedAt": "2026-05-24T15:36:16.471Z" + "installedAt": "2026-06-03T13:16:37.311Z" }, "crawl-links": { "source": "github:quartz-community/crawl-links", "resolved": "https://github.com/quartz-community/crawl-links.git", "commit": "69497e22046d62ee601415ad832bcde89a70a544", - "installedAt": "2026-05-26T15:56:37.042Z" + "installedAt": "2026-06-03T13:16:36.662Z" }, "created-modified-date": { "source": "github:quartz-community/created-modified-date", "resolved": "https://github.com/quartz-community/created-modified-date.git", "commit": "c003199fb842969d43ee9e0f54120a85e588260e", - "installedAt": "2026-05-24T15:36:16.447Z" + "installedAt": "2026-06-03T13:16:36.740Z" }, "darkmode": { "source": "github:quartz-community/darkmode", "resolved": "https://github.com/quartz-community/darkmode.git", "commit": "dedd9606147e9d995a4376b0d03e469e39e94f85", - "installedAt": "2026-05-24T15:36:16.475Z" + "installedAt": "2026-06-03T13:16:37.751Z" }, "description": { "source": "github:quartz-community/description", "resolved": "https://github.com/quartz-community/description.git", "commit": "026e63bd46d5f7feed58373f999ed98bf8248a26", - "installedAt": "2026-05-24T15:36:16.445Z" + "installedAt": "2026-06-03T13:16:36.636Z" }, "encrypted-pages": { "source": "github:quartz-community/encrypted-pages", "resolved": "https://github.com/quartz-community/encrypted-pages.git", "commit": "e0e08e7afa40b97909fb24fd7509ddaa10116425", - "installedAt": "2026-05-24T15:36:17.007Z" + "installedAt": "2026-06-03T13:16:36.699Z" }, "explicit-publish": { "source": "github:quartz-community/explicit-publish", "resolved": "https://github.com/quartz-community/explicit-publish.git", "commit": "4afb630a1cc9034267beb93c928e81d0fa2f4d4b", - "installedAt": "2026-05-24T15:36:16.960Z" + "installedAt": "2026-06-03T13:16:36.746Z" }, "explorer": { "source": "github:quartz-community/explorer", "resolved": "https://github.com/quartz-community/explorer.git", - "commit": "69389c917af8f8c74372c70b600ef4652f20c8f2", - "installedAt": "2026-05-24T15:36:16.853Z" + "commit": "4420d14f2aeacf6f2a4530daab75cd38671c2c54", + "installedAt": "2026-06-03T13:16:37.262Z" }, "favicon": { "source": "github:quartz-community/favicon", "resolved": "https://github.com/quartz-community/favicon.git", "commit": "85842d5c15f937a3d1a02c45accee27118146d73", - "installedAt": "2026-05-24T15:36:16.980Z" + "installedAt": "2026-06-03T13:16:37.198Z" }, "folder-page": { "source": "github:quartz-community/folder-page", "resolved": "https://github.com/quartz-community/folder-page.git", "commit": "a538b8e548a0215568942a3d94b042010a86d66b", - "installedAt": "2026-05-24T15:36:16.992Z" + "installedAt": "2026-06-03T13:16:37.263Z" }, "footer": { "source": "github:quartz-community/footer", "resolved": "https://github.com/quartz-community/footer.git", "commit": "9e3f6d734d886eac0d41841c4dc8862b377fcaf4", - "installedAt": "2026-05-25T15:27:47.250Z" + "installedAt": "2026-06-03T13:16:37.940Z" }, "github-flavored-markdown": { "source": "github:quartz-community/github-flavored-markdown", "resolved": "https://github.com/quartz-community/github-flavored-markdown.git", "commit": "3eabbaa252ce175665ab3f62e1af25948a83e8b6", - "installedAt": "2026-05-24T15:36:17.005Z" + "installedAt": "2026-06-03T13:16:36.665Z" }, "graph": { "source": "github:quartz-community/graph", "resolved": "https://github.com/quartz-community/graph.git", - "commit": "67ac4993907618a0ea5bd33726f792c572cddbad", - "installedAt": "2026-05-26T17:45:56.210Z" + "commit": "26deebbebbe304c197ba7c53f788ec85dca71ac1", + "installedAt": "2026-06-03T13:16:37.380Z" }, "hard-line-breaks": { "source": "github:quartz-community/hard-line-breaks", "resolved": "https://github.com/quartz-community/hard-line-breaks.git", "commit": "0d448f38a24c568c5539ff2cd57d813293430ccd", - "installedAt": "2026-05-24T15:36:17.005Z" + "installedAt": "2026-06-03T13:16:36.965Z" }, "latex": { "source": "github:quartz-community/latex", "resolved": "https://github.com/quartz-community/latex.git", "commit": "3dcfedcb5ae5e28b71248a72665ccb881e82c185", - "installedAt": "2026-05-24T15:36:16.994Z" + "installedAt": "2026-06-03T13:16:36.841Z" }, "note-properties": { "source": "github:quartz-community/note-properties", "resolved": "https://github.com/quartz-community/note-properties.git", "commit": "874712a9910299b906606c885ea1fe9602114ca7", - "installedAt": "2026-05-26T16:15:17.177Z" + "installedAt": "2026-06-03T13:16:37.952Z" }, "obsidian-flavored-markdown": { "source": "github:quartz-community/obsidian-flavored-markdown", "resolved": "https://github.com/quartz-community/obsidian-flavored-markdown.git", "commit": "7f61d4bcf7537d056528f6cecaf5c35b39f74fe8", - "installedAt": "2026-05-27T18:30:09.459Z" + "installedAt": "2026-06-03T13:16:36.769Z" }, "obsidian-plugin-excalidraw": { "source": "github:quartz-community/obsidian-plugin-excalidraw", "resolved": "https://github.com/quartz-community/obsidian-plugin-excalidraw.git", "commit": "554ae8af7ac4d7fdff8d78e65bfa9b4dd53cbb87", - "installedAt": "2026-05-27T18:30:09.649Z" - }, - "obsidian-plugin-ttrpg-tools-maps": { - "source": "github:quartz-community/obsidian-plugin-ttrpg-tools-maps", - "resolved": "https://github.com/quartz-community/obsidian-plugin-ttrpg-tools-maps.git", - "commit": "c43314724a7606dd18b90972c457f593ccded5f5", - "installedAt": "2026-05-24T15:36:16.983Z" + "installedAt": "2026-06-03T13:16:38.085Z" }, "og-image": { "source": "github:quartz-community/og-image", "resolved": "https://github.com/quartz-community/og-image.git", "commit": "52ea59e2b40dde77abf7fd88eddecf161e671085", - "installedAt": "2026-05-24T15:36:16.999Z" + "installedAt": "2026-06-03T13:16:37.361Z" }, "ox-hugo": { "source": "github:quartz-community/ox-hugo", "resolved": "https://github.com/quartz-community/ox-hugo.git", "commit": "832871da9ab33d52f904456c1a5e14f1b2057d83", - "installedAt": "2026-05-24T15:36:16.990Z" + "installedAt": "2026-06-03T13:16:36.714Z" }, "page-title": { "source": "github:quartz-community/page-title", "resolved": "https://github.com/quartz-community/page-title.git", "commit": "a53cf02ce7faca400bcf3cfeed47eb860329e534", - "installedAt": "2026-05-24T15:36:16.998Z" + "installedAt": "2026-06-03T13:16:37.805Z" }, "quartz-themes": { "source": { @@ -206,81 +200,81 @@ "subdir": "plugin" }, "resolved": "https://github.com/saberzero1/quartz-themes.git", - "commit": "0da7355c49aa68cb375726913f41c64ac1f11733", + "commit": "e258410285f82594743fd23f39132b6a0947bed3", "subdir": "plugin", - "installedAt": "2026-05-27T18:31:15.006Z" + "installedAt": "2026-06-03T13:17:42.994Z" }, "reader-mode": { "source": "github:quartz-community/reader-mode", "resolved": "https://github.com/quartz-community/reader-mode.git", "commit": "02e36d3720e10c2087abce23cf0d2e94d53d27f1", - "installedAt": "2026-05-24T15:36:17.428Z" + "installedAt": "2026-06-03T13:16:37.924Z" }, "recent-notes": { "source": "github:quartz-community/recent-notes", "resolved": "https://github.com/quartz-community/recent-notes.git", "commit": "4505adba9c213967ddf94ea5fc05039245fd9fe9", - "installedAt": "2026-05-26T20:20:42.557Z" + "installedAt": "2026-06-03T13:16:37.867Z" }, "remove-draft": { "source": "github:quartz-community/remove-draft", "resolved": "https://github.com/quartz-community/remove-draft.git", "commit": "0a51a4c6abb3c86961a9bbf46f4538da87fcf9f8", - "installedAt": "2026-05-24T15:36:17.446Z" + "installedAt": "2026-06-03T13:16:36.691Z" }, "roam": { "source": "github:quartz-community/roam", "resolved": "https://github.com/quartz-community/roam.git", "commit": "b2aad70fdf548d07b8fd28df9edbdba7f256f166", - "installedAt": "2026-05-24T15:36:17.448Z" + "installedAt": "2026-06-03T13:16:36.771Z" }, "search": { "source": "github:quartz-community/search", "resolved": "https://github.com/quartz-community/search.git", "commit": "e0ebef9f80b23a015a9252d4ab98b889b08dc8b7", - "installedAt": "2026-05-24T15:36:17.442Z" + "installedAt": "2026-06-03T13:16:37.562Z" }, "spacer": { "source": "github:quartz-community/spacer", "resolved": "https://github.com/quartz-community/spacer.git", "commit": "64b135dcfb78c4911f8c42d942872d645cd2a456", - "installedAt": "2026-05-24T15:36:17.428Z" + "installedAt": "2026-06-03T13:16:37.913Z" }, "stacked-pages": { "source": "github:quartz-community/stacked-pages", "resolved": "https://github.com/quartz-community/stacked-pages.git", "commit": "9d67b8dedab5c27db98afd26dfa773e5003b0446", - "installedAt": "2026-05-24T15:36:17.444Z" + "installedAt": "2026-06-03T13:16:37.236Z" }, "syntax-highlighting": { "source": "github:quartz-community/syntax-highlighting", "resolved": "https://github.com/quartz-community/syntax-highlighting.git", "commit": "5bfdc2c3f42d3d0326c4e777eb575f3fb68d51fb", - "installedAt": "2026-05-24T15:36:17.446Z" + "installedAt": "2026-06-03T13:16:37.737Z" }, "table-of-contents": { "source": "github:quartz-community/table-of-contents", "resolved": "https://github.com/quartz-community/table-of-contents.git", "commit": "4c25c048a7f788cb156dad0050d80c7ed88692f9", - "installedAt": "2026-05-24T15:36:17.439Z" + "installedAt": "2026-06-03T13:16:36.649Z" }, "tag-list": { "source": "github:quartz-community/tag-list", "resolved": "https://github.com/quartz-community/tag-list.git", "commit": "0d18b40d26b3499823d46740c35e8ee874ba0ca0", - "installedAt": "2026-05-24T15:36:17.439Z" + "installedAt": "2026-06-03T13:16:37.665Z" }, "tag-page": { "source": "github:quartz-community/tag-page", "resolved": "https://github.com/quartz-community/tag-page.git", "commit": "82f8a6d5e774de5e075978651b6ca81f2ccb6812", - "installedAt": "2026-05-24T15:36:17.446Z" + "installedAt": "2026-06-03T13:16:37.398Z" }, "unlisted-pages": { "source": "github:quartz-community/unlisted-pages", "resolved": "https://github.com/quartz-community/unlisted-pages.git", "commit": "be42781fb08a60e9f9268682d457b289094d2838", - "installedAt": "2026-05-24T15:36:17.406Z" + "installedAt": "2026-06-03T13:16:36.935Z" } } } From 9737bce7095f93c9fb41700449505d963a6b2bb8 Mon Sep 17 00:00:00 2001 From: saberzero1 Date: Wed, 3 Jun 2026 15:34:54 +0200 Subject: [PATCH 02/16] fix(slugs): remove obsidian-importer known invalid file characters from slugs --- quartz.lock.json | 124 +++++++++++++++++++++++------------------------ 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/quartz.lock.json b/quartz.lock.json index 92643e9d8..c27c810a8 100644 --- a/quartz.lock.json +++ b/quartz.lock.json @@ -4,38 +4,38 @@ "alias-redirects": { "source": "github:quartz-community/alias-redirects", "resolved": "https://github.com/quartz-community/alias-redirects.git", - "commit": "c46bc82fb9c93612902de6ab6880d28d7789b471", - "installedAt": "2026-06-03T13:16:37.148Z" + "commit": "39231fd8a3b477ec7045b7df91898da9c919d134", + "installedAt": "2026-06-03T13:32:35.181Z" }, "article-title": { "source": "github:quartz-community/article-title", "resolved": "https://github.com/quartz-community/article-title.git", - "commit": "5c5f7c702c4f56c95cee881d5440ec21a8970ba8", - "installedAt": "2026-06-03T13:16:37.524Z" + "commit": "e608ca815e137e22b598094f735bcd8a481dafaa", + "installedAt": "2026-06-03T13:32:35.204Z" }, "backlinks": { "source": "github:quartz-community/backlinks", "resolved": "https://github.com/quartz-community/backlinks.git", - "commit": "51c8954108ec68a0293dc7924af703ae59c78f5a", - "installedAt": "2026-06-03T13:16:37.530Z" + "commit": "7490f921b7bd974c3f2f985ad3744b06160827d6", + "installedAt": "2026-06-03T13:32:35.225Z" }, "bases-page": { "source": "github:quartz-community/bases-page", "resolved": "https://github.com/quartz-community/bases-page.git", - "commit": "ec5711f91e40b1e8477a101f6e2604926e4f0222", - "installedAt": "2026-06-03T13:16:38.012Z" + "commit": "f8fc7da3515a4d4bbe0bd4be0fd9188823866a01", + "installedAt": "2026-06-03T13:32:35.344Z" }, "breadcrumbs": { "source": "github:quartz-community/breadcrumbs", "resolved": "https://github.com/quartz-community/breadcrumbs.git", - "commit": "2f7ec9a7ef80ad5128d18205548f1132a2cf150a", - "installedAt": "2026-06-03T13:16:37.818Z" + "commit": "cf2e161425165e1ac713f1feb7250b07fe0250ae", + "installedAt": "2026-06-03T13:32:35.270Z" }, "canvas-page": { "source": "github:quartz-community/canvas-page", "resolved": "https://github.com/quartz-community/canvas-page.git", - "commit": "2e6d05ce087cf9b6de4dc9fa72590a3047170daa", - "installedAt": "2026-06-03T13:16:37.317Z" + "commit": "84fc96799671a65f76b66e30217dbefdd43a2905", + "installedAt": "2026-06-03T13:32:35.291Z" }, "citations": { "source": "github:quartz-community/citations", @@ -52,32 +52,32 @@ "comments": { "source": "github:quartz-community/comments", "resolved": "https://github.com/quartz-community/comments.git", - "commit": "278115200a9bacfc0ee4695b200a5843d15517f3", - "installedAt": "2026-06-03T13:16:37.858Z" + "commit": "42c5023e42cf62495219095a862b2ea144b65600", + "installedAt": "2026-06-03T13:32:35.236Z" }, "content-index": { "source": "github:quartz-community/content-index", "resolved": "https://github.com/quartz-community/content-index.git", - "commit": "34621a71940977a6af6b20abd5dc552d81181b6b", - "installedAt": "2026-06-03T13:16:37.224Z" + "commit": "c3d4f5c85311712c3355cd71da46b28e2d8eba71", + "installedAt": "2026-06-03T13:32:35.431Z" }, "content-meta": { "source": "github:quartz-community/content-meta", "resolved": "https://github.com/quartz-community/content-meta.git", - "commit": "a148b4104e9fb6323a6459b2f13c46f9a92da487", - "installedAt": "2026-06-03T13:16:37.638Z" + "commit": "dd6e94b5ca1cb195104a2b5e624a43ee6aa0a324", + "installedAt": "2026-06-03T13:32:35.221Z" }, "content-page": { "source": "github:quartz-community/content-page", "resolved": "https://github.com/quartz-community/content-page.git", - "commit": "977d15f083f5b5de4b299c8f016e4e61fd422716", - "installedAt": "2026-06-03T13:16:37.311Z" + "commit": "d22fae357ae74a3e97a2f450862f23f5227842c4", + "installedAt": "2026-06-03T13:32:35.505Z" }, "crawl-links": { "source": "github:quartz-community/crawl-links", "resolved": "https://github.com/quartz-community/crawl-links.git", - "commit": "69497e22046d62ee601415ad832bcde89a70a544", - "installedAt": "2026-06-03T13:16:36.662Z" + "commit": "43edc6d5182e79bf1b63fed7eb3ba0c7624a1526", + "installedAt": "2026-06-03T13:32:35.242Z" }, "created-modified-date": { "source": "github:quartz-community/created-modified-date", @@ -88,20 +88,20 @@ "darkmode": { "source": "github:quartz-community/darkmode", "resolved": "https://github.com/quartz-community/darkmode.git", - "commit": "dedd9606147e9d995a4376b0d03e469e39e94f85", - "installedAt": "2026-06-03T13:16:37.751Z" + "commit": "c6484f72ebc6ea89339be7cf86ad14b40c47dcc7", + "installedAt": "2026-06-03T13:32:35.196Z" }, "description": { "source": "github:quartz-community/description", "resolved": "https://github.com/quartz-community/description.git", - "commit": "026e63bd46d5f7feed58373f999ed98bf8248a26", - "installedAt": "2026-06-03T13:16:36.636Z" + "commit": "56dc546614d905ad07dd0da8dd5820e25e5ea97b", + "installedAt": "2026-06-03T13:32:35.233Z" }, "encrypted-pages": { "source": "github:quartz-community/encrypted-pages", "resolved": "https://github.com/quartz-community/encrypted-pages.git", - "commit": "e0e08e7afa40b97909fb24fd7509ddaa10116425", - "installedAt": "2026-06-03T13:16:36.699Z" + "commit": "89e88af565dfaa9ab2d9c99677b82394ea7be356", + "installedAt": "2026-06-03T13:32:35.661Z" }, "explicit-publish": { "source": "github:quartz-community/explicit-publish", @@ -112,8 +112,8 @@ "explorer": { "source": "github:quartz-community/explorer", "resolved": "https://github.com/quartz-community/explorer.git", - "commit": "4420d14f2aeacf6f2a4530daab75cd38671c2c54", - "installedAt": "2026-06-03T13:16:37.262Z" + "commit": "a2dfd1373abe58ace461ebea0b4e94cb287f894e", + "installedAt": "2026-06-03T13:32:35.808Z" }, "favicon": { "source": "github:quartz-community/favicon", @@ -124,14 +124,14 @@ "folder-page": { "source": "github:quartz-community/folder-page", "resolved": "https://github.com/quartz-community/folder-page.git", - "commit": "a538b8e548a0215568942a3d94b042010a86d66b", - "installedAt": "2026-06-03T13:16:37.263Z" + "commit": "93304d22e1d7f09f93a33658ec273f7cb8d17793", + "installedAt": "2026-06-03T13:32:35.810Z" }, "footer": { "source": "github:quartz-community/footer", "resolved": "https://github.com/quartz-community/footer.git", - "commit": "9e3f6d734d886eac0d41841c4dc8862b377fcaf4", - "installedAt": "2026-06-03T13:16:37.940Z" + "commit": "6ed61928d3c0178d7cef972ebcbca6a206a2f065", + "installedAt": "2026-06-03T13:32:35.802Z" }, "github-flavored-markdown": { "source": "github:quartz-community/github-flavored-markdown", @@ -142,8 +142,8 @@ "graph": { "source": "github:quartz-community/graph", "resolved": "https://github.com/quartz-community/graph.git", - "commit": "26deebbebbe304c197ba7c53f788ec85dca71ac1", - "installedAt": "2026-06-03T13:16:37.380Z" + "commit": "46f0ba1c3c0cc484697572e7bcf315fa384d80d2", + "installedAt": "2026-06-03T13:32:35.872Z" }, "hard-line-breaks": { "source": "github:quartz-community/hard-line-breaks", @@ -160,26 +160,26 @@ "note-properties": { "source": "github:quartz-community/note-properties", "resolved": "https://github.com/quartz-community/note-properties.git", - "commit": "874712a9910299b906606c885ea1fe9602114ca7", - "installedAt": "2026-06-03T13:16:37.952Z" + "commit": "3cb40141e792a8a9ba9f99553cd436f36411bf8d", + "installedAt": "2026-06-03T13:32:35.812Z" }, "obsidian-flavored-markdown": { "source": "github:quartz-community/obsidian-flavored-markdown", "resolved": "https://github.com/quartz-community/obsidian-flavored-markdown.git", - "commit": "7f61d4bcf7537d056528f6cecaf5c35b39f74fe8", - "installedAt": "2026-06-03T13:16:36.769Z" + "commit": "07eaca7b31a537c7c4a0fd2848b1f00014c940af", + "installedAt": "2026-06-03T13:32:35.815Z" }, "obsidian-plugin-excalidraw": { "source": "github:quartz-community/obsidian-plugin-excalidraw", "resolved": "https://github.com/quartz-community/obsidian-plugin-excalidraw.git", - "commit": "554ae8af7ac4d7fdff8d78e65bfa9b4dd53cbb87", - "installedAt": "2026-06-03T13:16:38.085Z" + "commit": "dad0a4c0abdc8b3c2786277a2cbd67dc039c754c", + "installedAt": "2026-06-03T13:32:35.851Z" }, "og-image": { "source": "github:quartz-community/og-image", "resolved": "https://github.com/quartz-community/og-image.git", - "commit": "52ea59e2b40dde77abf7fd88eddecf161e671085", - "installedAt": "2026-06-03T13:16:37.361Z" + "commit": "31343c612d02c5fd22ff27a1e6035b2486be75f5", + "installedAt": "2026-06-03T13:32:35.899Z" }, "ox-hugo": { "source": "github:quartz-community/ox-hugo", @@ -190,8 +190,8 @@ "page-title": { "source": "github:quartz-community/page-title", "resolved": "https://github.com/quartz-community/page-title.git", - "commit": "a53cf02ce7faca400bcf3cfeed47eb860329e534", - "installedAt": "2026-06-03T13:16:37.805Z" + "commit": "a1c1fe0a9c6a5ce1acf6efa01d473a7d9850e2a3", + "installedAt": "2026-06-03T13:32:36.002Z" }, "quartz-themes": { "source": { @@ -207,14 +207,14 @@ "reader-mode": { "source": "github:quartz-community/reader-mode", "resolved": "https://github.com/quartz-community/reader-mode.git", - "commit": "02e36d3720e10c2087abce23cf0d2e94d53d27f1", - "installedAt": "2026-06-03T13:16:37.924Z" + "commit": "73c8bce66df8835510ffac47e53b1ca0f7efd51e", + "installedAt": "2026-06-03T13:32:36.320Z" }, "recent-notes": { "source": "github:quartz-community/recent-notes", "resolved": "https://github.com/quartz-community/recent-notes.git", - "commit": "4505adba9c213967ddf94ea5fc05039245fd9fe9", - "installedAt": "2026-06-03T13:16:37.867Z" + "commit": "3c3d104335e2fc5ff62371ead157667adb79b046", + "installedAt": "2026-06-03T13:32:36.284Z" }, "remove-draft": { "source": "github:quartz-community/remove-draft", @@ -231,8 +231,8 @@ "search": { "source": "github:quartz-community/search", "resolved": "https://github.com/quartz-community/search.git", - "commit": "e0ebef9f80b23a015a9252d4ab98b889b08dc8b7", - "installedAt": "2026-06-03T13:16:37.562Z" + "commit": "0f4c1a233cd03a0f562e13636b89b7708f8e2698", + "installedAt": "2026-06-03T13:32:36.597Z" }, "spacer": { "source": "github:quartz-community/spacer", @@ -243,8 +243,8 @@ "stacked-pages": { "source": "github:quartz-community/stacked-pages", "resolved": "https://github.com/quartz-community/stacked-pages.git", - "commit": "9d67b8dedab5c27db98afd26dfa773e5003b0446", - "installedAt": "2026-06-03T13:16:37.236Z" + "commit": "e88fe063c68f74e6ba2dc7c54ddb353bb10c7982", + "installedAt": "2026-06-03T13:32:36.330Z" }, "syntax-highlighting": { "source": "github:quartz-community/syntax-highlighting", @@ -255,26 +255,26 @@ "table-of-contents": { "source": "github:quartz-community/table-of-contents", "resolved": "https://github.com/quartz-community/table-of-contents.git", - "commit": "4c25c048a7f788cb156dad0050d80c7ed88692f9", - "installedAt": "2026-06-03T13:16:36.649Z" + "commit": "6984305e5dae0830c025450e160f12610406f7a4", + "installedAt": "2026-06-03T13:32:36.265Z" }, "tag-list": { "source": "github:quartz-community/tag-list", "resolved": "https://github.com/quartz-community/tag-list.git", - "commit": "0d18b40d26b3499823d46740c35e8ee874ba0ca0", - "installedAt": "2026-06-03T13:16:37.665Z" + "commit": "c48324e2ba768e2a0a5c4c17cd0661b190d075c5", + "installedAt": "2026-06-03T13:32:36.346Z" }, "tag-page": { "source": "github:quartz-community/tag-page", "resolved": "https://github.com/quartz-community/tag-page.git", - "commit": "82f8a6d5e774de5e075978651b6ca81f2ccb6812", - "installedAt": "2026-06-03T13:16:37.398Z" + "commit": "eabf3eec55c0bab7f49e69957341f34d2ae3c5a1", + "installedAt": "2026-06-03T13:32:36.377Z" }, "unlisted-pages": { "source": "github:quartz-community/unlisted-pages", "resolved": "https://github.com/quartz-community/unlisted-pages.git", - "commit": "be42781fb08a60e9f9268682d457b289094d2838", - "installedAt": "2026-06-03T13:16:36.935Z" + "commit": "f512d8672862c5891e63d755ba04b66277e6d760", + "installedAt": "2026-06-03T13:32:36.647Z" } } } From 81db804f54a9a64cdf2cc09e856e562511d143c8 Mon Sep 17 00:00:00 2001 From: saberzero1 Date: Tue, 9 Jun 2026 02:24:05 +0200 Subject: [PATCH 03/16] fix(themes): callouts and layout issues --- quartz.lock.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/quartz.lock.json b/quartz.lock.json index c27c810a8..c4f71cdd7 100644 --- a/quartz.lock.json +++ b/quartz.lock.json @@ -200,9 +200,9 @@ "subdir": "plugin" }, "resolved": "https://github.com/saberzero1/quartz-themes.git", - "commit": "e258410285f82594743fd23f39132b6a0947bed3", + "commit": "5880b5b0d10ce280c84994d3c26b2ef8f9edabda", "subdir": "plugin", - "installedAt": "2026-06-03T13:17:42.994Z" + "installedAt": "2026-06-09T00:21:03.993Z" }, "reader-mode": { "source": "github:quartz-community/reader-mode", From b2f1dad514b2be3cb4954d0d5e92325d3d784a0d Mon Sep 17 00:00:00 2001 From: saberzero1 Date: Tue, 9 Jun 2026 20:01:25 +0200 Subject: [PATCH 04/16] fix(alias-redirect): emit original filepath casing as redirect --- quartz.lock.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/quartz.lock.json b/quartz.lock.json index c4f71cdd7..3558da865 100644 --- a/quartz.lock.json +++ b/quartz.lock.json @@ -4,8 +4,8 @@ "alias-redirects": { "source": "github:quartz-community/alias-redirects", "resolved": "https://github.com/quartz-community/alias-redirects.git", - "commit": "39231fd8a3b477ec7045b7df91898da9c919d134", - "installedAt": "2026-06-03T13:32:35.181Z" + "commit": "73a98dda7e4f55239310833299d91daf8611349f", + "installedAt": "2026-06-09T17:57:45.809Z" }, "article-title": { "source": "github:quartz-community/article-title", From c5bbc92b74f67441fbfc0b1f5ae7ad15ba8e61af Mon Sep 17 00:00:00 2001 From: saberzero1 Date: Tue, 9 Jun 2026 20:01:46 +0200 Subject: [PATCH 05/16] docs: updated migration guide and alias-redirect options --- docs/getting-started/migrating.md | 20 ++++++++++++++ docs/plugins/AliasRedirects.md | 43 ++++++++++++++++++++++++------- 2 files changed, 54 insertions(+), 9 deletions(-) diff --git a/docs/getting-started/migrating.md b/docs/getting-started/migrating.md index 3779bfc8e..6e752ce0b 100644 --- a/docs/getting-started/migrating.md +++ b/docs/getting-started/migrating.md @@ -87,6 +87,26 @@ Key changes: - **Import pattern**: Community plugins use `ExternalPlugin.X()` (from `.quartz/plugins`) instead of `Plugin.X()` (from `./quartz/plugins`) - **Layout structure**: `quartz.layout.ts` is gone — layout position is now a per-plugin property in `quartz.config.yaml` - **Page types**: A new plugin category for page rendering (content, folder, tag pages) +- **URL casing**: All generated URLs are now lowercased and hyphenated (e.g. `My Notes/Hello World.md` → `/my-notes/hello-world`). In v4, the original casing of file and folder names was preserved in URLs. + +### URL Casing and SEO + +If your v4 site had URLs with uppercase letters, those URLs will return 404 errors after upgrading to v5. This also affects search engine indexing, since Google treats URLs as [case-sensitive](https://developers.google.com/search/docs/crawling-indexing/url-structure). + +The [[AliasRedirects]] plugin (enabled by default) automatically handles this. During build, it detects files whose original path contained uppercase characters and generates redirect pages at the old URLs. These redirect pages include proper SEO signals (``, ``, ``) so that search engines transfer ranking to the new lowercase URLs. + +No manual configuration is needed — the plugin is enabled by default and the case redirect behavior is on by default. If you want to disable it, set `enableCaseRedirects: false` in the plugin options: + +```yaml title="quartz.config.yaml" +plugins: + - source: github:quartz-community/alias-redirects + enabled: true + options: + enableCaseRedirects: false +``` + +> [!tip] Hosting on Netlify? +> Netlify automatically lowercases all URLs and issues server-side 301 redirects. If you're hosting on Netlify, the case redirect pages aren't strictly necessary, but they don't hurt either. > [!note] Most users don't need to worry about these details > If you used the default Quartz 4 configuration (or only changed settings that `npx quartz create` prompts for), the setup wizard handles everything. The details below are for users who had custom plugin configurations. diff --git a/docs/plugins/AliasRedirects.md b/docs/plugins/AliasRedirects.md index b0f41d61c..8e53e6292 100644 --- a/docs/plugins/AliasRedirects.md +++ b/docs/plugins/AliasRedirects.md @@ -1,6 +1,6 @@ --- title: AliasRedirects -description: Generates redirect pages from frontmatter aliases. +description: Generates redirect pages from frontmatter aliases and case-preserving URLs. tags: - plugin/emitter image: https://images.unsplash.com/photo-1601735479770-bb5de9dbe844 @@ -9,31 +9,56 @@ enabled: true required: false --- -This plugin emits HTML redirect pages for aliases and permalinks defined in the frontmatter of content files. +This plugin emits HTML redirect pages so that old URLs redirect to the canonical page. It handles two types of redirects: -For example, A `foo.md` has the following frontmatter +1. **Frontmatter aliases**: Redirect pages for aliases defined in your content's frontmatter. +2. **Case-preserving redirects**: Automatic redirect pages for URLs that changed due to Quartz v5's lowercase slug normalization. + +### Frontmatter Aliases + +If `foo.md` has the following frontmatter: ```md title="foo.md" --- title: "Foo" -alias: +aliases: - "bar" --- ``` -The target `host.me/bar` will be redirected to `host.me/foo` +The target `host.me/bar` will be permanently redirected to `host.me/foo`. -Note that these are permanent redirect. - -The emitter supports the following aliases: +The emitter supports the following frontmatter fields: - `aliases` - `alias` +### Case-Preserving Redirects + +Quartz v5 normalizes all URLs to lowercase. If you are migrating from v4 (which preserved the original casing), previously indexed URLs containing uppercase letters (e.g. `/Diary/My-Note`) would return 404 errors. + +When `enableCaseRedirects` is enabled (the default), this plugin automatically detects files whose original path differs from the lowercased slug and generates redirect pages at the original-case URL. For example, if your content directory contains `Diary/2026-01-01.md`, the plugin generates: + +- The canonical page at `/diary/2026-01-01` (produced by the normal build) +- A redirect page at `/Diary/2026-01-01` (produced by this plugin) + +The redirect page includes proper SEO signals: + +- `` for an instant redirect +- `` pointing to the lowercase URL +- `` to prevent duplicate indexing + +This preserves search engine rankings and ensures inbound links continue to work. + +> [!note] +> Case-preserving redirects have no effect on case-insensitive filesystems (macOS, Windows) where the server already resolves either casing to the same file. The plugin automatically detects the filesystem type and skips redirect generation when unnecessary. + > [!note] > For information on how to add, remove or configure plugins, see the [[configuration#Plugins|Configuration]] page. -This plugin has no configuration options. +This plugin accepts the following configuration options: + +- `enableCaseRedirects`: If `true` (default), automatically generates redirect pages for URLs that changed casing due to v5's lowercase normalization. Set to `false` to disable this behavior. ## API From 200029534654542c6a6c2ff0938161876af7c724 Mon Sep 17 00:00:00 2001 From: saberzero1 Date: Wed, 10 Jun 2026 23:16:54 +0200 Subject: [PATCH 06/16] feat: added fonts plugin --- quartz.lock.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/quartz.lock.json b/quartz.lock.json index 3558da865..5d186f1d2 100644 --- a/quartz.lock.json +++ b/quartz.lock.json @@ -127,6 +127,12 @@ "commit": "93304d22e1d7f09f93a33658ec273f7cb8d17793", "installedAt": "2026-06-03T13:32:35.810Z" }, + "fonts": { + "source": "github:quartz-community/fonts", + "resolved": "https://github.com/quartz-community/fonts.git", + "commit": "8be5be706d19ca34fa8e342327b78e11aff3d4f0", + "installedAt": "2026-06-10T21:13:18.081Z" + }, "footer": { "source": "github:quartz-community/footer", "resolved": "https://github.com/quartz-community/footer.git", From 8a79f59abbd9196860bd380cccfb2d831bf2c62e Mon Sep 17 00:00:00 2001 From: saberzero1 Date: Wed, 10 Jun 2026 23:17:19 +0200 Subject: [PATCH 07/16] chore: configure fonts plugin in templates --- quartz.config.default.yaml | 2 ++ quartz/cli/templates/blog.yaml | 2 ++ quartz/cli/templates/default.yaml | 2 ++ quartz/cli/templates/obsidian.yaml | 2 ++ quartz/cli/templates/ttrpg.yaml | 2 ++ 5 files changed, 10 insertions(+) diff --git a/quartz.config.default.yaml b/quartz.config.default.yaml index 9d1ff8c71..771725d90 100644 --- a/quartz.config.default.yaml +++ b/quartz.config.default.yaml @@ -98,6 +98,8 @@ plugins: - source: github:quartz-community/roam enabled: false order: 92 + - source: github:quartz-community/fonts + enabled: true - source: github:quartz-community/remove-draft enabled: true - source: github:quartz-community/explicit-publish diff --git a/quartz/cli/templates/blog.yaml b/quartz/cli/templates/blog.yaml index 234c752d5..5ca9c0e56 100644 --- a/quartz/cli/templates/blog.yaml +++ b/quartz/cli/templates/blog.yaml @@ -100,6 +100,8 @@ plugins: - source: github:quartz-community/roam enabled: false order: 92 + - source: github:quartz-community/fonts + enabled: true - source: github:quartz-community/remove-draft enabled: true - source: github:quartz-community/explicit-publish diff --git a/quartz/cli/templates/default.yaml b/quartz/cli/templates/default.yaml index ebc27800f..111654b3b 100644 --- a/quartz/cli/templates/default.yaml +++ b/quartz/cli/templates/default.yaml @@ -100,6 +100,8 @@ plugins: - source: github:quartz-community/roam enabled: false order: 92 + - source: github:quartz-community/fonts + enabled: true - source: github:quartz-community/remove-draft enabled: true - source: github:quartz-community/explicit-publish diff --git a/quartz/cli/templates/obsidian.yaml b/quartz/cli/templates/obsidian.yaml index 959a066ba..b45dfb3f6 100644 --- a/quartz/cli/templates/obsidian.yaml +++ b/quartz/cli/templates/obsidian.yaml @@ -111,6 +111,8 @@ plugins: - source: github:quartz-community/roam enabled: false order: 92 + - source: github:quartz-community/fonts + enabled: true - source: github:quartz-community/remove-draft enabled: true - source: github:quartz-community/explicit-publish diff --git a/quartz/cli/templates/ttrpg.yaml b/quartz/cli/templates/ttrpg.yaml index 251aa158b..2c06b76dc 100644 --- a/quartz/cli/templates/ttrpg.yaml +++ b/quartz/cli/templates/ttrpg.yaml @@ -111,6 +111,8 @@ plugins: - source: github:quartz-community/roam enabled: false order: 92 + - source: github:quartz-community/fonts + enabled: true - source: github:quartz-community/remove-draft enabled: true - source: github:quartz-community/explicit-publish From 58593c7c726cd058387fa72bf49726327632da88 Mon Sep 17 00:00:00 2001 From: saberzero1 Date: Wed, 10 Jun 2026 23:17:32 +0200 Subject: [PATCH 08/16] docs: added documentation for fonts --- docs/configuration.md | 3 + docs/plugins/Fonts.md | 226 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 229 insertions(+) create mode 100644 docs/plugins/Fonts.md diff --git a/docs/configuration.md b/docs/configuration.md index 9f434bfe8..3563a0862 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -298,3 +298,6 @@ const config = await loadQuartzConfig({ export default config export const layout = await loadQuartzLayout() ``` + +> [!tip] +> For per-heading font control, self-hosted fonts, or Obsidian theme font bridging, see the [[plugins/Fonts|Fonts]] plugin. It can download Google Fonts at build time and serve them locally with `fontOrigin: selfHosted`, making your site fully self-contained. diff --git a/docs/plugins/Fonts.md b/docs/plugins/Fonts.md new file mode 100644 index 000000000..c61ad0788 --- /dev/null +++ b/docs/plugins/Fonts.md @@ -0,0 +1,226 @@ +--- +title: Fonts +description: Fine-grained font control with per-heading support, Google Fonts integration, and theme font discovery. +tags: + - plugin/transformer + - plugin/emitter +image: +repository: "[quartz-community/fonts](https://github.com/quartz-community/fonts)" +enabled: true +required: false +--- + +This plugin provides fine-grained control over fonts in your Quartz site. It supports per-heading font families, automatic theme font discovery when used with [[plugins/QuartzTheme|QuartzTheme]], Google Fonts integration with automatic weight and italic loading, and falls back to Obsidian's default system font stacks. + +> [!note] +> For information on how to add, remove or configure plugins, see the [[configuration#Plugins|Configuration]] page. + +## Why use Fonts? + +Quartz uses three CSS variables for fonts: `--headerFont`, `--bodyFont`, and `--codeFont`. Obsidian themes use a different system with per-heading variables (`--h1-font` through `--h6-font`), `--font-text`, and `--font-monospace`. These two systems don't bridge correctly, causing heading fonts to not render as themes intend. + +Fonts solves this by: + +1. Bridging the Obsidian and Quartz font systems +2. Emitting **unlayered** CSS that correctly overrides Quartz's base heading styles +3. Providing per-heading font control that neither system offers alone +4. Optionally loading fonts from Google Fonts with fine-grained weight and italic control + +## Configuration + +Font options accept either a CSS font-family string or an object with Google Fonts loading control: + +```yaml +# String form +body: '"Inter", sans-serif' + +# Object form (for Google Fonts weight/italic control) +body: + name: Inter + weights: [400, 600, 700] + includeItalic: true +``` + +This plugin accepts the following configuration options: + +| Option | Type | Default | Description | +| --------------- | ------------------- | ---------------- | ---------------------------------------------------------------------------------------------------------------------- | +| `title` | `FontSpecification` | `header` value | Font family for the site title. | +| `body` | `FontSpecification` | Obsidian default | Font family for body text. | +| `header` | `FontSpecification` | Obsidian default | Default font family for all headings (h1-h6). | +| `code` | `FontSpecification` | Obsidian default | Font family for code and monospace elements. | +| `interface` | `FontSpecification` | Obsidian default | Font family for UI elements. | +| `h1` – `h6` | `FontSpecification` | `header` value | Per-heading font family overrides. | +| `useThemeFonts` | `boolean` | `true` | Use fonts from QuartzTheme as defaults when it is installed. | +| `fontOrigin` | `string` | `"local"` | `"googleFonts"` to load from Google Fonts CDN, `"selfHosted"` to download and serve locally, `"local"` for no loading. | + +### Default options + +```yaml title="quartz.config.yaml" +- source: github:quartz-community/fonts + enabled: true + options: + useThemeFonts: true + fontOrigin: local +``` + +### Font resolution + +Fonts are resolved using a priority chain: + +``` +User config (plugin options) + → Theme fonts (from QuartzTheme, if installed) + → Obsidian defaults (system font stacks) +``` + +For individual headings: + +``` +h1 option → header option → theme --h1-font → theme font → Obsidian default +``` + +For the site title: + +``` +title option → header option → theme font → Obsidian default +``` + +## Usage with QuartzTheme + +When [[plugins/QuartzTheme|QuartzTheme]] is installed and enabled, Fonts automatically discovers the theme's font metadata and uses it as defaults. Any options you explicitly set in Fonts will override the theme fonts. + +Fonts must run **after** QuartzTheme. This is handled automatically by plugin ordering (QuartzTheme = 50, Fonts = 60). + +> [!warning] +> If QuartzTheme is enabled but hasn't run yet when Fonts executes, you'll see a warning in the console. Make sure QuartzTheme has a lower `defaultOrder` than Fonts. + +## Usage without QuartzTheme + +Fonts works standalone. Without a theme, it falls back to Obsidian's default system font stacks. You can set fonts explicitly via the plugin options. + +## Examples + +```yaml title="quartz.config.yaml" +# Use theme fonts automatically (default behavior) +- source: github:quartz-community/fonts + enabled: true + +# Override just the heading font +- source: github:quartz-community/fonts + enabled: true + options: + header: '"Playfair Display", serif' + +# Full control with per-heading fonts +- source: github:quartz-community/fonts + enabled: true + options: + body: '"Inter", sans-serif' + header: '"Playfair Display", serif' + code: '"JetBrains Mono", monospace' + h1: '"Playfair Display", serif' + h2: '"Lora", serif' + +# Load from Google Fonts automatically +- source: github:quartz-community/fonts + enabled: true + options: + fontOrigin: googleFonts + body: Inter + header: Playfair Display + code: JetBrains Mono + +# Google Fonts with weight/italic control +- source: github:quartz-community/fonts + enabled: true + options: + fontOrigin: googleFonts + body: + name: Inter + weights: [400, 600, 700] + includeItalic: true + header: + name: Playfair Display + weights: [400, 700] + code: + name: JetBrains Mono + weights: [400] + +# Custom title font (separate from header) +- source: github:quartz-community/fonts + enabled: true + options: + fontOrigin: googleFonts + title: Abril Fatface + header: Playfair Display + body: Inter + code: JetBrains Mono + +# Self-hosted fonts (downloaded at build time, no external requests) +- source: github:quartz-community/fonts + enabled: true + options: + fontOrigin: selfHosted + body: Inter + header: Playfair Display + code: JetBrains Mono + +# Ignore theme fonts entirely +- source: github:quartz-community/fonts + enabled: true + options: + useThemeFonts: false + body: '"Inter", sans-serif' +``` + +## Self-Hosted Fonts + +When `fontOrigin: selfHosted` is set, Fonts downloads fonts from Google Fonts during the build and serves them from your site's `static/fonts/` directory. This makes your site fully self-contained with no external requests to Google at runtime. + +At build time, the plugin: + +1. Fetches the Google Fonts CSS for your configured fonts +2. Downloads each font file (`.woff2`, `.woff`, etc.) +3. Writes the font files to `static/fonts/` in your build output +4. Generates a `quartz-fonts.css` file with `@font-face` rules pointing to the local files + +> [!note] +> Self-hosted fonts require `baseUrl` to be set in your Quartz configuration, since font URLs in the CSS need an absolute path. + +```yaml title="quartz.config.yaml" +configuration: + baseUrl: "example.com" + +plugins: + - source: github:quartz-community/fonts + enabled: true + options: + fontOrigin: selfHosted + body: Inter + header: Playfair Display + code: JetBrains Mono +``` + +## Google Fonts Validation + +When `fontOrigin: googleFonts` is set and the optional [`google-font-metadata`](https://www.npmjs.com/package/google-font-metadata) package is installed, Fonts validates your font configuration at build time: + +- Checks that font family names exist in Google Fonts. +- Warns if requested weights are not available for a font. +- Warns if italic is requested but the font doesn't support it. + +Install it to enable validation: + +```bash +npm install google-font-metadata +``` + +Validation warnings are logged to the console but do not block the build. + +## API + +- Category: Transformer, Emitter +- Function name: `ExternalPlugin.Fonts()` (transformer), `ExternalPlugin.FontsEmitter()` (emitter). +- Source: [`quartz-community/fonts`](https://github.com/quartz-community/fonts) +- Install: `npx quartz plugin add github:quartz-community/fonts` From 87083faeb6bdc7cce86598773c3a9748f59b0115 Mon Sep 17 00:00:00 2001 From: saberzero1 Date: Thu, 11 Jun 2026 10:46:55 +0200 Subject: [PATCH 09/16] docs: updated fonts configuration --- docs/plugins/Fonts.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/plugins/Fonts.md b/docs/plugins/Fonts.md index c61ad0788..f12d2f65f 100644 --- a/docs/plugins/Fonts.md +++ b/docs/plugins/Fonts.md @@ -10,7 +10,7 @@ enabled: true required: false --- -This plugin provides fine-grained control over fonts in your Quartz site. It supports per-heading font families, automatic theme font discovery when used with [[plugins/QuartzTheme|QuartzTheme]], Google Fonts integration with automatic weight and italic loading, and falls back to Obsidian's default system font stacks. +This plugin provides fine-grained control over fonts in your Quartz site. It supports per-heading font families, automatic theme font discovery when used with [Quartz Themes](https://github.com/saberzero1/quartz-themes), Google Fonts integration with automatic weight and italic loading, and falls back to Obsidian's default system font stacks. > [!note] > For information on how to add, remove or configure plugins, see the [[configuration#Plugins|Configuration]] page. @@ -51,8 +51,8 @@ This plugin accepts the following configuration options: | `code` | `FontSpecification` | Obsidian default | Font family for code and monospace elements. | | `interface` | `FontSpecification` | Obsidian default | Font family for UI elements. | | `h1` – `h6` | `FontSpecification` | `header` value | Per-heading font family overrides. | -| `useThemeFonts` | `boolean` | `true` | Use fonts from QuartzTheme as defaults when it is installed. | -| `fontOrigin` | `string` | `"local"` | `"googleFonts"` to load from Google Fonts CDN, `"selfHosted"` to download and serve locally, `"local"` for no loading. | +| `useThemeFonts` | `boolean` | `true` | Use fonts from [Quartz Themes](https://github.com/saberzero1/quartz-themes) as defaults when it is installed. | +| `fontOrigin` | `string` | `"googleFonts"` | `"googleFonts"` to load from Google Fonts CDN, `"selfHosted"` to download and serve locally, `"local"` for no loading. | ### Default options @@ -61,7 +61,7 @@ This plugin accepts the following configuration options: enabled: true options: useThemeFonts: true - fontOrigin: local + fontOrigin: googleFonts ``` ### Font resolution @@ -70,7 +70,7 @@ Fonts are resolved using a priority chain: ``` User config (plugin options) - → Theme fonts (from QuartzTheme, if installed) + → Theme fonts (from Quartz Themes, if installed) → Obsidian defaults (system font stacks) ``` @@ -86,16 +86,16 @@ For the site title: title option → header option → theme font → Obsidian default ``` -## Usage with QuartzTheme +## Usage with Quartz Themes -When [[plugins/QuartzTheme|QuartzTheme]] is installed and enabled, Fonts automatically discovers the theme's font metadata and uses it as defaults. Any options you explicitly set in Fonts will override the theme fonts. +When [Quartz Themes](https://github.com/saberzero1/quartz-themes) is installed and enabled, Fonts automatically discovers the theme's font metadata and uses it as defaults. Any options you explicitly set in Fonts will override the theme fonts. -Fonts must run **after** QuartzTheme. This is handled automatically by plugin ordering (QuartzTheme = 50, Fonts = 60). +Fonts must run **after** Quartz Themes. This is handled automatically by plugin ordering (Quartz Themes = 10, Fonts = 60). > [!warning] -> If QuartzTheme is enabled but hasn't run yet when Fonts executes, you'll see a warning in the console. Make sure QuartzTheme has a lower `defaultOrder` than Fonts. +> If Quartz Themes is enabled but hasn't run yet when Fonts executes, you'll see a warning in the console. Make sure Quartz Themes has a lower `defaultOrder` than Fonts. -## Usage without QuartzTheme +## Usage without Quartz Themes Fonts works standalone. Without a theme, it falls back to Obsidian's default system font stacks. You can set fonts explicitly via the plugin options. From decbd0a96905fab8ffcc89fea1547f0ffcec17a8 Mon Sep 17 00:00:00 2001 From: saberzero1 Date: Thu, 11 Jun 2026 12:10:38 +0200 Subject: [PATCH 10/16] chore: updated plugins --- quartz.lock.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/quartz.lock.json b/quartz.lock.json index 5d186f1d2..d92eb865d 100644 --- a/quartz.lock.json +++ b/quartz.lock.json @@ -206,9 +206,9 @@ "subdir": "plugin" }, "resolved": "https://github.com/saberzero1/quartz-themes.git", - "commit": "5880b5b0d10ce280c84994d3c26b2ef8f9edabda", + "commit": "7839f0007c815da3137eee60fa31ab23ac4e9de2", "subdir": "plugin", - "installedAt": "2026-06-09T00:21:03.993Z" + "installedAt": "2026-06-11T10:09:47.920Z" }, "reader-mode": { "source": "github:quartz-community/reader-mode", From 25d89ff94a4fd5f7626d8bb3af84315b0365ac4e Mon Sep 17 00:00:00 2001 From: saberzero1 Date: Thu, 11 Jun 2026 14:54:19 +0200 Subject: [PATCH 11/16] chore: updated plugins --- quartz.lock.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/quartz.lock.json b/quartz.lock.json index d92eb865d..fe403c397 100644 --- a/quartz.lock.json +++ b/quartz.lock.json @@ -206,9 +206,9 @@ "subdir": "plugin" }, "resolved": "https://github.com/saberzero1/quartz-themes.git", - "commit": "7839f0007c815da3137eee60fa31ab23ac4e9de2", + "commit": "5cc0ac63cd34ede464fb9562c470647946363177", "subdir": "plugin", - "installedAt": "2026-06-11T10:09:47.920Z" + "installedAt": "2026-06-11T12:53:34.759Z" }, "reader-mode": { "source": "github:quartz-community/reader-mode", From 9e74db69a9bb71079cfd72452db1cae720139766 Mon Sep 17 00:00:00 2001 From: saberzero1 Date: Thu, 11 Jun 2026 15:07:26 +0200 Subject: [PATCH 12/16] docs: clarified and extended installation guide --- docs/getting-started/index.md | 10 ++++++- docs/getting-started/installation.md | 40 +++++++++++++++++++++++----- docs/index.md | 5 +++- 3 files changed, 46 insertions(+), 9 deletions(-) diff --git a/docs/getting-started/index.md b/docs/getting-started/index.md index 4a55a19c0..37e5eb644 100644 --- a/docs/getting-started/index.md +++ b/docs/getting-started/index.md @@ -6,15 +6,23 @@ This guide walks you through setting up Quartz from scratch. If you already ran ## Prerequisites +You need these tools installed before continuing: + - **[Node.js](https://nodejs.org/) v22 or later** (run `node -v` to check) - **npm v10.9.2 or later** (bundled with Node — run `npm -v` to check) - **[Git](https://git-scm.com/)** (run `git -v` to check) +> [!warning] Common issues +> +> - **Linux**: System packages (`apt install nodejs`) often ship much older versions. Use [nvm](https://github.com/nvm-sh/nvm) or the [NodeSource](https://github.com/nodesource/distributions) repository to get Node.js v22. +> - **Windows**: When installing Git, make sure **"Git from the command line and also from 3rd-party software"** is selected so that `git` is available in your terminal. If `node -v` or `git -v` shows "command not found", restart your terminal or check your PATH. +> - **macOS**: The Xcode command-line tools include Git (`xcode-select --install`). For Node.js, [nvm](https://github.com/nvm-sh/nvm) or the [official installer](https://nodejs.org/) both work. + ## Setup Steps Follow these in order: -1. **[[installation|Installation]]** — Clone Quartz, install dependencies, run the setup wizard (`npx quartz create`), install plugins, and preview your site locally +1. **[[installation|Installation]]** — Get Quartz (via GitHub template or clone), install dependencies, run the setup wizard (`npx quartz create`), install plugins, and preview your site locally 2. **[[authoring-content|Authoring Content]]** — Write and organize your Markdown notes in the `content/` folder 3. **[[installation#Setting Up Your GitHub Repository|Push to GitHub]]** — Create a repository and push your site with `npx quartz sync` 4. **[[hosting|Deploy]]** — Host your site for free on GitHub Pages, Cloudflare, Netlify, or Vercel diff --git a/docs/getting-started/installation.md b/docs/getting-started/installation.md index bba37b450..b07ba458d 100644 --- a/docs/getting-started/installation.md +++ b/docs/getting-started/installation.md @@ -4,15 +4,38 @@ aliases: - "setting up your GitHub repository" --- -This page walks you through the full Quartz setup: from cloning the repository to previewing your site locally, then pushing it to GitHub. +This page walks you through the full Quartz setup: from getting the source code to previewing your site locally, then pushing it to GitHub. -## 1. Clone Quartz +## 1. Get Quartz + +There are two ways to get started. Pick whichever you prefer: + +### Option A: Use the GitHub Template (Recommended) + +> [!tip] Why this option? +> Using the template creates your own repository in one click — no need to reconfigure Git remotes later. + +1. Go to the [Quartz repository](https://github.com/jackyzha0/quartz) and click **Use this template** → **Create a new repository** +2. Give your repository a name (e.g. `quartz`, `notes`, `garden`), choose public or private, then click **Create repository** +3. Clone **your new repository** and enter the folder: + +```bash +git clone https://github.com//.git +cd +``` + +### Option B: Clone Directly + +If you don't use GitHub or prefer a manual setup: ```bash git clone https://github.com/jackyzha0/quartz.git cd quartz ``` +> [!note] +> With this option, you'll need to [[#Connect Your Local Clone|point the `origin` remote]] to your own repository later when you're ready to publish. + ## 2. Install Dependencies > [!important] @@ -78,11 +101,14 @@ At this point you can [[authoring-content|start writing content]] in the `conten ## Setting Up Your GitHub Repository -To publish your site, you'll need your own GitHub repository. +> [!note] +> If you used **Option A** (GitHub Template) in step 1, your repository already exists and `origin` is already set. You can skip straight to [[#Push Your Site]]. + +To publish your site, you'll need your own GitHub repository. This section is for **Option B** (direct clone) users. ### Create the Repository -Create a new repository on [GitHub.com](https://github.com/new). Do **not** initialize it with a README, license, or `.gitignore` — the Quartz clone already has these. +Create a new repository on [GitHub.com](https://github.com/new). Do **not** initialize it with a README, license, or `.gitignore` — Quartz already includes these files, and duplicating them will cause merge conflicts on your first push. ![[github-init-repo-options.png]] @@ -100,11 +126,11 @@ git remote -v # Point origin to your repository git remote set-url origin REMOTE-URL - -# Add the official Quartz repo as upstream (for future upgrades) -git remote add upstream https://github.com/jackyzha0/quartz.git ``` +> [!tip] +> You don't need to add an `upstream` remote manually — `npx quartz create` already configured it for you. The upstream remote is used by `npx quartz upgrade` to pull in future Quartz updates. + ### Push Your Site ```bash diff --git a/docs/index.md b/docs/index.md index f3e595273..5353074ce 100644 --- a/docs/index.md +++ b/docs/index.md @@ -6,7 +6,10 @@ Quartz is a fast, batteries-included static-site generator that transforms Markd ## 🪴 Get Started -Quartz requires **at least [Node](https://nodejs.org/) v22** and `npm` v10.9.2 to function correctly. Ensure you have these installed on your machine before continuing. +Quartz requires **at least [Node](https://nodejs.org/) v22** and `npm` v10.9.2 to function correctly. Ensure you have these installed on your machine before continuing. See the [[getting-started/index#Prerequisites|prerequisites]] for help installing them. + +> [!tip] GitHub users +> You can also use the **[GitHub template](https://github.com/jackyzha0/quartz/generate)** to create your repository in one click, then clone that instead. See [[installation#Option A Use the GitHub Template Recommended|Option A]] in the installation guide. ```shell # 1. Clone the Quartz repository From 92a4a48430cd33810317993a09a14c5eb4b4f3c6 Mon Sep 17 00:00:00 2001 From: saberzero1 Date: Thu, 11 Jun 2026 17:55:16 +0200 Subject: [PATCH 13/16] fix: callouts overlapping explorer --- quartz.lock.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/quartz.lock.json b/quartz.lock.json index fe403c397..3f97ed527 100644 --- a/quartz.lock.json +++ b/quartz.lock.json @@ -206,9 +206,9 @@ "subdir": "plugin" }, "resolved": "https://github.com/saberzero1/quartz-themes.git", - "commit": "5cc0ac63cd34ede464fb9562c470647946363177", + "commit": "945135e8b70576753d0591e1713fe56553100b3d", "subdir": "plugin", - "installedAt": "2026-06-11T12:53:34.759Z" + "installedAt": "2026-06-11T15:50:25.576Z" }, "reader-mode": { "source": "github:quartz-community/reader-mode", From e12ca11100167c1282ea305497aa695631a71b27 Mon Sep 17 00:00:00 2001 From: Narath Carlile Date: Mon, 15 Jun 2026 20:19:27 -0400 Subject: [PATCH 14/16] fix: watch quartz.config.yaml during serve (#2448) The serve-mode watcher globs never matched quartz.config.yaml or quartz.config.default.yaml, so config edits (theme colors, plugin flags, footer links) silently required a server restart. This was a regression from v4, where quartz.config.ts matched the **/*.ts glob. --- quartz/cli/handlers.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/quartz/cli/handlers.js b/quartz/cli/handlers.js index 3bf762fe0..6d4119c57 100644 --- a/quartz/cli/handlers.js +++ b/quartz/cli/handlers.js @@ -593,6 +593,8 @@ export async function handleBuild(argv) { "**/*.tsx", "**/*.scss", "package.json", + "quartz.config.yaml", + "quartz.config.default.yaml", ]) chokidar .watch(paths, { ignoreInitial: true }) From e54b89f88906c2fbdae7a80d5524719c8be096bd Mon Sep 17 00:00:00 2001 From: Leo Schultheiss Date: Tue, 16 Jun 2026 02:21:46 +0200 Subject: [PATCH 15/16] fix(ci): add git install to Dockerfile (#2443) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Leo Schultheiß --- Dockerfile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Dockerfile b/Dockerfile index e6c0a21e2..cb2a88965 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,8 @@ FROM node:22-slim AS builder + +# install git to install plugins +RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/* + WORKDIR /usr/src/app COPY package.json . COPY package-lock.json* . From 9cf87ff1c248a8ca551093214b0fec3b31415009 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jun 2026 20:22:29 -0400 Subject: [PATCH 16/16] chore(deps): bump the ci-dependencies group across 1 directory with 9 updates (#2426) Bumps the ci-dependencies group with 9 updates in the / directory: | Package | From | To | | --- | --- | --- | | [actions/upload-artifact](https://github.com/actions/upload-artifact) | `6` | `7` | | [actions/download-artifact](https://github.com/actions/download-artifact) | `7` | `8` | | [rlespinasse/github-slug-action](https://github.com/rlespinasse/github-slug-action) | `5.4.0` | `5.6.0` | | [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) | `3` | `4` | | [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) | `3` | `4` | | [sigstore/cosign-installer](https://github.com/sigstore/cosign-installer) | `4.0.0` | `4.1.2` | | [docker/login-action](https://github.com/docker/login-action) | `3` | `4` | | [docker/metadata-action](https://github.com/docker/metadata-action) | `5` | `6` | | [docker/build-push-action](https://github.com/docker/build-push-action) | `6` | `7` | Updates `actions/upload-artifact` from 6 to 7 - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v6...v7) Updates `actions/download-artifact` from 7 to 8 - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](https://github.com/actions/download-artifact/compare/v7...v8) Updates `rlespinasse/github-slug-action` from 5.4.0 to 5.6.0 - [Release notes](https://github.com/rlespinasse/github-slug-action/releases) - [Commits](https://github.com/rlespinasse/github-slug-action/compare/v5.4.0...v5.6.0) Updates `docker/setup-qemu-action` from 3 to 4 - [Release notes](https://github.com/docker/setup-qemu-action/releases) - [Commits](https://github.com/docker/setup-qemu-action/compare/v3...v4) Updates `docker/setup-buildx-action` from 3 to 4 - [Release notes](https://github.com/docker/setup-buildx-action/releases) - [Commits](https://github.com/docker/setup-buildx-action/compare/v3...v4) Updates `sigstore/cosign-installer` from 4.0.0 to 4.1.2 - [Release notes](https://github.com/sigstore/cosign-installer/releases) - [Commits](https://github.com/sigstore/cosign-installer/compare/v4.0.0...v4.1.2) Updates `docker/login-action` from 3 to 4 - [Release notes](https://github.com/docker/login-action/releases) - [Commits](https://github.com/docker/login-action/compare/v3...v4) Updates `docker/metadata-action` from 5 to 6 - [Release notes](https://github.com/docker/metadata-action/releases) - [Commits](https://github.com/docker/metadata-action/compare/v5...v6) Updates `docker/build-push-action` from 6 to 7 - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v6...v7) --- updated-dependencies: - dependency-name: actions/download-artifact dependency-version: '8' dependency-type: direct:production update-type: version-update:semver-major dependency-group: ci-dependencies - dependency-name: actions/upload-artifact dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major dependency-group: ci-dependencies - dependency-name: docker/build-push-action dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major dependency-group: ci-dependencies - dependency-name: docker/login-action dependency-version: '4' dependency-type: direct:production update-type: version-update:semver-major dependency-group: ci-dependencies - dependency-name: docker/metadata-action dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major dependency-group: ci-dependencies - dependency-name: docker/setup-buildx-action dependency-version: '4' dependency-type: direct:production update-type: version-update:semver-major dependency-group: ci-dependencies - dependency-name: docker/setup-qemu-action dependency-version: '4' dependency-type: direct:production update-type: version-update:semver-major dependency-group: ci-dependencies - dependency-name: rlespinasse/github-slug-action dependency-version: 5.6.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: ci-dependencies - dependency-name: sigstore/cosign-installer dependency-version: 4.1.2 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: ci-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build-preview.yaml | 2 +- .github/workflows/deploy-preview.yaml | 2 +- .github/workflows/docker-build-push.yaml | 16 ++++++++-------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build-preview.yaml b/.github/workflows/build-preview.yaml index 0c71f4144..da726c745 100644 --- a/.github/workflows/build-preview.yaml +++ b/.github/workflows/build-preview.yaml @@ -48,7 +48,7 @@ jobs: run: npx quartz build -d docs -v - name: Upload build artifact - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: preview-build path: public diff --git a/.github/workflows/deploy-preview.yaml b/.github/workflows/deploy-preview.yaml index e2663be56..4ed4fc544 100644 --- a/.github/workflows/deploy-preview.yaml +++ b/.github/workflows/deploy-preview.yaml @@ -18,7 +18,7 @@ jobs: name: Deploy Preview to Cloudflare Pages steps: - name: Download build artifact - uses: actions/download-artifact@v7 + uses: actions/download-artifact@v8 id: preview-build-artifact with: name: preview-build diff --git a/.github/workflows/docker-build-push.yaml b/.github/workflows/docker-build-push.yaml index a00f95bb3..dc346cb6d 100644 --- a/.github/workflows/docker-build-push.yaml +++ b/.github/workflows/docker-build-push.yaml @@ -25,11 +25,11 @@ jobs: with: fetch-depth: 1 - name: Inject slug/short variables - uses: rlespinasse/github-slug-action@v5.4.0 + uses: rlespinasse/github-slug-action@v5.6.0 - name: Set up QEMU - uses: docker/setup-qemu-action@v3 + uses: docker/setup-qemu-action@v4 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 with: install: true driver-opts: | @@ -37,9 +37,9 @@ jobs: network=host - name: Install cosign if: github.event_name != 'pull_request' - uses: sigstore/cosign-installer@v4.0.0 + uses: sigstore/cosign-installer@v4.1.2 - name: Login to GitHub Container Registry - uses: docker/login-action@v3 + uses: docker/login-action@v4 if: github.event_name != 'pull_request' with: registry: ghcr.io @@ -49,7 +49,7 @@ jobs: - name: Extract metadata tags and labels on PRs if: github.event_name == 'pull_request' id: meta-pr - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: images: ghcr.io/${{ env.OWNER_LOWERCASE }}/quartz tags: | @@ -59,7 +59,7 @@ jobs: - name: Extract metadata tags and labels for main, release or tag if: github.event_name != 'pull_request' id: meta - uses: docker/metadata-action@v5 + uses: docker/metadata-action@v6 with: flavor: | latest=auto @@ -76,7 +76,7 @@ jobs: - name: Build and push Docker image id: build-and-push - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: push: ${{ github.event_name != 'pull_request' }} build-args: |