Etch
Etch is a minimalist, Markdown-first framework for personal websites. It was co-authored with AI (Claude) but guided by a long-standing vision for something easier.
Etch reads directly from your file system, renders pages dynamically with Flask, and doesn’t require a build step, a database, or a fleet of plugins. It’s ideal for developers who want to maintain a personal site without maintaining a toolchain.
Origin¶
Over the past 20 years, I’ve rebuilt my personal site more times than I should have, from Myspace-era HTML to a fully modular Drupal stack (complete with CI pipelines I never needed). With each version, the complexity grew and my requirements shrank. When my 2025 $600 hosting renewal invoice arrived I decided to scrap it all and start over.
Armed with a weekend and a trial of PyCharm’s AI assistant, I described the framework I always wanted: Markdown files, a Jinja+SCSS templating, and no frills. Claude did most of the scut work, and I shaped the vision. The result is Etch: fast, readable, and human-scale.
Read more of the backstory here: This web framework was entirely built by Claude
Highlights¶
- Markdown-native: All content lives in Markdown files with YAML frontmatter
- Zero build step: No compilation or deployment scripts required
- Fast reads with cache: Intelligent caching ensures great performance even at runtime
- Templating with Jinja2: Full control over layout, metadata, and structure
- Flat-file architecture: Pages, posts, and projects live as folders — no CMS needed
- AI-assisted, human-refined: Built using Claude, with deliberate editing and iteration
(Yes, AI wrote that part)
Stack¶
- Python/Flask
- Jinja2: for template rendering
- SCSS: recommend using PyCharm’s file watcher for this.
- lru_cache: to speed up repeated Markdown parsing
(This part too)
What Makes Etch Different¶
Unlike Hugo, Jekyll, or Eleventy, Etch doesn’t compile anything. You write a Markdown file, drop it into a folder, and it’s live. It’s Python through and through — no JS pipelines, no build tools, and no friction. That makes it easy to read, easy to extend, and nearly impossible to break.
Etch is less a CMS, more a reflection of how you think. You write, it publishes.
(Okay fine, AI wrote all of this)
Live Demo¶
rgk.io
Explore the live site to see Etch in action. All content, including this page, is written in Markdown and served dynamically.
Installation¶
pip install etch
Source Code¶
rgkimball/etch
Contributions, forks (and stars!) are welcome.