{"id":19080720,"url":"https://github.com/tomcur/sprokkel","last_synced_at":"2026-05-20T14:05:05.555Z","repository":{"id":237548264,"uuid":"794706892","full_name":"tomcur/sprokkel","owner":"tomcur","description":"A lightweight static site generator","archived":false,"fork":false,"pushed_at":"2024-05-21T13:25:07.000Z","size":874,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-22T05:44:36.302Z","etag":null,"topics":["blog-engine","cms","content-management-system","djot","markdown","rust","static-site-generator"],"latest_commit_sha":null,"homepage":"https://sprokkel.uint.one/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tomcur.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-01T19:30:10.000Z","updated_at":"2025-01-13T19:29:42.000Z","dependencies_parsed_at":"2024-05-10T16:37:05.319Z","dependency_job_id":"12b9e85a-b166-49f7-b15c-cfb5a8b35160","html_url":"https://github.com/tomcur/sprokkel","commit_stats":null,"previous_names":["tomcur/sprokkel"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/tomcur/sprokkel","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomcur%2Fsprokkel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomcur%2Fsprokkel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomcur%2Fsprokkel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomcur%2Fsprokkel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tomcur","download_url":"https://codeload.github.com/tomcur/sprokkel/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomcur%2Fsprokkel/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265889025,"owners_count":23844538,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blog-engine","cms","content-management-system","djot","markdown","rust","static-site-generator"],"created_at":"2024-11-09T02:25:19.318Z","updated_at":"2026-05-20T14:05:05.503Z","avatar_url":"https://github.com/tomcur.png","language":"Rust","funding_links":[],"categories":["Static Site Generators"],"sub_categories":["Djot → HTML → Djot"],"readme":"# Sprokkel /'sprɔkəl/ 🕊️\n\nA lightweight static site generator. For example, see\n\u003chttps://sprokkel.uint.one\u003e.\n\nIt supports:\n\n- writing in [Djot markup](https://github.com/jgm/djot)\n- [Tree-sitter](https://github.com/tree-sitter/tree-sitter)-based code syntax\n  highlighting\n- compile-time LaTeX to to MathML rendering\n- image resizing and re-encoding\n- templating using [minijinja](https://github.com/mitsuhiko/minijinja)\n- pagination\n- static assets\n- back-references: i.e., \"which entries link here?\"\n\n## Usage\n\nBuild a site for release:\n\n```bash\n$ sprokkel build\n```\n\nBuild every time the site changes:\n\n```bash\n$ sprokkel build --watch\n```\n\n## Installation\n\nUsing Cargo\n\n```bash\n$ cargo install sprokkel\n\n# With katex-based LaTeX to MathML rendering\n$ cargo install sprokkel --features katex\n```\n\nusing Nix\n\n## Functionality\n\nSprokkel is built around entries and templates. Entries are written in Djot\nmarkup. Templates tell Sprokkel how to build full HTML pages. Every entry\nbelongs to a group, and every group can have its own template.\n\n### ./entries\n\nEntries are Djot files (.dj), and all entries belong to a group. Entries are\nrendered to HTML using their group's template. An entry's group is determined\nby the directory the entry is in. For example, `./entries/blog/foo.dj` belongs\nto the \"foo\" group.\n\nEntries must be nested directly under their group's directory or in their own\ndirectory. For example:\n\n```\n./entries\n├── blog\n│   ├── 2024-03-12-something\n│   │   ├── index.dj\n│   │   └── image.svg\n│   └── 2024-04-24-something-else.dj\n└── projects\n    └── foobar.dj\n```\n\n\n### ./templates\n\nAll templates are in `./templates`. Entry group templates should be named after\ntheir group as `_\u003cgroup\u003e.html`. For example, entry `./entries/blog/foo.dj` will\nbe rendered using `./templates/_blog.html` as template. If the template for a\ngroup is missing, Sprokkel falls back to the `./templates/_entry.html`\ntemplate. This template must exist.\n\nTemplates where no part of the file path starts without an underscore are\nrendered as pages, preserving the directory structure. For example,\n`./templates/foo/index.html` is rendered to `./out/foo/index.html`, but\n`./templates/foo/_bar/baz.html` is not rendered directly.\n\n### Assets\n\nSprokkel supports two types of asset.\n\n### ./assets\n\nStatic assets must be placed in `./assets`. These are copied as-is to the\noutput directory, preserving the directory structure. For example, a file\n`./assets/foo/bar/baz.qux` is copied to `./out/foo/bar/baz.qux`.\n\n#### ./cat 🐈‍⬛\n\n_Cat_ assets are placed in `./cat`. These are concatenated to a single output\nfile per directory and optionally preprocessed. The directory structure of\n`cat` must be a tree where only leaf nodes contain files. For example:\n\n```\n./cat\n├── css\n│   └── style.css\n│       ├── 00_fonts.css\n│       ├── 01_highlight.css\n│       └── 02_main.css\n└── js\n    └── main.js\n        ├── 00_colorscheme_toggle.js\n        └── 01_email_obfuscator.js\n```\n\nThis produces two files: `./out/css/style.css` and `./out/js/main.js`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftomcur%2Fsprokkel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftomcur%2Fsprokkel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftomcur%2Fsprokkel/lists"}