Try LTheme

L. Ipsum

July 16, 2026

Categorized as VitePress and Static Sites

This whole site is the demo. Every page you're looking at — the sidenotes, the post archive, the tag pages, this very paragraph — is LTheme running on real (if placeholder) content, not a screenshot or a design mockup.

If you want to see it for yourself instead of taking my word for it: click around. Try a post with sidenotes, resize the window to see the mobile layout collapse, or check how it's put together and run it locally in five minutes.

sh
git clone https://github.com/max-ayn/ltheme-vitepress
cd ltheme-vitepress
pnpm install
pnpm docs:dev

That's it — no build step to inspect, no compiled output to reverse-engineer. What you see in the browser is what's in src/theme.


Why VitePress

L. Ipsum

March 21, 2026

Categorized as VitePress and Static Sites

LTheme already existed for Pelican and Hugo before this port. Both are solid static site generators, so the honest question is why bother with a third implementation on VitePress at all.

Markdown-it is a real extension point

Pelican and Hugo both have plugin systems, but they sit at arm's length from the renderer — you're configuring a black box, not extending it. VitePress hands you the actual markdown-it instance in markdown.config(md). LTheme's Tufte-style sidenotes (^[...]) and the :::writing container aren't config flags bolted onto the theme — they're a couple dozen lines each, registered as ordinary markdown-it rules. Anyone who's written a markdown-it plugin before can read them in five minutes.

The theme is just Vue

A VitePress theme is a Vue app: Layout.vue, some composables, some .vue components. There's no templating DSL to learn on top of the framework, and no separate build pipeline for theme assets versus content — one Vite config handles both. That's the whole reason this theme's CSS bugs have been fixable by reading actual computed styles instead of guessing at a static-site generator's internal layout conventions.

Dev server speed changes how you work on layout

Vite's dev server does instant HMR on both content and theme CSS. Every mobile breakpoint fix on this site so far — the padding bug, the sidenote toggle, the sidebar stacking — went through dozens of resize-and-reload cycles. On Pelican or Hugo's built-in servers that loop is seconds slower each time; over a session of layout work that adds up to real friction.

What you give up

VitePress is Vue-only — if you're more comfortable in React, or you need Hugo's content-heavy taxonomy features out of the box, this isn't the pragmatic choice. It's also younger and smaller than Hugo, so fewer existing themes and plugins to lean on. LTheme on VitePress trades that ecosystem breadth for a tighter loop between "I want to change how this renders" and "I can see it."