english | русский
Yfm-docs lets you build a full-fledged documentation project: with navigation, internal transitions, and full Yandex Flavored Markdown (YFM) support.
Node 22+
npm i @diplodoc/cli -gnpm run start -- -i ./input-folder -o ./output-folder -v "{\"name\":\"Alice\"}"Initialize a new Diplodoc documentation project.
yfm init [options]Running without flags in a terminal starts an interactive wizard. Pass --skip-interactive to use flags and defaults only.
| Option | Default | Description |
|---|---|---|
-o, --output <path> |
. |
Directory to create the project in |
--name <string> |
directory basename | Project name |
--langs <string> |
en |
Comma-separated list of languages, e.g. en,ru |
--default-lang <string> |
first of --langs |
Default language |
--template <string> |
minimal |
minimal or full |
--header |
true |
Add navigation header with controls to toc.yaml |
--force |
false |
Overwrite existing output directory |
--dry-run |
false |
Preview files without writing |
--skip-interactive |
false |
Skip wizard |
minimal
<output>/
├── .yfm
├── toc.yaml
└── index.md
full — adds presets.yaml, pc.yaml and extended .yfm with pdf, search, vcs, authors config.
For multilingual projects (--langs en,ru) content is placed in per-language subdirectories:
<output>/
├── .yfm
├── presets.yaml
├── en/
│ ├── toc.yaml
│ └── index.md
└── ru/
├── toc.yaml
└── index.md
Process a single Markdown file and print the result to stdout (or write it to a file).
Unlike yfm build, it does not traverse the whole project and does not produce a full page —
for html it emits only the content fragment (no toc, header or page chrome).
# self-contained markdown to stdout
yfm content -i ./page.md -f md
# html content fragment into a file
yfm content -i ./page.md -f html -o ./page.htmlThe result printed to stdout is wrapped in delimiter markers so it can be extracted from the surrounding diagnostic output:
<<<<<< YFM CONTENT START >>>>>>
...content...
<<<<<< YFM CONTENT END >>>>>>
Warnings and errors go to stderr; on any build error the process exits with a non-zero code.
When -o is used, the raw content is written to the file (without the markers).
Pass --raw to print only the content to stdout — without the delimiter markers and
without the framework banners (version line, build timer, completion banner). This is handy
when piping the result straight to another tool or file:
yfm content -i ./page.md -f md --raw > page.md--raw has no effect together with -o (file output is always raw).
Presets (presets.yaml), includes and variables are resolved relative to a project root:
- by default the root is the current working directory;
- pass
-c, --config <path>to point at a.yfm— its directory becomes the root.
| Option | Default | Description |
|---|---|---|
-i, --input <file> |
— | Path to the Markdown file to process (required) |
-o, --output <file> |
stdout | Write the result to a file instead of stdout |
-f, --output-format <md|html> |
html |
Output format |
-w, --watch |
false |
Re-render on changes to the file, its includes & presets |
--raw |
false |
Print only the content to stdout (no markers, no banners) |
-c, --config <path> |
.yfm |
Config file; its directory becomes the project root |
--vars-preset <name> |
default |
Variables preset to apply |
-v, --vars <json> |
— | Inline variables (JSON) overriding presets |
--allow-html / --no-allow-html |
true |
Allow raw HTML in Markdown |
--sanitize-html / --no-sanitize-html |
true |
Sanitize the produced HTML |
--id-generator <strategy> |
random |
Element id strategy: random, deterministic, etc. |
-s, --strict |
false |
Exit with a non-zero code on warnings |
You need to add .env file into repo root with data below:
GITHUB_OWNER=
GITHUB_REPO= # docs
GITHUB_TOKEN= # personal access token
GITHUB_BASE_URL= # for ex: https://api.github.com
VCS_CONNECTOR_TYPE= # githubor you can update .yfm file into docs repo
connector:
type:
github:
endpoint:
token:
owner:
repo:cd cli
npm ci && npm run buildMIT
