
Security News
GitHub Actions Pricing Whiplash: Self-Hosted Actions Billing Change Postponed
GitHub postponed a new billing model for self-hosted Actions after developer pushback, but moved forward with hosted runner price cuts on January 1.
@gitbook/embed
Advanced tools
@gitbook/embed)Embed your GitBook docs in your product or website.
The Docs Embed can contain two tabs:
The embed is set up automatically based on your site's configuration. You can optionally customize and override the configuration with custom actions, tools, suggested questions, Authenticated Access, and more. See the Configuration section for all available options.
All GitBook docs sites include a script to easily add the Docs Embed as a widget on your website.
The script is served at https://docs.company.com/~gitbook/embed/script.js.
You can find the embed script from your docs site settings, or you can copy the following and replace docs.company.com with your docs site hostname.
<script src="https://docs.company.com/~gitbook/embed/script.js"></script>
<script>
// Initialize with Authenticated Access (optional)
window.GitBook('init',
{ siteURL: 'https://docs.company.com' },
{ visitor: { token: 'your-jwt-token' } }
);
window.GitBook('show');
</script>
The standalone script provides a global GitBook function. See the API Reference section for all available methods.
GitBook('configure', {
button: {
label: 'Ask',
icon: 'assistant' // 'assistant' | 'sparkle' | 'help' | 'book'
},
tabs: ['assistant', 'docs'],
actions: [
{
icon: 'circle-question',
label: 'Contact Support',
onClick: () => window.open('https://support.example.com', '_blank')
}
],
greeting: { title: 'Welcome!', subtitle: 'How can I help?' },
suggestions: ['What is GitBook?', 'How do I get started?'],
tools: [/* ... */]
});
See the Configuration section for all available options.
Install the package: npm install @gitbook/embed and import it in your web application:
import { createGitBook } from '@gitbook/embed';
const gitbook = createGitBook({
siteURL: 'https://docs.company.com'
});
// Create an iframe and get its URL
const iframe = document.createElement('iframe');
iframe.src = gitbook.getFrameURL({
visitor: {
token: 'your-jwt-token', // Optional: for Adaptive Content or Authenticated Access
unsignedClaims: { // Optional: custom claims for dynamic expressions
userId: '123',
plan: 'premium'
}
}
});
// Create a frame client to communicate with the iframe
const frame = gitbook.createFrame(iframe);
// Use the frame client methods
frame.navigateToPage('/getting-started'); // Navigate to a page in the docs tab
frame.navigateToAssistant(); // Switch to the assistant tab
frame.postUserMessage('How do I get started?');
frame.clearChat();
// Configure the embed (see Configuration section for all options)
frame.configure({
tabs: ['assistant', 'docs'],
actions: [
{
icon: 'circle-question',
label: 'Contact Support',
onClick: () => window.open('https://support.example.com', '_blank')
}
],
greeting: { title: 'Welcome!', subtitle: 'How can I help?' },
suggestions: ['What is GitBook?', 'How do I get started?'],
tools: [/* ... */]
});
// Listen to events
frame.on('close', () => {
console.log('Frame closed');
});
After installing the NPM package, you can import prebuilt React components:
import { GitBookProvider, GitBookFrame } from '@gitbook/embed/react';
<GitBookProvider siteURL="https://docs.company.com">
<GitBookFrame
visitor={{
token: 'your-jwt-token', // Optional: for Adaptive Content or Authenticated Access
unsignedClaims: { userId: '123' } // Optional: custom claims for dynamic expressions
}}
tabs={['assistant', 'docs']}
greeting={{ title: 'Welcome!', subtitle: 'How can I help?' }}
suggestions={['What is GitBook?', 'How do I get started?']}
actions={[
{
icon: 'circle-question',
label: 'Contact Support',
onClick: () => window.open('https://support.example.com', '_blank')
}
]}
tools={[/* ... */]}
/>
</GitBookProvider>
You can also use the useGitBook hook to access the client:
import { useGitBook } from '@gitbook/embed/react';
function MyComponent() {
const gitbook = useGitBook();
const frameURL = gitbook.getFrameURL({ visitor: { token: '...' } });
// ...
}
| Method | Standalone Script | NPM Package | React Components |
|---|---|---|---|
| Initialize | GitBook('init', options, frameOptions) | createGitBook(options) | <GitBookProvider siteURL="..."> |
| Get frame URL | ❌ (handled internally) | client.getFrameURL(options) | useGitBook().getFrameURL(options) |
| Create frame client | ❌ (handled internally) | client.createFrame(iframe) | useGitBook().createFrame(iframe) |
| Show/Hide widget | GitBook('show') / GitBook('hide') | ❌ | ❌ |
| Open/Close window | GitBook('open') / GitBook('close') / GitBook('toggle') | ❌ | ❌ |
| Navigate to page | GitBook('navigateToPage', path) | frame.navigateToPage(path) | Via frame client |
| Navigate to assistant | GitBook('navigateToAssistant') | frame.navigateToAssistant() | Via frame client |
| Post message | GitBook('postUserMessage', message) | frame.postUserMessage(message) | Via frame client |
| Clear chat | GitBook('clearChat') | frame.clearChat() | Via frame client |
| Configure | GitBook('configure', settings) | frame.configure(settings) | Props on <GitBookFrame> |
| Event listeners | ❌ | frame.on(event, listener) | Via frame client |
| Unload | GitBook('unload') | ❌ | ❌ |
GitBook('init', options: { siteURL: string }, frameOptions?: { visitor?: {...} }) - Initialize widgetGitBook('show') - Show widget buttonGitBook('hide') - Hide widget buttonGitBook('open') - Open widget windowGitBook('close') - Close widget windowGitBook('toggle') - Toggle widget windowGitBook('navigateToPage', path: string) - Navigate to pageGitBook('navigateToAssistant') - Navigate to assistant tabGitBook('postUserMessage', message: string) - Post message to chatGitBook('clearChat') - Clear chat historyGitBook('configure', settings: {...}) - Configure widgetGitBook('unload') - Unload widgetClient Factory:
createGitBook(options: { siteURL: string }) → GitBookClientclient.getFrameURL(options?: { visitor?: {...} }) → stringclient.createFrame(iframe: HTMLIFrameElement) → GitBookFrameClientFrame Client:
frame.navigateToPage(path: string) → voidframe.navigateToAssistant() → voidframe.postUserMessage(message: string) → voidframe.clearChat() → voidframe.configure(settings: Partial<GitBookEmbeddableConfiguration>) → voidframe.on(event: string, listener: Function) → () => void (unsubscribe)Components:
<GitBookProvider siteURL: string> - Provider component<GitBookFrame {...props}> - Frame component (accepts all config options as props)Hooks:
useGitBook() → GitBookClient (must be used within <GitBookProvider>)Configuration options are available across usage methods as follows:
GitBook('configure', {...})frame.configure({...})<GitBookFrame>tabsAvailable in: Standalone script, NPM package, React components
Override which tabs are displayed. Defaults to your site's configuration.
('assistant' | 'docs')[]['assistant', 'docs'] - Show both tabs['assistant'] - Show only the assistant tab['docs'] - Show only the docs tabtabs: ['assistant', 'docs']
actionsAvailable in: Standalone script, NPM package, React components
Custom action buttons rendered in the sidebar alongside tabs. Each action button triggers a callback when clicked.
Note: This prop was previously named buttons. Use actions instead, it has the same functionality.
GitBookEmbeddableActionDefinition[]icon: string - Icon name. Any FontAwesome icon is supported. (e.g., 'rocket', 'comments', 'user-circle', ...)label: string - Button label textonClick: () => void | Promise<void> - Callback function when clickedactions: [
{
icon: 'comments',
label: 'Contact Support',
onClick: () => window.open('https://support.example.com', '_blank')
},
{
icon: 'rocket',
label: 'Get started',
onClick: () => {
GitBook('navigateToPage', '/getting-started');
}
}
]
greetingAvailable in: Standalone script, NPM package, React components
Welcome message displayed in the Assistant tab.
{ title: string, subtitle: string }greeting: {
title: 'Welcome!',
subtitle: 'How can I help you today?'
}
suggestionsAvailable in: Standalone script, NPM package, React components
Suggested questions displayed in the Assistant welcome screen.
string[]suggestions: [
'What is GitBook?',
'How do I get started?',
'What can you do?'
]
toolsAvailable in: Standalone script, NPM package, React components
Custom AI tools to extend the Assistant. Tools allow the assistant to execute functions and integrate with your own systems.
Note: In addition to custom tools, the Assistant will always have access to any MCP servers you define in your site's AI settings.
GitBookToolDefinition[]name: string - Unique tool identifierdescription: string - Description of what the tool does (used by the AI to decide when and how to use it).inputSchema: object - JSON schema defining the tool's input parametersexecute: (input: object) => Promise<{ output: any, summary: string }> - Async function that executes the tool.
output: The result of the tool execution, provided to the AI to continue working with. Not shown to the user.summary: The visual summary of the tool execution, shown in the user's chat window.confirmation: { icon?: string, label: string } (optional) - Confirmation button shown before execution, useful for actions that require the user's express approval.tools: [
{
name: 'get_user_info',
description: 'Get information about the current user',
inputSchema: {
type: 'object',
properties: {
userId: {
type: 'string',
description: 'The user ID to look up'
}
},
required: ['userId']
},
execute: async (input) => {
const user = await fetch(`/api/users/${input.userId}`).then(r => r.json());
return {
output: { name: user.name, plan: user.plan },
summary: `Retrieved info for user ${user.name}`
};
}
},
{
name: 'create_ticket',
description: 'Create a support ticket',
confirmation: {
icon: 'circle-question',
label: 'Create support ticket?'
},
inputSchema: {
type: 'object',
properties: {
subject: { type: 'string' },
description: { type: 'string' }
},
required: ['subject', 'description']
},
execute: async (input) => {
const ticket = await fetch('/api/tickets', {
method: 'POST',
body: JSON.stringify(input)
}).then(r => r.json());
return {
output: { ticketId: ticket.id },
summary: `Created ticket #${ticket.id}`
};
}
}
]
visitor (Authenticated Access)Available in: Standalone script (via init), NPM package (via getFrameURL()), React components (as prop)
Authenticated Access options passed when creating the frame URL. Used for Adaptive Content and Authenticated Access.
Note: This is not a configuration option but rather a parameter when initializing the frame or creating the frame URL.
Standalone script: Pass as the second argument to GitBook('init', options, frameOptions)
NPM package: Pass to getFrameURL({ visitor: {...} })
React components: Pass as the visitor prop on <GitBookFrame>
{ token?: string, unsignedClaims?: Record<string, unknown> }token: string (optional) - Signed JWT token for Adaptive Content or Authenticated AccessunsignedClaims: Record<string, unknown> (optional) - Unsigned claims that can be used in dynamic expressions via visitor.claims.unsigned.<claim-name>visitor: {
token: 'your-jwt-token',
unsignedClaims: {
userId: '123',
plan: 'premium',
role: 'admin'
}
}
buttonAvailable in: Standalone script only
Configure the widget button for the standalone script. This option is not available when using the NPM package or React components, since they can be customized completely.
{ label: string, icon: 'assistant' | 'sparkle' | 'help' | 'book' }label: string - Button label texticon: 'assistant' | 'sparkle' | 'help' | 'book' - Icon displayed on the button. Choose from one of 4 presets.button: {
label: 'Ask',
icon: 'assistant'
}
FAQs
Embeddable components for GitBook
The npm package @gitbook/embed receives a total of 98 weekly downloads. As such, @gitbook/embed popularity was classified as not popular.
We found that @gitbook/embed demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 7 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
GitHub postponed a new billing model for self-hosted Actions after developer pushback, but moved forward with hosted runner price cuts on January 1.

Research
Destructive malware is rising across open source registries, using delays and kill switches to wipe code, break builds, and disrupt CI/CD.

Security News
Socket CTO Ahmad Nassri shares practical AI coding techniques, tools, and team workflows, plus what still feels noisy and why shipping remains human-led.