Riferimento docs.json
Riferimento completo ai campi di docs.json: temi, colori, navigazione, tab, integrazione OpenAPI, branding, SEO, analisi e chat AI.
Il file docs.json è la configurazione centrale del sito di documentazione Jamdesk.
Le impostazioni principali di docs.json vengono visualizzate nella Dashboard, in Project Settings → Configuration Highlights. Questa vista è di sola lettura e si aggiorna automaticamente dopo ogni build completata correttamente.
Campi obbligatori
name
Tipo: string (obbligatorio)
Il nome del sito di documentazione. Viene visualizzato nell'intestazione e nella scheda del browser.
{ "name": "Acme API Docs" }
theme
Tipo: "jam" | "nebula" | "pulsar" | "halo" (obbligatorio)
Design pulito e moderno con il font Inter. Navigazione basata sull'intestazione.
Ideale per: la maggior parte dei siti di documentazione e dei riferimenti API
colors
Tipo: object (obbligatorio)
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
primary | string (hex) | Sì | Colore principale del brand |
light | string (hex) | No | Colore in evidenza del tema chiaro |
dark | string (hex) | No | Colore in evidenza del tema scuro |
{
"colors": {
"primary": "#635BFF",
"light": "#7C75FF",
"dark": "#4F46E5"
}
}
Branding
favicon
Tipo: string oppure object
Percorso del file favicon (SVG consigliato). Fornisci un'unica immagine per entrambe le modalità oppure varianti separate light / dark.
| Campo | Tipo | Descrizione |
|---|---|---|
light | string | Favicon per la modalità chiara (obbligatorio quando si usa la forma oggetto) |
dark | string | Favicon per la modalità scura (facoltativo, usa light come fallback) |
{ "favicon": "/images/favicon.svg" }
{
"favicon": {
"light": "/images/favicon.svg",
"dark": "/images/favicon-dark.svg"
}
}
logo
Tipo: object
| Campo | Tipo | Descrizione |
|---|---|---|
light | string | Logo per la modalità chiara |
dark | string | Logo per la modalità scura |
href | string | URL quando si fa clic sul logo |
{
"logo": {
"light": "/images/logo-light.webp",
"dark": "/images/logo-dark.webp",
"href": "https://yoursite.com"
}
}
Tipografia
fonts
Tipo: object (facoltativo)
Sostituisci il font predefinito del tema per il testo del corpo e le intestazioni. Ogni tema include un font predefinito ottimizzato. Imposta fonts solo quando vuoi un aspetto diverso.
Usa lo stesso font ovunque:
{
"fonts": {
"family": "Lora"
}
}
Separa intestazioni e corpo:
{
"fonts": {
"heading": { "family": "Space Grotesk" },
"body": { "family": "Inter" }
}
}
| Campo | Tipo | Descrizione |
|---|---|---|
family | string | Nome della famiglia di font. È supportato qualsiasi Google Font; la build lo scarica automaticamente |
weight | number | Un singolo peso da caricare (ad esempio 400). Omettilo per caricare 400, 500, 600, 700 |
source | string | URL o percorso relativo a / di un file di font self-hosted. Ignora Google Fonts |
format | "woff" | "woff2" | Obbligatorio quando è impostato source |
Sia heading sia body accettano gli stessi campi. Consulta Temi → Tipografia per indicazioni sulla scelta dei font.
Aspetto
appearance
Tipo: object (facoltativo)
Controlla il comportamento predefinito della modalità scura del sito.
{
"appearance": {
"default": "dark",
"strict": true
}
}
| Campo | Tipo | Predefinito | Descrizione |
|---|---|---|---|
default | "system" | "light" | "dark" | "system" | Modalità iniziale per i visitatori alla prima visita |
strict | boolean | false | Quando è true, nasconde il selettore nella barra di navigazione, mantenendo i visitatori su default |
Consulta Temi → Modalità scura per sapere come si comporta il selettore.
Metadati delle pagine
metadata
Tipo: object (facoltativo)
Controlla i metadati mostrati su ogni pagina della documentazione.
{
"metadata": {
"timestamp": true
}
}
| Campo | Tipo | Predefinito | Descrizione |
|---|---|---|---|
timestamp | boolean | false | Quando è true, mostra nel piè di pagina di ogni pagina una riga nello stile di "Last updated on June 15, 2026". La data proviene dall'ultimo commit Git che ha modificato la pagina, quindi rimane automaticamente aggiornata a ogni build. |
La data viene visualizzata sul sito pubblicato e in jamdesk dev. Riflette il commit più recente che ha modificato il file di ogni pagina, quindi le pagine che non hai modificato conservano la data originale.
Localizzazione
localization
Tipo: object (facoltativo)
Controlla come i visitatori raggiungono la versione tradotta della documentazione.
{
"localization": {
"autoRedirect": true
}
}
| Campo | Tipo | Predefinito | Descrizione |
|---|---|---|---|
autoRedirect | boolean | false | Quando è true, un visitatore che arriva per la prima volta sulla radice della documentazione viene inviato alla lingua corrispondente all'header Accept-Language del suo browser. Richiede due o più voci in navigation.languages. |
Vengono reindirizzate solo le radici. Un link profondo come /guides/authentication serve sempre la pagina che indica, quindi un link che incolli in un ticket apre la stessa pagina per tutti. I crawler dei motori di ricerca non vengono mai reindirizzati, quindi i tag hreflang continuano a decidere cosa viene indicizzato.
La lingua del visitatore viene ricordata per un anno. Scegliere una lingua dal selettore sostituisce da quel momento l'abbinamento automatico.
Consulta Supporto multilingue → Routing automatico della lingua per il comportamento completo.
Banner
banner
Mostra una barra di annuncio valida per l'intero sito, fissata nella parte superiore di ogni pagina, sopra l'intestazione, a larghezza completa e nel colore in evidenza del tema. Usala per lanci, migrazioni, finestre di manutenzione o qualsiasi messaggio che ogni visitatore debba vedere.
{
"banner": {
"content": "🎉 Version 2.0 is live! Read the [changelog](/changelog).",
"dismissible": true
}
}
| Campo | Tipo | Predefinito | Descrizione |
|---|---|---|---|
content | string | - | Obbligatorio. Il testo del banner. Supporta la formattazione inline di base: link [text](url), grassetto (**text**) e corsivo (*text*). I componenti MDX personalizzati non sono supportati. |
dismissible | boolean | false | Quando è true, mostra un pulsante di chiusura. Dopo che un visitatore chiude il banner, questo rimane nascosto per lui finché non modifichi content. La modifica del messaggio lo mostra nuovamente. |
Il banner viene visualizzato sul sito pubblicato e in jamdesk dev. È configurato globalmente (un banner per l'intero sito); al momento i banner per singola scheda o lingua non sono supportati.
OpenAPI
api.openapi
Tipo: string | string[]
Elenca i file di specifica OpenAPI 3.x che vuoi far validare e utilizzare da Jamdesk per le pagine degli endpoint. Usa percorsi relativi al tuo docs.json.
{
"api": {
"openapi": ["/openapi/api.yaml"]
}
}Dopo la configurazione, puoi generare pagine degli endpoint aggiungendo un campo openapi al frontmatter di una pagina:
---
title: Create Ticket
openapi: /openapi/api.yaml POST /tickets
---
Se hai una sola specifica elencata, puoi usare anche il formato breve:
---
title: Create Ticket
openapi: POST /tickets
---
Consulta Esempio OpenAPI per una pagina endpoint funzionante e Struttura delle directory per la posizione dei file.
Se il sito è multilingue, aggiungi un file <spec>.<lang>.<ext> accanto a ogni specifica di origine (ad esempio openapi/api.fr.yaml): Jamdesk lo servirà sugli URL della lingua corrispondente. Consulta Traduzione delle specifiche OpenAPI.
La chiave asyncapi è accettata ovunque sia accettata openapi, ma Jamdesk non esegue ancora il rendering delle specifiche AsyncAPI: da essa non viene generato nulla. jamdesk validate mostra un avviso quando ne trova una, così una configurazione che sembra supportata non rimane tale fino alla build del sito.
navigation openapi (pagine generate)
Tipo: object
Inserisci un oggetto openapi in una scheda di navigazione e imposta generate: true: Jamdesk crea in fase di build una pagina endpoint per ogni operazione della specifica e i gruppi della barra laterale che le conterranno. Nessun contenuto da scrivere e nessun commit da effettuare.
{
"navigation": {
"tabs": [
{
"tab": "API Reference",
"openapi": { "source": "/openapi/api.yaml", "generate": true }
}
]
}
}| Chiave | Tipo | Descrizione |
|---|---|---|
source | string | Percorso della specifica, relativo al tuo docs.json |
generate | boolean | true crea le pagine e la barra laterale. Senza questa chiave, la configurazione rimane inattiva |
Le pagine generate si trovano sotto il nome della scheda, convertito in slug, con uno slug creato dal metodo e dal percorso: la scheda precedente posiziona POST /tickets in /api-reference/post-tickets. Le operazioni vengono raggruppate in base al primo tag; le specifiche senza tag usano il primo segmento significativo del percorso. Di conseguenza, /api/v1/auctions/{auctionId} viene inserito sotto Auctions. I titoli provengono da summary dell'operazione quando presente nella specifica; in caso contrario, dal metodo e dal percorso. Un'operazione relativa a una singola risorsa usa il titolo al singolare (GET /users/{id} → "Get User").
generate richiede un'attivazione esplicita. Un semplice "openapi": "/openapi/api.yaml" su una scheda, oppure un oggetto senza generate: true, continua a comportarsi esattamente come prima: nessuna configurazione esistente genera un centinaio di pagine alla build successiva.
Un file .mdx sottoposto a commit ha sempre la precedenza in caso di conflitto tra slug, quindi puoi adottare la generazione gradualmente: attivala, poi elimina una alla volta le pagine endpoint scritte manualmente quando sei pronto.
Se in seguito rinomini un percorso nella specifica, lo slug generato cambia insieme a esso. Jamdesk conserva una cronologia degli slug per operazione e, a ogni build, emette un redirect da ogni URL precedente a quello attuale, così i link in entrata e i segnalibri continuano a funzionare dopo la ridenominazione. I tuoi redirect e qualsiasi pagina attiva hanno comunque la precedenza.
Limiti attuali. La generazione viene eseguita solo su navigation.tabs di primo livello, non su gruppi, ancore o schede annidate sotto languages o versions, e produce pagine solo per la lingua predefinita. La chiave directory è accettata dallo schema, ma non influisce sulla posizione delle pagine.
api.mdx.server
Tipo: string
URL di base usato negli esempi di codice nelle pagine con frontmatter api: (quelle scritte in MDX, non le pagine openapi:, che ricavano i server dalla specifica).
{
"api": {
"mdx": {
"server": "https://api.example.com"
}
}
}
Un array è accettato per compatibilità, ma viene utilizzata sempre e solo la prima voce: tutte quelle successive vengono scartate. jamdesk validate mostra un avviso quando ne elenchi più di una.
api.examples.languages
Tipo: string[]
Predefinito: ["curl", "python", "javascript"]
Scegli quali linguaggi di programmazione visualizzare negli esempi di codice API generati automaticamente sulle pagine openapi:. L'ordine dell'array determina l'ordine di visualizzazione delle schede e il primo linguaggio viene selezionato per impostazione predefinita.
Valori supportati: curl, bash, python, javascript, go, ruby, csharp, java, rust, php
bash è un alias di curl; entrambi producono lo stesso output. Usa l'etichetta che preferisci.{
"api": {
"examples": {
"languages": ["curl", "python", "javascript", "go", "ruby", "csharp", "java", "rust", "php"]
}
}
}{
"api": {
"examples": {
"languages": ["python", "javascript", "go"]
}
}
}api.examples.defaults
Tipo: "required" | "all"
Predefinito: "all"
Controlla quali parametri vengono visualizzati negli esempi di codice generati automaticamente.
| Valore | Comportamento |
|---|---|
"all" | Gli esempi includono tutti i parametri con valori segnaposto |
"required" | Gli esempi includono solo i parametri contrassegnati come required nella specifica |
{
"api": {
"examples": {
"defaults": "required"
}
}
}
api.examples.prefill
Tipo: boolean
Predefinito: false
Quando è true, API Playground precompila i campi dei parametri con i valori example della specifica OpenAPI.
{
"api": {
"examples": {
"prefill": true
}
}
}
api.playground.display
Tipo: "interactive" | "simple" | "none"
Predefinito: "interactive"
Controlla API Playground nelle pagine degli endpoint. Per impostazione predefinita, su ogni pagina openapi: e api: viene visualizzato un pulsante "Try it".
| Valore | Comportamento |
|---|---|
"interactive" | Playground completo: compila i parametri, genera il codice e invia le richieste (predefinito) |
"simple" | Compila i parametri e copia il codice, ma senza pulsante Send |
"none" | Playground disabilitato |
{
"api": {
"playground": {
"display": "interactive"
}
}
}
Consulta API Playground per i dettagli sull'utilizzo e sulle sostituzioni per singola pagina.
api.mdx.auth.method
Tipo: "bearer" | "basic" | "key" | "cobo"
Metodo di autenticazione utilizzato negli esempi di codice generati automaticamente. Quando è impostato, gli esempi includono l'intestazione di autenticazione appropriata.
| Valore | Formato dell'intestazione |
|---|---|
"bearer" | Authorization: Bearer <token> |
"basic" | Authorization: Basic <base64> |
"key" | Intestazione personalizzata (consulta api.mdx.auth.name) |
"cobo" | Autenticazione specifica di Cobo |
{
"api": {
"mdx": {
"auth": {
"method": "bearer"
}
}
}
}
api.mdx.auth.name
Tipo: string
Nome dell'intestazione personalizzata per l'autenticazione basata su chiave. Utilizzato solo quando api.mdx.auth.method è "key".
{
"api": {
"mdx": {
"auth": {
"method": "key",
"name": "X-API-Key"
}
}
}
}
Navigazione
tabsPosition
Tipo: "top" | "left"
Controlla dove vengono visualizzate le schede di navigazione.
| Valore | Descrizione |
|---|---|
"top" | Le schede vengono visualizzate nella barra delle schede dell'intestazione |
"left" | Le schede vengono visualizzate nella parte superiore della barra laterale |
Il valore predefinito dipende dal tema:
| Tema | Predefinito |
|---|---|
| jam | "left" |
| nebula | "left" |
| pulsar | "top" |
| halo | "left" |
{ "tabsPosition": "left" }
anchors
Tipo: array
Link esterni visualizzati nella parte superiore della barra laterale su tutte le pagine.
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
name | string | Sì | Testo visualizzato |
href | string | Sì | URL (link esterno) |
icon | string | No | Nome dell'icona Font Awesome |
{
"anchors": [
{ "name": "Blog", "href": "https://blog.example.com", "icon": "newspaper" }
]
}
navigation (struttura)
Tipo: object
La struttura di navigazione della documentazione. Consulta Navigazione per la documentazione dettagliata.
Le pagine possono essere stringhe (titolo generato automaticamente dal nome del file) oppure oggetti con un titolo personalizzato:
"pages": [
"introduction",
{ "page": "content/mdx-basics", "title": "MDX Basics" }
]
{
"navigation": {
"tabs": [
{
"tab": "Docs",
"icon": "book-open",
"groups": [
{
"group": "Getting Started",
"pages": ["introduction", "quickstart"]
}
]
}
]
}
}Barra di navigazione e piè di pagina
navbar
Tipo: object
| Campo | Tipo | Descrizione |
|---|---|---|
links | array | Link di navigazione |
links[].label | string | Testo predefinito del pulsante |
links[].labels | object | Override facoltativi per lingua, indicizzati per codice lingua (ad esempio fr, es). Usa label come fallback |
links[].icon | icon | Icona facoltativa da visualizzare accanto all'etichetta |
links[].href | string | URL di destinazione |
primary | object | Pulsante CTA principale |
primary.label | string | Testo predefinito del pulsante |
primary.labels | object | Override facoltativi per lingua, indicizzati per codice lingua. Usa label come 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 è facoltativo. La documentazione in una sola lingua può ometterlo. Quando è impostato, la lingua dell'URL corrente (ad esempio /fr/...) seleziona l'override corrispondente.
footer
Tipo: object
Configura il piè di pagina con link ai social e colonne di link personalizzate.
{
"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" }
]
}
]
}
}
| Campo | Tipo | Descrizione |
|---|---|---|
socials | object | URL delle piattaforme social |
links | array | Configurazioni delle colonne di link |
links[].header | string | Intestazione della colonna |
links[].items | array | Array di oggetti { label, href } |
Piattaforme social supportate: github, x, twitter, linkedin, discord, slack, youtube, instagram, facebook, reddit, telegram, bluesky, threads, medium, hacker-news, website
Stile
styling.latex
Tipo: boolean
Abilita il rendering della matematica LaTeX con KaTeX. Quando è abilitato, puoi usare $...$ per la matematica inline e $$...$$ per le equazioni a blocco.
{
"styling": {
"latex": true
}
}
Consulta Matematica e LaTeX per i dettagli sull'utilizzo.
styling.js
Tipo: string | string[]
File JavaScript personalizzati da includere in ogni pagina. I percorsi sono relativi alla directory della documentazione e devono iniziare con /.
{
"styling": {
"js": "/script.js"
}
}
Passa un array per più file:
{
"styling": {
"js": ["/chat.js", "/analytics.js"]
}
}
Senza questo campo, Jamdesk rileva automaticamente i file `.js nella radice del progetto. Consulta JavaScript personalizzato per i dettagli.
Ricerca
search
Tipo: object (facoltativo)
Personalizza la barra di ricerca della documentazione. La ricerca funziona immediatamente; ti serve questo campo solo per modificare il testo segnaposto o mostrare pagine popolari nello stato vuoto.
| Campo | Tipo | Predefinito | Descrizione |
|---|---|---|---|
prompt | string | Search documentation… | Testo segnaposto mostrato nel campo di ricerca |
popularPages | array | Quick Start, Introduction | Link di accesso rapido mostrati prima che il visitatore inserisca una query |
{
"search": {
"prompt": "Ask me anything…",
"popularPages": [
{ "title": "Quick Start", "slug": "quickstart", "icon": "rocket" },
{ "title": "Authentication", "slug": "guides/authentication", "icon": "key" }
]
}
}
Pagine popolari
Ogni voce di popularPages accetta:
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
title | string | Sì | Etichetta mostrata per il link |
slug | string | Sì | Percorso della pagina, senza barra iniziale o estensione .mdx (ad esempio quickstart oppure guides/authentication per il file guides/authentication.mdx) |
icon | string | No | Nome dell'icona Font Awesome mostrata accanto al link (ad esempio rocket o bell) |
Il campo icon accetta anche l'oggetto completo { "name", "style", "library" }. Consulta Forma oggetto dell'icona. Quando popularPages viene omesso, Jamdesk mostra Quick Start e Introduction per impostazione predefinita.
Chat
chat
Tipo: object (facoltativo)
Configura l'assistente di chat AI integrato. La chat è abilitata per impostazione predefinita su tutti i siti; ti serve questo campo solo per personalizzare le domande iniziali o disabilitarla.
| Campo | Tipo | Predefinito | Descrizione |
|---|---|---|---|
enabled | boolean | true | Imposta false per rimuovere il pannello della chat dal sito |
starterQuestions | string[] | generato automaticamente | Fino a 4 domande mostrate all'apertura della chat (5-200 caratteri ciascuna). Se omesse, vengono generate automaticamente durante le build. Imposta [] per non mostrarne alcuna |
{
"chat": {
"starterQuestions": [
"How do I get started?",
"What API endpoints are available?"
]
}
}
Consulta Chat AI per i dettagli sul funzionamento della chat e su ciò che vedono i visitatori.
Menu Azioni AI
contextual
Tipo: object (facoltativo)
Configura il menu a discesa Azioni AI visualizzato su ogni pagina. È abilitato per impostazione predefinita con tutte le opzioni; ti serve questo campo solo per personalizzare le opzioni visualizzate o disabilitarlo.
| Campo | Tipo | Predefinito | Descrizione |
|---|---|---|---|
enabled | boolean | true | Imposta false per rimuovere il menu Azioni AI dal sito |
options | array | tutte quelle integrate | Elenco di chiavi di opzioni e/o oggetti di opzioni personalizzati |
Chiavi delle opzioni integrate: copy, view, chatgpt, claude, perplexity, gemini, mcp, cursor, vscode
{
"contextual": {
"options": ["copy", "claude", "mcp", "cursor"]
}
}
Aggiungi opzioni personalizzate insieme a quelle integrate:
{
"contextual": {
"options": [
"copy",
"claude",
{
"title": "Ask on Discord",
"description": "Get help from the community",
"icon": "discord",
"href": "https://discord.gg/your-server"
}
]
}
}
Consulta Menu Azioni AI per l'elenco completo delle opzioni e il formato delle opzioni personalizzate.
Controllo ortografico
spellcheck
Tipo: object (facoltativo)
Configura il comando CLI jamdesk spellcheck. Ti serve questo campo solo per aggiungere parole specifiche del progetto all'elenco di esclusione.
| Campo | Tipo | Descrizione |
|---|---|---|
ignore | string[] | Parole da ignorare durante il controllo ortografico (nomi di prodotto, termini tecnici e così via) |
{
"spellcheck": {
"ignore": ["Acme", "kubectl", "Terraform"]
}
}
La CLI include oltre 180 termini tecnici integrati (API, GraphQL, Kubernetes, React e così via) e ignora automaticamente il nome del progetto indicato nel campo name. Aggiungi solo parole specifiche del progetto.
Consulta Panoramica CLI: controllo ortografico per i dettagli sull'utilizzo e sulla modalità interattiva di correzione.
Immagini
images.convertToWebp
Tipo: boolean (facoltativo, predefinito false)
Abilita la conversione automatica in WebP degli asset PNG e JPG durante le build. I file convertiti sono generalmente più piccoli del 60-80% rispetto agli originali, senza perdita visibile di qualità. I riferimenti nel tuo MDX, nel CSS personalizzato, nel JavaScript personalizzato e in docs.json vengono riscritti automaticamente, quindi non devi modificare alcun percorso.
Favicon, og:image e twitter:image mantengono il formato originale. Non tutti i crawler social o i client email eseguono il rendering di WebP in modo affidabile e una scheda di anteprima danneggiata è peggiore di un JPG leggermente più grande.
{
"images": {
"convertToWebp": true
}
}
Consulta Conversione automatica delle immagini per sapere cosa viene convertito, come funziona la memorizzazione nella cache e come viene indicato lo stato di avanzamento della build.
Controllo degli accessi
auth.password
Tipo: object (facoltativo)
Attiva la protezione del sito tramite password condivisa. Si tratta esclusivamente di una configurazione dichiarativa. Devi comunque impostare la passphrase effettiva nella dashboard dopo l'esecuzione della build successiva.
Imposta auth.password.enabled: true per bloccare l'intero sito oppure elenca i percorsi in auth.password.private[] per proteggere solo determinate pagine. Entrambe le opzioni attivano la stessa richiesta di password nella dashboard alla build successiva.
{
"auth": {
"password": {
"enabled": true,
"hint": "Ask your account manager",
"public": ["/marketing/**", "/changelog"]
}
}
}
| Campo | Tipo | Descrizione |
|---|---|---|
enabled | boolean | Modalità per l'intero sito. Quando è true, ogni pagina richiede la password (tranne quelle contrassegnate come pubbliche). |
hint | string (max 200 caratteri) | Suggerimento in testo semplice mostrato nella schermata di sblocco. Non è consentito HTML. |
public | string[] | Pattern glob dei percorsi che ignorano la password. Supporta * (un segmento) e ** (ricorsivo). Una / senza altro contenuto viene rifiutata. |
private | string[] | Percorsi esatti che richiedono la password. Impostando questo campo senza enabled si attiva la modalità per pagine specifiche. |
Consulta Protezione tramite password per la procedura completa, inclusi il flusso della dashboard e il modo in cui public: true / private: true nel frontmatter interagiscono con questi array.
auth.jwt
Tipo: object (facoltativo)
Proteggi l'intero sito con il tuo sistema di accesso. Il backend firma un token a breve durata per ogni utente autenticato e Jamdesk lo scambia con un cookie di sessione. La chiave di firma viene generata nella dashboard, non in questo file. auth.jwt e auth.password non possono essere abilitati contemporaneamente; una build con entrambe le opzioni attive non va a buon fine con un config_error.
{
"auth": {
"jwt": {
"enabled": true,
"loginUrl": "https://app.example.com/docs-login",
"public": ["/changelog/**", "/status"]
}
}
}
| Campo | Tipo | Descrizione |
|---|---|---|
enabled | boolean | Attiva l'autenticazione JWT. Ogni pagina richiede una sessione, tranne quelle contrassegnate come pubbliche. |
loginUrl | string | Obbligatorio quando enabled è true. Un URL assoluto https:// del tuo sito. I visitatori senza sessione vengono inviati qui con ?redirect=<path>, così puoi riportarli alla pagina richiesta. |
public | string[] | Pattern glob dei percorsi che rimangono raggiungibili senza autenticazione. Usa la stessa sintassi di auth.password.public e viene combinato con public: true nel frontmatter e "public": true sui gruppi di navigazione. |
Il controllo degli accessi per singola pagina, oltre a questo, deriva da groups nel frontmatter della pagina. Consulta Autenticazione JWT per il formato del token, il flusso di reindirizzamento e il funzionamento dei gruppi.
Esempio 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"]
}
]
}
]
}
}