# Code Block Learn how to integrate Shiki, a beautiful yet powerful syntax highlighter. {/* --- */} ## Installation [Install Shiki](https://shiki.style/guide/install) with your preferred package manager. ```console npm install -D shiki ``` ## Next.js Integration Shiki provides [official documentation](https://shiki.style/packages/next) for integrating into Next.js. This guide will follow this outline. ## Create a Component A reusable component should suffice in most projects. Tap the `code` tab below to access the source, then follow the steps below. 1. Implement a new `` component in `/src/components/code-block.tsx`. 2. Implement several variations of our `` component in any route `page.tsx`. A few things of note about this component: * You will need to import and configure any number of [Shiki themes](https://shiki.style/themes). * You will need to import and configure any number of [supported languages](https://shiki.style/languages). * The component has been implemented using Skeleton's [component style guidelines](http://localhost:4321/docs/resources/contribute/components). * This provides a number of style props for easy customization via Skeleton's standard conventions. * The component exposes `code`, `lang`, and `theme` properties to configure on-the-fly. * The Code Block `
` tag is auto-generated by Shiki; target utility classes with: `[&>pre]:myClassHere`.

## Programmatic Usage

In some cases you may not have direct access to the source code, such as content from a blog posts or CMS pages. In fact the code may even come pre-baked with surrounding `
` or `` elements. For this, you'll need to follow the general steps below. Specific implementation may differ based on your app and meta-framework.

1. Query all `
` or `` blocks using Javascript tools like `document.querySelectorAll()`. Be as specific as possible.
2. Ensure you have a clean instance of the source code itself, with no extra markup injected within.
3. Use Shiki's [codeToHtml](https://shiki.style/guide/install#shorthands) feature to parse the code as styled HTML markup.
4. Then append each instance of the code blocks in your DOM.

## Custom Themes

Shiki provides support for generating a custom highlighter theme:

* [Loading Custom Themes](https://shiki.style/guide/load-theme)
* [List of Bundled Themes](https://shiki.style/themes)

Shiki theme values can be defined using Skeleton custom theme properties, such as `rgba(--color-primary-500)`.

## Accessibility

See [Salma Alam-Naylor's](https://whitep4nth3r.com/about/) guidelines for [creating accessible code blocks](https://whitep4nth3r.com/blog/how-to-make-your-code-blocks-accessible-on-your-website/) that meet WGAC standards.