Thanks for your interest in contributing! This guide covers how to set up your environment, build locally, and submit changes.
This repository uses the docs-resources submodule.
git clone --recurse-submodules https://github.com/riscv/riscv-isa-manual.gitIf you already cloned the repo, initialize the submodules:
git submodule update --init --recursiveBuilding with the container is the most consistent approach.
- Install Docker (or Podman).
- Pull the base image:
docker pull riscvintl/riscv-docs-base-container-image:latestLocal builds are available, but require the full documentation toolchain (Ruby, Asciidoctor, and related extensions). Follow the dependency list in the RISC-V Documentation Developer Guide:
https://github.com/riscv/docs-dev-guide
From the repo root:
make buildCommon targets:
make build-pdf
make build-html
make build-epubOutputs land in the build/ directory.
- Create a branch for your change.
- Keep commits focused and include clear messages.
- Run the relevant build target(s) before opening a PR.
- Open a pull request with a short summary of what changed and why.
- Run the relevant build target(s), such as
make build,make build-pdf, ormake build-html. - Add or update references/citations in
src/resources/riscv-spec.bibwhen needed. - Under development by the Documentation SIG: Normative Rules and Antora integration.
src/is the canonical AsciiDoc content used bymakebuilds.src/riscv-spec.adocis the entry point that includes volume files (e.g.unpriv.adocandpriv.adoc).modules/contains the Antora site sources.modules/unpriv/pagesandmodules/priv/pagesmirror chapter files for the site, andmodules/*/nav.adoccontrols navigation.docs-resources/is a submodule with shared themes, converters, schemas, and tooling.normative_rule_defs/contains one YAML definition file per chapter for normative rules.build/is generated output.
NOTE: New RISC-V specifications may only be developed by RISC-V International members through the formal ratification process and in accordance with the applicable Technical Steering Committee policies. Specifications cannot be introduced arbitrarily or by submitting an unsolicited pull request.
- Create
src/<extension>.adocwith the new chapter content. - Add an
include::line in the appropriate volume (e.g.src/unpriv.adocorsrc/priv.adoc) in the correct order.
All contributions must be signed. Use either SSH (recommended) or GPG.
ssh-keygen -t ed25519 -C "your_email@example.com"
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519cat ~/.ssh/id_ed25519.pubGitHub → Settings → SSH and GPG keys → New SSH key
Key type: Signing key
git config --global gpg.format ssh
git config --global user.signingkey ~/.ssh/id_ed25519.pub
git config --global commit.gpgsign truegit commit -m "message"git log --show-signature -1For a comprehensive guide, see GitHub's documentation on telling Git about your signing key.
- macOS:
brew install gnupg- Ubuntu/Debian:
sudo apt-get install gnupg- Windows: Install Gpg4win
gpg --full-generate-keySelect RSA and RSA, 4096 bits, and enter your name and email (must match your GitHub account email).
gpg --list-secret-keys --keyid-format=longThe key ID is the hex string after sec rsa4096/ on the sec line. For example, if the output shows sec rsa4096/3AA5C34371567BD2, then 3AA5C34371567BD2 is your key ID.
git config --global user.signingkey YOUR_KEY_ID
git config --global commit.gpgsign trueReplace 3AA5C34371567BD2 with your actual key ID from step 3.
gpg --armor --export YOUR_KEY_IDCopy the entire output (including -----BEGIN PGP PUBLIC KEY BLOCK----- and -----END PGP PUBLIC KEY BLOCK-----).
GitHub → Settings → SSH and GPG keys → New GPG key → paste the public key.
git commit -m "message"git log --show-signature -1