Skip to content

Contributing

Contributions of all kinds are welcome — from fixing a typo to writing a whole new chapter.

TypeDescription
Fix an errorIncorrect explanation, broken code, outdated content
Improve contentClearer wording, better examples
Add a chapterPropose and write a new topic
TranslateEnglish ↔ Korean, or help add a new language
Report a bugBroken UI, code runner issues, broken links
Terminal window
git clone https://github.com/qtaghdi/rust-with-typescript.git
cd rust-with-typescript
bun install
bun run dev # → http://localhost:4321

Chapters live in src/content/docs/:

src/content/docs/
├── ch0-intro.md ← English
├── ch1-mental-model.md
├── ...
└── ko/
├── ch0-intro.md ← Korean
├── ch1-mental-model.md
└── ...

Keep both languages in sync. When you edit an English chapter, update the Korean version too (or note it in your PR).

  1. Open the file in src/content/docs/ (English) or src/content/docs/ko/ (Korean)
  2. Edit the Markdown
  3. Run bun run dev to preview
  4. Open a PR
  1. Create src/content/docs/ch{N}-topic.md and src/content/docs/ko/ch{N}-topic.md
  2. Add it to sidebar in astro.config.mjs with both label and translations.ko
  3. Follow existing chapter structure:
    • Frontmatter: title, description
    • TypeScript ↔ Rust side-by-side comparisons
    • Summary section at the end
    • Glossary links for key terms

Add the runnable flag to make a Rust block executable in the browser:

```rust runnable
fn main() {
println!("Hello!");
}
```

After adding runnable blocks, regenerate the hash file:

Terminal window
node scripts/generate-hashes.mjs

bun run build does this automatically. For local dev you need to run it manually once.

We follow Conventional Commits:

fix: correct borrow checker example in ch3
feat: add chapter on error handling patterns
docs: improve lifetime syntax explanation

Use one of the issue templates on GitHub:

  • Content Error — incorrect explanation, broken code
  • New Chapter Proposal — suggest a topic
  • Bug Report — site/UI issues

Open an issue →