Guetzli
A deliciously fast and simple Filesystem-Web-CMS
Install / Use
/learn @muellermichel/GuetzliREADME
Guetzli, A Deliciously Fast and Simple CMS Based on Files
Guetzli came about when we became too frustrated with Wordpress and its cesspool of plugins constantly breaking each other just to provide basic features like backups and multilingual pages. Guetzli is
-
Insanely simple. It's written in less than 500 lines of Python Flask.
-
Powerful. Add as many pages and languages as you like by editing the content directory using favourite local file editor, no server restarts required. Even changing the template or the configuration doesn't require a restart. Need to rollout to production? Just git push, rollout done.
-
Fast. On a puny 2GB Hetzner VPS it was measured to get 345 requests per second from the outside internet and 600 requests per second from within the same network, using the multithreaded uwsgi implementation.
What's with the name? 'Guetzli' is the Swiss German word for cookie. It's a good metaphor for this CMS, since it's small, quickly digested and comes with biscuit and chocolate.
<table> <tr> <td>Introducing Guetzli</td><td>Editing Guetzli Sites on the Web</td><td>Where the name comes from</td> </tr> <tr> <td><a href="https://www.youtube.com/watch?v=MEUrirTZ-D8"><img src="/../master/docs/Screencast_Thumbnail.png"></a></td> <td><a href="https://www.youtube.com/watch?v=TDUDt4QLUZc"><img src="/../master/docs/Screencast_Thumbnail2.png"></a></td> <td><img src="/../master/docs/Choco_leibniz.jpg"></td> </tr> </table>Setup
-
Fork this repository so you can create your own site.
-
Clone your repo and
cdinto it. -
Copy
sites/basic-exampleorsites/minimalinto a new subdirectory of sites that holds the contents of your site. Commit it to your repo. -
sudo pip install Flask pystache ipaddress requests. -
Feed guetzli to the python:
python ./server.py --site [site-subdir-name]. For additional options, seepython ./server.py --help. WARNING: This is only meant for development, do not use this for production purposes (as it could make your machine vulnerable). For production deployment please see Going Live!. -
Enjoy on localhost:5000. For a production ready deployment, please see Going Live!
Design Principles
-
No Database! The filesystem is more than enough for a simple multi-page web appearance.
-
File changes need to be reflected in the next request.
-
Nevertheless, hit the file system the least amount possible - use file modification dates and in-memory cache to do the least amount of File I/O possible.
-
Cache the result of all potentially expensive operations (like json.loads or even regex matches).
Features
-
Localized posts, e.g. blogging.
-
Automatic reloading of modified resources on the next request, including
content/config.json. You should never have to restart this server. -
Automatic pulling from changes on github and gitlab.com repositories (requires webhook setup, see Going Live!).
-
Full multilanguage support. Add as many languages as you like by editing
content/config.jsonand add the linked pages in language-subfolders undercontent/pages(see the example in the repo). Guetzli will match the one that best represents the client's request header and lists the other options just in case. -
Mustache templating - in the template, pages and posts.
-
Localized strings, defined in
content/config.json. -
Extensions - handle user submitted content, add your own datasources to guetzli.
-
Redirect to (localized) default page if a page can't be found.
-
All URL params are checked to only contain letters, numbers, underscores and dashes (which is also the restriction for the page filenames) - no funny business in your file system!
Documentation
All you need to know should be in the documentation. Otherwise, please open up an issue with your question.
Dependencies
-
Python version >= 2.7.x
-
Flask
-
pystache
License
LGPL
Authors
Michel Müller, System Architect Protogrid
Mark Schmitz, Web Engineer Protogrid
Contributors
Thanks to Renato Testa, Chief DevOps Protogrid, for contributing the VPS performance benchmarks!
ToDo
-
Markdown support
-
Dockerization
Related Skills
node-connect
347.6kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
108.4kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
347.6kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
347.6kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
