Top
Best
New

Posted by japhyr 11/9/2025

Zensical – A modern static site generator built by the Material for MkDocs team(squidfunk.github.io)
168 points | 62 comments
finallyspeaking 11/10/2025|
I’m delighted to see this project evolving and look forward to following its development! I’ve used just about every markup technology over my (many) years as a tech writer, from troff macros, to SGML/DocBook and then XML/DITA, and finally, to Markup with the Material for MkDocs project, as a sponsor. Each has its strengths and weaknesses, but for enabling contributors outside the tech writing community, simpler source formats are the way.

That said, if pressed, I’d recommend AsciiDoc[0] over any Markup flavor for a greenfield project _today_. We had to either add or bake plugins or extensions to get features that are already included in AsciiDoc, making our Markup implementation both more complex and wholly unique. That wasn’t a huge problem, because we didn’t have a large pool of contributors to educate and support, but it would have been much easier just to point to a standard.

But, hey! The roadmap includes modules, to make way for other source formats! This is the way. :-)

[0] https://asciidoc.org/

EDIT: s/That's the way/This is the way. :-)/

mroche 11/10/2025||
> That said, if pressed, I’d recommend AsciiDoc over any Markup flavor for a greenfield project _today_.

Likewise for me as well, and I am a massive Material for MkDocs fan. Markdown is certainly simple to use and gets the job done, but AsciiDoc just provides so much out of the box without hurting my eyes like reStructuredText (used by Sphinx) does. It also helps that's there's effectively one type of AsciiDoc I'm aware of, whereas there's a number of Markdown flavors atop CommonMark to be cognizant of. I will concede, however, it's learning curve is not as simple as MarkDown's...

A powerful framework for working with AsciiDoc for documentation purposes is Antora[0]. The Red Hat ecosystem (Fedora and CentOS projects) uses it for their public facing docs. That being said, it is a beast to understand if starting from scratch rather than contributing to project's existing docs. It designed to be able to consolidate large projects with multiple component repositories and versions per component into a single docs site. Typical balance of more capabilities, more up-front cost of adoption.

The AsciiDoc WG also maintains an Awesome AsciiDoc[1] page of projects within the ecosystem.

[0] https://antora.org/

[1] https://gitlab.eclipse.org/eclipse-wg/asciidoc-wg/asciidoc.o...

finallyspeaking 11/10/2025||
Oof, yes, Markdown, not Markup. The dangers of posting long after caffeine...
tapirl 11/10/2025||
There's a newcomer, TapirMD, in case you're interested: https://tmd.tapirgames.com/index.html

It hasn't reached its v0.1.0 milestone yet, but soon.

finallyspeaking 11/12/2025||
Laudable, but I don't think TapirMD will gain much traction.

First, your landing page doesn't describe how TapirMD fits into the Markdown universe. I just see a list of features. Why should I read the list? Ah, the spec page[0] has some info, but it should really be on the landing page.

Second, and more importantly, TapirMD is not a superset of CommonMark[1]. GitHub had its own flavor of MD, but it's been some years now since they migrated to a CommonMark base plus extensions[2].

I recommend looking more closely at the CommonMark universe and innovating there.

[0] https://tmd.tapirgames.com/specification.html [1] https://commonmark.org/ [2] https://github.github.com/gfm/

tapirl 11/13/2025||
Thank you very much for your feedback. I truly appreciate it.

TapirMD is not a superset of Markdown or CommonMark. It simply inherits some of its DNA from Markdown. While Markdown is very simple, it is also highly underspecified and syntactic inconsistent. CommonMark improves on it slightly, but not fundamentally. Moreover, basic Markdown lacks many essential features that web content writers need.

Yes, none of these factors prevent it from being adopted widely. But for me, the limited feature set is the real blocker. I don’t want to rely on a patchwork of extensions and third-party tools.

TapirMD (where MD stands for `markup doc`) aims to address these shortcomings. It is a new language, deliberately not compatible with Markdown, and never intended to fit within the Markdown ecosystem. Its official toolchain is designed to empower web content writers to create rich, feature-complete articles without relying on any third-party tools.

The spec is too long to serve as a landing page. Maybe a concise demo showcasing sample code on the leading page would be great. Thank you again for the constructive criticism.

TapirMD was primarily developed for my own needs as a technical writer, to produce content for my websites (see the .tmd soruce of my articles: https://tmd.tapirgames.com/use-cases.html). Markdown simply felt too limiting. I've been using TapirMD for over a year now and am quite satisfied with it. I'd be delighted if it proves helpful to other writers as well.

maxloh 11/9/2025||
It is a very reasonable choice: your plug-in project has grown to a scale you have never anticipated. Therefore, you built your own system from the ground up, one which you have total control over, instead of keeping to rely on someone else's system as you did before. This would make new features and bug fixes more easy to be implemented.

I am also very curious about what the MKDocs future would be like. Material has been the most popular theme for MkDocs. People are not using it because they have chosen MkDocs, but using MkDocs because they have chosen Material. With Zensical promising (some kind of) MkDocs compatibility, there will be fewer reasons to stay on MkDocs instead of migrating to the new project.

squidfunk 11/9/2025|
> It is a very reasonable choice: your plug-in project has grown to a scale you have never anticipated. Therefore, you built your own system from the ground up, one which you have total control over, instead of keeping to rely on someone else's system as you did before. This would make new features and bug fixes more easy to be implemented.

Exactly this. We ran against walls trying to realize our ideas with MkDocs' APIs, so a rewrite was due. With MkDocs being unmaintained for over a year, we took the initiative. Since we have excellent product-market fit, investing into a new stack was just logical.

RyJones 11/9/2025||
As a multi-year sponsor for your work, our open-source community really appreciates the work.
irskep 11/9/2025||
I'm really excited by this development! Material for MkDocs has raised the quality level of so many projects' docs, my own included, by making good navigation the default. It's by far my favorite system to browse as a reader, and use as a project maintainer.

I hope the new theme allows for more customization than the old Material theme. It was really hard to create a unique brand identity within the constraints of Material; it just wasn't built with customization in mind beyond a color. The "modern" theme looks minimal in a way that gives me some hope for this.

Looking forward to kicking the tires on Zensical!

fishgoesblub 11/9/2025||
I was excited up until they showed what the new theme looks like. mkdocs-Material was nice in that it didn't have overly rounded corners and over travesties, a shame that custom CSS will be needed to undo the "modernisation". Overall this seems very interesting, especially the performance improvements, just a letdown visually.
squidfunk 11/9/2025||
Creator of Zensical here! As always, it's a matter of taste. We felt the original look was a little date. You can use the classic Material for MkDocs look with Zensical by adding a single line of configuration[1]. This works because the HTML is exactly the same right now. Most users favor the new look over the old one.

[1]: https://zensical.org/docs/setup/basics/#theme-variant

wpm 11/9/2025|||
> Most users favor the new look over the old one.

How do you know?

squidfunk 11/9/2025||
From the feedback we got after launching. More accurately: most users that we conversed with since launch are very happy about the new look. Regardless, for compatibility reasons, the old look is available as well.
whycome 11/9/2025||
Early adopters are a very distinct set of users. Probably not great to extrapolate from it.
adastra22 11/10/2025||
If you are expecting your market share to grow, then new users will outnumber existing users and it might be wise to extrapolate.
jug 11/10/2025|||
I do think it's looking fine, and above all a cross between Android (Material 3 Expressive), Windows 11 'Fluent UX', and iOS which I think will make many feel right at home. This wasn't really the case with the "old" Material style.
quietbritishjim 11/9/2025|||
Someone builds a complete documentation system from scratch and you call it a "travesty" because it has rounded corners? Visual design is important but this is very misplaced priorities.
j1elo 11/10/2025||
In todays News, someone built a whole Hotel with freely available design plans, and a user finds a travesty in the font style of the Cold/Hot sink taps being too round.
portaouflop 11/9/2025||
I use docusaurus and am happy - any reason I should switch to this or does it make more sense if you have a greenfield use case?

I don’t really care how long it takes to build as long as it’s not minutes. Also don’t care about “modern” look whatever that means really. And I have lots of custom components that (I assume?) would be hard to migrate

samwillis 11/9/2025||
I'm really intrigued by the use of differential dataflow in a static site toolkit, but there isn't much in the way written about it. If anyone from the team are here I would love it if you could explain how it's being used? Does this enable fast incremental builds, only changing the parts that change in the input? If so how do you model that? Are you using multisets as a message format inside the engine?

For context, I work on TanStack DB which is a differential dataflow / DBSP inspired reactive client datastore. Super interested in your use case.

squidfunk 11/9/2025|
Excellent question. We're not using differential dataflow (DD), but are rolling our own differential runtime. It's basically functions stitched together with operators, heavily inspired by DD and RxJS, and is optimized for performance and ease of use. The decision to go from scratch allows us to provide something that, IMHO, is much simpler to work with than DD and Rx, as our goal is to allow an ecosystem to evolve, as MkDocs did as well. For this, the API needs to be as simple as possible, while ensuring DD semantics.

Right now, builds are not fast, since Python Markdown is our bottleneck. We decided to go this route to offer the best compatibility possible with the Material for MkDocs ecosystem, so users can switch easily. In the next 12 months, we'll be working on moving the rest of the code base gradually to Rust and entirely detaching from Python, which will make builds significantly faster. Rebuilds are already fast, due to the (still preliminary) caching we employ.

The differential runtime is called ZRX[1], which forms the foundation of Zensical.

[1]: https://github.com/zensical/zrx

aerzen 11/9/2025||
Why are some files obfuscated in the ui repo? It looks like compiled typescript has been included without the original source.

A gated feature? Malicious intent?

squidfunk 11/9/2025|
It's definitely not malicious intent. It's an inlined version of our new search engine that we'll release in early 2026, but already wanted to ship with Zensical. However, you're right that this might raise some eyebrows – we'll fix it with the next release.
parser_error 11/10/2025||
This looks very interesting, I'm using mkdocs+material for one site (and it's great) but trying to find a good solution for more complex docs.

Is there anything planned like 11ty's data files[1]? For example, I can pass it a JSON file, or a TOML file, and have it generate one HTML page per document in that file using their pagination system in a hacky way, and add those pages to collections for grouping in navigation and such using their templating language. This makes it a lot easier to autogenerate documentation from a combination of sources (since anything we want can emit some appropriate JSON/TOML) without having a real "source document". It's hard to tell at a glance if this is something that would be possible with the upcoming module system.

[1]: https://www.11ty.dev/docs/data-global/

squidfunk 11/10/2025|
Coming from Material for MkDocs, right now, sources need to be in Markdown files. However, our new build system is extremely flexible, so with the upcoming module system, it will be possible to add further sources and integrate them into the static site generation process. What you mention is part of the feedback we got from talking to organizations, for which Markdown is actually only the target, generated from database records to render a static documentation site.
amterp 11/10/2025||
This looks great!

I'm currently using Material for MkDocs but was thinking of switching off it, in part due to the lack of options around having custom highlighting in code blocks (my docs website is for a programming language I am working on). What are Zensical's plans here? Tree sitter highlighting would be perfect in my case.

squidfunk 11/10/2025|
Zensical team here – right now it's still Python/Pygments under the hood, as we're using the same toolchain for rendering for compatibility reasons, but we'll be rethinking language support from the ground up, and tree sitter is something we're experimenting with. Ideally, we'll be able to unify code highlighting with language support with API reference docs.
aryonoco 11/10/2025|
About 12 months ago I was looking for a SSG for our documentation website and after trying many different options settled on Material for MKDocs. I had a list of criteria such as Mermaid.js and PlantUML support which no other option easily supported, but Material for MkDocs had a plugin for everything.

Since adopting it, I’ve also grown fond of Mike, the plugin which lets users see the various different versions of a doc (without needing to resort to git).

But I’ve also experienced plenty of pain points when pushing the customisation envelop. Weird bugs appeared in many places which were clearly due to MKDocs’s poor architecture and performance was also never stellar.

Congratulations on launching Zeniscal and I’m quite excited to see the future of it, but I do very much hope that in 12 months time, one way or the other, I’m able to still have similar functionality to what the plugins provide.

More comments...