All pages
Powered by GitBook
1 of 22

Blocks

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Tables

Basic text table

A1

B1

C1

A2

B2

C2

A3

B3

C3

With header

A
B
C

A1

B1

C1

A2

B2

C2

A3

B3

C3

With header hidden

A1

B1

C1

A2

B2

C2

A3

B3

C3

With resized column (B being larger)

A
B
C

A1

B1

C1

A2

B2

C2

A3

B3

C3

With text alignment (A to the right, B centered, C to the left)

A
B
C

A1

B1

C1

A2

B2

C2

A3

B3

C3

Tables with different column types

Some intro text

A short oneA tag that is quite longAnother one

Short intro text

A short one

Another text

Another one

Table with full-width

A1

B1

C1

A2

B2

C2

A3

B3

C3

Table with ratings

Rating A
Rating B

R1

R2

R3

Table with files

Table with checkbox

Checkbox

Checked

Not checked

Checked

Table with content references

An image file

An openAPI file

No file

Link

Page

Text page

Page with emoji

Page with emoji

Page with icon

Page with icon
🌍

Annotations

This paragraph contains an . It can be opened by clicking it.

In codeblocks

// Some code
and an .

Code

Code block with lines and no wrapping

function CodeHighlightLine(props: {
    block: DocumentBlockCode;
    line: HighlightLine;
    lineIndex: number;
    isLast: boolean;
    withLineNumbers: boolean;
    withWrap: boolean;
    context: ContentRefContext;
}) {
    const { block, line, isLast, withLineNumbers, context } = props;

    return (
        <span
            className={tcls(
                'flex',
                'flex-row',
                'px-4',
                line.highlighted ? 'bg-slate-200' : null,
                withLineNumbers
                    ? [
                          'before:shrink-0',
                          'before:absolute',
                          'before:left-0',
                          'before:pl-4',
                          line.highlighted ? 'before:bg-slate-200' : 'before:bg-slate-100',
                          'before:text-slate-400',
                          'before:content-[counter(line)]',
                          '[counter-increment:line]',
                          getLineNumberGutterWidth(block),
                      ]
                    : [],
            )}
        >
            <span className="flex-1">
                <CodeHighlightTokens tokens={line.tokens} context={context} />
                {isLast ? null : !withLineNumbers && line.tokens.length === 0 && 0 ? (
                    <span className="ew">{'\u200B'}</span>
                ) : (
                    '\n'
                )}
            </span>
        </span>
    );
}

Code block with line numbers and wrapping

function CodeHighlightLine(props: {
    block: DocumentBlockCode;
    line: HighlightLine;
    lineIndex: number;
    isLast: boolean;
    withLineNumbers: boolean;
    withWrap: boolean;
    context: ContentRefContext;
}) {
    const { block, line, isLast, withLineNumbers, context } = props;

    return (
        <span
            className={tcls(
                'flex',
                'flex-row',
                'px-4',
                line.highlighted ? 'bg-slate-200' : null,
                withLineNumbers
                    ? [
                          'before:shrink-0',
                          'before:absolute',
                          'before:left-0',
                          'before:pl-4',
                          line.highlighted ? 'before:bg-slate-200' : 'before:bg-slate-100',
                          'before:text-slate-400',
                          'before:content-[counter(line)]',
                          '[counter-increment:line]',
                          getLineNumberGutterWidth(block),
                      ]
                    : [],
            )}
        >
            <span className="flex-1">
                <CodeHighlightTokens tokens={line.tokens} context={context} />
                {isLast ? null : !withLineNumbers && line.tokens.length === 0 && 0 ? (
                    <span className="ew">{'\u200B'}</span>
                ) : (
                    '\n'
                )}
            </span>
        </span>
    );
}

Code block with wrapping but no line numbers

function CodeHighlightLine(props: {
    block: DocumentBlockCode;
    line: HighlightLine;
    lineIndex: number;
    isLast: boolean;
    withLineNumbers: boolean;
    withWrap: boolean;
    context: ContentRefContext;
}) {
    const { block, line, isLast, withLineNumbers, context } = props;

    return (
        <span
            className={tcls(
                'flex',
                'flex-row',
                'px-4',
                line.highlighted ? 'bg-slate-200' : null,
                withLineNumbers
                    ? [
                          'before:shrink-0',
                          'before:absolute',
                          'before:left-0',
                          'before:pl-4',
                          line.highlighted ? 'before:bg-slate-200' : 'before:bg-slate-100',
                          'before:text-slate-400',
                          'before:content-[counter(line)]',
                          '[counter-increment:line]',
                          getLineNumberGutterWidth(block),
                      ]
                    : [],
            )}
        >
            <span className="flex-1">
                <CodeHighlightTokens tokens={line.tokens} context={context} />
                {isLast ? null : !withLineNumbers && line.tokens.length === 0 && 0 ? (
                    <span className="ew">{'\u200B'}</span>
                ) : (
                    '\n'
                )}
            </span>
        </span>
    );
}

Code block with full-width option

// Some code

Integrations

A mermaid block:

A GitHub file:

A linear issue

A mailchimp block

Tabs

A single tab:

Tab with content:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in mauris nisi. Fusce suscipit hendrerit ex nec laoreet. Mauris dolor diam, posuere non accumsan at, auctor a lectus. Maecenas porttitor purus ipsum, bibendum volutpat metus tristique in. Fusce et quam sed purus pulvinar dignissim id ut nisi. Fusce malesuada nec leo quis laoreet. Sed elit ligula, porta sed lobortis at, porttitor porttitor sem.

Donec id pulvinar ex, ac consequat odio. Nulla eu ante bibendum, aliquet sapien nec, facilisis metus. Duis non convallis neque, accumsan iaculis risus. Nulla sed ultrices ex, et interdum tellus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse porta felis imperdiet ante congue vestibulum. Sed eu mattis turpis. Praesent pharetra turpis eu ligula finibus, non interdum dui posuere. Vivamus facilisis, diam ac luctus lacinia, turpis odio pharetra ex, vitae suscipit orci turpis tincidunt massa.

This tab contains headings that can be linked to:

First heading

Content

Second heading

Content

Tab with many long tab titles:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in mauris nisi. Fusce suscipit hendrerit ex nec laoreet. Mauris dolor diam, posuere non accumsan at, auctor a lectus. Maecenas porttitor purus ipsum, bibendum volutpat metus tristique in. Fusce et quam sed purus pulvinar dignissim id ut nisi. Fusce malesuada nec leo quis laoreet. Sed elit ligula, porta sed lobortis at, porttitor porttitor sem.

Donec id pulvinar ex, ac consequat odio. Nulla eu ante bibendum, aliquet sapien nec, facilisis metus. Duis non convallis neque, accumsan iaculis risus. Nulla sed ultrices ex, et interdum tellus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse porta felis imperdiet ante congue vestibulum. Sed eu mattis turpis. Praesent pharetra turpis eu ligula finibus, non interdum dui posuere. Vivamus facilisis, diam ac luctus lacinia, turpis odio pharetra ex, vitae suscipit orci turpis tincidunt massa.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in mauris nisi. Fusce suscipit hendrerit ex nec laoreet. Mauris dolor diam, posuere non accumsan at, auctor a lectus. Maecenas porttitor purus ipsum, bibendum volutpat metus tristique in. Fusce et quam sed purus pulvinar dignissim id ut nisi. Fusce malesuada nec leo quis laoreet. Sed elit ligula, porta sed lobortis at, porttitor porttitor sem.

Donec id pulvinar ex, ac consequat odio. Nulla eu ante bibendum, aliquet sapien nec, facilisis metus. Duis non convallis neque, accumsan iaculis risus. Nulla sed ultrices ex, et interdum tellus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse porta felis imperdiet ante congue vestibulum. Sed eu mattis turpis. Praesent pharetra turpis eu ligula finibus, non interdum dui posuere. Vivamus facilisis, diam ac luctus lacinia, turpis odio pharetra ex, vitae suscipit orci turpis tincidunt massa.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in mauris nisi. Fusce suscipit hendrerit ex nec laoreet. Mauris dolor diam, posuere non accumsan at, auctor a lectus. Maecenas porttitor purus ipsum, bibendum volutpat metus tristique in. Fusce et quam sed purus pulvinar dignissim id ut nisi. Fusce malesuada nec leo quis laoreet. Sed elit ligula, porta sed lobortis at, porttitor porttitor sem.

Donec id pulvinar ex, ac consequat odio. Nulla eu ante bibendum, aliquet sapien nec, facilisis metus. Duis non convallis neque, accumsan iaculis risus. Nulla sed ultrices ex, et interdum tellus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse porta felis imperdiet ante congue vestibulum. Sed eu mattis turpis. Praesent pharetra turpis eu ligula finibus, non interdum dui posuere. Vivamus facilisis, diam ac luctus lacinia, turpis odio pharetra ex, vitae suscipit orci turpis tincidunt massa.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in mauris nisi. Fusce suscipit hendrerit ex nec laoreet. Mauris dolor diam, posuere non accumsan at, auctor a lectus. Maecenas porttitor purus ipsum, bibendum volutpat metus tristique in. Fusce et quam sed purus pulvinar dignissim id ut nisi. Fusce malesuada nec leo quis laoreet. Sed elit ligula, porta sed lobortis at, porttitor porttitor sem.

Donec id pulvinar ex, ac consequat odio. Nulla eu ante bibendum, aliquet sapien nec, facilisis metus. Duis non convallis neque, accumsan iaculis risus. Nulla sed ultrices ex, et interdum tellus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse porta felis imperdiet ante congue vestibulum. Sed eu mattis turpis. Praesent pharetra turpis eu ligula finibus, non interdum dui posuere. Vivamus facilisis, diam ac luctus lacinia, turpis odio pharetra ex, vitae suscipit orci turpis tincidunt massa.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in mauris nisi. Fusce suscipit hendrerit ex nec laoreet. Mauris dolor diam, posuere non accumsan at, auctor a lectus. Maecenas porttitor purus ipsum, bibendum volutpat metus tristique in. Fusce et quam sed purus pulvinar dignissim id ut nisi. Fusce malesuada nec leo quis laoreet. Sed elit ligula, porta sed lobortis at, porttitor porttitor sem.

Donec id pulvinar ex, ac consequat odio. Nulla eu ante bibendum, aliquet sapien nec, facilisis metus. Duis non convallis neque, accumsan iaculis risus. Nulla sed ultrices ex, et interdum tellus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse porta felis imperdiet ante congue vestibulum. Sed eu mattis turpis. Praesent pharetra turpis eu ligula finibus, non interdum dui posuere. Vivamus facilisis, diam ac luctus lacinia, turpis odio pharetra ex, vitae suscipit orci turpis tincidunt massa.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in mauris nisi. Fusce suscipit hendrerit ex nec laoreet. Mauris dolor diam, posuere non accumsan at, auctor a lectus. Maecenas porttitor purus ipsum, bibendum volutpat metus tristique in. Fusce et quam sed purus pulvinar dignissim id ut nisi. Fusce malesuada nec leo quis laoreet. Sed elit ligula, porta sed lobortis at, porttitor porttitor sem.

Donec id pulvinar ex, ac consequat odio. Nulla eu ante bibendum, aliquet sapien nec, facilisis metus. Duis non convallis neque, accumsan iaculis risus. Nulla sed ultrices ex, et interdum tellus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse porta felis imperdiet ante congue vestibulum. Sed eu mattis turpis. Praesent pharetra turpis eu ligula finibus, non interdum dui posuere. Vivamus facilisis, diam ac luctus lacinia, turpis odio pharetra ex, vitae suscipit orci turpis tincidunt massa.

Links & tabs

Individual tabs can be linked or .

Hints

Colors

Info hints are great for showing general information, or providing tips and tricks.

Success hints are good for showing positive actions or achievements.

Warning hints are good for showing important information or non-critical warnings.

Danger hints are good for highlighting destructive actions or raising attention to critical information.

With blocks in it

First paragraph

Second paragraph

  • List item

  • Second list item

  • And with a !

With a divider:


After the divider

#second-tab
#mauris-dolor-diam
link

Headings

Heading 1

Heading 2

Heading 3

Title 1

Title 2

Title 3

Cards

2 basic cards with text:

Cards with cover

Cards with centered text and images

Cards with different column types

Cards full-width

Cards with different column types and headers

Intro text
Enum values
Intro text
Enum values
Intro text
Enum values

Some intro text

A short oneA tag that is quite longAnother one

Short intro text

A short one

Another text

Another one

Hello world

Bonjour le monde

Hola Mundo

Some intro text

A short oneA tag that is quite longAnother one

Short intro text

A short one

Another text

Another one

Hello world

Bonjour le monde

Hola Mundo

Hello world

Bonjour le monde

Expandables

Empty

This is an empty expandable (body)

With content

Lorem ipsum

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in mauris nisi. Fusce suscipit hendrerit ex nec laoreet. Mauris dolor diam, posuere non accumsan at, auctor a lectus. Maecenas porttitor purus ipsum, bibendum volutpat metus tristique in. Fusce et quam sed purus pulvinar dignissim id ut nisi. Fusce malesuada nec leo quis laoreet. Sed elit ligula, porta sed lobortis at, porttitor porttitor sem.

Donec id pulvinar ex, ac consequat odio. Nulla eu ante bibendum, aliquet sapien nec, facilisis metus. Duis non convallis neque, accumsan iaculis risus. Nulla sed ultrices ex, et interdum tellus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse porta felis imperdiet ante congue vestibulum. Sed eu mattis turpis. Praesent pharetra turpis eu ligula finibus, non interdum dui posuere. Vivamus facilisis, diam ac luctus lacinia, turpis odio pharetra ex, vitae suscipit orci turpis tincidunt massa.

Inline Images

his paragraph contains inline images, this first one was using the "original" size, and then this one is using the line size.

This image has intrinsic 400px width, but renders as 300px:

Some customers add Cards with inline images instead of Cover images. When they do, we should still respect the 300px width despite the Card being under 250px. The contents of the images should be centered.

Finally, we should make sure to render tiny inline images correctly:

11x11

16x16

22x22

Images in links should not zoom when clicked, for example .

Marks

The following text is bold and italic. Styles can also be combined.

Keyboard maks X + Y + Ctrl + ⌘

Other styles includes code text and colored text.

And superscript and subscript.

Colors

Text colors:

  • Purple

  • Blue

  • Red

  • Orange

  • Yellow

  • Green

Background colors:

  • Purple

  • Blue

  • Red

  • Orange

  • Yellow

  • Green

Combined:

  • Purple

  • Blue

  • Red

  • Orange

  • Yellow

  • Green

Links

Links

This is a link to a heading. This is a mention of a heading #a-heading.

This is a link to a heading in a different page. And this a mention #heading-3.

This is a link to a page. And this is a mention: Text page

This is a link to the current space. And this is a mention Test GitBook Open

This is a (public). And this is a mention

This is a . And this is a mention

This is a . And this is a mention .

This is a . And this is a mention .

A heading

Page links

Link to another page

Link to a file

Link to another space

Link to a private space

Emojis

This text contains some emojis!!

Emojis can also be used in headings!

Diversity:

And other emojis: man detective, women detective

Block Images

Large image

Alignment

Image centered:

An image on the left:

An image on the right:

Alignment with caption

Image centered:

An image on the left:

An image on the right:

Blocks
Page with emoji
Page with icon
😇
🎉
👩
🕵️
🕵️‍♀️
🌍

Files

File blocks reference a file and are used to help users download specific files.

File blocks can also have a caption:

API blocks

A first block:

Webhooks :

Models:

Math

A math block that should render with KaTeX:

f(x)=x∗e2piiξxf(x) = x * e^{2 pi i \xi x}f(x)=x∗e2piiξx

A math block that should be rendered with MathJax:

σ_{i,BTC} =min($9600,\text{ } $2500)

A math inline with KaTex: f(x)=x∗e2piiξxf(x) = x * e^{2 pi i \xi x}f(x)=x∗e2piiξx and one with MathJax σ_{i,BTC} =min($9600,\text{ } $2500)

Another one with MathJax:

\text{Hourly Funding Payment} = \text{Position Notional Value} \times \text{Funding Rate}\

And a bigger one with KaTeX:

1(ϕ5−ϕ)e25π=1+e−2π1+e−4π1+e−6π1+e−8π1+⋯\displaystyle \frac{1}{\Bigl(\sqrt{\phi \sqrt{5}}-\phi\Bigr) e^{\frac25 \pi}} = 1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}} {1+\frac{e^{-8\pi}} {1+\cdots} } } }(ϕ5​​−ϕ)e52​π1​=1+1+1+1+1+⋯e−8π​e−6π​e−4π​e−2π​

Long inline math 1(ϕ5−ϕ)e25π=1+e−2π1+e−4π1+e−6π1+e−8π1+⋯1(ϕ5−ϕ)e25π=1+e−2π1+e−4π1+e−6π1+e−8π1+⋯1(ϕ5−ϕ)e25π=1+e−2π1+e−4π1+e−6π1+e−8π1+⋯1(ϕ5−ϕ)e25π=1+e−2π1+e−4π1+e−6π1+e−8π1+⋯1(ϕ5−ϕ)e25π=1+e−2π1+e−4π1+e−6π1+e−8π1+⋯1(ϕ5−ϕ)e25π=1+e−2π1+e−4π1+e−6π1+e−8π1+⋯\displaystyle \frac{1}{\Bigl(\sqrt{\phi \sqrt{5}}-\phi\Bigr) e^{\frac25 \pi}} = 1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}} {1+\frac{e^{-8\pi}} {1+\cdots} } } } \displaystyle \frac{1}{\Bigl(\sqrt{\phi \sqrt{5}}-\phi\Bigr) e^{\frac25 \pi}} = 1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}} {1+\frac{e^{-8\pi}} {1+\cdots} } } } \displaystyle \frac{1}{\Bigl(\sqrt{\phi \sqrt{5}}-\phi\Bigr) e^{\frac25 \pi}} = 1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}} {1+\frac{e^{-8\pi}} {1+\cdots} } } } \displaystyle \frac{1}{\Bigl(\sqrt{\phi \sqrt{5}}-\phi\Bigr) e^{\frac25 \pi}} = 1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}} {1+\frac{e^{-8\pi}} {1+\cdots} } } } \displaystyle \frac{1}{\Bigl(\sqrt{\phi \sqrt{5}}-\phi\Bigr) e^{\frac25 \pi}} = 1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}} {1+\frac{e^{-8\pi}} {1+\cdots} } } } \displaystyle \frac{1}{\Bigl(\sqrt{\phi \sqrt{5}}-\phi\Bigr) e^{\frac25 \pi}} = 1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}} {1+\frac{e^{-8\pi}} {1+\cdots} } } }(ϕ5​​−ϕ)e52​π1​=1+1+1+1+1+⋯e−8π​e−6π​e−4π​e−2π​(ϕ5​​−ϕ)e52​π1​=1+1+1+1+1+⋯e−8π​e−6π​e−4π​e−2π​(ϕ5​​−ϕ)e52​π1​=1+1+1+1+1+⋯e−8π​e−6π​e−4π​e−2π​(ϕ5​​−ϕ)e52​π1​=1+1+1+1+1+⋯e−8π​e−6π​e−4π​e−2π​(ϕ5​​−ϕ)e52​π1​=1+1+1+1+1+⋯e−8π​e−6π​e−4π​e−2π​(ϕ5​​−ϕ)e52​π1​=1+1+1+1+1+⋯e−8π​e−6π​e−4π​e−2π​

Lists

Unordered list

  • First item

  • Second item

    • First nested item

      • Second nested item

  • Third item

Ordered list

  1. First item

  2. Second item

    1. First nested item

      1. Second nested item

  3. Third item

Tasks

Mix

  1. Ordered list item

    • Unordered list item

UL With blocks

  • List item starting with a heading

    A paragraph below it.

  • Text before code block

    code block
    a second line
  • Directly, a code block

OL With blocks

  1. List item starting with a heading

    A paragraph below it.

  2. Text before code block

    code block
    a second line
  3. Directly, a code block

Tasks With blocks

Stepper

1

First step

Content of the step

With another line, and an image

2

Second step

This is the second step

3

This is the first step

And it's good!

Embeds

Embed as a card, handled by an integration:

Embed as a card, not handled by an integration

Embed of a youtube video

Embed with a caption

Embed full-width

20KB
openapi.yaml
454KB
Screenshot 2024-02-16 at 10.54.58.png
image
613B
22x22.png
image
This is a small version of the GitBook logo
398B
10x10.png
image
Event smaller
20KB
openapi.yaml
A caption that is longer than the image to test how the images is being positioned relative to it.
A caption that is longer than the image to test how the images is being positioned relative to it.
A caption that is longer than the image to test how the images is being positioned relative to it.
16x16.png
openapi.yaml
Render integration blocks
RND-1853•Done

Hello world

Bonjour le monde

Centered text

Text on the right

Hola Mundo

Cover
Cover
Cover
16x16.png
LogoGitHubWikipedia
A youtube video
https://github.com/GitbookIO/gitbook
https://github.com/GitbookIO/gitbook-open/blob/main/package.json#L2-L3
{
    "name": "gitbook",
    "version": "0.1.0",
    "private": true,
    "scripts": {
        "dev": "next dev",
        "build": "next build",
        "build:cloudflare": "next-on-pages",
        "start": "next start",
        "lint": "next lint",
        "format": "prettier ./ --ignore-unknown --write",
        "format:check": "prettier ./ --ignore-unknown --list-different",
        "typecheck": "tsc --noEmit",
        "unit": "bun test {src,packages}/**/*.test.ts",
        "e2e": "playwright test",
        "postinstall": "rm -rf ./public/~gitbook/static/mathjax@3.2.2 && mkdir -p ./public/~gitbook/static/ && cp -R node_modules/mathjax/es5 ./public/~gitbook/static/mathjax@3.2.2"
    },
    "workspaces": [
        "packages/*"
    ],
    "dependencies": {
        "@geist-ui/icons": "^1.0.2",
        "@gitbook/api": "^0.36.0",
        "@radix-ui/react-checkbox": "^1.0.4",
        "@radix-ui/react-popover": "^1.0.7",
        "@sentry/nextjs": "^7.94.1",
        "@tailwindcss/container-queries": "^0.1.1",
        "@tailwindcss/typography": "^0.5.10",
        "@upstash/redis": "^1.27.1",
        "ajv": "^8.12.0",
        "assert-never": "^1.2.1",
        "bun-types": "^1.0.7",
        "content-security-policy-merger": "^1.0.0",
        "framer-motion": "^10.16.14",
        "js-cookie": "^3.0.5",
        "js-yaml": "^4.1.0",
        "jsontoxml": "^1.0.1",
        "katex": "^0.16.9",
        "memoizee": "^0.4.15",
        "next": "^14.1.3",
        "next-themes": "^0.2.1",
        "nuqs": "^1.15.4",
        "object-hash": "^3.0.0",
        "openapi-types": "^12.1.3",
        "p-map": "^7.0.0",
        "parse-cache-control": "^1.0.1",
        "react": "^18",
        "react-dom": "^18",
        "react-hotkeys-hook": "^4.4.1",
        "react-medium-image-zoom": "^5.1.10",
        "recoil": "^0.7.7",
        "rehype-sanitize": "^6.0.0",
        "rehype-stringify": "^10.0.0",
        "remark-parse": "^11.0.0",
        "remark-rehype": "^11.1.0",
        "rison": "^0.1.1",
        "server-only": "^0.0.1",
        "shiki": "^1.2.0",
        "swagger2openapi": "^7.0.8",
        "tailwind-merge": "^2.2.0",
        "tailwind-shades": "^1.1.2",
        "unified": "^11.0.4",
        "url-join": "^5.0.0",
        "mathjax": "^3.2.2",
        "classnames": "^2.5.1"
    },
    "devDependencies": {
        "@argos-ci/playwright": "^2.0.0",
        "@cloudflare/next-on-pages": "^1.9.0",
        "@cloudflare/workers-types": "^4.20231218.0",
        "@playwright/test": "^1.42.1",
        "@types/js-cookie": "^3.0.6",
        "@types/js-yaml": "^4.0.9",
        "@types/jsontoxml": "^1.0.5",
        "@types/jsonwebtoken": "^9.0.6",
        "@types/katex": "^0.16.5",
        "@types/node": "^20",
        "@types/object-hash": "^3.0.6",
        "@types/parse-cache-control": "^1.0.4",
        "@types/psi": "^4.1.6",
        "@types/react": "^18",
        "@types/react-dom": "^18",
        "@types/rison": "^0.0.9",
        "@types/swagger2openapi": "^7.0.4",
        "autoprefixer": "^10",
        "eslint": "^8",
        "eslint-config-next": "13.5.6",
        "eslint-plugin-import": "^2.29.0",
        "jsonwebtoken": "^9.0.2",
        "postcss": "^8",
        "prettier": "^3.0.3",
        "psi": "^4.1.0",
        "tailwindcss": "^3.4.0",
        "typescript": "^5"
    }
}
GitBook Documentation
Sign up to our mailing list to receive updates!
link to a different space
Public Changelog
link to a private space
space
link to a page in a private space
space
link to a page in a public space
5 October: Theme-aware images, team owners and more