Skip to main content

Code Blocks in Markdown

Code blocks are the heart of technical documentation.

In CodeHarborHub (powered by Docusaurus & MDX), code blocks are super-powered. You can add syntax highlighting, titles, live editors, and even interactive tabs.

This guide shows you everything you can do with code blocks, with real examples.

Basic Code Block

Wrap your code with three backticks (```) and specify the language for syntax highlighting.

```js
console.log("Hello CodeHarborHub!");
```
http://localhost:3000
console.log("Hello CodeHarborHub!");

Tip: Always specify the language (like js, python, html) for better highlighting.

Adding a Title

Give your readers context by adding a title to your code block.

```jsx title="/src/components/Greeting.js"
export default function Greeting() {
return <h1>Hello World!</h1>;
}
```
http://localhost:3000
/src/components/Greeting.js
export default function Greeting() {
return <h1>Hello World!</h1>;
}

Syntax Highlighting & Themes

CodeHarborHub uses Prism for beautiful syntax highlighting.

You can customize the theme in docusaurus.config.js:

docusaurus.config.js
import { themes as prismThemes } from "prism-react-renderer";

export default {
themeConfig: {
prism: {
theme: prismThemes.dracula, // Dark & vibrant
},
},
};

Supported languages include JavaScript, Python, Java, C++, and many more. To add extra languages (like PowerShell or Rust):

docusaurus.config.js
export default {
themeConfig: {
prism: {
additionalLanguages: ["powershell", "rust"],
},
},
};

Restart the dev server to see the changes.

Highlighting Lines

Highlight key lines to draw attention.

With magic comments:

```js
function importantCode() {
return "⚡ This line is important!";
}
```
http://localhost:3000
function importantCode() {
return "⚡ This line is important!";
}

With meta string:

```js {2}
function importantCode() {
return "⚡ This line is important!";
}
```

Line Numbers

Add line numbers for easier references.

```jsx showLineNumbers
function Example() {
return <p>Line numbers are enabled!</p>;
}
```
http://localhost:3000
function Example() {
return <p>Line numbers are enabled!</p>;
}

You can even start counting from a specific number:

```jsx showLineNumbers=5
function Example() {
return <p>Starts from 5!</p>;
}
```

Live Code Editor

Want readers to experiment directly? Turn any code block into a live playground using live.

Install the plugin first:

npm install --save @docusaurus/theme-live-codeblock

Enable it in docusaurus.config.js:

export default {
themes: ["@docusaurus/theme-live-codeblock"],
};

Now create a live block:

```jsx live
function Counter() {
const [count, setCount] = React.useState(0);
return <button onClick={() => setCount(count + 1)}>Count: {count}</button>;
}
```
http://localhost:3000
Live Editor
function Counter() {
  const [count, setCount] = React.useState(0);
  return <button onClick={() => setCount(count + 1)}>Count: {count}</button>;
}
Result
Loading...

Users can edit the code and see instant results!


Multi-Language Tabs

Show the same example in multiple languages using <Tabs> and <TabItem>.

import Tabs from "@theme/Tabs";
import TabItem from "@theme/TabItem";

<Tabs>
<TabItem value="js" label="JavaScript">

```js
console.log("Hello from JavaScript!");
```

</TabItem>
<TabItem value="py" label="Python">

```python
print("Hello from Python!")
```

</TabItem>
</Tabs>
http://localhost:3000
console.log("Hello from JavaScript!");

Advanced Tricks

Custom Magic Comments

Create your own highlight styles.

docusaurus.config.js
export default {
themeConfig: {
prism: {
magicComments: [
{
className: "code-block-error-line",
line: "This will error",
},
],
},
},
};

Then style it in CSS:

src/css/custom.css
.code-block-error-line {
background: #ff000020;
border-left: 3px solid #ff000080;
}

Interactive Imports

For live blocks, add custom components to the live scope:

npm run swizzle @docusaurus/theme-live-codeblock ReactLiveScope -- --eject

Then modify src/theme/ReactLiveScope/index.js:

import React from "react";

const FancyButton = (props) => (
<button
style={{ padding: 10, background: "#0070f3", color: "#fff" }}
{...props}
/>
);

export default {
React,
FancyButton,
};

Now you can use <FancyButton> inside your live code block!

Best Practices

  • Use comments for highlighting when code length changes frequently.
  • Always specify a language for better syntax highlighting.
  • Combine line numbers with highlights for tutorials and step-by-step guides.
  • Keep code blocks short & focused. Long blocks reduce readability.

✅ Summary

FeatureSyntax Example
Title```js title="file.js"
Line Highlight```js {1,3-5} or // highlight-next-line
Line Numbers```js showLineNumbers
Live Editor```jsx live
Multi-Lang Tabs<Tabs> + <TabItem>

Code blocks are not just static snippets they can be interactive teaching tools. Use these features to create engaging, developer-friendly docs in CodeHarborHub.