Code Blocks
Fenced code in every supported language, plus filenames, line numbers, line highlights, character highlights, and diffs.
The code renderer is built on Shiki via rehype-pretty-code. It supports per-language syntax highlighting, filenames, line numbers, highlighted lines, highlighted characters, and unified diff output.
Inline code
Inline code spans render with monospace styling and a subtle background. They're for short identifiers, not full statements. If you find yourself wrapping more than a few words, reach for a fenced block instead.
Languages
A small tour of the languages worth knowing the syntax for.
TypeScript
type Result<T> =
| { ok: true; value: T }
| { ok: false; error: string };
export function divide(a: number, b: number): Result<number> {
if (b === 0) return { ok: false, error: "divide by zero" };
return { ok: true, value: a / b };
}JavaScript
const fib = (n) =>
n < 2 ? n : fib(n - 1) + fib(n - 2);
console.log(fib(10));Python
def fizzbuzz(n: int) -> list[str]:
out = []
for i in range(1, n + 1):
if i % 15 == 0:
out.append("FizzBuzz")
elif i % 3 == 0:
out.append("Fizz")
elif i % 5 == 0:
out.append("Buzz")
else:
out.append(str(i))
return outGo
package main
import "fmt"
func main() {
nums := []int{1, 1, 2, 3, 5, 8, 13}
sum := 0
for _, n := range nums {
sum += n
}
fmt.Println("sum:", sum)
}Rust
fn main() {
let words = vec!["alpha", "bravo", "charlie"];
let joined: String = words.join(", ");
println!("{}", joined);
}JSON
{
"name": "brad",
"version": "1.4.0",
"modules": ["clients", "sales", "tickets"],
"active": true
}SQL
SELECT c.id, c.email, COUNT(t.id) AS open_tickets
FROM clients c
LEFT JOIN tickets t ON t.client_id = c.id AND t.status = 'open'
GROUP BY c.id, c.email
ORDER BY open_tickets DESC
LIMIT 10;HTML
<article class="card">
<header>
<h2>Welcome</h2>
</header>
<p>A simple card with a header and body.</p>
</article>CSS
.card {
border-radius: 0.75rem;
padding: 1.5rem;
background: hsl(220 14% 12%);
color: hsl(0 0% 96%);
}Bash
#!/usr/bin/env bash
set -euo pipefail
for file in *.md; do
wc -w "$file"
donePlaintext
Some content with no syntax highlighting at all.
Useful for log output, ASCII tables, or anything
that isn't really a language.Filenames
Add title="..." to the fence to render a filename header above the block.
export function formatCurrency(cents: number, currency = "USD"): string {
return new Intl.NumberFormat("en-US", {
style: "currency",
currency,
}).format(cents / 100);
}Line numbers
Add showLineNumbers to render a gutter with line numbers — handy when you want to reference a specific line in prose.
import { z } from "zod";
const ClientSchema = z.object({
id: z.string().uuid(),
email: z.string().email(),
name: z.string().min(1),
isAdmin: z.boolean().default(false),
});
export type Client = z.infer<typeof ClientSchema>;Highlighted lines
Use {N} or {N-M} to highlight specific lines. Combine with showLineNumbers when you want both.
import { getIronSession } from "iron-session";
import { cookies } from "next/headers";
import type { SessionData } from "./types";
export async function getSession(): Promise<SessionData | null> {
const session = await getIronSession<SessionData>(await cookies(), {
password: process.env.APP_KEY!,
cookieName: "brad_session",
});
return session.clientId ? session : null;
}The highlighted lines mark the import that matters and the iron-session call that does the work.
Highlighted characters
Wrap a substring in slashes to highlight every occurrence of it within the block. Useful when the point of the example is a single function or token.
import { useAuthStore } from "@/lib/store";
export function Greeting() {
const client = useAuthStore((s) => s.client);
if (!client) return null;
return <span>Hi, {client.name}</span>;
}You can also scope a highlight to a specific line range with a #N-M suffix — /term/#2-4 only highlights matches on lines 2-4.
Diffs
Use the diff language for unified diff output. Lines starting with + are additions, - are removals, and unchanged lines render as context.
export function greet(name: string): string {
- return "Hello, " + name;
+ return `Hello, ${name}!`;
}
-const greeting = greet("World");
+const greeting = greet("Friend");
console.log(greeting);For longer changes, prefer linking to a real commit or PR over pasting a diff. Diff blocks are best for tutorials where you want to focus the reader's eye on what changed.