🕊️ Rynz: Really Your Note Zenerator
Rynz is a lightweight, JavaScript-free static site generator crafted for developers who value Markdown, speed, and simplicity. Built with Python and Jinja2, it delivers fast, customizable static websites with an intuitive CLI, optimized page generation, and clean, minimal templates. The main website for the Rynz project is https://rynz.de.
- Blazing Fast: Optimized page generation for rapid site builds.
- No JavaScript: Lightweight, clean HTML output by default.
- Clean Templates: Streamlined Jinja2 templates for easy customization.
- Python-Powered: Modular, forkable codebase for extensibility.
- Markdown-First: Effortless content creation with Markdown.
- Open-Source: Licensed under the MIT License.
- Installation
- Usage
- Configuration
- Folder Structure
- Advanced Features
- Example
- Changelog
- Contributing
- License
- Contact
Install Rynz via pip for the latest stable release:
pip install rynzOr install the development version from GitLab:
pip install git+https://gitlab.com/niharokz/rynz- Python 3.8 or higher
pipfor dependency management
Rynz automatically installs:
pyyaml: Parsesconfig.ymland frontmatter.jinja2: Powers templating for HTML output.markdown2: Converts Markdown to HTML.rich: Enhances CLI with colorful output.
Rynz provides a streamlined CLI for managing your static site. Run rynz --help for details.
usage: rynz [-h] [-v] {create,add,deploy,serve,config,test,save} ...
🕊️ Rynz: Really Your Note Zenerator.
positional arguments:
{create,add,deploy,serve,config,test,save}
Available commands
create Create a new Rynz project.
add Create a new note or blog post.
deploy Convert Markdown files into static HTML
serve Serve your site locally at http://localhost:5555
config View or edit site configuration (config.yml)
test Test your Rynz setup and structure
save Save changes with Git (stage and commit)
options:
-h, --help show this help message and exit
-v, --version show program's version number and exitInitialize a new project with the default structure:
rynz create my-siteSets up my-site/ with config.yml, templates, and content directories.
Create a new Markdown file:
rynz add pageNameGenerates content/note/pageName.md with frontmatter.
Convert Markdown to static HTML, outputting to public/:
rynz deployPreview your site with a local server:
rynz serveAccess at http://localhost:5555. Use a custom port:
rynz serve -p 8080View or edit config.yml:
rynz configCheck rynz config --help for specific options.
Validate your project structure and configuration:
rynz testEnsures no missing files or invalid frontmatter.
Stage and commit changes:
rynz saveOr commit with a custom message:
rynz save -m "Your commit message"Customize your site with config.yml in the project root. Example:
site_title: My Rynz Site
base_url: https://example.com
theme: default
favicon: resource/favicon.icoAccess in templates with Jinja2:
<link rel="icon" href="{{ config.get('favicon') }}">my-site/
|-- public/ # Generated HTML output
|-- config.yml # Site configuration
|-- content/ # Markdown content
| |-- header.md # Header content
| |-- footer.md # Footer content
| |-- home.md # Homepage content
| `-- note/ # Individual pages/notes
| `-- sample.md
|-- resource/ # Static assets (CSS, images, etc.)
| `-- style.css
`-- templates/ # Jinja2 templates
|-- home_template.html # Homepage template
`-- note_template.html # Note/page templateconfig.yml: Site-wide settings (title, theme, etc.).content/: Markdown files for pages and notes.resource/: Static assets (CSS, images, favicon).templates/: Jinja2 templates for HTML output.public/: Built site output.
Rynz v1.0.0 optimizes rendering with streamlined Markdown processing and efficient Jinja2 templating, significantly reducing build times.
Templates are now more modular and minimal, with simplified Jinja2 syntax for easier customization and maintenance.
Control homepage visibility with tags. Add home to frontmatter:
---
tags: [home]
---Filter in home_template.html:
{% for page in pages if 'home' in page.tags %}
<a href="{{ page.url }}">{{ page.title }}</a>
{% endfor %}Add per-page metadata:
meta: '<link rel="stylesheet" href="/extra.css">'Render in templates:
{{ page.meta | safe }}Add custom keys to config.yml:
analytics_id: UA-XXXXX-YUse in templates:
<script src="https://analytics.com/{{ config.get('analytics_id') }}"></script>Explore a live Rynz-generated site:
https://nih.ar
https://rynz.de
View its source:
https://gitlab.com/niharokz/nih.ar
- New CLI Commands: Introduced
create,add,deploy,serve,config,test, andsavefor a streamlined workflow. - Faster Page Generation: Optimized Markdown processing and Jinja2 rendering for significantly reduced build times.
- Cleaner Templates: Simplified and modularized Jinja2 templates for easier customization.
- Config Command: Added
rynz configto view/editconfig.yml. - Test Command: Added
rynz testto validate project setup and structure. - Save Command: Added
rynz saveto easily commit changes using Git. - Removed RSS Support: Eliminated RSS feed generation and
rss_enabledoption for a leaner feature set. - Improved CLI: Enhanced help output and error handling with
rich. - Python Support: Added compatibility for Python 3.11+.
- Bug Fixes: Resolved edge cases in frontmatter parsing and template rendering.
- Replaced
showInHomewith tag-based homepage visibility. - Improved CLI error handling with color-coded output.
- Optimized build performance and modularity.
- Added custom port support for
serve. - Auto-handled
/abc→/abc.htmlin dev server. - Supported metadata injection via
metatag. - Improved Windows compatibility.
See CHANGELOG.md for full details.
Contributions are welcome! To contribute:
- Fork the repository.
- Create a feature branch:
git checkout -b feature/my-feature
- Commit changes:
git commit -m "Add my feature" - Push to the branch:
git push origin feature/my-feature
- Open a pull request.
- Follow PEP 8 for Python.
- Run tests:
python -m unittest discover
Licensed under the MIT License. See LICENSE for details.
- Maintainer: Nihar (hi@nihars.com)
- Repository: https://gitlab.com/niharokz/rynz
- Issues: https://gitlab.com/niharokz/rynz/-/issues
Built with ❤️ using Python and Jinja2. Star the repo if Rynz sparks joy!