Major improvements to the markdown parser — proper fenced code block handling, heading IDs with anchor links, lazy image loading, and performance tuning across the board.
Recent Posts
How Loom serves images and other static files — and why it offloads them to GitHub's CDN instead of piping bytes through your server.
An honest side-by-side of three blog engines — what each does well, where each falls short, and why they exist.
Loom can read content directly from git objects. No working tree, no checkout, just git show and git ls-tree.
Series are now defined by directory structure, not frontmatter. Plus archive pages grouped by year.
Canonical URLs, Open Graph, Twitter Cards, JSON-LD, RSS, sitemap — all generated automatically.
Loom isn't just for blogs. Its series, tags, pages, and navigation make it a capable project documentation platform — and it's already serving its own docs.
Loom serves HTML from a shared_ptr
Loom uses C++20 Concepts to constrain template parameters for content sources and watch policies. Here's what concepts are, how they work, and why they're better than SFINAE.
epoll lets a single thread watch thousands of file descriptors for I/O readiness without polling. Here's how it works and how Loom uses it.
21 built-in themes with dark mode, CSS variable overrides, and full stylesheet replacement. All inlined — no external requests.
A slug is not a title is not a tag. Loom wraps every domain value in a StrongType
Every page is rendered once at startup, gzip-compressed, and stored in memory. Requests are hash table lookups. The cache swaps atomically on content changes.
Loom watches your content directory with inotify and rebuilds the cache atomically. No restart needed.
Loom uses a trie to match URL paths. Each segment is one node traversal. Parameters like :slug are first-class citizens, not regex afterthoughts.
How Loom's HTTP server uses Linux epoll with edge-triggered I/O to handle concurrent connections in a single thread without blocking.
Loom's markdown parser is ~1200 lines of C++ with no regex engine and no external library. A first pass collects references and footnotes; a second pass renders HTML.
A blog engine that just works. Clone, make, run — your blog is live in 30 seconds with themes, RSS, SEO, and hot reload built in.