Jamdesk Documentation logo

Referência de docs.json

Referência completa de cada campo do docs.json: temas, cores, navegação, abas, integração com OpenAPI, marca, SEO, análise e chat com IA.

O arquivo docs.json é a configuração central do seu site de documentação Jamdesk.

As principais configurações do seu docs.json são exibidas no Dashboard, em Project Settings → Configuration Highlights. Essa visualização é somente leitura e é atualizada automaticamente após cada build bem-sucedido.

Campos obrigatórios

name

Tipo: string (obrigatório)

O nome do seu site de documentação. Exibido no cabeçalho e na aba do navegador.

{ "name": "Acme API Docs" }

theme

Tipo: "jam" | "nebula" | "pulsar" | "halo" (obrigatório)

Design limpo e moderno com a fonte Inter. Navegação baseada no cabeçalho.

Ideal para: a maioria dos sites de documentação e referências de API

colors

Tipo: object (obrigatório)

CampoTipoObrigatórioDescrição
primarystring (hex)SimCor principal da marca
lightstring (hex)NãoCor de destaque do tema claro
darkstring (hex)NãoCor de destaque do tema escuro
{
  "colors": {
    "primary": "#635BFF",
    "light": "#7C75FF",
    "dark": "#4F46E5"
  }
}

Marca

favicon

Tipo: string ou object

Caminho para o arquivo do favicon (SVG recomendado). Forneça uma única imagem para os dois modos ou variantes separadas light / dark.

CampoTipoDescrição
lightstringFavicon para o modo claro (obrigatório ao usar o formato de objeto)
darkstringFavicon para o modo escuro (opcional; usa light como fallback)
{ "favicon": "/images/favicon.svg" }
{
  "favicon": {
    "light": "/images/favicon.svg",
    "dark": "/images/favicon-dark.svg"
  }
}

Tipo: object

CampoTipoDescrição
lightstringLogo para o modo claro
darkstringLogo para o modo escuro
hrefstringURL aberta ao clicar no logo
{
  "logo": {
    "light": "/images/logo-light.webp",
    "dark": "/images/logo-dark.webp",
    "href": "https://yoursite.com"
  }
}

Tipografia

fonts

Tipo: object (opcional)

Substitua a fonte padrão do tema para o texto do corpo e os títulos. Cada tema inclui uma fonte padrão ajustada. Defina fonts somente quando precisar de uma aparência diferente.

Use a mesma fonte em todos os elementos:

{
  "fonts": {
    "family": "Lora"
  }
}

Separe títulos e corpo:

{
  "fonts": {
    "heading": { "family": "Space Grotesk" },
    "body": { "family": "Inter" }
  }
}
CampoTipoDescrição
familystringNome da família de fontes. Qualquer Google Font funciona; o build faz o download automaticamente
weightnumberPeso único a carregar (por exemplo, 400). Omita para carregar 400, 500, 600, 700
sourcestringURL ou caminho relativo a / para um arquivo de fonte hospedado por você. Ignora o Google Fonts
format"woff" | "woff2"Obrigatório quando source é definido

heading e body aceitam os mesmos campos. Consulte Tematização → Tipografia para obter orientações sobre como escolher fontes.

Aparência

appearance

Tipo: object (opcional)

Controle o comportamento padrão do modo escuro do seu site.

{
  "appearance": {
    "default": "dark",
    "strict": true
  }
}
CampoTipoPadrãoDescrição
default"system" | "light" | "dark""system"Modo inicial para visitantes na primeira visita
strictbooleanfalseQuando true, oculta o controle da barra de navegação para que os visitantes permaneçam em default

Consulte Tematização → Modo escuro para saber como o controle funciona.

Metadados da página

metadata

Tipo: object (opcional)

Controle os metadados exibidos em todas as páginas de documentação.

{
  "metadata": {
    "timestamp": true
  }
}
CampoTipoPadrãoDescrição
timestampbooleanfalseQuando true, exibe no rodapé de cada página uma linha no estilo "Last updated on June 15, 2026". A data vem do último commit do Git que alterou a página, mantendo-se automaticamente correta em cada build.

A data é exibida no site publicado e em jamdesk dev. Ela representa o commit mais recente que alterou o arquivo de cada página; portanto, as páginas que você não editou mantêm a data original.

Exiba uma barra de anúncio para todo o site, fixada no topo de cada página, acima do cabeçalho, em largura total e na cor de destaque do seu tema. Use-a para lançamentos, migrações, janelas de manutenção ou qualquer mensagem que todos os visitantes devam ver.

{
  "banner": {
    "content": "🎉 Version 2.0 is live! Read the [changelog](/changelog).",
    "dismissible": true
  }
}
CampoTipoPadrãoDescrição
contentstring-Obrigatório. O texto do banner. Aceita formatação inline básica: links [text](url), negrito (**text**) e itálico (*text*). Componentes MDX personalizados não são compatíveis.
dismissiblebooleanfalseQuando true, exibe um botão de fechar. Depois que um visitante dispensa o banner, ele permanece oculto para essa pessoa até que você altere content. Editar a mensagem faz com que ele volte a ser exibido.

O banner é exibido no site publicado e em jamdesk dev. Ele é configurado globalmente (um banner para todo o site); banners por aba e por idioma ainda não são compatíveis.

OpenAPI

api.openapi

Tipo: string | string[]

Liste os arquivos de especificação OpenAPI 3.x que você quer que o Jamdesk valide e use nas páginas de endpoints. Use caminhos relativos ao seu docs.json.

docs.json
{
  "api": {
    "openapi": ["/openapi/api.yaml"]
  }
}

Depois de configurar, você pode gerar páginas de endpoints adicionando um campo openapi ao frontmatter de uma página:

---
title: Create Ticket
openapi: /openapi/api.yaml POST /tickets
---

Se você tiver apenas uma especificação listada, também poderá usar o formato curto:

---
title: Create Ticket
openapi: POST /tickets
---

Consulte Exemplo de OpenAPI para ver uma página de endpoint funcional e Estrutura de diretórios para saber onde colocar os arquivos.

Se o seu site for multilíngue, coloque um arquivo <spec>.<lang>.<ext> ao lado de cada especificação de origem (por exemplo, openapi/api.fr.yaml); o Jamdesk o disponibilizará nas URLs desse idioma. Consulte Traduzindo especificações OpenAPI.

Uma chave asyncapi é aceita nos mesmos locais que openapi, mas o Jamdesk ainda não renderiza especificações AsyncAPI — nada é gerado a partir dela. jamdesk validate emite um aviso quando encontra uma, para que uma configuração aparentemente compatível não permaneça assim até o build do site.

Tipo: object

Adicione um objeto openapi a uma aba de navegação e defina generate: true; o Jamdesk criará uma página de endpoint para cada operação dessa especificação no momento do build, além dos grupos da barra lateral que as conterão. Não é necessário escrever nem fazer commit de nada.

docs.json
{
  "navigation": {
    "tabs": [
      {
        "tab": "API Reference",
        "openapi": { "source": "/openapi/api.yaml", "generate": true }
      }
    ]
  }
}
ChaveTipoDescrição
sourcestringCaminho para a especificação, relativo ao seu docs.json
generatebooleantrue cria as páginas e a barra lateral. Sem essa chave, o campo permanece inativo

As páginas geradas ficam sob o próprio nome da aba, convertido em slug, com um slug criado a partir do método e do caminho — a aba acima coloca POST /tickets em /api-reference/post-tickets. As operações são agrupadas pela primeira tag; especificações sem tags usam como fallback o primeiro segmento significativo do caminho. Assim, /api/v1/auctions/{auctionId} fica em Auctions. Os títulos vêm do summary da operação quando a especificação tem esse campo; caso contrário, vêm do método e do caminho. Uma operação que aborda um único recurso recebe um título no singular (GET /users/{id} → "Get User").

generate é ativado explicitamente por construção. Um "openapi": "/openapi/api.yaml" simples em uma aba, ou um objeto sem generate: true, continua fazendo exatamente o que fazia antes — nenhuma configuração existente passará a gerar cem páginas no próximo build.

Um arquivo .mdx versionado sempre vence uma colisão de slug, para que você possa adotar a geração gradualmente: ative-a e depois exclua, uma a uma, as páginas de endpoint escritas manualmente quando estiver pronto.

Se você renomear posteriormente um caminho na sua especificação, o slug gerado será alterado com ele. O Jamdesk mantém um histórico de slugs por operação e emite um redirecionamento de cada URL anterior para a atual em cada build, preservando links recebidos e favoritos. Seus próprios redirecionamentos e qualquer página ativa ainda têm prioridade.

Limitações atuais. A geração é executada somente em navigation.tabs de nível superior — não em grupos, âncoras ou abas aninhadas em languages ou versions — e produz páginas apenas para o idioma padrão. Uma chave directory é aceita pelo schema, mas não afeta o local onde as páginas são criadas.

api.mdx.server

Tipo: string

URL base usada nos exemplos de código das páginas com frontmatter api: (o tipo criado com MDX, não as páginas openapi:, que obtêm seus servidores da especificação).

{
  "api": {
    "mdx": {
      "server": "https://api.example.com"
    }
  }
}

Uma matriz é aceita por compatibilidade, mas somente a primeira entrada é usada — tudo que vem depois é descartado. jamdesk validate emite um aviso quando você lista mais de uma.

api.examples.languages

Tipo: string[] Padrão: ["curl", "python", "javascript"]

Escolha quais linguagens de programação aparecem nos exemplos de código de API gerados automaticamente nas páginas openapi:. A ordem da matriz determina a ordem de exibição das abas, e a primeira linguagem é selecionada por padrão.

Valores compatíveis: curl, bash, python, javascript, go, ruby, csharp, java, rust, php

bash é um alias de curl; ambos produzem a mesma saída. Use o rótulo que preferir.
All supported languages
{
  "api": {
    "examples": {
      "languages": ["curl", "python", "javascript", "go", "ruby", "csharp", "java", "rust", "php"]
    }
  }
}
Custom subset
{
  "api": {
    "examples": {
      "languages": ["python", "javascript", "go"]
    }
  }
}

api.examples.defaults

Tipo: "required" | "all" Padrão: "all"

Controle quais parâmetros aparecem nos exemplos de código gerados automaticamente.

ValorComportamento
"all"Os exemplos incluem todos os parâmetros com valores de espaço reservado
"required"Os exemplos incluem somente os parâmetros marcados como required na especificação
{
  "api": {
    "examples": {
      "defaults": "required"
    }
  }
}

api.examples.prefill

Tipo: boolean Padrão: false

Quando true, o API Playground preenche previamente os campos de parâmetros com valores example da sua especificação OpenAPI.

{
  "api": {
    "examples": {
      "prefill": true
    }
  }
}

api.playground.display

Tipo: "interactive" | "simple" | "none" Padrão: "interactive"

Controla o API Playground nas páginas de endpoints. Um botão "Try it" aparece por padrão em todas as páginas openapi: e api:.

ValorComportamento
"interactive"Playground completo: preencher parâmetros, gerar código e enviar requests (padrão)
"simple"Preencher parâmetros e copiar o código, mas sem botão Send
"none"Playground desativado
{
  "api": {
    "playground": {
      "display": "interactive"
    }
  }
}

Consulte API Playground para obter detalhes de uso e substituições por página.

api.mdx.auth.method

Tipo: "bearer" | "basic" | "key" | "cobo"

Método de autenticação usado nos exemplos de código gerados automaticamente. Quando definido, os exemplos incluem o cabeçalho de autenticação apropriado.

ValorFormato do cabeçalho
"bearer"Authorization: Bearer <token>
"basic"Authorization: Basic <base64>
"key"Cabeçalho personalizado (consulte api.mdx.auth.name)
"cobo"Autenticação específica do Cobo
{
  "api": {
    "mdx": {
      "auth": {
        "method": "bearer"
      }
    }
  }
}

api.mdx.auth.name

Tipo: string

Nome personalizado do cabeçalho para autenticação baseada em chave. Usado somente quando api.mdx.auth.method é "key".

{
  "api": {
    "mdx": {
      "auth": {
        "method": "key",
        "name": "X-API-Key"
      }
    }
  }
}

tabsPosition

Tipo: "top" | "left"

Controla onde as abas de navegação são exibidas.

ValorDescrição
"top"As abas aparecem na barra de abas do cabeçalho
"left"As abas aparecem no topo da barra lateral

O valor padrão depende do seu tema:

TemaPadrão
jam"left"
nebula"left"
pulsar"top"
halo"left"
{ "tabsPosition": "left" }

anchors

Tipo: array

Links externos exibidos no topo da barra lateral em todas as páginas.

CampoTipoObrigatórioDescrição
namestringSimTexto exibido
hrefstringSimURL (link externo)
iconstringNãoNome do ícone do Font Awesome
{
  "anchors": [
    { "name": "Blog", "href": "https://blog.example.com", "icon": "newspaper" }
  ]
}

Tipo: object

A estrutura de navegação da sua documentação. Consulte Navegação para obter a documentação detalhada.

As páginas podem ser strings (com título gerado automaticamente a partir do nome do arquivo) ou objetos com um título personalizado:

"pages": [
  "introduction",
  { "page": "content/mdx-basics", "title": "MDX Basics" }
]
{
  "navigation": {
    "tabs": [
      {
        "tab": "Docs",
        "icon": "book-open",
        "groups": [
          {
            "group": "Getting Started",
            "pages": ["introduction", "quickstart"]
          }
        ]
      }
    ]
  }
}

Barra de navegação e rodapé

Tipo: object

CampoTipoDescrição
linksarrayLinks de navegação
links[].labelstringTexto padrão do botão
links[].labelsobjectSubstituições opcionais por idioma, identificadas pelo código do idioma (por exemplo, fr, es). Usa label como fallback
links[].iconiconÍcone opcional exibido ao lado do rótulo
links[].hrefstringURL de destino
primaryobjectBotão CTA principal
primary.labelstringTexto padrão do botão
primary.labelsobjectSubstituições opcionais por idioma. Usa label como fallback
{
  "navbar": {
    "links": [
      {
        "label": "Blog",
        "labels": { "fr": "Blog", "es": "Blog" },
        "href": "/blog"
      },
      {
        "label": "Pricing",
        "labels": { "fr": "Tarifs", "es": "Precios" },
        "href": "/pricing"
      }
    ],
    "primary": {
      "type": "button",
      "label": "Dashboard",
      "labels": { "fr": "Tableau de bord", "es": "Panel" },
      "href": "https://app.example.com"
    }
  }
}

labels é opcional. Documentações em um único idioma podem omiti-lo. Quando definido, o idioma da URL atual (por exemplo, /fr/...) seleciona a substituição correspondente.

Tipo: object

Configure o rodapé da página com links de redes sociais e colunas de links personalizados.

{
  "footer": {
    "socials": {
      "github": "https://github.com/yourorg",
      "x": "https://x.com/yourhandle",
      "discord": "https://discord.gg/yourserver"
    },
    "links": [
      {
        "header": "Resources",
        "items": [
          { "label": "Blog", "href": "https://example.com/blog" },
          { "label": "Changelog", "href": "/changelog" }
        ]
      }
    ]
  }
}
CampoTipoDescrição
socialsobjectURLs das plataformas de redes sociais
linksarrayConfigurações das colunas de links
links[].headerstringTítulo da coluna
links[].itemsarrayMatriz de objetos { label, href }

Plataformas sociais compatíveis: github, x, twitter, linkedin, discord, slack, youtube, instagram, facebook, reddit, telegram, bluesky, threads, medium, hacker-news, website

Estilos

styling.latex

Tipo: boolean

Ative a renderização de fórmulas LaTeX com KaTeX. Quando ativada, você pode usar $...$ para fórmulas inline e $$...$$ para equações em bloco.

{
  "styling": {
    "latex": true
  }
}

Consulte Math & LaTeX para obter detalhes de uso.

styling.js

Tipo: string | string[]

Arquivo(s) JavaScript personalizado(s) incluído(s) em todas as páginas. Os caminhos são relativos ao diretório da documentação e devem começar com /.

{
  "styling": {
    "js": "/script.js"
  }
}

Passe uma matriz para incluir vários arquivos:

{
  "styling": {
    "js": ["/chat.js", "/analytics.js"]
  }
}

Sem esse campo, o Jamdesk detecta automaticamente arquivos .js na raiz do projeto. Consulte JavaScript personalizado para obter detalhes.

Busca

Tipo: object (opcional)

Personalize a barra de busca da documentação. A busca funciona imediatamente; você só precisa desse campo para alterar o texto do placeholder ou exibir páginas populares no estado vazio.

CampoTipoPadrãoDescrição
promptstringSearch documentation…Texto do placeholder exibido no campo de busca
popularPagesarrayQuick Start, IntroductionLinks de acesso rápido exibidos antes de o visitante digitar uma consulta
{
  "search": {
    "prompt": "Ask me anything…",
    "popularPages": [
      { "title": "Quick Start", "slug": "quickstart", "icon": "rocket" },
      { "title": "Authentication", "slug": "guides/authentication", "icon": "key" }
    ]
  }
}

Páginas populares

Cada entrada em popularPages aceita:

CampoTipoObrigatórioDescrição
titlestringSimRótulo exibido para o link
slugstringSimCaminho da página, sem barra inicial ou extensão .mdx (por exemplo, quickstart ou guides/authentication para o arquivo guides/authentication.mdx)
iconstringNãoNome do ícone do Font Awesome exibido ao lado do link (por exemplo, rocket ou bell)

O campo icon também aceita o objeto completo { "name", "style", "library" }. Consulte Formato de objeto do ícone. Quando popularPages é omitido, o Jamdesk exibe Quick Start e Introduction por padrão.

Chat

chat

Tipo: object (opcional)

Configure o assistente de chat com IA integrado. O chat vem ativado por padrão em todos os sites; você só precisa desse campo para personalizar as perguntas iniciais ou desativá-lo.

CampoTipoPadrãoDescrição
enabledbooleantrueDefina como false para remover o painel de chat do site
starterQuestionsstring[]gerado automaticamenteAté 4 perguntas exibidas quando o chat é aberto (5–200 caracteres cada). Geradas automaticamente durante os builds quando omitidas. Defina como [] para não exibir perguntas
{
  "chat": {
    "starterQuestions": [
      "How do I get started?",
      "What API endpoints are available?"
    ]
  }
}

Consulte Chat com IA para saber como o chat funciona e o que os visitantes veem.

contextual

Tipo: object (opcional)

Configure o menu suspenso de ações de IA exibido em todas as páginas. Ele vem ativado por padrão com todas as opções; você só precisa desse campo para personalizar as opções exibidas ou desativá-lo.

CampoTipoPadrãoDescrição
enabledbooleantrueDefina como false para remover o menu de ações de IA do site
optionsarraytodas as integradasLista de chaves de opções e/ou objetos de opções personalizados

Chaves de opções integradas: copy, view, chatgpt, claude, perplexity, gemini, mcp, cursor, vscode

{
  "contextual": {
    "options": ["copy", "claude", "mcp", "cursor"]
  }
}

Adicione opções personalizadas junto às opções integradas:

{
  "contextual": {
    "options": [
      "copy",
      "claude",
      {
        "title": "Ask on Discord",
        "description": "Get help from the community",
        "icon": "discord",
        "href": "https://discord.gg/your-server"
      }
    ]
  }
}

Consulte Menu de ações de IA para ver a lista completa de opções e o formato das opções personalizadas.

Verificação ortográfica

spellcheck

Tipo: object (opcional)

Configure o comando CLI jamdesk spellcheck. Você só precisa desse campo para adicionar palavras específicas do projeto à lista de ignorados.

CampoTipoDescrição
ignorestring[]Palavras a ignorar durante a verificação ortográfica (nomes de produtos, termos técnicos etc.)
{
  "spellcheck": {
    "ignore": ["Acme", "kubectl", "Terraform"]
  }
}

A CLI inclui mais de 180 termos técnicos integrados (API, GraphQL, Kubernetes, React etc.) e ignora automaticamente o nome do projeto do campo name. Adicione somente palavras específicas do seu projeto.

Consulte Visão geral da CLI: verificação ortográfica para obter detalhes de uso e saber mais sobre o modo interativo de correção.

Imagens

images.convertToWebp

Tipo: boolean (opcional, padrão false)

Ative a conversão automática de assets WebP para PNG e JPG durante os builds. Os arquivos convertidos geralmente são 60–80% menores que os originais, sem perda visível de qualidade. As referências no seu MDX, CSS personalizado, JavaScript personalizado e docs.json são reescritas automaticamente; portanto, você não precisa alterar nenhum caminho.

Favicons, og:image e twitter:image permanecem no formato original. Nem todo crawler de redes sociais ou cliente de e-mail renderiza WebP de forma confiável, e um cartão de pré-visualização quebrado é pior que um JPG um pouco maior.

{
  "images": {
    "convertToWebp": true
  }
}

Consulte Conversão automática de imagens para saber o que é convertido, como o cache funciona e como interpretar o indicador de progresso do build.

Controle de acesso

auth.password

Tipo: object (opcional)

Ative a proteção do site por senha compartilhada. A configuração é somente declarativa. Você ainda precisa definir a frase secreta real no dashboard depois da execução do próximo build.

Defina auth.password.enabled: true para bloquear o site inteiro ou liste caminhos em auth.password.private[] para proteger somente determinadas páginas. Ambos acionam a mesma solicitação de senha no dashboard durante o próximo build.

{
  "auth": {
    "password": {
      "enabled": true,
      "hint": "Ask your account manager",
      "public": ["/marketing/**", "/changelog"]
    }
  }
}
CampoTipoDescrição
enabledbooleanModo para todo o site. Quando true, todas as páginas exigem a senha, exceto as marcadas como públicas
hintstring (máx. 200 caracteres)Dica em texto simples exibida na tela de desbloqueio. HTML não é permitido
publicstring[]Padrões de caminhos que ignoram a senha. Aceita * (um segmento) e ** (recursivo). Uma / isolada é rejeitada
privatestring[]Caminhos exatos que exigem a senha. Definir esse campo sem enabled ativa o modo de páginas específicas

Consulte Proteção por senha para ver o passo a passo completo, incluindo o fluxo do dashboard e como public: true / private: true no frontmatter interagem com essas matrizes.

Exemplo completo

{
  "$schema": "https://jamdesk.com/docs.json",
  "name": "Acme Documentation",
  "description": "Learn how to use Acme",
  "theme": "jam",
  "colors": {
    "primary": "#635BFF"
  },
  "favicon": "/images/favicon.svg",
  "logo": {
    "light": "/images/logo-light.webp",
    "dark": "/images/logo-dark.webp"
  },
  "api": {
    "openapi": ["/openapi/api.yaml"],
    "playground": {
      "display": "interactive"
    },
    "examples": {
      "languages": ["curl", "python", "javascript"],
      "prefill": true
    }
  },
  "styling": {
    "latex": true,
    "js": "/script.js"
  },
  "chat": {
    "starterQuestions": ["How do I get started?", "What endpoints are available?"]
  },
  "contextual": {
    "options": ["copy", "claude", "chatgpt", "mcp", "cursor"]
  },
  "spellcheck": {
    "ignore": ["Acme"]
  },
  "anchors": [
    { "name": "Blog", "href": "https://blog.acme.com", "icon": "newspaper" }
  ],
  "navbar": {
    "links": [
      { "label": "Support", "href": "/support" }
    ],
    "primary": {
      "type": "button",
      "label": "Dashboard",
      "href": "https://app.acme.com"
    }
  },
  "navigation": {
    "tabs": [
      {
        "tab": "Docs",
        "icon": "book-open",
        "groups": [
          {
            "group": "Get Started",
            "pages": ["introduction", "quickstart"]
          }
        ]
      },
      {
        "tab": "API Reference",
        "icon": "code",
        "groups": [
          {
            "group": "Endpoints",
            "pages": ["api/users", "api/posts"]
          }
        ]
      }
    ]
  }
}

O que vem a seguir?

Visão geral da navegação

Estruture a navegação da sua documentação

Menu de ações de IA

Personalize o menu suspenso de IA em todas as páginas