Use fenced code blocks by enclosing code in three backticks. Code blocks are copyable, and if you have the assistant enabled, users can ask AI to explain the code.Specify the programming language for syntax highlighting and to enable meta options. Add any meta options, like a title or icon, after the language.
class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); }}
Enable syntax highlighting by specifying the programming language after the opening backticks of a code block.We use Shiki for syntax highlighting and support all available languages. See the full list of languages in Shiki’s documentation.Customize code block themes globally using styling.codeblocks in your docs.json file. Set simple themes like system or dark, or configure custom Shiki themes for light and dark modes. See Settings for configuration options.
class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); }}
In JavaScript and TypeScript code blocks, use twoslash to enable interactive type information. Users can hover over variables, functions, and parameters to see types and errors like in an IDE.
typePet = "cat" | "dog" | "hamster";functionadoptPet(name: string, type:Pet) { return `${name} the ${type} is now adopted!`;}// Hover to see the inferred typesconstmessage =adoptPet("Mintie", "cat");
Allow users to expand and collapse long code blocks using expandable.
from datetime import datetime, timedeltafrom typing import Dict, List, Optionalfrom dataclasses import dataclass@dataclassclass Book:title: strauthor: strisbn: strchecked_out: bool = Falsedue_date: Optional[datetime] = Noneclass Library: def __init__(self): self.books: Dict[str, Book] = {} self.checkouts: Dict[str, List[str]] = {} # patron -> list of ISBNs def add_book(self, book: Book) -> None: if book.isbn in self.books: raise ValueError(f"Book with ISBN {book.isbn} already exists") self.books[book.isbn] = book def checkout_book(self, isbn: str, patron: str, days: int = 14) -> None: if patron not in self.checkouts: self.checkouts[patron] = [] book = self.books.get(isbn) if not book: raise ValueError("Book not found") if book.checked_out: raise ValueError("Book is already checked out") if len(self.checkouts[patron]) >= 3: raise ValueError("Patron has reached checkout limit") book.checked_out = True book.due_date = datetime.now() + timedelta(days=days) self.checkouts[patron].append(isbn) def return_book(self, isbn: str) -> float: book = self.books.get(isbn) if not book or not book.checked_out: raise ValueError("Book not found or not checked out") late_fee = 0.0 if datetime.now() > book.due_date: days_late = (datetime.now() - book.due_date).days late_fee = days_late * 0.50 book.checked_out = False book.due_date = None # Remove from patron's checkouts for patron, books in self.checkouts.items(): if isbn in books: books.remove(isbn) break return late_fee def search(self, query: str) -> List[Book]: query = query.lower() return [ book for book in self.books.values() if query in book.title.lower() or query in book.author.lower() ]def main(): library = Library() # Add some books books = [ Book("The Hobbit", "J.R.R. Tolkien", "978-0-261-10295-4"), Book("1984", "George Orwell", "978-0-452-28423-4"), ] for book in books: library.add_book(book) # Checkout and return example library.checkout_book("978-0-261-10295-4", "patron123") late_fee = library.return_book("978-0-261-10295-4") print(f"Late fee: ${late_fee:.2f}")if __name__ == "__main__": main()
Show a visual diff of added or removed lines in your code blocks. Added lines are highlighted in green and removed lines are highlighted in red.To create diffs, add these special comments at the end of lines in your code block:
// [!code ++]: Mark a line as added (green highlight).
// [!code --]: Mark a line as removed (red highlight).
For multiple consecutive lines, specify the number of lines after a colon:
// [!code ++:3]: Mark the current line plus the next two lines as added.
// [!code --:5]: Mark the current line plus the next four lines as removed.
The comment syntax must match your programming language (for example, // for JavaScript or # for Python).
Use the <CodeBlock> component in custom React components to programmatically render code blocks with the same styling and features as markdown code blocks.