Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions _site/customizations/custom-footer.js
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,7 @@
// horizontal padding (pl-[32px] / pr-[32px]) so the footer's inner edges
// align with the content area used by both doc pages and the home page.
+ '@media (min-width: 1024px) { #' + FOOTER_ID + ' { padding-left: calc(19rem + 32px) !important; padding-right: 32px !important; } }'
+ '#' + FOOTER_ID + ' [data-inner] { max-width: 1280px; margin: 0 auto; }'
+ '#' + FOOTER_ID + ' * { box-sizing: border-box; }'
+ '#' + FOOTER_ID + ' a { text-decoration: none; transition: color 0.15s, border-color 0.15s; }'
// Top section: sitemap + CTA side by side only at wide viewports
Expand Down Expand Up @@ -182,6 +183,7 @@
+ '#' + FOOTER_ID + ' [data-copyright] { font-size: 13px; color: #6b7280; }'
+ '#' + FOOTER_ID + ' [data-bottom] a { color: #6b7280; }'
+ '#' + FOOTER_ID + ' [data-bottom] a:hover { color: #111; }'
+ '#' + FOOTER_ID + ' [data-logo] { margin-bottom: 16px; }'
+ '#' + FOOTER_ID + ' [data-logo] svg * { fill: #111; }'
// Dark mode colors
+ '.dark #' + FOOTER_ID + ' [data-sitemap] h3 { color: #f5f5f5; }'
Expand Down Expand Up @@ -216,12 +218,12 @@
+ link[0] + '</a>';
});

return '<div style="max-width:1280px;margin:0 auto;">'
return '<div data-inner>'
// Top: sitemap grid + CTA column side by side on desktop
+ '<div data-top>'
+ '<div data-sitemap>' + columnsHtml + '</div>'
+ '<div data-cta>'
+ '<div data-logo style="margin-bottom:16px;">' + logoSvg + '</div>'
+ '<div data-logo>' + logoSvg + '</div>'
+ '<p>Stay informed on feature releases, product roadmap, support, and cloud offerings!</p>'
+ '<form onsubmit="return false;">'
+ '<input type="email" placeholder="Email address" />'
Expand Down
17 changes: 15 additions & 2 deletions _site/customizations/quickstart-back-link.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,14 @@
src.setAttribute('aria-hidden', 'true');
}

// Already in place for this page (href carries the locale prefix).
if (clone && header.contains(clone) && clone.getAttribute('href') === src.getAttribute('href')) {
// Build the locale- and basePath-aware destination.
var base = window.location.pathname.startsWith('/docs') ? '/docs' : '';
var localeMatch = window.location.pathname.match(/^(?:\/docs)?\/([a-z]{2}(?:-[A-Z]{2})?)(?:\/|$)/);
var locale = localeMatch ? '/' + localeMatch[1] : '';
var dest = base + locale + '/get-started/quickstarts/home';

// Already in place — compare against the rewritten dest, not the source href.
if (clone && header.contains(clone) && clone.getAttribute('href') === dest) {
return;
}
if (clone) clone.remove();
Expand All @@ -48,6 +54,13 @@
clone.style.width = 'fit-content';
clone.style.marginBottom = '0.75rem';
clone.removeAttribute('aria-hidden');

Comment thread
cursor[bot] marked this conversation as resolved.
clone.setAttribute('href', dest);
clone.addEventListener('click', function (e) {
e.preventDefault();
window.location.href = dest;
});
Comment thread
cursor[bot] marked this conversation as resolved.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Back link blocks new tab

Medium Severity

The cloned “All quickstarts” back link always calls preventDefault on click and navigates in the same window, so Ctrl/Cmd+click and similar gestures no longer open the quickstarts home in a new tab even though href is set correctly.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit a9f3e5a. Configure here.


header.insertBefore(clone, header.firstChild);
}

Expand Down
27 changes: 24 additions & 3 deletions _site/customizations/tab-nav.js
Original file line number Diff line number Diff line change
Expand Up @@ -159,9 +159,8 @@
var logoLink = document.createElement('a');
logoLink.id = LOGO_ID;
logoLink.href = localizeUrl('/');
logoLink.style.cssText = 'display:flex;align-items:center;flex-shrink:0;text-decoration:none;';
logoLink.innerHTML = '<img src="' + BASE + '/_site/logo/light.svg" id="ch-hp-logo-light" alt="ClickHouse Docs" style="height:2rem;">'
+ '<img src="' + BASE + '/_site/logo/dark.svg" id="ch-hp-logo-dark" alt="ClickHouse Docs" style="height:2rem;">';
logoLink.innerHTML = '<img src="' + BASE + '/_site/logo/light.svg" id="ch-hp-logo-light" alt="ClickHouse Docs">'
+ '<img src="' + BASE + '/_site/logo/dark.svg" id="ch-hp-logo-dark" alt="ClickHouse Docs">';
navbar.insertBefore(logoLink, navbar.firstChild);
updateLogoTheme();
}
Expand All @@ -187,19 +186,36 @@
}
}

// ── Navbar ready ──────────────────────────────────────────────────────────
// Reveal the navbar once both injections are complete: logo (homepage only)
// and CTA (all pages). Called via requestAnimationFrame so it runs after the
// current synchronous task — giving navbar-cta.js time to inject the CTA
// before we check. The MutationObserver re-fires on every DOM change
// (including when navbar-cta.js appends the CTA), so if the first RAF check
// fails because the CTA isn't there yet, a subsequent observer tick will retry.
function markNavbarReady() {
var navbar = document.getElementById('navbar-transition-maple');
if (!navbar) return;
if (!document.getElementById('ch-navbar-cta')) return;
if (isHomePath() && !document.getElementById(LOGO_ID)) return;
navbar.classList.add('ch-navbar-ready');
}

// ── Init ──────────────────────────────────────────────────────────────────
function init() {
applyHomepageClass();
setupHomepageNavbar();
patchTabButtons();
styleDropdownHeaders();
requestAnimationFrame(markNavbarReady);

var observer = new MutationObserver(function () {
applyHomepageClass();
setupHomepageNavbar();
updateLogoTheme();
patchTabButtons();
styleDropdownHeaders();
requestAnimationFrame(markNavbarReady);
});
observer.observe(document.documentElement, { childList: true, subtree: true });

Expand All @@ -210,6 +226,11 @@
});
}

// Apply the homepage class immediately at script evaluation time — before the
// navbar is inserted by React hydration — so justify-content:flex-start and
// other ch-homepage navbar rules apply from the very first navbar paint.
applyHomepageClass();

if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
Expand Down
44 changes: 40 additions & 4 deletions _site/redirects.json
Original file line number Diff line number Diff line change
Expand Up @@ -955,6 +955,10 @@
"destination": "/integrations/connectors/data-ingestion/etl-tools/airbyte-and-clickhouse",
"source": "/integrations/airbyte-and-clickhouse"
},
{
"source": "/integrations/clickpipes/kafka/create-your-first-kafka-clickpipe",
"destination": "/integrations/clickpipes/kafka/create-kafka-clickpipe"
},

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Kafka guide redirect wrong slug

High Severity

The new redirect sends /integrations/clickpipes/kafka/create-your-first-kafka-clickpipe to /integrations/clickpipes/kafka/create-kafka-clickpipe, but the guide’s published slug is still create-your-first-kafka-clickpipe. Bookmarks and fallback links targeting the shorter path may not resolve to the guide.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 497538d. Configure here.

{
"destination": "/integrations/clickpipes/object-storage/amazon-s3/get-started",
"source": "/integrations/clickpipes/object-storage"
Expand Down Expand Up @@ -1151,6 +1155,14 @@
"destination": "/integrations/language-clients/java/jdbc",
"source": "/integrations/jdbc"
},
{
"source": "/integrations/kafka",
"destination": "/integrations/connectors/data-ingestion/kafka"
},
{
"source": "/integrations/kafka/cloud/amazon-msk",
"destination": "/integrations/connectors/data-ingestion/kafka/msk"
},
{
"destination": "/integrations/connectors/data-ingestion/kafka/confluent/confluent-cloud",
"source": "/integrations/kafka/cloud/confluent/custom-connector-cloud"
Expand Down Expand Up @@ -1303,6 +1315,10 @@
"destination": "/reference/engines/table-engines/integrations/embedded-rocksdb",
"source": "/integrations/rocksdb"
},
{
"source": "/integrations/s3",
"destination": "/integrations/connectors/data-ingestion/AWS/integrating-s3-with-clickhouse"
},
Comment thread
cursor[bot] marked this conversation as resolved.
{
"destination": "/integrations/connectors/data-ingestion/AWS/integrating-s3-with-clickhouse",
"source": "/integrations/s3/s3-intro"
Expand Down Expand Up @@ -1371,14 +1387,34 @@
"destination": "/concepts/features/interfaces/overview",
"source": "/interfaces"
},
{
"source": "/interfaces/cpp",
"destination": "/integrations/language-clients/cpp"
},
{
"source": "/interfaces/csharp",
"destination": "/integrations/language-clients/csharp/overview"
},
{
"destination": "/reference/formats/Protobuf/Protobuf",
"source": "/interfaces/formats/Protobuf/Protobuf"
},
{
"source": "/interfaces/go",
"destination": "/integrations/language-clients/go"
},
{
"destination": "/concepts/features/interfaces/http",
"source": "/interfaces/http_interface"
},
{
"source": "/interfaces/javascript",
"destination": "/integrations/language-clients/js"
},
{
"source": "/interfaces/python",
"destination": "/integrations/language-clients/python"
},
{
"destination": "/integrations/language-clients/third-party/client-libraries",
"source": "/interfaces/third-party/client_libraries"
Expand Down Expand Up @@ -1815,6 +1851,10 @@
"destination": "/products/cloud/reference/billing/billing-overview",
"source": "/pricing"
},
{
"destination": "/products/cloud/guides/security/cmek",
"source": "/products/cloud/guides/security/cmek-migration"
},
{
"destination": "/reference/functions/aggregate-functions",
"source": "/query_language/agg_functions"
Expand Down Expand Up @@ -2734,9 +2774,5 @@
{
"destination": "/resources/changelogs/security-changelog",
"source": "/whats_new/security_changelog"
},
{
"destination": "/products/cloud/guides/security/cmek",
"source": "/products/cloud/guides/security/cmek-migration"
}
]
47 changes: 45 additions & 2 deletions _site/styles.css
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,38 @@ html:not(.dark) .ch-usecase-arrow {
.dark .ch-usecase-arrow {
color: #FCFF74;
}
/* Homepage content hidden until React has mounted and child effects have settled.
Double-RAF in PageWrapper ensures FullWidthDivider's own RAF fires first. */
.ch-page-hidden {
opacity: 0;
pointer-events: none;
}
.ch-page-visible {
opacity: 1;
transition: opacity 0.1s ease-out;
}
/* Overlay image drop shadow (hero cards with overlayImg) */
.ch-overlay-shadow {
box-shadow: 0 8px 32px rgba(0,0,0,0.28), 0 2px 8px rgba(0,0,0,0.18);
}
/* MCP icon — mask-size/repeat extracted from inline style; URL stays inline */
.ch-mcp-icon {
-webkit-mask-size: contain;
mask-size: contain;
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
}
/* Nav logo injected by tab-nav.js */
#ch-homepage-logo {
display: flex;
align-items: center;
flex-shrink: 0;
text-decoration: none;
}
#ch-hp-logo-light,
#ch-hp-logo-dark {
height: 2rem;
}

html {
scrollbar-gutter: stable;
Expand Down Expand Up @@ -112,6 +144,17 @@ body[data-scroll-locked] {
padding-right: calc(48px + 206px) !important;
}

/* Navbar hidden on initial paint; revealed by tab-nav.js once both the logo
(homepage) and CTA have been injected. Hiding during injection means no
layout shifts are visible regardless of injection order or timing. */
#navbar-transition-maple {
opacity: 0;
}
#navbar-transition-maple.ch-navbar-ready {
opacity: 1;
transition: opacity 0.15s ease-out;
}

/* ============================================
Global Border Radius
============================================ */
Expand Down Expand Up @@ -2692,8 +2735,8 @@ button#localization-select-trigger::before {
height: 1.1em;
flex-shrink: 0;
background-color: currentColor;
-webkit-mask: url("https://clickhouse-docs-assets.s3.us-east-1.amazonaws.com/icon-language-picker.svg") no-repeat center / contain;
mask: url("https://clickhouse-docs-assets.s3.us-east-1.amazonaws.com/icon-language-picker.svg") no-repeat center / contain;
-webkit-mask: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2Ij48cmVjdCB3aWR0aD0iMjU2IiBoZWlnaHQ9IjI1NiIgZmlsbD0ibm9uZSIvPjxwb2x5bGluZSBwb2ludHM9IjI0MCAyMTYgMTg0IDEwNCAxMjggMjE2IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjE2Ii8+PGxpbmUgeDE9IjE0NCIgeTE9IjE4NCIgeDI9IjIyNCIgeTI9IjE4NCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxNiIvPjxsaW5lIHgxPSI5NiIgeTE9IjMyIiB4Mj0iOTYiIHkyPSI1NiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxNiIvPjxsaW5lIHgxPSIzMiIgeTE9IjU2IiB4Mj0iMTYwIiB5Mj0iNTYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMTYiLz48cGF0aCBkPSJNMTI4LDU2YTk2LDk2LDAsMCwxLTk2LDk2IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjE2Ii8+PHBhdGggZD0iTTY5LjQ3LDg4QTk2LDk2LDAsMCwwLDE2MCwxNTIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMTYiLz48L3N2Zz4=") no-repeat center / contain;
mask: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2Ij48cmVjdCB3aWR0aD0iMjU2IiBoZWlnaHQ9IjI1NiIgZmlsbD0ibm9uZSIvPjxwb2x5bGluZSBwb2ludHM9IjI0MCAyMTYgMTg0IDEwNCAxMjggMjE2IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjE2Ii8+PGxpbmUgeDE9IjE0NCIgeTE9IjE4NCIgeDI9IjIyNCIgeTI9IjE4NCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxNiIvPjxsaW5lIHgxPSI5NiIgeTE9IjMyIiB4Mj0iOTYiIHkyPSI1NiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxNiIvPjxsaW5lIHgxPSIzMiIgeTE9IjU2IiB4Mj0iMTYwIiB5Mj0iNTYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMTYiLz48cGF0aCBkPSJNMTI4LDU2YTk2LDk2LDAsMCwxLTk2LDk2IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjE2Ii8+PHBhdGggZD0iTTY5LjQ3LDg4QTk2LDk2LDAsMCwwLDE2MCwxNTIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMTYiLz48L3N2Zz4=") no-repeat center / contain;
}

/* ============================================
Expand Down
2 changes: 1 addition & 1 deletion clickstack/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
title: 'ClickStack'
sidebarTitle: 'Home'
description: 'Open source observability stack powered by ClickHouse — unifying logs, traces, metrics, and sessions'
mode: 'wide'
mode: "custom"
---

export function useDark() {
Expand Down
Binary file modified images/sample-datasets-grid/menus-dark.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified images/sample-datasets-grid/menus-light.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading