This repository holds the source of the Raku Knowledge Base, a site about the Raku programming language. It carries the documentation, module pages and examples the site is built from.
The Raku Knowledge Base is built with Podlite, a markup language for documentation. This repository contains the source files for The Raku Knowledge Base, a web-based knowledge base that includes:
- Official Raku project documentation
- Documentation for user modules, both the files a module ships and the text found in its sources
- A page for every module in the registry, including those that ship no documentation at all
- Code examples and tutorials
- Markdown files from various sources
- A monthly digest of what changed in the module ecosystem
The content is written in the Podlite markup language. Its specification is at https://podlite.org/specification.
- Global search: across every document on the site.
- Term index: generated from the documents themselves.
- Table of contents: for moving inside a long document.
- Breadcrumbs: the path from the site root down to the open page.
- Syntax highlighting: for code inside the documents.
- Markdown support: markdown files become pages like the rest.
- Monthly ecosystem digest: what changed in the module ecosystem since the previous release, with links to the module pages.
- MCP server: search the corpus, fetch a page, list its sections, from an editor or an AI agent. See mcp-server/README.md.
- Offline bundle: the search index and the server packed together, for use without a network.
- Dated data releases: each release keeps a snapshot of module versions, so any two releases can be compared.
Both the website and the MCP server run on your own machine. Take index.zip and raku-kb-mcp-offline.tar.gz from the latest release.
The exported pages are flat .html files, while their addresses carry no extension, so the server has to try .html for a path that has none. python3 -m http.server does not, and answers 404 for every page but the front one.
unzip index.zip -d site
npx serve site # http://localhost:3000The same through Docker, with nothing installed on the host:
docker run --rm -p 3000:3000 -v "$PWD/site:/site:ro" \
node:22-alpine npx -y serve -l 3000 /siteFrom the offline bundle, which carries the search index with it:
tar xzf raku-kb-mcp-offline.tar.gz && cd raku-kb-mcp
npm install
claude mcp add raku-kb -- node "$PWD/bin/raku-kb-mcp.mjs"Or from the published image:
docker run -i --rm ghcr.io/zag/raku-kb-mcpTo contribute:
- Fork the repository.
- Create a new branch for your feature or bug fix.
- Make your changes and commit them with a clear, descriptive message.
- Push your changes to your fork.
- Submit a pull request to the main repository.
Pull requests generated by automated tools are closed without review.
Most of the content in this repository is written in Podlite. It carries formatting, cross-references between documents, and code examples.
To learn more about Podlite markup, please refer to the official specification.
| Source | Fetch | Parse |
|---|---|---|
| Raku documentation | yarn docs:download (clones Raku/doc) |
yarn docs:parse → built/docs-tree.json |
| Examples | yarn examples:download (clones Raku/examples) |
yarn examples:parse → built/examples-tree.json |
| User modules | bin/refresh-mods.sh: zef index → dedup to built/mods.json → tarballs into work_mods/zef |
same script, final step → built/mods-tree.json |
bin/parsesrc.mjs handles rakudoc, pod6, markdown, and Raku source files; parsed trees land in built/ as JSON. Pages are generated by podlite-web with a local plugin (podlite-web.config.js → lib/), generated pages live under virtual/src.
The module set comes from two registries, the zef index and the wider ecosystem list, deduplicated to one latest version per module. Rerunning bin/refresh-mods.sh is resumable and refreshes everything.
A workflow runs on the first day of each month. It refreshes the module set, builds the site, packs index.zip and the offline bundle raku-kb-mcp-offline.tar.gz, writes the release notes by comparing the new module versions against the previous snapshot, and publishes the server image.
"Raku" is a trademark of the Yet Another Society.
This project is licensed under the Artistic License 2.0.
The Artistic License 2.0 is chosen to align with the licensing of Raku itself and many Raku modules. This license provides freedom for use, modification, and distribution while ensuring that credit is given to the original authors.
For the full text of the license, please see the LICENSE file in this repository or visit the Open Source Initiative's Artistic License 2.0 page.
For questions, suggestions, or support, please open an issue in this repository or contact us at info@podlite.org.
