Skip to main content
Version: v0.0.0

Markdown formatting guide

This guide covers all Markdown syntax and Docusaurus-specific components used in Midnight documentation. Use this as a reference when writing and formatting content.

Prerequisites

This guide assumes familiarity with basic Markdown. For general Markdown syntax, see the Markdown Guide. This focuses on Docusaurus-specific features and Midnight conventions.

note

For more advanced Docusaurus features, see the official Docusaurus documentation. For general Markdown syntax, refer to the Markdown Guide.

Basic Markdown syntax​

Headings​

Use ATX-style headings with proper hierarchy:

# Page title (H1) - only one per page
## Major sections (H2)
### Subsections (H3)
#### Details (H4) - use sparingly
##### Rarely used (H5)
###### Almost never used (H6)
  • Only one H1 per page (the title)
  • Don't skip heading levels
  • Use sentence case for all headings
  • Keep headings descriptive and scannable

Text formatting​

**Bold text** for emphasis and UI elements
*Italic text* for first-time terms or emphasis
`Inline code` for commands, functions, and file names
~~Strikethrough~~ for deprecated content

Examples:

  • Click the send button
  • Navigate to the settings menu
  • Run the npm install command
  • This method is deprecated
[Link text](https://example.com)
[Internal link](/develop/tutorial/setup)
[Link with title](https://example.com "Tooltip text")
[Reference link][ref-id]

[ref-id]: https://example.com "Reference definition"
  • Use descriptive link text (never "click here")
  • Use relative paths for internal links
  • Include https:// for external links
  • Test all links before publishing

Lists​

Unordered lists:

- First item
- Second item
- Nested item
- Another nested item
- Third item

Ordered lists:

1. First step
2. Second step
1. Substep A
2. Substep B
3. Third step

Task lists:

- [x] Completed task
- [ ] Incomplete task
- [ ] Another task

Code blocks​

Inline code:

Use `backticks` for inline code.

Fenced code blocks:

```javascript
const config = {
network: 'testnet',
endpoint: 'https://api.midnight.network'
};
```

Code blocks with titles:

```javascript title="config.js"
const midnight = require('@midnight/sdk');
```

Highlighted lines:

```javascript {2,4-6}
const config = {
network: 'testnet', // highlighted
endpoint: 'https://api.midnight.network',
timeout: 5000, // highlighted
retries: 3, // highlighted
debug: false // highlighted
};
```

Tables​

| Feature | User guide | Builder guide |
|---------|------------|---------------|
| Complexity | Basic | Advanced |
| Time | 10-15 min | 30-45 min |
| Docker | ❌ No | βœ… Yes |

Table formatting tips:

  • Use pipes | to separate columns
  • Headers are separated by dashes ---
  • Align columns for readability
  • Use emojis sparingly for visual elements

Blockquotes​

> This is a blockquote
>
> It can span multiple lines
> and include **formatting**.

Use blockquotes for:

  • Important quotes from specifications
  • Highlighting key concepts
  • Callout boxes (though admonitions are preferred)

Components​

Admonitions​

Docusaurus provides several admonition types:

:::note
General information and context.
:::

:::tip
Helpful hints and best practices.
:::

:::info[]
Additional details and explanations.
:::

:::warning
Important information users must know.
:::

:::caution
Potential issues and common pitfalls.
:::

:::danger
Critical warnings about security or data loss.
:::

Custom titles:

:::tip[Pro tip]
Use custom titles to make admonitions more specific.
:::

:::warning[⚠️ Security alert]
Always verify wallet addresses before sending transactions.
:::

Collapsible admonitions:

:::details Click to expand
This content is hidden by default and can be expanded.
:::

Tabs​

Import tabs at the top of your file:

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

Basic tab usage:

<Tabs>
<TabItem value="user" label="For users">

Content for users goes here.

</TabItem>
<TabItem value="dev" label="For developers">

Content for developers goes here.

</TabItem>
</Tabs>

Advanced tab features:

<Tabs
defaultValue="mac"
values={[
{label: 'macOS', value: 'mac'},
{label: 'Linux', value: 'linux'},
{label: 'Windows', value: 'windows'},
]}>

<TabItem value="mac">

macOS-specific instructions.

</TabItem>
<TabItem value="linux">

Linux-specific instructions.

</TabItem>
<TabItem value="windows">

Windows-specific instructions.

</TabItem>
</Tabs>

Tab group synchronization:

<Tabs groupId="operating-systems">
<TabItem value="mac" label="macOS">

All tabs with the same groupId will sync across the page.

</TabItem>
</Tabs>

Details and summary​

For collapsible content:

Advanced configuration

This content is hidden by default. You can include:

  • Lists

  • Code blocks

  • Any markdown content

    const advancedConfig = {
    // configuration options
    };

Midnight-specific components​

Step and Flow components​

Import these components for procedural documentation:

import Step from '@site/src/components/Step';
import Flow from '@site/src/components/Flow';

Usage pattern:

<Flow>

<Step>

### Install wallet

**Objective**: Set up your Midnight wallet.

**Actions**:
1. Download Lace wallet
2. Create new wallet
3. Secure your seed phrase

**Verification**: Wallet displays in browser toolbar.

</Step>

<Step>

### Get tokens

**Objective**: Obtain tDUST for testing.

**Actions**:
1. Visit the faucet
2. Enter wallet address
3. Request tokens

**Verification**: Balance appears in wallet.

</Step>

</Flow>

Code snippets with context​

For API documentation and examples:

**Install the SDK:**
```bash
npm install @midnight/sdk

Initialize connection:

import { MidnightSDK } from '@midnight/sdk';

const sdk = new MidnightSDK({
network: 'testnet',
proofServerUrl: 'http://localhost:6300'
});

Send transaction:

const result = await sdk.sendTransaction({
to: 'mn_shield-addr_test1...',
amount: 10.0,
privacy: true
});

console.log('Transaction hash:', result.hash);

## Images and media

### Images

```markdown
![Alt text](/img/screenshot.png)
![Alt text with title](/img/diagram.png "Diagram showing network architecture")

Image best practices:

  • Store images in /static/img/ directory
  • Use descriptive alt text for accessibility
  • Optimize images for web (WebP format preferred)
  • Include captions for complex diagrams

With captions:

![Lace wallet interface](/img/lace-wallet.png)
*Figure 1: Lace wallet showing transaction history*

Videos​

<video controls width="100%">
<source src="/video/tutorial.mp4" type="video/mp4" />
Your browser does not support the video tag.
</video>

External embeds​

<iframe
width="560"
height="315"
src="https://www.youtube.com/embed/VIDEO_ID"
title="YouTube video player"
frameBorder="0"
allowFullScreen>
</iframe>

Advanced formatting​

Mermaid diagrams​

  ```mermaid
graph TD
A[Start] --> B{Decision}
B -->|Yes| C[Process A]
B -->|No| D[Process B]
C --> E[End]
D --> E

### Custom HTML

When Markdown isn't sufficient:

```html
<div className="custom-container">
<h3>Custom section</h3>
<p>Mix HTML with Markdown for special layouts.</p>
</div>
  • Use sparingly - prefer Markdown when possible
  • Use className instead of class for React compatibility
  • Ensure accessibility with proper ARIA labels
  • Test across different screen sizes

Metadata and frontmatter​

Required frontmatter​

---
title: Page title in sentence case
description: Write a description of 120-160 characters
sidebar_label: Navigation label
sidebar_position: 1
tags: [getting-started, development]
slug: /folder-location/file
---

Optional frontmatter​

---
# Custom URL (if different from filename)
slug: /custom-url-path

# Hide from sidebar
sidebar_class_name: hidden

# Custom edit URL
custom_edit_url: https://github.com/repo/edit/main/docs/page.md

# Disable edit link
custom_edit_url: null

# Hide table of contents
hide_table_of_contents: true

# Hide title
hide_title: true

---

Import statements​

Always place imports after frontmatter:

---
title: Page title
---

import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import CustomComponent from '@site/src/components/CustomComponent';

# Page content starts here

Common patterns​

API reference entry​

## `sendTransaction(options)`

Sends a transaction to the Midnight network with privacy features.

### Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `to` | string | Yes | Recipient wallet address |
| `amount` | number | Yes | Amount in tDUST |
| `privacy` | boolean | No | Enable privacy features (default: true) |

### Returns

Returns a `Promise<TransactionResult>` with the following structure:

```typescript
interface TransactionResult {
hash: string;
status: 'pending' | 'confirmed' | 'failed';
confirmations: number;
}

Example​

const result = await sdk.sendTransaction({
to: 'mn_shield-addr_test1...',
amount: 25.5,
privacy: true
});

console.log(`Transaction ${result.hash} is ${result.status}`);

Error handling​

try {
const result = await sdk.sendTransaction(options);
} catch (error) {
if (error.code === 'INSUFFICIENT_FUNDS') {
console.error('Not enough tDUST in wallet');
}
}

Configuration reference​

## Configuration options

### Basic configuration

```javascript title="midnight.config.js"
module.exports = {
network: 'testnet',
proofServerUrl: 'http://localhost:6300',
timeout: 30000
};

Advanced configuration​

Full configuration options
midnight.config.js
module.exports = {
// Network settings
network: 'testnet', // 'testnet' | 'mainnet'
proofServerUrl: 'http://localhost:6300',

// Connection settings
timeout: 30000,
retries: 3,
retryDelay: 1000,

// Security settings
validateCertificates: true,
allowInsecureConnections: false,

// Development settings
debug: false,
logLevel: 'info', // 'debug' | 'info' | 'warn' | 'error'

// Custom endpoints
endpoints: {
faucet: 'https://faucet.midnight.network',
explorer: 'https://explorer.midnight.network'
}
};