Introduction
Readma is a workspace-compatible README generator for Deno, pnpm/npm and
Cargo projects. It reads the project files you already maintain β
deno.json, package.json, Cargo.toml, pnpm-workspace.yaml β and renders
a complete, well-structured README.md with:
- a centered logo, title and description header,
- a row of relevant shields.io badges,
- a collapsible table of contents with GitHub-compatible anchors,
- your own markdown in the standard sections (features, installation, usage, roadmap, contributing, acknowledgmentsβ¦),
- a workspace members table on the root readme,
- a repobeats analytics footer (optional).
deno run -A jsr:@readma/cli gen
Why Readma?β
Hand-written READMEs rot: badges point to dead URLs, installation snippets drift from the actual package names, and monorepo members each need their own copy-pasted boilerplate. Readma treats your README like build output:
| Hand-written README | Readma |
|---|---|
| Badges copied from other repos | 14 built-in badges derived from your files |
| Install commands maintained by hand | Derived from language + registry |
| One README per package, manually | One config, N readmes (root + members) |
| Stale docs discovered in review | gen --check fails CI before review |
| Config without validation | validate lints config and file refs |
Design principlesβ
- Your content stays yours. Readma owns the scaffolding β badges, table of contents, section layout β while every section body is plain markdown you write in one typed config file.
- Detect, don't ask. Language, package registry, workspace members, license, git branch and even your GitHub username are inferred from local files, not from interactive prompts.
- Pure rendering. All environment-dependent values (branch, license,
issue template URLs) are resolved once into a context, then rendering is a
pure function β which is what makes
--checkand--dry-runtrivial to support. - Quality gate. 100% test coverage,
deno lintandoxlint --deny-warningsin pedantic mode with zero suppressions.
Quick start: five minutesβ
1. Prerequisitesβ
- Deno 2.0 or higher
- A git repository (branch and license are auto-detected)
2. Scaffold a configβ
deno run -A jsr:@readma/cli init
This detects your git remote, workspace layout and license, then writes a
readma.config.ts at the root:
import type * as types from "@readma/core";
const config: types.ReadmeTemplateArgs = {
language: "ts",
title: "My project",
author: "me",
githubUsername: "me",
repoName: "my-project",
xHandle: "me",
domain: "gmail",
email: "me",
images: { logo: "images/logo.png" },
sections: {
features: "\n- Fast\n- Small",
projectDescription: "A short description",
about: "About the project",
installation: "```sh\ndeno add my-project\n```",
acknowledgments: "\n- [Best README](https://github.com/othneildrew/Best-README-Template)",
gettingStarted: "Clone and run",
usage: "deno task start",
roadmap: "\n- [x] Ship",
},
template: {
bugReport: "bug-report.yml",
featRequest: "feature-request.yml",
},
backToTop: true,
};
export default config;
3. Generateβ
# Preview without writing
deno run -A jsr:@readma/cli gen --dry-run
# Write README.md at the root and inside every workspace member
deno run -A jsr:@readma/cli gen
gen overwrites README.md files. Commit your work first, or start with
--dry-run.
4. Keep it green in CIβ
- name: Check readmes are in sync
run: deno run -A jsr:@readma/cli gen --check
--check re-renders every readme in memory and exits with code 2 when a
file would change. Add --offline to skip every network call.
Where to go nextβ
- Getting started β installation and first run
- CLI reference β every command and flag
- Configuration reference β every field of
readma.config.ts - Badges & shields β disable, restyle, extend
- Recipes β copy-paste setups for common projects