Martin Donath
b229bac9ad
fix: zensical serve returns 404 after suspend ( #574 )
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
Co-authored-by: takeshiD <goriponikeike55@gmail.com >
2026-05-01 20:08:37 +02:00
Martin Donath
b5492cef2e
fix: shim for mkdocs-glightbox fails when only defaults are set ( #611 )
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-05-01 19:32:54 +02:00
Martin Donath
0291ad5360
chore: release v0.0.39
...
## Summary
This version fixes several bugs related to link validation and lightbox configuration.
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
v0.0.39
2026-05-01 18:24:15 +02:00
Martin Donath
fe42fc4dde
fix: shim for MkDocs validation syntax overrides Zensical's ( #607 )
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-05-01 18:18:35 +02:00
Martin Donath
89d99bafaf
Merge pull request #597 from zensical/fix/validation-text-fragment
...
fix: anchor not extracted from combined anchor-text-fragment
2026-05-01 18:02:52 +02:00
Martin Donath
273dd2313a
fix: auto-themed gallery takes precedence over explicit grouping
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-05-01 17:37:02 +02:00
Martin Donath
b693a2fe4b
Fix glightbox captions ( #605 )
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-05-01 13:46:55 +02:00
squidfunk
dfc74bf921
chore: fix ty warning
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-05-01 13:39:22 +02:00
squidfunk
3e27d6954b
refactor: move glightbox config options to dataclass
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-05-01 13:36:14 +02:00
squidfunk
8ed39039ce
chore: disable ruff's N802 globally
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-05-01 13:27:06 +02:00
squidfunk
c050add8a0
fix: error when setting caption_position on glightbox extension ( #604 )
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-05-01 13:12:13 +02:00
squidfunk
699d3be0f6
fix: add Python backtrace on Markdown rendering error
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-05-01 13:09:24 +02:00
squidfunk
acc2620a57
fix: validation doesn't correctly map percent-encoded links ( #598 )
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-04-30 17:33:54 +02:00
squidfunk
da317bf201
fix: add $...$ and $$...$$ blocks to exclusions for link validation ( #599 )
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-04-30 17:20:41 +02:00
squidfunk
94f0d29756
fix: anchor not extracted from combined anchor-text-fragment
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-04-30 15:31:21 +02:00
Martin Donath
2f6ce8c5aa
chore: upgrade Docker image to latest Alpine
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-04-30 14:54:25 +02:00
Martin Donath
0e7f1d8cf8
chore: release v0.0.38
...
## Summary
This version adds [link and footnote validation] and [strict mode] – two of the most frequently requested features. Zensical now checks all internal references at build time and reports issues with precise source locations, so broken links don't make it into your published documentation. Unlike MkDocs, which only validates final rendered links, Zensical also checks for unresolved references, as well as unused and shadowed definitions – covering the full lifecycle of a reference from definition to use.
[link and footnote validation]: https://zensical.org/docs/setup/validation/
[strict mode]: https://zensical.org/docs/setup/validation/#strict-mode
### Validation
Zensical scans every Markdown file in your project and resolves all internal references against each other: inline links, reference-style links, footnotes, link definitions, and anchor targets. Every check is individually configurable and enabled by default.
``` console
$ zensical build
...
Warning: page does not exist
╭─[ index.md:3:14 ]
│
3 │ [this page]: non-existent.md
│ ───────┬───────
│ ╰───────── page does not exist
───╯
```
The following checks for links and footnotes are now available:
- [`unresolved_references`](https://zensical.org/docs/setup/validation/#unresolved_references )
- [`unresolved_footnotes`](https://zensical.org/docs/setup/validation/#unresolved_footnotes )
- [`unused_definitions`](https://zensical.org/docs/setup/validation/#unused_definitions )
- [`unused_footnotes`](https://zensical.org/docs/setup/validation/#unused_footnotes )
- [`shadowed_definitions`](https://zensical.org/docs/setup/validation/#shadowed_definitions )
- [`shadowed_footnotes`](https://zensical.org/docs/setup/validation/#shadowed_footnotes )
- [`invalid_links`](https://zensical.org/docs/setup/validation/#invalid_links )
- [`invalid_link_anchors`](https://zensical.org/docs/setup/validation/#invalid_link_anchors )
### Strict mode
The new `--strict` command line flag causes the build to fail when any enabled validation check triggers, turning warnings into errors. This is useful for CI pipelines where you want to enforce link integrity and prevent broken documentation from being published:
``` console
$ zensical build --strict
...
Warning: unresolved link reference
╭─[ index.md:1:35 ]
│
1 │ This is an [unresolved reference][id].
│ ─┬
│ ╰── unresolved link reference
───╯
1 issue found
Aborted because --strict flag is set
```
## Upgrading
No changes to your configuration are required – all checks are enabled by default. It's quite likely that you'll run into at least some warnings – [as we did] – when upgrading, since before, it was easy to miss unused link definitions or unresolved references. If you want to [disable validation entirely](https://zensical.org/docs/setup/validation/ ), you can use:
``` toml
[project]
validation = false
```
As always, if you run into any problems, please [open an issue](https://github.com/zensical/zensical/issues ).
[as we did]: https://github.com/zensical/docs/commit/facabcce36977468ef6465f2ac19ff68b692ada2
[disable validation entirely]: https://zensical.org/docs/setup/validation/#configuration-zensicaltoml_1
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
v0.0.38
2026-04-30 13:56:34 +02:00
Martin Donath
201c615cd0
feature: add link and footnote validation and --strict mode ( #175 )
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-04-30 13:17:23 +02:00
Timothée Mazzucotelli
b3c1d91ed8
refactor: use our markdown subclasses
...
Signed-off-by: Timothée Mazzucotelli <dev@pawamoy.fr >
2026-04-28 12:34:15 +00:00
Martin Donath
ce8cbf817c
refactor: simplify function definitions after zrx upgrade
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-04-27 16:56:48 +02:00
Martin Donath
55c9d26e91
chore: release v0.0.37
...
## Summary
This version adds support for installable themes. You can now bundle your theme overrides and package them into a custom theme which can be installed via `pip`.
As of now, we closely mirror the process used by MkDocs, where themes just need to register themselves in the `mkdocs.themes` entrypoint, to allow users that already have derivations of Material for MkDocs to run them on Zensical. In the coming months, with the advent of the [component system], we'll make this process much more flexible and foster reuse at the component level. For now, this is a first step to allow sharing of theme overrides and default configurations inside organizations with dozens or even thousands of projects.
> [!TIP]
>
> If your organization has been a happy user of Material for MkDocs and is considering switching to Zensical, please support our work through [Zensical Spark]. Your financial contribution helps us achieve full compatibility with MkDocs much faster, gives you access to hands-on support by the core team, and allows you to shape Zensical together with us.
[component system]: https://zensical.org/about/roadmap/#component-system
[Zensical Spark]: https://zensical.org/spark/
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
v0.0.37
2026-04-27 09:54:04 +02:00
Martin Donath
5178689c7a
chore: fix ty warning
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-04-27 09:35:01 +02:00
Martin Donath
5fd8871c6a
fix: revert change in search processor (regression)
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-04-26 17:01:37 +02:00
Martin Donath
99d53f68c2
feature: add collectors to extract references for link validation
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-04-25 15:13:54 +02:00
Martin Donath
98720928cc
refactor: subclass Markdown processors to extend functionality
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
Co-authored-by: Timothée Mazzucotelli <dev@pawamoy.fr >
2026-04-25 13:42:39 +02:00
Timothée Mazzucotelli
72ba12236b
fix: sanitize nested metadata ( #582 )
...
Signed-off-by: Timothée Mazzucotelli <dev@pawamoy.fr >
2026-04-25 11:26:28 +00:00
Timothée Mazzucotelli
dfb73ff1f3
chore: switch to ty
...
Signed-off-by: Timothée Mazzucotelli <dev@pawamoy.fr >
2026-04-24 17:14:04 +00:00
Martin Donath
c937ed3c4d
Merge pull request #577 from zensical/fix/glightbox-title
...
fix: attributes not applied to lightbox images
2026-04-24 16:17:38 +02:00
squidfunk
2fb663e1fd
fix: text adjacent to image included in link to open image in lightbox ( #579 )
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-04-24 16:04:53 +02:00
squidfunk
dc32baf98f
fix: anchor links preserved in table of content section titles ( #578 )
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-04-24 14:16:11 +02:00
squidfunk
fdeb0616cd
refactor: use identical name for tree- and postprocessor
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-04-24 13:58:01 +02:00
squidfunk
127648e743
fix: attributes not applied to lightbox images
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-04-24 13:55:20 +02:00
Timothée Mazzucotelli
76945357dc
feature: installable theme extensions ( #511 )
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
Signed-off-by: Timothée Mazzucotelli <dev@pawamoy.fr >
Co-authored-by: squidfunk <martin.donath@squidfunk.com >
2026-04-24 13:37:59 +02:00
Timothée Mazzucotelli
46b03e5d7c
chore: add spacing in markdown example
...
This also makes the markup for lists compliant with Python-Markdown (required blank line before).
Signed-off-by: Timothée Mazzucotelli <dev@pawamoy.fr >
2026-04-24 09:25:59 +00:00
Martin Donath
5081de243f
chore: release v0.0.36 ( #576 )
...
This version adds the missing update of the user interface that should've been included with 0.0.35.
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
v0.0.36
2026-04-23 17:29:36 +02:00
Martin Donath
d4d88f8571
fix: update ui to v0.0.15
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-04-23 17:26:26 +02:00
Martin Donath
ca9743add9
chore: release v0.0.35
...
## Summary
This version adds native support for [GLightbox], a JavaScript lightbox library to add zoom and gallery features to images. Images can be automatically annotated with the new `glightbox` Markdown extension. Add the following to `zensical.toml`:
``` toml
[project.markdown_extensions.zensical.extensions.glightbox]
```
> [!NOTE]
>
> In order to integrate with configuration in `mkdocs.yml`, where [GLightbox] is implemented as a plugin, a compatibility shim is included, so no re-configuration is necessary if you're already using the plugin. Note that our extension is more efficient and faster than the plugin, as it does not re-parse the entire HTML of each page, but instead uses Python Markdown's native extension API.
### HTML in the table of contents
Additionally, __section titles in the table of contents will now render with HTML markup__, so you can use emojis and other inline features in section titles and have them render correctly in the table of contents. In Material for MkDocs, this functionality was implemented with the `typeset` plugin. Zensical now supports this natively.
### Relative links in raw HTML
Relative links in raw HTML are now correctly resolved. Initially, we carried over the link processing and resolution logic from MkDocs, which does not support relative links in raw HTML to this day. We implemented a Python Markdown postprocessor, to ensure that relative links in raw HTML are handled as well.
[GLightbox]: https://biati-digital.github.io/glightbox/
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
v0.0.35
2026-04-23 17:03:57 +02:00
Martin Donath
676bfe2041
chore: fix mypy linter error
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-04-23 16:35:17 +02:00
Martin Donath
64f3f33b72
fix: relative links in raw HTML not correctly resolved ( #258 )
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-04-23 15:16:41 +02:00
Martin Donath
87abb2abef
fix: remove img attributes moved to parent in GLightboxExtension
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-04-23 14:00:36 +02:00
Martin Donath
5795fc8fe4
Merge pull request #569 from zensical/fix/lightbox-extension
...
fix: images in raw HTML are double-processed by `GLightboxExtension`
2026-04-23 13:38:24 +02:00
squidfunk
f7531afbf6
fix: images in raw HTML are double-processed by GLightboxExtension
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-04-23 13:36:05 +02:00
squidfunk
1d8dc83135
fix: ensure None attributes are not added by GlightboxExtension
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-04-23 13:35:34 +02:00
squidfunk
7c977a855a
refactor: move GLightbox extension to regular Postprocessor
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-04-23 13:19:46 +02:00
Martin Donath
5519730eea
feature: render section title with markup in table of contents
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-04-23 12:14:42 +02:00
Martin Donath
63f02b292e
Merge pull request #566 from zensical/feature/glightbox
...
feature: add support for glightbox
2026-04-23 12:00:54 +02:00
squidfunk
db8518dc3a
feature: add plugin compatibility shim for glightbox
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-04-23 11:58:00 +02:00
squidfunk
5c1f3817df
chore: fix import order
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-04-23 11:41:00 +02:00
squidfunk
057da7c2c7
feature: add support for image galleries using glightbox ( #290 )
...
Co-authored-by: Timothée Mazzucotelli <dev@pawamoy.fr >
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-04-23 11:36:13 +02:00
squidfunk
98a8e73833
docs: unify wording in comments
...
Signed-off-by: squidfunk <martin.donath@squidfunk.com >
2026-04-23 11:29:47 +02:00