# Code snippet tag

The `code-snippet` tag displays code examples in your documentation that are loaded from local files.

## Syntax and usage

The `code-snippet` tag is a self-closing tag, which means it has no child elements.
Use attributes to pass the path to the local file and configure how the snippet is displayed.

Example element:

museum-redocly.yaml

```yaml museum-redocly.yaml
products:
  tickets:
    name: Museum Tickets
    icon: images/ticket-logo.png
    folder: products/tickets/
  events:
    name: Museum Events
    icon: ./images/event-logo.svg
    folder: ./products/events
navbar:
```

Example syntax:


```
{% code-snippet
  file="./code-examples/museum-config.yaml"
  language="yaml"
  from=1
  to=10
  title="museum-redocly.yaml"
/%}
```

## Attributes

| Option | Type | Description |
|  --- | --- | --- |
| file | string | The absolute or relative path to the file with the code snippet. |
| from | number | string | Use to specify the **starting point** of your code snippet and *include* it in the rendered element.
Works with either a line number or a specific string contained in the starting line.
Cannot be used with `after`. |
| to | number | string | Use to specify the **ending point** of your code snippet and *include* it in the rendered element.
Works with either a line number or a specific string contained in the starting line.
Cannot be used with `before`. |
| after | number | string | Similar to `from` but *excludes the starting point* from the rendered element.
Cannot be used with `from`. |
| before | number | string | Similar to `to` but *excludes the ending point* from the rendered element.
Cannot be used with `to`. |
| prefix | string | Use to add explanatory information at the start of the code snippet.
Prepend with `//` to style as a comment.
We recommend including a new line (`\n`) at the end of the prefix. |
| language | string | Sets the syntax highlighting rules for the code sample used.
Syntax highlighting is available for all languages listed on the [supported languages page](https://prismjs.com/#supported-languages). |
| title | string | Set the text displayed in the gray header at the top of the code snippet. | Commonly used for filenames. |
| `wrap` | boolean | Wraps long lines in the code snippet to avoid or reduce horizontal scroll.
Default value is `false`. |


## Examples

### Use line numbers as selectors

Example element:

museum-redocly.yaml

```yaml museum-redocly.yaml
// Please reserve navbar entries for important use cases 
  items:
    - page: about-the-museum.md
      label: About
    - page: sponsor-the-museum.md
      label: Benefactors
footer:
```

Example syntax:


```
{% code-snippet
  file="./code-examples/museum-config.yaml"
  language="yaml"
  from=11
  to=16
  title="museum-redocly.yaml"
  prefix="// Please reserve navbar entries for important use cases \n"
/%}
```

### Use strings as selectors

Example element:

museum-redocly.yaml

```yaml museum-redocly.yaml
footer:
  copyrightText: Redocly Museum API
  items:
    # Column 1
    - page: policies/faq.md
      label: Museum FAQ
    # Column 2
    - group: Resources
      items:
        - href: https://access.si.edu/museum-professionals
          label: Smithsonian Resources
        - href: https://www.aam-us.org/topic/resource-library/
          label: American Alliance of Museums
```

Example syntax:


```
{% code-snippet
  file="./code-examples/museum-config.yaml"
  language="yaml"
  from="footer"
  to="redirects"
  title="museum-redocly.yaml"
/%}
```

### Compare selection attributes

Using the `to` / `from` selectors **includes** the starting or ending point in the rendered example while the `after` / `before` selectors **excludes** them.

The examples below use the same source file with different selection attributes.

**To / from example syntax**


```
{% code-snippet
  file="./code-examples/useTabs.ts"
  from=12
  to=14
/%}
```

**To / from example element**


```
  const setTabRef = useCallback((element: HTMLButtonElement | null, index: number) => {
    tabRefs.current[index] = element;
  }, []);
```

**After / before example syntax**


```
    tabRefs.current[index] = element;
```

**After / before example element**


```
{% code-snippet
  file="./code-examples/useTabs.ts"
  after=12
  before=14
/%}
```

### Add file names to code snippets

Add a file name to display in the code snippet header using the `title` attribute:


```markdoc
```js {% title="scripts.js" %}
function test() {
  console.log('Hello World!');
}
```
```

Result:


```js scripts.js
function test() {
  console.log('Hello World!');
}
```

### Highlight lines and text

Highlight a specific line using `[!code highlight]`:


```markdoc
```js
function test() {
  console.log('Hello World!'); // [!code highlight] [!code highlight]
}
```
```

Result:


```js
function test() {
  console.log('Hello World!'); // [!code highlight]
}
```

Highlight multiple consecutive lines:


```markdoc
```js 
// [!code highlight:3] [!code highlight:3]
function test() {
  const hello = 'Hello';
  const world = 'World';
  console.log(hello + " " + world);
}
```
```

Result:


```js
// [!code highlight:3]
function test() { 
  const hello = 'Hello';
  const world = 'World';
  console.log(hello + " " + world);
}
```

Highlight non-consecutive lines using the `highlight` attribute:


```markdoc
```js {% highlight="{1,3-4}" %}
function test() {
  const hello = 'Hello';
  const world = 'World';
  console.log(hello + " " + world);
}
```
```

Result:


```js
function test() {
  const hello = 'Hello';
  const world = 'World';
  console.log(hello + " " + world);
}
```

Highlight specific words or symbols:


```markdoc
```js
// [!code word:Hello] [!code word:Hello]
function test() {
  const hello = 'Hello';
  const world = 'World';
  console.log(hello + " " + world);  // prints "Hello World"
}
```
```

Result:


```js
// [!code word:Hello]
function test() {
  const hello = 'Hello';
  const world = 'World';
  console.log(hello + " " + world);  // prints "Hello World"
}
```

Focus on specific lines by dimming others with a code comment:


```markdoc
```js
function test() {
  const hello = 'Hello'; // [!code focus] [!code focus]
  const world = 'World';
  console.log(hello + " " + world);
}
```
```

Or with a Markdoc tag and a pattern.


```markdoc
```js {% highlight="/Hello/" %}
function test() {
  const hello = 'Hello';
  const world = 'World';
  console.log(hello + " " + world);  // prints "Hello World"
}
```
```

Result:


```js
function test() {
  const hello = 'Hello'; // [!code focus]
  const world = 'World';
  console.log(hello + " " + world);
}
```

Mark lines with error and warning levels:


```markdoc
```js
function test() {
  console.log('No errors or warnings');
  console.error('Error'); // [!code error] [!code error]
  console.warn('Warning'); // [!code warning] [!code warning]
}
```
```

Result:


```js
function test() {
  console.log('No errors or warnings');
  console.error('Error'); // [!code error]
  console.warn('Warning'); // [!code warning]
}
```

Show added and removed lines:


```markdoc
```js
function test() {
  const hello = 'Hello';
  const world = 'World';
  console.log(hello + " " + world); // [!code --] [!code --]
  console.log(`${hello} ${world}`); // [!code ++] [!code ++]
}
```
```

Result:


```js
function test() {
  const hello = 'Hello';
  const world = 'World';
  console.log(hello + " " + world); // [!code --]
  console.log(`${hello} ${world}`); // [!code ++]
}
```

## Best practices

**Minimize complexity**

Avoid unnecessary details or context.
Simplified code snippets are easier for your readers to understand and apply.

**Centralize example files**

Store your example code in a central directory to make them easier to manage, update, and reference from code snippet tags.

## Resources

- **[Code snippet configuration](/docs/realm/config/code-snippet)** - Complete reference for customizing code snippet appearance, icons, and behavior across your documentation
- **[Global and page-level configuration](/docs/realm/config/code-snippet#configuration-scope)** - Apply consistent code snippet styling and settings throughout your project