Branding
Configure logos, favicons, navbar links, and footer content for your docs site. Supports light/dark mode variants, custom colors, and external link icons.
Branding controls the visuals readers see first: logos, favicons, and navigation links. Each one accepts light/dark mode variants.
Logo
Add your logo to the navigation header:
{
"logo": {
"light": "/images/logo-light.webp",
"dark": "/images/logo-dark.webp",
"href": "https://yourcompany.com"
}
}
| Field | Description |
|---|---|
light | Logo for light mode (dark logo on light background) |
dark | Logo for dark mode (light logo on dark background) |
href | Where clicking the logo navigates |
Use SVG logos for crisp rendering at any size. Use the same logo for light and dark if you only have one. Link previews can't show text inside an SVG logo. Convert any text to outlines (paths). See Customize the social card.
Logo Dimensions
Logos are displayed at 120px width maximum. For best results:
- Width: 120-240px
- Height: 30-40px
- Format: SVG preferred
Favicon
One image for both modes:
{
"favicon": "/images/favicon.svg"
}
Or a separate variant for each mode:
{
"favicon": {
"light": "/images/favicon.svg",
"dark": "/images/favicon-dark.svg"
}
}
dark is optional. Without it, light shows in every mode. Jamdesk emits a <link rel="icon"> for the primary favicon plus a second link with media="(prefers-color-scheme: dark)" for the dark variant.
Supported formats: SVG, PNG, ICO.
An SVG that uses currentColor for its strokes and fills adapts to the mode on its own. The browser substitutes the active foreground color.
Site Name
The name field appears in browser tabs and search results:
{
"name": "Acme Docs",
"description": "Documentation for the Acme API"
}
Change the title format, or leave the name out of it, with seo.titleTemplate.
Pair it with a description. Without one, search results and link previews show a generic fallback.
Description
The description field is your site's default SEO summary. Search engines show it under your site title, and social platforms use it for link previews:
{
"description": "Build, ship, and scale documentation with the Acme platform."
}
Aim for 50-160 characters written for a reader deciding whether to click. Pages with their own description frontmatter use that instead. Every other page uses the site description.
Navigation Links
Add links to your navbar:
{
"navbar": {
"links": [
{ "label": "Blog", "href": "https://yourcompany.com/blog" },
{ "label": "Pricing", "href": "https://yourcompany.com/pricing" }
],
"primary": {
"type": "button",
"label": "Get Started",
"href": "https://app.yourcompany.com/signup"
}
}
}
Link Options
| Field | Type | Description |
|---|---|---|
label | string | Display text |
href | string | URL (external or internal) |
Primary Button
The primary field creates a highlighted call-to-action button:
{
"primary": {
"type": "button",
"label": "Dashboard",
"href": "https://app.yourcompany.com"
}
}
The links and the primary button sit in the header on tablets and desktops. Phones have no room for them in the header. They appear in the menu, with the primary button pinned to the bottom. Pulsar doesn't show navbar links or the primary button.
Footer
Add social links and custom link columns to your documentation footer.
Social Links
Display social media icons at the bottom of every page:
{
"footer": {
"socials": {
"github": "https://github.com/yourcompany",
"x": "https://x.com/yourcompany",
"discord": "https://discord.gg/yourserver",
"linkedin": "https://linkedin.com/company/yourcompany"
}
}
}
Supported Platforms
| Platform | Key | Description |
|---|---|---|
| GitHub | github | Link to your GitHub organization or repo |
| X (Twitter) | x or twitter | Link to your X/Twitter profile |
linkedin | Link to your company LinkedIn page | |
| Discord | discord | Link to your Discord server |
| Slack | slack | Link to your Slack community |
| YouTube | youtube | Link to your YouTube channel |
instagram | Link to your Instagram profile | |
facebook | Link to your Facebook page | |
reddit | Link to your subreddit | |
| Telegram | telegram | Link to your Telegram channel |
| Bluesky | bluesky | Link to your Bluesky profile |
| Threads | threads | Link to your Threads profile |
| Medium | medium | Link to your Medium publication |
| Hacker News | hacker-news | Link to your Hacker News profile |
| Website | website | Link to your main website |
Icons display in a fixed order, whatever order your config uses. GitHub and X/Twitter come first.
Link Columns
Add link groups above your social icons:
{
"footer": {
"links": [
{
"header": "Resources",
"items": [
{ "label": "Blog", "href": "https://yourcompany.com/blog" },
{ "label": "Changelog", "href": "/changelog" }
]
},
{
"header": "Company",
"items": [
{ "label": "About", "href": "https://yourcompany.com/about" },
{ "label": "Careers", "href": "https://yourcompany.com/careers" }
]
}
],
"socials": {
"github": "https://github.com/yourcompany",
"x": "https://x.com/yourcompany"
}
}
}
| Field | Type | Description |
|---|---|---|
links | array | Array of link column objects |
links[].header | string | Column heading (optional) |
links[].items | array | Links in the column |
links[].items[].label | string | Display text for the link |
links[].items[].href | string | URL (internal paths or external URLs) |
External links (starting with http) open in a new tab. Internal links navigate within your docs.
Hide Footer on Specific Pages
Use frontmatter to hide the footer on individual pages:
---
title: Landing Page
hideFooter: true
---
Use it on custom landing pages or wherever the footer gets in the way.
Jamdesk Branding
By default, a "Powered by Jamdesk" link appears in the footer of your documentation pages. You can remove it.
Hiding the Branding
To remove the Jamdesk branding:
- Go to Settings in your Jamdesk dashboard
- Find the Build Settings section
- Toggle off Show Jamdesk Branding
- Trigger a new build
The branding toggle is on every plan. Changes take effect after a rebuild.
Full Branding Example
A complete branding configuration:
{
"name": "Acme Documentation",
"description": "Build amazing products with Acme",
"theme": "jam",
"colors": {
"primary": "#6366F1",
"light": "#818CF8",
"dark": "#4F46E5"
},
"favicon": "/images/favicon.svg",
"logo": {
"light": "/images/logo-dark.webp",
"dark": "/images/logo-light.webp",
"href": "https://acme.com"
},
"navbar": {
"links": [
{ "label": "API", "href": "/api/overview" },
{ "label": "Blog", "href": "https://acme.com/blog" }
],
"primary": {
"type": "button",
"label": "Sign Up",
"href": "https://app.acme.com/signup"
}
},
"footer": {
"socials": {
"github": "https://github.com/acme",
"x": "https://x.com/acme",
"discord": "https://discord.gg/acme"
},
"links": [
{
"header": "Resources",
"items": [
{ "label": "Blog", "href": "https://acme.com/blog" },
{ "label": "Status", "href": "https://status.acme.com" }
]
}
]
}
}
Custom Domain
Add your domain in the Jamdesk dashboard:
- Go to Settings → Domains
- Add your domain (e.g.,
docs.yourcompany.com) - Configure DNS as shown
- Wait for verification
Your docs then load at your custom domain with automatic SSL.
