The complete publishing loop.
Create a project
$ ray new my-site $ cd my-site $ ray dev
The starter project contains content/, presentation/, assets/, a README, and an optional site.toml.
Write content
+++ title = "My first article" summary = "A short description." date = "2026-10-04" tags = ["raymatic", "publishing"] +++My first article
Write Markdown here.
Native fields include title, date, category, tags, author, draft, language, summary, canonical, Open Graph, and Twitter metadata. Custom TOML attributes remain available to presentations.
Configure identity
title = "My publication" author = "Your name" description = "A short publication description." language = "en" base_url = "https://example.com" social_links = ["https://github.com/your-name"]
base_url makes canonical URLs, sitemap URLs, and feeds absolute. Drafts are never included in public feeds, taxonomy pages, or the sitemap.
Validate and build
$ ray check $ ray build
check validates without replacing production output. build stages a complete output tree and commits it only after evaluation succeeds.
Migrate an existing site
$ ./scripts/migration-report.sh path/to/old-site
The report identifies common Pelican, Hugo, Jekyll, and Astro conventions, suggests front matter mappings, and flags permalink or slug decisions that need redirects. Migration remains editorial work: review every address before deployment.
Release confidence
$ cargo fmt --check $ cargo clippy --locked --all-targets --all-features -- -D warnings $ cargo test --locked $ cargo build --locked --release $ ./scripts/verify-release.sh
CI exercises Linux, macOS, and Windows. Release packaging and compatibility notes are documented in the repository's English documentation.