This repository contains the source code of https://goa.design. The site is a static website built using hugo.
The main documentation lives under content/en/docs/ (English source of truth):
content/en/docs/1-goa/: Goa framework docscontent/en/docs/2-goa-ai/: Goa-AI docs (agents, toolsets, runtime, MCP, etc.)content/en/docs/3-ecosystem/: Ecosystem docs (e.g., Clue, Pulse, Model)
Translated content mirrors the same structure under content/{lang}/docs/ (for example content/it/docs/, content/fr/docs/).
Is that typo bugging you? us too! If you want to do something about it:
- Fork and clone the repo
- Open a terminal,
cdinto the cloned repo and runmake start(ormake serve) - Edit the content of the markdown files in the
content/directory. - Submit a Pull Request
make serve starts a server on your box that "live-loads" all changes you make to the content (that is
the page should refresh itself each time you save a content page). Once make complete simply open
a browser to http://localhost:1313 and browse to the page you are editing.
Some diagrams are generated from the Model DSL and committed under static/images/diagrams/.
Generate/update diagrams:
make diagramsRun in a terminal:
cd goa.design;
docker run --name goadocs --volume .:/go/src/app -p 1313:1313 -e BIND=0.0.0.0 -it golang:1.24.2 bash;
# in the container:
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -;
apt install -y nodejs;
cd /go/src/app;
make;To run the container in the future:
docker start goadocs;
docker exec -it goadocs bash;
cd /go/src/app;To remove the container:
docker stop goadocs;
docker rm goadocs;
docker rmi golang:1.24.2;Translations are kept under the content/ directory:
- English source:
content/en/docs/ - Translations:
content/{lang}/docs/(same paths as English)
We provide a translation helper script backed by DeepL:
# 1) Configure API key
cp .env.example .env
${EDITOR:-vi} .env
# 2) Translate changed English docs to all supported languages
./scripts/translate content/en/docs/Notes:
- The full workflow is documented in
scripts/TRANSLATION.md. - The script uses a cache file (
.translation-cache.json, gitignored) so only changed English files are reprocessed. - Japanese (
JA) is not auto-translated:./scripts/translate --lang JA ...will print which files need a manual update and record the English hash so only future changes are re-flagged. - UI strings live under
i18n/*.yamland are maintained manually.