Code
Code blocks
Code blocks are rendered by the ProsePre component of @nuxtjs/mdc and code highlighting is done underneath by Shiki.
export default defineNuxtConfig({
  modules: ['@nuxt/ui']
})
```ts
export default defineNuxtConfig({
  modules: ['@nuxt/ui']
})
```
| Prop | Default | Type | 
|---|---|---|
| icon | 
 | |
| code | 
 | |
| language | 
 | |
| filename | 
 | |
| highlights | 
 | |
| hideHeader | 
 | |
| meta | 
 | |
| ui | 
 | 
export default defineAppConfig({
  ui: {
    prose: {
      pre: {
        slots: {
          root: 'relative my-5 group',
          header: 'flex items-center gap-1.5 border border-muted bg-default border-b-0 relative rounded-t-md px-4 py-3',
          filename: 'text-default text-sm/6',
          icon: 'size-4 shrink-0',
          copy: 'absolute top-[11px] right-[11px] lg:opacity-0 lg:group-hover:opacity-100 transition',
          base: 'group font-mono text-sm/6 border border-muted bg-muted rounded-md px-4 py-3 whitespace-pre-wrap break-words overflow-x-auto focus:outline-none'
        },
        variants: {
          filename: {
            true: {
              root: '[&>pre]:rounded-t-none [&>pre]:my-0 my-5'
            }
          }
        }
      },
      codeIcon: {
        'package.json': 'i-vscode-icons-file-type-node',
        'tsconfig.json': 'i-vscode-icons-file-type-tsconfig',
        '.npmrc': 'i-vscode-icons-file-type-npm',
        '.editorconfig': 'i-vscode-icons-file-type-editorconfig',
        '.eslintrc': 'i-vscode-icons-file-type-eslint',
        '.eslintrc.cjs': 'i-vscode-icons-file-type-eslint',
        '.eslintignore': 'i-vscode-icons-file-type-eslint',
        'eslint.config.js': 'i-vscode-icons-file-type-eslint',
        'eslint.config.mjs': 'i-vscode-icons-file-type-eslint',
        'eslint.config.cjs': 'i-vscode-icons-file-type-eslint',
        '.gitignore': 'i-vscode-icons-file-type-git',
        'yarn.lock': 'i-vscode-icons-file-type-yarn',
        '.env': 'i-vscode-icons-file-type-dotenv',
        '.env.example': 'i-vscode-icons-file-type-dotenv',
        '.vscode/settings.json': 'i-vscode-icons-file-type-vscode',
        nuxt: 'i-vscode-icons-file-type-nuxt',
        '.nuxtrc': 'i-vscode-icons-file-type-nuxt',
        '.nuxtignore': 'i-vscode-icons-file-type-nuxt',
        'nuxt.config.js': 'i-vscode-icons-file-type-nuxt',
        'nuxt.config.ts': 'i-vscode-icons-file-type-nuxt',
        'nuxt.schema.ts': 'i-vscode-icons-file-type-nuxt',
        'tailwind.config.js': 'i-vscode-icons-file-type-tailwind',
        'tailwind.config.ts': 'i-vscode-icons-file-type-tailwind',
        vue: 'i-vscode-icons-file-type-vue',
        ts: 'i-vscode-icons-file-type-typescript',
        tsx: 'i-vscode-icons-file-type-typescript',
        mjs: 'i-vscode-icons-file-type-js',
        cjs: 'i-vscode-icons-file-type-js',
        js: 'i-vscode-icons-file-type-js',
        jsx: 'i-vscode-icons-file-type-js',
        md: 'i-vscode-icons-file-type-markdown',
        py: 'i-vscode-icons-file-type-python',
        cs: 'i-vscode-icons-file-type-csharp',
        asm: 'i-vscode-icons-file-type-assembly',
        f: 'i-vscode-icons-file-type-fortran',
        hs: 'i-vscode-icons-file-type-haskell',
        fs: 'i-vscode-icons-file-type-fsharp',
        kt: 'i-vscode-icons-file-type-kotlin',
        rs: 'i-vscode-icons-file-type-rust',
        rb: 'i-vscode-icons-file-type-ruby',
        lsp: 'i-vscode-icons-file-type-lisp',
        ps1: 'i-vscode-icons-file-type-powershell',
        psd1: 'i-vscode-icons-file-type-powershell',
        psm1: 'i-vscode-icons-file-type-powershell',
        go: 'i-vscode-icons-file-type-go',
        gleam: 'i-vscode-icons-file-type-gleam',
        bicep: 'i-vscode-icons-file-type-bicep',
        bicepparam: 'i-vscode-icons-file-type-bicep',
        exs: 'i-vscode-icons-file-type-elixir',
        erl: 'i-vscode-icons-file-type-erlang',
        sbt: 'i-vscode-icons-file-type-scala',
        h: 'i-vscode-icons-file-type-cppheader',
        ino: 'i-vscode-icons-file-type-arduino',
        pl: 'i-vscode-icons-file-type-perl',
        jl: 'i-vscode-icons-file-type-julia',
        dart: 'i-vscode-icons-file-type-dartlang',
        ico: 'i-vscode-icons-file-type-favicon',
        npm: 'i-vscode-icons-file-type-npm',
        pnpm: 'i-vscode-icons-file-type-pnpm',
        npx: 'i-vscode-icons-file-type-npm',
        yarn: 'i-vscode-icons-file-type-yarn',
        bun: 'i-vscode-icons-file-type-bun',
        yml: 'i-vscode-icons-file-type-yaml',
        terminal: 'i-lucide-terminal'
      }
    }
  }
})
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import ui from '@nuxt/ui/vite'
export default defineConfig({
  plugins: [
    vue(),
    ui({
      ui: {
        prose: {
          pre: {
            slots: {
              root: 'relative my-5 group',
              header: 'flex items-center gap-1.5 border border-muted bg-default border-b-0 relative rounded-t-md px-4 py-3',
              filename: 'text-default text-sm/6',
              icon: 'size-4 shrink-0',
              copy: 'absolute top-[11px] right-[11px] lg:opacity-0 lg:group-hover:opacity-100 transition',
              base: 'group font-mono text-sm/6 border border-muted bg-muted rounded-md px-4 py-3 whitespace-pre-wrap break-words overflow-x-auto focus:outline-none'
            },
            variants: {
              filename: {
                true: {
                  root: '[&>pre]:rounded-t-none [&>pre]:my-0 my-5'
                }
              }
            }
          },
          codeIcon: {
            'package.json': 'i-vscode-icons-file-type-node',
            'tsconfig.json': 'i-vscode-icons-file-type-tsconfig',
            '.npmrc': 'i-vscode-icons-file-type-npm',
            '.editorconfig': 'i-vscode-icons-file-type-editorconfig',
            '.eslintrc': 'i-vscode-icons-file-type-eslint',
            '.eslintrc.cjs': 'i-vscode-icons-file-type-eslint',
            '.eslintignore': 'i-vscode-icons-file-type-eslint',
            'eslint.config.js': 'i-vscode-icons-file-type-eslint',
            'eslint.config.mjs': 'i-vscode-icons-file-type-eslint',
            'eslint.config.cjs': 'i-vscode-icons-file-type-eslint',
            '.gitignore': 'i-vscode-icons-file-type-git',
            'yarn.lock': 'i-vscode-icons-file-type-yarn',
            '.env': 'i-vscode-icons-file-type-dotenv',
            '.env.example': 'i-vscode-icons-file-type-dotenv',
            '.vscode/settings.json': 'i-vscode-icons-file-type-vscode',
            nuxt: 'i-vscode-icons-file-type-nuxt',
            '.nuxtrc': 'i-vscode-icons-file-type-nuxt',
            '.nuxtignore': 'i-vscode-icons-file-type-nuxt',
            'nuxt.config.js': 'i-vscode-icons-file-type-nuxt',
            'nuxt.config.ts': 'i-vscode-icons-file-type-nuxt',
            'nuxt.schema.ts': 'i-vscode-icons-file-type-nuxt',
            'tailwind.config.js': 'i-vscode-icons-file-type-tailwind',
            'tailwind.config.ts': 'i-vscode-icons-file-type-tailwind',
            vue: 'i-vscode-icons-file-type-vue',
            ts: 'i-vscode-icons-file-type-typescript',
            tsx: 'i-vscode-icons-file-type-typescript',
            mjs: 'i-vscode-icons-file-type-js',
            cjs: 'i-vscode-icons-file-type-js',
            js: 'i-vscode-icons-file-type-js',
            jsx: 'i-vscode-icons-file-type-js',
            md: 'i-vscode-icons-file-type-markdown',
            py: 'i-vscode-icons-file-type-python',
            cs: 'i-vscode-icons-file-type-csharp',
            asm: 'i-vscode-icons-file-type-assembly',
            f: 'i-vscode-icons-file-type-fortran',
            hs: 'i-vscode-icons-file-type-haskell',
            fs: 'i-vscode-icons-file-type-fsharp',
            kt: 'i-vscode-icons-file-type-kotlin',
            rs: 'i-vscode-icons-file-type-rust',
            rb: 'i-vscode-icons-file-type-ruby',
            lsp: 'i-vscode-icons-file-type-lisp',
            ps1: 'i-vscode-icons-file-type-powershell',
            psd1: 'i-vscode-icons-file-type-powershell',
            psm1: 'i-vscode-icons-file-type-powershell',
            go: 'i-vscode-icons-file-type-go',
            gleam: 'i-vscode-icons-file-type-gleam',
            bicep: 'i-vscode-icons-file-type-bicep',
            bicepparam: 'i-vscode-icons-file-type-bicep',
            exs: 'i-vscode-icons-file-type-elixir',
            erl: 'i-vscode-icons-file-type-erlang',
            sbt: 'i-vscode-icons-file-type-scala',
            h: 'i-vscode-icons-file-type-cppheader',
            ino: 'i-vscode-icons-file-type-arduino',
            pl: 'i-vscode-icons-file-type-perl',
            jl: 'i-vscode-icons-file-type-julia',
            dart: 'i-vscode-icons-file-type-dartlang',
            ico: 'i-vscode-icons-file-type-favicon',
            npm: 'i-vscode-icons-file-type-npm',
            pnpm: 'i-vscode-icons-file-type-pnpm',
            npx: 'i-vscode-icons-file-type-npm',
            yarn: 'i-vscode-icons-file-type-yarn',
            bun: 'i-vscode-icons-file-type-bun',
            yml: 'i-vscode-icons-file-type-yaml',
            terminal: 'i-lucide-terminal'
          }
        }
      }
    })
  ]
})
Language
Syntax highlighting is available for dozens of programming languages.
<script setup lang="ts">
const message = ref('Hello World!')
function updateMessage() {
  message.value = 'Button clicked!'
}
</script>
<template>
  <div>
    <h1>{{ message }}</h1>
    <UButton @click="updateMessage">
      Click me
    </UButton>
  </div>
</template>
```vue
<script setup lang="ts">
const message = ref('Hello World!')
function updateMessage() {
  message.value = 'Button clicked!'
}
</script>
<template>
  <div>
    <h1>{{ message }}</h1>
    <UButton @click="updateMessage">
      Click me
    </UButton>
  </div>
</template>
```
material-theme-lighter and material-theme-palenight VSCode themes are used for light & dark mode respectively. You can change this in your nuxt.config.ts through the content.build.markdown.highlight key.Filename
Code blocks support filename display with automatic icon detection.
export default defineNuxtConfig({
  modules: ['@nuxt/ui']
})
```ts [nuxt.config.ts]
export default defineNuxtConfig({
  modules: ['@nuxt/ui']
})
```
ProseCodeIcon component and contains a set of predefined icons which you can customize in your app.config.ts:export default defineAppConfig({
  ui: {
    prose: {
      codeIcon: {
        terminal: 'i-ph-terminal-window-duotone',
        config: 'i-lucide-settings',
        package: 'i-lucide-package'
      }
    }
  }
})
Copy button
Every code-block has a built-in copy button that will copy the code to your clipboard.
app.config.ts through the ui.icons.copy and ui.icons.copyCheck keys:export default defineAppConfig({
  ui: {
    icons: {
      copy: 'i-lucide-copy',
      copyCheck: 'i-lucide-copy-check'
    }
  }
})
Line highlighting
Highlight specific lines to draw attention to important parts.
export default defineNuxtConfig({
  modules: ['@nuxt/ui'], // This line is highlighted
  css: ['~/assets/css/main.css']
})
```ts [nuxt.config.ts] {2}
export default defineNuxtConfig({
  modules: ['@nuxt/ui'], // This line is highlighted
  css: ['~/assets/css/main.css']
})
```
Code diff
Use the diff language to show changes between code versions.
export default defineNuxtConfig({
  modules: [
-   '@nuxt/ui-pro'
+   '@nuxt/ui'
  ]
})
```diff [nuxt.config.ts]
export default defineNuxtConfig({
  modules: [
-   '@nuxt/ui-pro'
+   '@nuxt/ui'
  ]
})
```
Inline code
Inline code snippets are rendered by the ProseCode component of @nuxtjs/mdc.
inline code
`inline code`
| Prop | Default | Type | 
|---|---|---|
| lang | 
 | |
| color | 
 | 
 | 
export default defineAppConfig({
  ui: {
    prose: {
      code: {
        base: 'px-1.5 py-0.5 text-sm font-mono font-medium rounded-md inline-block',
        variants: {
          color: {
            primary: 'border border-primary/25 bg-primary/10 text-primary',
            secondary: 'border border-secondary/25 bg-secondary/10 text-secondary',
            success: 'border border-success/25 bg-success/10 text-success',
            info: 'border border-info/25 bg-info/10 text-info',
            warning: 'border border-warning/25 bg-warning/10 text-warning',
            error: 'border border-error/25 bg-error/10 text-error',
            neutral: 'border border-muted text-highlighted bg-muted'
          }
        },
        defaultVariants: {
          color: 'neutral'
        }
      }
    }
  }
})
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import ui from '@nuxt/ui/vite'
export default defineConfig({
  plugins: [
    vue(),
    ui({
      ui: {
        prose: {
          code: {
            base: 'px-1.5 py-0.5 text-sm font-mono font-medium rounded-md inline-block',
            variants: {
              color: {
                primary: 'border border-primary/25 bg-primary/10 text-primary',
                secondary: 'border border-secondary/25 bg-secondary/10 text-secondary',
                success: 'border border-success/25 bg-success/10 text-success',
                info: 'border border-info/25 bg-info/10 text-info',
                warning: 'border border-warning/25 bg-warning/10 text-warning',
                error: 'border border-error/25 bg-error/10 text-error',
                neutral: 'border border-muted text-highlighted bg-muted'
              }
            },
            defaultVariants: {
              color: 'neutral'
            }
          }
        }
      }
    })
  ]
})
Color
Use the color prop to change the color of the inline code. Defaults to neutral.
inline code
`inline code`{color="error"}
Lang
Use the lang prop to specify the language of the inline code.
nuxt.config.ts
`nuxt.config.ts`{lang="ts-type"}