I am happy to share DocumenterLandingPage.jl, a small Documenter.jl plugin that renders a VitePress-style landing page (hero plus emoji feature tiles) straight from the YAML frontmatter block a page carries in a @raw html directive.
Motivation
DocumenterCodeBlocks.jl has greatly improved the usability of Julia’s documentation, but it does not work together with DocumenterVitepress.jl. This package takes the parts of VitePress I care about (the home layout and its landing page) and makes them work with base Documenter.jl, where they compose cleanly with DocumenterCodeBlocks.jl.
What it does
The exact VitePress home layout, with hero, actions, and emoji feature tiles, all from one YAML frontmatter block.
CodeBlocks-ready: pair it with DocumenterCodeBlocks and use both in the same project.
Drop-in: your frontmatter block stays byte-for-byte as written; only its rendering is replaced by the hero and tiles.
Theme-adaptive: mirrors Documenter’s own theme palette, so the landing follows light, dark, and every catppuccin flavor. An optional image.dark swaps in a second hero image for dark themes.
Documenter.jl plugin: add it to your plugins list and the stylesheet is injected automatically, no assets= to configure.
No toolchain: no VitePress, no Node, no custom theme, just base Documenter.jl and a YAML block.
The whole integration
using Documenter
using DocumenterLandingPage
using DocumenterCodeBlocks # optional
makedocs(
sitename = "MyPackage.jl",
format = Documenter.HTML(),
plugins = [LandingPage(), CodeBlocks()],
)
Docs, a tutorial, and the full frontmatter schema reference live on the landing page.
Status
I put this together on a whim with heavy usage of AI. Expect some initial rough edges, but also expect them to be ironed out over time.
Layout should be working on both desktop and mobile now with a smooth transition between the two; thanks to @fredrikekre for the bug report.
Automerge approved so it should make it to general in a few days.
This looks cool! It works well and adds interest to the front page of manuals.
One feature that I couldn’t find is the use of graphics in the tiles. VitePress lets you add meaningful graphics, whereas this looks limited to emojis only?
So I’m struggling to find emojis that represent the features in a package that justify the space occupied by them… I suppose I could use random and , but I’m not as big a as other people…
Working on this now, and also improving the logo gradient / flow between desktop and mobile views. There is a bunch of duct tape holding that together right now, will do a proper solution.
Iterated on this and completely reworked how the gradient was handled for both the glow and added it for the title. There are defaults for every standard Documenter.jl theme as well as a documented way to customize it however you would like it to look. Both of the examples in the project showcase should be updated now.
I’m always open to PRs improving these as well. I’m not a professional web/graphic designer by any stretch of the imagination
I gave it a try, and my main problem was, that my own CSS of “I just add an icon to certain external links” interfered a bit with it, but I like the current WIP (texts still could probably be improved), but it will be part of my next PR – and removes one of the few reasons I consider for a while to move to Vitepress.
(No bad feelings, the Vitepress docs usually look great! Just switching to them still feels like a larger rework)
The package has been available in general for a few days now. v0.2.0 refined the default look / layout quite a bit and added support for title gradients + icons + custom themes.
Yes, agreed. Vitepress is always going to win in terms of bringing a modern, consistent web aesthetic across your entire docs site. The goal of this package was to try and bring my favorite parts of that back into the core Documenter.jl workflow for interoperability purposes.
They shouldn’t provided the links are pointed to the right place. Looks like the Luxor links have an .html on the end of them which is causing the 404.
Sure. Though for now, the “oldschool” docs with a nice landing page are a good alternative as well, since I do not have to rework all docs – and especially I still have the CodeBlocks