import "dotenv/config.js";
import type { Config } from "@docusaurus/types";
import { themes as prismThemes } from "prism-react-renderer";
import type { Options as ClassicPresetOptions } from "@docusaurus/preset-classic";
import { PluginOptions as LLmPluginOptions } from "@signalwire/docusaurus-plugin-llms-txt";
import {
loadSonarApiSidebar,
replaceApiReferenceCategory,
} from "./src/scripts/embedded-api/sidebar-generator";
// Import remark plugins - lazy load to prevent webpack from bundling Node.js code
const getRemarkPlugins = () => ({
docsHeaderDecoration: require("./src/remark/docsHeaderDecoration"),
enterpriseDocsHeaderInformation: require("./src/remark/enterpriseDocsHeaderInformation"),
productInformation: require("./src/remark/productInformation"),
connectorList: require("./src/remark/connectorList"),
specDecoration: require("./src/remark/specDecoration"),
docMetaTags: require("./src/remark/docMetaTags"),
addButtonToTitle: require("./src/remark/addButtonToTitle"),
npm2yarn: require("@docusaurus/remark-plugin-npm2yarn"),
});
const plugins = getRemarkPlugins();
// Import constants for embedded API sidebar generation
const {
SPEC_CACHE_PATH,
API_SIDEBAR_PATH,
} = require("./src/scripts/embedded-api/constants");
const lightCodeTheme = prismThemes.github;
const darkCodeTheme = prismThemes.dracula;
const config: Config = {
future: {
experimental_faster: {
swcJsLoader: true,
swcJsMinimizer: true,
swcHtmlMinimizer: true,
lightningCssMinimizer: true,
mdxCrossCompilerCache: true,
rspackBundler: true,
rspackPersistentCache: true,
},
},
markdown: {
mermaid: true,
hooks: {
onBrokenMarkdownLinks: "throw",
},
},
themes: [
"@docusaurus/theme-mermaid",
"@saucelabs/theme-github-codeblock",
"docusaurus-theme-openapi-docs",
],
title: "Airbyte Docs",
tagline:
"Airbyte is an open-source data integration platform to build ELT pipelines. Consolidate your data in your data warehouses, lakes and databases.",
url: "https://docs.airbyte.com/",
// Assumed relative path. If you are using airbytehq.github.io use /
// anything else should match the repo name
baseUrl: "/",
onBrokenLinks: "throw",
favicon: "img/favicon.png",
organizationName: "airbytehq", // Usually your GitHub org/user name.
projectName: "airbyte", // Usually your repo name.
// Adds one off script tags to the head of each page
// e.g.
scripts: [
{
src: "https://cdn.unifygtm.com/tag/v1/unify-tag-script.js",
async: true,
type: "module",
id: "unifytag",
"data-api-key": "wk_BEtrdAz2_2qgdexg5KRa6YWLWVwDdieFC7CAHkDKz",
},
{
src: "https://cdn.jsdelivr.net/npm/hockeystack@latest/hockeystack.min.js",
async: true,
"data-apikey": "2094e2379643f69f7aec647a15f786",
"data-cookieless": "1",
"data-auto-identify": "1",
},
],
headTags: [
{
tagName: "meta",
attributes: {
name: "zd-site-verification",
content: "plvcr4wcl9abmq0itvi63c",
},
},
...(process.env.NODE_ENV === "production" && process.env.SEGMENT_WRITE_KEY
? [
{
tagName: "script",
attributes: {
name: "segment-script",
},
innerHTML: `
!function(){var i="analytics",analytics=window[i]=window[i]||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","screen","once","off","on","addSourceMiddleware","addIntegrationMiddleware","setAnonymousId","addDestinationMiddleware","register"];analytics.factory=function(e){return function(){if(window[i].initialized)return window[i][e].apply(window[i],arguments);var n=Array.prototype.slice.call(arguments);if(["track","screen","alias","group","page","identify"].indexOf(e)>-1){var c=document.querySelector("link[rel='canonical']");n.push({__t:"bpc",c:c&&c.getAttribute("href")||void 0,p:location.pathname,u:location.href,s:location.search,t:document.title,r:document.referrer})}n.unshift(e);analytics.push(n);return analytics}};for(var n=0;n {
if (version === "current") {
// For the "next" (unreleased) version
return `https://github.com/airbytehq/airbyte/edit/master/docs/platform/${docPath}`;
} else {
// For released versions
return `https://github.com/airbytehq/airbyte/edit/master/docusaurus/platform_versioned_docs/version-${version}/${docPath}`;
}
},
remarkPlugins: [
plugins.docsHeaderDecoration,
plugins.enterpriseDocsHeaderInformation,
plugins.productInformation,
plugins.docMetaTags,
plugins.addButtonToTitle,
],
},
],
// This plugin controls AI Agent Tools docs, which are not versioned
[
"@docusaurus/plugin-content-docs",
{
id: "ai-agents",
path: "../docs/ai-agents",
routeBasePath: "/ai-agents",
editUrl: "https://github.com/airbytehq/airbyte/blob/master/docs",
docItemComponent: "@theme/ApiItem", // Required for OpenAPI docs rendering
async sidebarItemsGenerator({ defaultSidebarItemsGenerator, ...args }) {
const sidebarItems = await defaultSidebarItemsGenerator(args);
// Load and filter the Sonar API sidebar based on allowed tags
const sonarApiItems = loadSonarApiSidebar();
// Replace the "api-reference" category with the filtered API items
return replaceApiReferenceCategory(sidebarItems, sonarApiItems);
},
remarkPlugins: [
plugins.docsHeaderDecoration,
plugins.enterpriseDocsHeaderInformation,
plugins.docMetaTags,
plugins.addButtonToTitle,
[plugins.npm2yarn, { sync: true }],
],
},
],
// This plugin controls release notes, which are not versioned
[
"@docusaurus/plugin-content-docs",
{
id: "release_notes",
path: "../docs/release_notes",
routeBasePath: "/release_notes",
sidebarPath: "./sidebar-release_notes.js",
editUrl: "https://github.com/airbytehq/airbyte/blob/master/docs",
remarkPlugins: [
plugins.docsHeaderDecoration,
plugins.enterpriseDocsHeaderInformation,
plugins.productInformation,
plugins.docMetaTags,
plugins.addButtonToTitle,
],
},
],
// This plugin controls Connector docs, which are unversioned
[
"@docusaurus/plugin-content-docs",
{
id: "connectors",
path: "../docs/integrations",
routeBasePath: "/integrations",
sidebarPath: "./sidebar-connectors.js",
editUrl: "https://github.com/airbytehq/airbyte/blob/master/docs",
beforeDefaultRemarkPlugins: [
plugins.specDecoration,
plugins.connectorList,
], // use before-default plugins so TOC rendering picks up inserted headings
remarkPlugins: [
plugins.docsHeaderDecoration,
plugins.enterpriseDocsHeaderInformation,
plugins.productInformation,
plugins.docMetaTags,
],
},
],
// This plugin controls Developers docs, which are not versioned
[
"@docusaurus/plugin-content-docs",
{
id: "developers",
path: "../docs/developers",
routeBasePath: "/developers",
sidebarPath: "./sidebar-developers.js",
editUrl: "https://github.com/airbytehq/airbyte/blob/master/docs",
remarkPlugins: [
plugins.productInformation,
plugins.docMetaTags,
plugins.addButtonToTitle,
],
},
],
// This plugin controls Community docs, which are not versioned
[
"@docusaurus/plugin-content-docs",
{
id: "community",
path: "../docs/community",
routeBasePath: "/community",
sidebarPath: "./sidebar-community.js",
editUrl: "https://github.com/airbytehq/airbyte/blob/master/docs",
remarkPlugins: [
plugins.docsHeaderDecoration,
plugins.enterpriseDocsHeaderInformation,
plugins.productInformation,
plugins.docMetaTags,
plugins.addButtonToTitle,
],
},
],
[
"docusaurus-plugin-openapi-docs",
{
id: "embedded-api",
docsPluginId: "ai-agents",
config: {
embedded: {
specPath: "src/data/embedded_api_spec.json",
outputDir: "../docs/ai-agents/embedded/api-reference",
sidebarOptions: {
groupPathsBy: "tag",
categoryLinkSource: "tag",
sidebarCollapsed: false,
sidebarCollapsible: false,
},
},
},
},
],
require.resolve("./src/plugins/enterpriseConnectors"),
[
"@signalwire/docusaurus-plugin-llms-txt",
{
siteTitle: "docs.airbyte.com llms.txt",
siteDescription:
"Airbyte is an open source platform designed for building and managing data pipelines, offering extensive connector options to facilitate data movement from various sources to destinations efficiently and effectively.",
depth: 4,
content: {
includePages: true,
excludeRoutes: ["./api-docs/**"],
},
} satisfies LLmPluginOptions,
],
() => ({
name: "Yaml loader",
configureWebpack(config, isServer) {
return {
module: {
rules: [
{
test: /\.ya?ml$/,
use: "yaml-loader",
},
{
test: /\.html$/i,
loader: "html-loader",
},
],
},
ignoreWarnings: [
(warning) => {
const msg = String(warning?.message || "");
return (
/Can't resolve ['"]bufferutil['"]/.test(msg) ||
/Can't resolve ['"]utf-8-validate['"]/.test(msg)
);
},
],
};
},
}),
],
customFields: {
requestErdApiUrl: process.env.REQUEST_ERD_API_URL,
markpromptProjectKey:
process.env.MARKPROMPT_PROJECT_KEY ||
"sk_test_cbPFAzAxUvafRj6l1yjzrESu0bRpzQGK",
},
clientModules: [
require.resolve("./src/scripts/cloudStatus.js"),
require.resolve("./src/scripts/download-abctl-buttons.js"),
require.resolve("./src/scripts/fontAwesomeIcons.js"),
],
themeConfig: {
colorMode: {
disableSwitch: false,
},
mermaid: {
theme: {
light: "base",
dark: "base",
},
options: {
themeVariables: {
primaryColor: "#5F5CFF",
primaryTextColor: "#FFFFFF",
primaryBorderColor: "#1A194D",
secondaryColor: "#FF6A4D",
tertiaryColor: "#E8EAF6",
tertiaryTextColor: "#000000",
tertiaryBorderColor: "#E8EAF6",
background: "#FFFFFF",
clusterBkg: "#F5F5F5",
fontFamily: "var(--ifm-font-family-base)",
},
flowchart: {
rankSpacing: 100,
subGraphTitleMargin: 10,
nodeSpacing: 100,
},
},
},
docs: {
sidebar: {
autoCollapseCategories: true,
},
},
algolia: {
appId: "OYKDBC51MU",
apiKey: "15c487fd9f7722282efd8fcb76746fce",
indexName: "airbyte",
},
announcementBar: {
id: "try_airbyte_cloud",
content:
'Try Airbyte Cloud! Free for 30 days, no credit card needed.',
backgroundColor: "#615eff",
textColor: "#ffffff",
isCloseable: true,
},
navbar: {
title: "Docs",
logo: {
alt: "Simple, secure and extensible data integration",
src: "img/logo-dark.png",
srcDark: "img/logo-light.png",
height: 40,
},
items: [
{
type: "docSidebar",
position: "left",
docsPluginId: "platform",
sidebarId: "platform",
label: "Platform",
},
{
type: "docSidebar",
position: "left",
docsPluginId: "connectors",
sidebarId: "connectors",
label: "Connectors",
},
{
type: "docSidebar",
position: "left",
docsPluginId: "release_notes",
sidebarId: "releaseNotes",
label: "Release notes",
},
{
type: "doc",
position: "left",
docsPluginId: "ai-agents",
docId: "README",
label: "AI agents",
},
{
type: "docSidebar",
position: "left",
docsPluginId: "developers",
sidebarId: "developers",
label: "Developers",
},
{
type: "docSidebar",
position: "left",
docsPluginId: "community",
sidebarId: "community",
label: "Community",
},
{
href: "https://status.airbyte.com",
label: "Status",
className: "cloudStatusLink",
},
// --- Right side ---
// Platform docs version selector
{
type: "docsVersionDropdown",
position: "right",
docsPluginId: "platform",
label: "Version",
dropdownActiveClassDisabled: true,
},
{
href: "https://github.com/airbytehq",
position: "right",
"aria-label": "Airbyte on GitHub",
className: "header-github-link",
},
],
},
prism: {
theme: lightCodeTheme,
darkTheme: darkCodeTheme,
additionalLanguages: ["bash", "diff", "json", "hcl"],
},
},
};
export default config;