Files
mintlify__docs/create/code.mdx
Ethan Palm cfa3f61d1f Formatting fixes (#2150)
* number list formatting

* remove blank lines

* remove line break
2025-12-09 10:16:50 -08:00

538 lines
13 KiB
Plaintext

---
title: "Format code"
description: "Display and style inline code and code blocks."
keywords: ["code blocks", "syntax highlighting", "code styling"]
---
## Adding code samples
You can add inline code snippets or code blocks. Code blocks support meta options for syntax highlighting, titles, line highlighting, icons, and more.
### Inline code
To denote a `word` or `phrase` as code, enclose it in backticks (\`).
```mdx
To denote a `word` or `phrase` as code, enclose it in backticks (`).
```
### Code blocks
Use [fenced code blocks](https://www.markdownguide.org/extended-syntax/#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.
<CodeGroup>
```java HelloWorld.java example icon=java lines
class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
```
````mdx Format
```java HelloWorld.java example lines icon="java"
class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
```
````
</CodeGroup>
## Code block options
Add meta options to your code blocks to customize their appearance.
<Note>
You must specify a programming language for a code block before adding any other meta options.
</Note>
### Option syntax
- **String and boolean options**: Wrap with `""`, `''`, or no quotes.
- **Expression options**: Wrap with `{}`, `""`, or `''`.
### Syntax highlighting
Enable syntax highlighting by specifying the programming language after the opening backticks of a code block.
We use [Shiki](https://shiki.style/) for syntax highlighting and support all available languages. See the full list of [languages](https://shiki.style/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](https://shiki.style/themes) for light and dark modes. See [Settings](/organize/settings#param-styling) for configuration options.
<CodeGroup>
```java Syntax highlighting example
class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
```
````mdx Format
```java Syntax highlighting example
class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
```
````
</CodeGroup>
<Accordion title="Custom syntax highlighting theme">
For custom themes, set your theme in `docs.json` to `"css-variables"` and override syntax highlighting colors using CSS variables with the `--mint-` prefix.
The following variables are available:
**Basic colors**
- `--mint-color-text`: Default text color
- `--mint-color-background`: Background color
**Token colors**
- `--mint-token-constant`: Constants and literals
- `--mint-token-string`: String values
- `--mint-token-comment`: Comments
- `--mint-token-keyword`: Keywords
- `--mint-token-parameter`: Function parameters
- `--mint-token-function`: Function names
- `--mint-token-string-expression`: String expressions
- `--mint-token-punctuation`: Punctuation marks
- `--mint-token-link`: Links
**ANSI colors**
- `--mint-ansi-black`, `--mint-ansi-black-dim`
- `--mint-ansi-red`, `--mint-ansi-red-dim`
- `--mint-ansi-green`, `--mint-ansi-green-dim`
- `--mint-ansi-yellow`, `--mint-ansi-yellow-dim`
- `--mint-ansi-blue`, `--mint-ansi-blue-dim`
- `--mint-ansi-magenta`, `--mint-ansi-magenta-dim`
- `--mint-ansi-cyan`, `--mint-ansi-cyan-dim`
- `--mint-ansi-white`, `--mint-ansi-white-dim`
- `--mint-ansi-bright-black`, `--mint-ansi-bright-black-dim`
- `--mint-ansi-bright-red`, `--mint-ansi-bright-red-dim`
- `--mint-ansi-bright-green`, `--mint-ansi-bright-green-dim`
- `--mint-ansi-bright-yellow`, `--mint-ansi-bright-yellow-dim`
- `--mint-ansi-bright-blue`, `--mint-ansi-bright-blue-dim`
- `--mint-ansi-bright-magenta`, `--mint-ansi-bright-magenta-dim`
- `--mint-ansi-bright-cyan`, `--mint-ansi-bright-cyan-dim`
- `--mint-ansi-bright-white`, `--mint-ansi-bright-white-dim`
**Custom syntax highlighting**
Add syntax highlighting for languages not included in Shiki's default set by providing custom TextMate grammar files. Create a JSON file following the [TextMate grammar format](https://macromates.com/manual/en/language_grammars), then reference it in your `docs.json`. You can add multiple custom languages by including additional paths in the array.
```json docs.json
{
"styling": {
"codeblocks": {
"languages": {
"custom": ["/languages/my-custom-language.json"]
}
}
}
}
```
</Accordion>
### Twoslash
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.
<CodeGroup>
```ts twoslash Twoslash example
type Pet = "cat" | "dog" | "hamster";
function adoptPet(name: string, type: Pet) {
return `${name} the ${type} is now adopted!`;
}
// Hover to see the inferred types
const message = adoptPet("Mintie", "cat");
```
````mdx Format
```ts twoslash Twoslash example
type Pet = "cat" | "dog" | "hamster";
function adoptPet(name: string, type: Pet) {
return `${name} the ${type} is now adopted!`;
}
// Hover to see the inferred types
const message = adoptPet("Mintie", "cat");
```
````
</CodeGroup>
### Title
Add a title to label your code example. Use `title="Your title"` or a string on a single line.
<CodeGroup>
```javascript Title example
const hello = "world";
```
````mdx Format
```javascript Title example
const hello = "world";
```
````
</CodeGroup>
### Icon
Add an icon to your code block using the `icon` property. See [Icons](/components/icons) for all available options.
<CodeGroup>
```javascript Icon example icon=square-js
const hello = "world";
```
````mdx Format
```javascript Icon example icon="square-js"
const hello = "world";
```
````
</CodeGroup>
### Line highlighting
Highlight specific lines in your code blocks using `highlight` with the line numbers or ranges you want to highlight.
<CodeGroup>
```javascript Line highlighting example {1,2,5}
const greeting = "Hello, World!";
function sayHello() {
console.log(greeting);
}
sayHello();
```
````mdx Format
```javascript Line highlighting example highlight={1-2,5}
const greeting = "Hello, World!";
function sayHello() {
console.log(greeting);
}
sayHello();
```
````
</CodeGroup>
### Line focusing
Focus on specific lines in your code blocks using `focus` with line numbers or ranges.
<CodeGroup>
```javascript Line focusing example focus=2,4,5
const greeting = "Hello, World!";
function sayHello() {
console.log(greeting);
}
sayHello();
```
````mdx Format
```javascript Line focusing example focus={2,4-5}
const greeting = "Hello, World!";
function sayHello() {
console.log(greeting);
}
sayHello();
```
````
</CodeGroup>
### Show line numbers
Display line numbers on the left side of your code block using `lines`.
<CodeGroup>
```javascript Show line numbers example lines
const greeting = "Hello, World!";
function sayHello() {
console.log(greeting);
}
sayHello();
```
````mdx Format
```javascript Show line numbers example lines
const greeting = "Hello, World!";
function sayHello() {
console.log(greeting);
}
sayHello();
```
````
</CodeGroup>
### Expandable
Allow users to expand and collapse long code blocks using `expandable`.
<CodeGroup>
```python Expandable example expandable
from datetime import datetime, timedelta
from typing import Dict, List, Optional
from dataclasses import dataclass
@dataclass
class Book:
title: str
author: str
isbn: str
checked_out: bool = False
due_date: Optional[datetime] = None
class 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()
```
````text Format
```python Expandable example expandable
from datetime import datetime, timedelta
from typing import Dict, List, Optional
from dataclasses import dataclass
# ...
if __name__ == "__main__":
main()
```
````
</CodeGroup>
### Wrap
Enable text wrapping for long lines using `wrap`. This prevents horizontal scrolling and makes long lines easier to read.
<CodeGroup>
```javascript Wrap example wrap
const greeting =
"Hello, World! I am a long line of text that will wrap to the next line.";
function sayHello() {
console.log(greeting);
}
sayHello();
```
````mdx Format
```javascript Wrap example wrap
const greeting =
"Hello, World! I am a long line of text that will wrap to the next line.";
function sayHello() {
console.log(greeting);
}
sayHello();
```
````
</CodeGroup>
### Diff
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).
<CodeGroup>
```js Diff example lines
const greeting = "Hello, World!"; // [!code ++]
function sayHello() {
console.log("Hello, World!"); // [!code --]
console.log(greeting); // [!code ++]
}
sayHello();
```
````text Format
```js Diff example lines
const greeting = "Hello, World!"; // [!code ++]
function sayHello() {
console.log("Hello, World!"); // [!code --]
console.log(greeting); // [!code ++]
}
sayHello();
```
````
</CodeGroup>
## CodeBlock component
Use the `<CodeBlock>` component in custom React components to programmatically render code blocks with the same styling and features as markdown code blocks.
### Props
<ResponseField name="language" type="string">
The programming language for syntax highlighting.
</ResponseField>
<ResponseField name="filename" type="string">
The filename to display in the code block header.
</ResponseField>
<ResponseField name="icon" type="string">
The icon to display in the code block header. See [Icons](/components/icons)
for available options.
</ResponseField>
<ResponseField name="lines" type="boolean">
Whether to show line numbers.
</ResponseField>
<ResponseField name="wrap" type="boolean">
Whether to wrap the code block.
</ResponseField>
<ResponseField name="expandable" type="boolean">
Whether to expand the code block.
</ResponseField>
<ResponseField name="highlight" type="string">
The lines to highlight. Provide a stringified array of numbers. Example:
`"[1,3,4,5]"`.
</ResponseField>
<ResponseField name="focus" type="string">
The lines to focus on. Provide a stringified array of numbers. Example:
`"[1,3,4,5]"`.
</ResponseField>
### Example
```jsx
export const CustomCodeBlock = ({
filename,
icon,
language,
highlight,
children,
}) => {
return (
<CodeBlock
filename={filename}
icon={icon}
language={language}
lines
highlight={highlight}
>
{children}
</CodeBlock>
);
};
```