This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris-website.git
The following commit(s) were added to refs/heads/master by this push:
new 14d690270c1 [opt] opt several pages (#3969)
14d690270c1 is described below
commit 14d690270c1486e3e05aa8debd30172ac6eb09cc
Author: Mingyu Chen (Rayner) <[email protected]>
AuthorDate: Mon Jul 6 18:36:27 2026 +0800
[opt] opt several pages (#3969)
---
doc-tools/prompts/img-compression-guide.md | 45 +++
.../doris-operator/doris-operator-overview.md | 2 +-
.../doris-operator/doris-operator-overview.md | 2 +-
.../doris-operator/doris-operator-overview.md | 2 +-
.../community-report-next/CommunityReportNext.scss | 81 ++++++
.../community-report-next/CommunityReportNext.tsx | 34 ++-
.../community-report-next/WeeklyReport.scss | 40 ++-
src/components/home-next/HomeNext.scss | 6 +
.../home-next/sections/DeploymentSection.tsx | 4 +-
.../home-next/sections/EcosystemSection.scss | 35 ++-
.../home-next/sections/EcosystemSection.tsx | 87 +++---
.../home-next/sections/FeaturesSection.scss | 16 ++
.../home-next/sections/FeaturesSection.tsx | 44 +++
.../home-next/sections/UseCasesSection.tsx | 2 +-
src/pages/community-report/_reports/2026-06-29.mdx | 306 ++++++++++++++++-----
src/scss/custom.scss | 8 +
static/images/doris-ecosystem.jpg | Bin 0 -> 114568 bytes
.../doris-operator/doris-operator-overview.md | 2 +-
18 files changed, 579 insertions(+), 137 deletions(-)
diff --git a/doc-tools/prompts/img-compression-guide.md
b/doc-tools/prompts/img-compression-guide.md
new file mode 100644
index 00000000000..22ee716cda0
--- /dev/null
+++ b/doc-tools/prompts/img-compression-guide.md
@@ -0,0 +1,45 @@
+# Image Compression Guide
+
+## Convert PNG to JPEG
+
+Use this for documentation illustrations, such as diagrams and flowcharts,
when the image does not rely on a solid-color or transparent background.
+
+### Tool
+
+Use Python PIL (Pillow):
+
+```python
+from PIL import Image
+import os
+
+files = ['xxx.png', 'yyy.png']
+
+for f in files:
+ out = f.replace('.png', '.jpg')
+ img = Image.open(f).convert('RGB')
+ img.save(out, 'JPEG', quality=85, optimize=True)
+ orig = os.path.getsize(f) / 1024
+ new = os.path.getsize(out) / 1024
+ print(f"{f}: {orig:.0f}KB → {out}: {new:.0f}KB (saved {orig-new:.0f}KB)")
+```
+
+### Parameters
+
+- `quality=85`: Keeps documentation illustrations clear while producing a
reasonable file size.
+- `convert('RGB')`: Removes the PNG alpha channel and converts the image to
standard JPEG format.
+- `optimize=True`: Enables optimized JPEG encoding to reduce the file size
further.
+
+### Compression Results (Reference)
+
+| File | Original Size | Compressed Size | Saved |
+|------|--------|--------|------|
+| catalog-db-tbl.png | 2.1MB | 191KB | 91% |
+| columnar-storage.png | 1.9MB | 231KB | 88% |
+| mpp.png | 2.2MB | 240KB | 89% |
+| partition-bucket.png | 1.5MB | 186KB | 88% |
+| runtime-filter.png | 1.9MB | 265KB | 86% |
+
+### Notes
+
+- Images with transparent backgrounds are not good candidates for JPEG
conversion because transparency becomes a white background.
+- For solid-color images and screenshots, keep PNG format and compress them
with tinypng.com.
diff --git
a/docs/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md
b/docs/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md
index c6f03d1fb2e..cccb068748d 100644
---
a/docs/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md
+++
b/docs/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md
@@ -8,7 +8,7 @@
}
---
-Doris Operator is the official Kubernetes Operator for Apache Doris. It
combines Doris operational experience with Kubernetes-native resource
management to provide a simpler, more efficient, and easier-to-use way to
deploy and operate Doris on Kubernetes.
+[Doris Operator](https://github.com/apache/doris-operator) is the official
Kubernetes Operator for Apache Doris. It combines Doris operational experience
with Kubernetes-native resource management to provide a simpler, more
efficient, and easier-to-use way to deploy and operate Doris on Kubernetes.
Doris Operator extends the Kubernetes API through CustomResourceDefinitions
(CRDs). After you submit a Doris custom resource, the Operator creates and
maintains the corresponding Kubernetes resources such as `StatefulSet`,
`Service`, and `PersistentVolumeClaim`, and in some scenarios performs Doris
metadata-level actions such as node registration, decommissioning, or cleanup.
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/current/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md
index 7fa1ff4a359..c441cb2a69c 100644
---
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md
+++
b/i18n/zh-CN/docusaurus-plugin-content-docs/current/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md
@@ -8,7 +8,7 @@
}
---
-Doris Operator 是为满足用户在 Kubernetes 平台上高效部署和运维 Apache Doris 而提供的官方 Kubernetes
Operator。它把 Doris 组件间的分布式协同经验与 Kubernetes 原生资源管理能力结合起来,为用户提供更简洁、高效、易用的容器化部署方案。
+[Doris Operator](https://github.com/apache/doris-operator) 是为满足用户在 Kubernetes
平台上高效部署和运维 Apache Doris 而提供的官方 Kubernetes Operator。它把 Doris 组件间的分布式协同经验与
Kubernetes 原生资源管理能力结合起来,为用户提供更简洁、高效、易用的容器化部署方案。
Doris Operator 基于 Kubernetes CustomResourceDefinitions(CRD)扩展 Kubernetes
API。用户提交 Doris 自定义资源后,Operator 会根据资源中描述的期望状态,自动创建并维护对应的
`StatefulSet`、`Service`、`PersistentVolumeClaim` 等 Kubernetes
资源,并在部分场景下完成节点注册、下线和清理等 Doris 元数据层动作。
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md
index 7fa1ff4a359..c441cb2a69c 100644
---
a/i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md
+++
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md
@@ -8,7 +8,7 @@
}
---
-Doris Operator 是为满足用户在 Kubernetes 平台上高效部署和运维 Apache Doris 而提供的官方 Kubernetes
Operator。它把 Doris 组件间的分布式协同经验与 Kubernetes 原生资源管理能力结合起来,为用户提供更简洁、高效、易用的容器化部署方案。
+[Doris Operator](https://github.com/apache/doris-operator) 是为满足用户在 Kubernetes
平台上高效部署和运维 Apache Doris 而提供的官方 Kubernetes Operator。它把 Doris 组件间的分布式协同经验与
Kubernetes 原生资源管理能力结合起来,为用户提供更简洁、高效、易用的容器化部署方案。
Doris Operator 基于 Kubernetes CustomResourceDefinitions(CRD)扩展 Kubernetes
API。用户提交 Doris 自定义资源后,Operator 会根据资源中描述的期望状态,自动创建并维护对应的
`StatefulSet`、`Service`、`PersistentVolumeClaim` 等 Kubernetes
资源,并在部分场景下完成节点注册、下线和清理等 Doris 元数据层动作。
diff --git a/src/components/community-report-next/CommunityReportNext.scss
b/src/components/community-report-next/CommunityReportNext.scss
index ea10173ba47..9c818deabf0 100644
--- a/src/components/community-report-next/CommunityReportNext.scss
+++ b/src/components/community-report-next/CommunityReportNext.scss
@@ -40,6 +40,9 @@
position: sticky;
top: calc(var(--cr-navbar-h) + 24px);
align-self: flex-start;
+ display: flex;
+ flex-direction: column;
+ gap: 14px;
}
.community-report__section {
@@ -104,6 +107,84 @@
line-height: 1.3;
}
+.community-report__links {
+ display: grid;
+ gap: 12px;
+}
+
+.community-report__link-card {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+ min-height: 116px;
+ padding: 18px 46px 18px 20px;
+ color: var(--cr-ink);
+ text-decoration: none;
+ background: #fff;
+ border: 1px solid var(--cr-line);
+ border-radius: 14px;
+ box-shadow: 0 1px 4px rgba(0, 89, 68, 0.06);
+ transition: border-color 0.2s ease, box-shadow 0.2s ease, transform 0.2s
ease;
+}
+
+.community-report__link-card::after {
+ content: '';
+ position: absolute;
+ top: 18px;
+ right: 18px;
+ display: grid;
+ place-items: center;
+ width: 22px;
+ height: 22px;
+ background: var(--cr-cream);
+ border: 1px solid rgba(6, 128, 95, 0.12);
+ border-radius: 50%;
+ transition: background 0.2s ease, color 0.2s ease;
+}
+
+.community-report__link-card::before {
+ content: '';
+ position: absolute;
+ top: 25px;
+ right: 26px;
+ width: 8px;
+ height: 8px;
+ border-top: 2px solid var(--cr-green-dark);
+ border-right: 2px solid var(--cr-green-dark);
+ transform: rotate(45deg);
+ z-index: 1;
+ transition: border-color 0.2s ease;
+}
+
+.community-report__link-card:hover {
+ color: var(--cr-ink);
+ text-decoration: none;
+ border-color: rgba(6, 128, 95, 0.35);
+ box-shadow: 0 10px 24px rgba(0, 89, 68, 0.10);
+ transform: translateY(-1px);
+}
+
+.community-report__link-card:hover::after {
+ background: var(--cr-green);
+}
+
+.community-report__link-card:hover::before {
+ border-color: #fff;
+}
+
+.community-report__link-title {
+ font-size: 15px;
+ font-weight: 700;
+ line-height: 1.28;
+}
+
+.community-report__link-description {
+ font-size: 13px;
+ line-height: 1.45;
+ color: var(--cr-muted);
+}
+
/* ---------------- Past-reports dropdown ---------------- */
.community-report__select-wrap {
diff --git a/src/components/community-report-next/CommunityReportNext.tsx
b/src/components/community-report-next/CommunityReportNext.tsx
index f913a2610ad..b1baa5aa6c5 100644
--- a/src/components/community-report-next/CommunityReportNext.tsx
+++ b/src/components/community-report-next/CommunityReportNext.tsx
@@ -90,6 +90,23 @@ interface CommunityReportNextProps {
reports: WeeklyReportEntry[];
}
+const COMMUNITY_SURVEY_URL =
+
'https://docs.google.com/forms/d/e/1FAIpQLSeSppR5JJyXIxNoPlG_hS8RTW8k2tsCkpC0h68WSN6CEUsWcA/viewform';
+const DORIS_ROADMAP_ISSUE_URL = 'https://github.com/apache/doris/issues/60036';
+
+const sidebarLinks = [
+ {
+ title: 'Help Shape the Future of Apache Doris',
+ description: 'Complete the survey to help us build a better Doris
community.',
+ href: COMMUNITY_SURVEY_URL,
+ },
+ {
+ title: 'Which Doris Feature Do You Want to Discuss or Build?',
+ description: 'Leave your reply on the GitHub issue.',
+ href: DORIS_ROADMAP_ISSUE_URL,
+ },
+];
+
export default function CommunityReportNext({ reports }:
CommunityReportNextProps): JSX.Element {
const latest = reports[0];
const historical = reports.slice(1);
@@ -123,7 +140,7 @@ export default function CommunityReportNext({ reports }:
CommunityReportNextProp
>
<div className="community-report">
<div className="community-report__layout">
- <aside className="community-report__sidebar"
aria-label="Reports">
+ <aside className="community-report__sidebar"
aria-label="Reports and community feedback">
<div className="community-report__section">
<h2
className="community-report__section-title">Weekly Report</h2>
@@ -161,6 +178,21 @@ export default function CommunityReportNext({ reports }:
CommunityReportNextProp
</div>
)}
</div>
+
+ <div className="community-report__links"
aria-label="Community feedback links">
+ {sidebarLinks.map(link => (
+ <a
+ key={link.href}
+ className="community-report__link-card"
+ href={link.href}
+ target="_blank"
+ rel="noopener noreferrer"
+ >
+ <span
className="community-report__link-title">{link.title}</span>
+ <span
className="community-report__link-description">{link.description}</span>
+ </a>
+ ))}
+ </div>
</aside>
<main className="community-report__content">
diff --git a/src/components/community-report-next/WeeklyReport.scss
b/src/components/community-report-next/WeeklyReport.scss
index 44222f17901..3288da2c447 100644
--- a/src/components/community-report-next/WeeklyReport.scss
+++ b/src/components/community-report-next/WeeklyReport.scss
@@ -359,41 +359,51 @@
}
.wr-highlight__panel {
+ display: grid;
+ gap: 14px;
padding: 0 20px 20px 47px;
}
.wr-highlight__text {
margin: 0;
+ padding: 16px 18px;
+ background: rgba(5, 76, 57, 0.38);
+ border: 1px solid rgba(255, 252, 245, 0.16);
+ border-radius: 8px;
font-size: 15px;
line-height: 1.68;
- color: rgba(255, 252, 245, 0.88);
+ color: rgba(255, 252, 245, 0.9);
}
.wr-highlight__panel .wr-scn__prs {
- margin-top: 14px;
- border-top-color: rgba(255, 252, 245, 0.18);
+ margin: 0;
+ padding: 8px 16px;
+ background: rgba(255, 252, 245, 0.96);
+ border: 1px solid rgba(5, 76, 57, 0.18);
+ border-radius: 8px;
+ box-shadow: inset 3px 0 0 var(--wr-yellow);
}
.wr-highlight__panel .wr-scn__pr {
- border-top-color: rgba(255, 252, 245, 0.18);
+ border-top-color: rgba(5, 76, 57, 0.18);
}
.wr-highlight__panel .wr-scn__pr-title {
- color: rgba(255, 252, 245, 0.92);
+ color: var(--wr-ink);
}
.wr-highlight__panel .wr-scn__pr-num {
- color: var(--wr-yellow);
- border-bottom-color: rgba(255, 210, 63, 0.5);
+ color: var(--wr-green);
+ border-bottom-color: rgba(6, 128, 95, 0.32);
}
.wr-highlight__panel .wr-scn__pr-num:hover {
- border-bottom-color: var(--wr-yellow);
+ border-bottom-color: var(--wr-green);
}
.wr-highlight__panel .wr-scn__new {
- color: var(--wr-paper);
- background: rgba(255, 252, 245, 0.16);
+ color: var(--wr-green-dark);
+ background: rgba(6, 128, 95, 0.12);
}
/* Repo tabs (only shown when a report covers more than one repository) */
@@ -703,7 +713,15 @@
}
.wr-highlight__panel {
- padding: 0 16px 17px 42px;
+ padding: 0 16px 17px 16px;
+ }
+
+ .wr-highlight__text {
+ padding: 14px 15px;
+ }
+
+ .wr-highlight__panel .wr-scn__prs {
+ padding: 8px 14px;
}
.wr-scenario-tabs {
diff --git a/src/components/home-next/HomeNext.scss
b/src/components/home-next/HomeNext.scss
index 4e9ed5807f0..165e604f869 100644
--- a/src/components/home-next/HomeNext.scss
+++ b/src/components/home-next/HomeNext.scss
@@ -23,3 +23,9 @@
overflow-x: clip;
}
+.use-cases-next,
+.features-next__card,
+.ecosystem-next,
+.deployment-next {
+ scroll-margin-top: 88px;
+}
diff --git a/src/components/home-next/sections/DeploymentSection.tsx
b/src/components/home-next/sections/DeploymentSection.tsx
index b2d5fd03595..934d92d37ce 100644
--- a/src/components/home-next/sections/DeploymentSection.tsx
+++ b/src/components/home-next/sections/DeploymentSection.tsx
@@ -83,11 +83,11 @@ function DeploymentCard({ card }: { card:
DeploymentCardItem }): JSX.Element {
export function DeploymentSection(): JSX.Element {
return (
- <section className="deployment-next">
+ <section id="deployment" className="deployment-next"
aria-labelledby="deployment-next-title">
<div className="home-next-container">
<div className="deployment-next__header">
<div className="deployment-next__eyebrow">Deployment</div>
- <h2 className="deployment-next__headline">
+ <h2 className="deployment-next__headline"
id="deployment-next-title">
<span
className="deployment-next__headline-line">Choose Your Architecture</span>
<span className="deployment-next__headline-line
deployment-next__headline-line--accent">
One Engine, Two Modes
diff --git a/src/components/home-next/sections/EcosystemSection.scss
b/src/components/home-next/sections/EcosystemSection.scss
index d1f8935b26b..7cd935c2e78 100644
--- a/src/components/home-next/sections/EcosystemSection.scss
+++ b/src/components/home-next/sections/EcosystemSection.scss
@@ -114,6 +114,12 @@
perspective-origin: 50% 50%;
}
+ &__card-shell {
+ transform-style: preserve-3d;
+ transition: transform 0.5s cubic-bezier(0.18, 0.9, 0.25, 1.15);
+ will-change: transform;
+ }
+
&__card {
position: relative;
padding: 56px;
@@ -126,9 +132,6 @@
0 38px 90px -44px rgba(6, 70, 50, 0.45),
0 18px 48px -30px rgba(6, 70, 50, 0.28),
inset 0 1px 0 rgba(255, 255, 255, 0.75);
- transform-style: preserve-3d;
- transition: transform 0.5s cubic-bezier(0.18, 0.9, 0.25, 1.15);
- will-change: transform;
}
&__panel {
@@ -371,6 +374,24 @@
0 0 34px -16px rgba(45, 223, 168, 0.8);
}
+ &__graphic-link {
+ display: block;
+ color: inherit;
+ border-radius: 8px;
+ text-decoration: none;
+ cursor: pointer;
+
+ &:hover {
+ color: inherit;
+ text-decoration: none;
+ }
+
+ &:focus-visible {
+ outline: 3px solid var(--en-yellow);
+ outline-offset: 4px;
+ }
+ }
+
&__doris-logo {
width: auto;
height: 36px;
@@ -595,9 +616,12 @@
perspective: none;
}
+ &__card-shell {
+ transform: none !important;
+ }
+
&__card {
padding: 22px;
- transform: none !important;
}
&__panel {
@@ -721,7 +745,7 @@
@media (prefers-reduced-motion: reduce) {
.ecosystem-next {
- &__card,
+ &__card-shell,
&__block,
&__doris {
transition: none;
@@ -731,7 +755,6 @@
transform: translateY(var(--ecosystem-doris-offset-y)) !important;
}
- &__card,
&__block:hover {
transform: none !important;
}
diff --git a/src/components/home-next/sections/EcosystemSection.tsx
b/src/components/home-next/sections/EcosystemSection.tsx
index 780f62c8e71..9e06ab2805b 100644
--- a/src/components/home-next/sections/EcosystemSection.tsx
+++ b/src/components/home-next/sections/EcosystemSection.tsx
@@ -6,6 +6,7 @@ import React, {
useRef,
useState,
} from 'react';
+import Link from '@docusaurus/Link';
import './EcosystemSection.scss';
type EcosystemSide = 'left' | 'right';
@@ -33,6 +34,8 @@ interface TiltState {
ry: number;
}
+const DATA_INTEGRATION_DOC_LINK =
'/docs/dev/connection-integration/data-integration/intro';
+
interface EcosystemBlockProps {
data: EcosystemGroup;
side: EcosystemSide;
@@ -509,7 +512,11 @@ function CompactEcosystem(): JSX.Element {
aria-labelledby="ecosystem-next-title"
>
<EcosystemHeader />
- <div className="ecosystem-next__compact-card">
+ <Link
+ className="ecosystem-next__graphic-link
ecosystem-next__compact-card"
+ to={DATA_INTEGRATION_DOC_LINK}
+ aria-label="View Apache Doris data integration documentation"
+ >
<CompactTier label="Upstream — Sources" num="01"
groups={SOURCES} />
<CompactConnector />
<div className="ecosystem-next__compact-engine">
@@ -526,7 +533,7 @@ function CompactEcosystem(): JSX.Element {
</div>
<CompactConnector />
<CompactTier label="Downstream — Consumers" num="03"
groups={CONSUMERS} />
- </div>
+ </Link>
</section>
);
}
@@ -550,49 +557,55 @@ export function EcosystemSection(): JSX.Element {
<EcosystemHeader showCoverage />
<div className="ecosystem-next__stage">
- <div className="ecosystem-next__card" ref={cardRef}>
- <div className="ecosystem-next__panel" ref={panelRef}>
- <FlowLines paths={paths} />
-
- <div className="ecosystem-next__grid">
- <div className="ecosystem-next__col
ecosystem-next__col--sources">
- <div className="ecosystem-next__col-head">
- <span
className="ecosystem-next__col-num">01</span>
- Upstream - Sources
+ <div className="ecosystem-next__card-shell" ref={cardRef}>
+ <Link
+ className="ecosystem-next__graphic-link
ecosystem-next__card"
+ to={DATA_INTEGRATION_DOC_LINK}
+ aria-label="View Apache Doris data integration
documentation"
+ >
+ <div className="ecosystem-next__panel"
ref={panelRef}>
+ <FlowLines paths={paths} />
+
+ <div className="ecosystem-next__grid">
+ <div className="ecosystem-next__col
ecosystem-next__col--sources">
+ <div
className="ecosystem-next__col-head">
+ <span
className="ecosystem-next__col-num">01</span>
+ Upstream - Sources
+ </div>
+ {SOURCES.map(source => (
+ <EcosystemBlock key={source.id}
data={source} side="left" refMap={blockRefs} />
+ ))}
</div>
- {SOURCES.map(source => (
- <EcosystemBlock key={source.id}
data={source} side="left" refMap={blockRefs} />
- ))}
- </div>
- <div className="ecosystem-next__col
ecosystem-next__col--center">
- <div className="ecosystem-next__col-head
ecosystem-next__col-head--center">
- <span
className="ecosystem-next__col-num">02</span>
- The Engine
- </div>
- <div className="ecosystem-next__doris"
ref={dorisRef}>
- <div
className="ecosystem-next__doris-core">
- <img
-
className="ecosystem-next__doris-logo"
- src="/images/logo-doris.svg"
- alt="Apache Doris"
- draggable={false}
- />
+ <div className="ecosystem-next__col
ecosystem-next__col--center">
+ <div
className="ecosystem-next__col-head ecosystem-next__col-head--center">
+ <span
className="ecosystem-next__col-num">02</span>
+ The Engine
+ </div>
+ <div className="ecosystem-next__doris"
ref={dorisRef}>
+ <div
className="ecosystem-next__doris-core">
+ <img
+
className="ecosystem-next__doris-logo"
+
src="/images/logo-doris.svg"
+ alt="Apache Doris"
+ draggable={false}
+ />
+ </div>
</div>
</div>
- </div>
- <div className="ecosystem-next__col
ecosystem-next__col--consumers">
- <div className="ecosystem-next__col-head
ecosystem-next__col-head--right">
- <span
className="ecosystem-next__col-num">03</span>
- Downstream - Consumers
+ <div className="ecosystem-next__col
ecosystem-next__col--consumers">
+ <div
className="ecosystem-next__col-head ecosystem-next__col-head--right">
+ <span
className="ecosystem-next__col-num">03</span>
+ Downstream - Consumers
+ </div>
+ {CONSUMERS.map(consumer => (
+ <EcosystemBlock key={consumer.id}
data={consumer} side="right" refMap={blockRefs} />
+ ))}
</div>
- {CONSUMERS.map(consumer => (
- <EcosystemBlock key={consumer.id}
data={consumer} side="right" refMap={blockRefs} />
- ))}
</div>
</div>
- </div>
+ </Link>
</div>
</div>
</div>
diff --git a/src/components/home-next/sections/FeaturesSection.scss
b/src/components/home-next/sections/FeaturesSection.scss
index 48d7aefaf71..a2008ad6824 100644
--- a/src/components/home-next/sections/FeaturesSection.scss
+++ b/src/components/home-next/sections/FeaturesSection.scss
@@ -54,6 +54,14 @@
width: 100%;
}
+ &__card-anchor {
+ position: absolute;
+ left: 0;
+ width: 1px;
+ height: 1px;
+ pointer-events: none;
+ }
+
&__stage {
position: sticky;
top: 0;
@@ -553,6 +561,14 @@
padding: 0 0 72px;
}
+ &__card-anchor {
+ position: static;
+ display: block;
+ width: 0;
+ height: 0;
+ overflow: hidden;
+ }
+
&__stage {
position: relative;
top: auto;
diff --git a/src/components/home-next/sections/FeaturesSection.tsx
b/src/components/home-next/sections/FeaturesSection.tsx
index 72d393169f3..9124949ba2e 100644
--- a/src/components/home-next/sections/FeaturesSection.tsx
+++ b/src/components/home-next/sections/FeaturesSection.tsx
@@ -11,6 +11,7 @@ interface CapabilityItem {
interface Capability {
num: string;
+ hashId: string;
title: string;
subtitle: string;
tone: CapabilityTone;
@@ -27,6 +28,7 @@ interface Capability {
const CAPABILITIES: Capability[] = [
{
num: '01',
+ hashId: 'real-time-analytics',
title: 'Real-Time Analytics',
subtitle: 'The fastest end-to-end engine from ingestion to insight.',
tone: 'green',
@@ -45,6 +47,7 @@ const CAPABILITIES: Capability[] = [
},
{
num: '02',
+ hashId: 'lakehouse-analytics',
title: 'Lakehouse Analytics',
subtitle: 'Real-time analytics, applied directly to your open
lakehouse.',
tone: 'cream',
@@ -63,6 +66,7 @@ const CAPABILITIES: Capability[] = [
},
{
num: '03',
+ hashId: 'hybrid-search',
title: 'Hybrid Search',
subtitle: 'First-class search across structured, text, and vector
data.',
tone: 'ink',
@@ -385,6 +389,37 @@ export function FeaturesSection(): JSX.Element {
};
}, [isNarrowViewport]);
+ useEffect(() => {
+ function scrollToCapabilityHash() {
+ const hash = window.location.hash.slice(1);
+ if (!hash) return;
+
+ const idx = CAPABILITIES.findIndex(capability => capability.hashId
=== hash);
+ if (idx === -1) return;
+
+ if (isNarrowViewport) {
+ cardRefs.current[idx]?.scrollIntoView({ block: 'start' });
+ return;
+ }
+
+ const containerEl = containerRef.current;
+ if (!containerEl) return;
+
+ const transitions = Math.max(1, CAPABILITIES.length - 1);
+ const rect = containerEl.getBoundingClientRect();
+ const containerTop = rect.top + window.scrollY;
+ const scrollable = Math.max(0, containerEl.offsetHeight -
window.innerHeight);
+ const targetTop = containerTop + (idx / transitions) * scrollable;
+
+ window.scrollTo({ top: targetTop, behavior: 'auto' });
+ }
+
+ scrollToCapabilityHash();
+ window.addEventListener('hashchange', scrollToCapabilityHash);
+
+ return () => window.removeEventListener('hashchange',
scrollToCapabilityHash);
+ }, [isNarrowViewport]);
+
return (
<section className="features-next">
<div className="home-next-container">
@@ -399,6 +434,15 @@ export function FeaturesSection(): JSX.Element {
ref={containerRef}
style={isNarrowViewport ? undefined : { height:
`${CAPABILITIES.length * 100}vh` }}
>
+ {CAPABILITIES.map((capability, i) => (
+ <span
+ key={`${capability.hashId}-anchor`}
+ id={capability.hashId}
+ className="features-next__card-anchor"
+ style={isNarrowViewport ? undefined : { top: `${i
* 100}vh` }}
+ aria-hidden="true"
+ />
+ ))}
<div className="features-next__stage">
{CAPABILITIES.map((capability, i) => (
<CapabilityCard
diff --git a/src/components/home-next/sections/UseCasesSection.tsx
b/src/components/home-next/sections/UseCasesSection.tsx
index 167c771fcb6..97c1f193d85 100644
--- a/src/components/home-next/sections/UseCasesSection.tsx
+++ b/src/components/home-next/sections/UseCasesSection.tsx
@@ -41,7 +41,7 @@ const USE_CASES: UseCase[] = [
export function UseCasesSection(): JSX.Element {
return (
- <section className="use-cases-next"
aria-labelledby="use-cases-next-title">
+ <section id="use-cases" className="use-cases-next"
aria-labelledby="use-cases-next-title">
<div className="home-next-container">
<div className="use-cases-next__header">
<div className="use-cases-next__eyebrow">Use Cases</div>
diff --git a/src/pages/community-report/_reports/2026-06-29.mdx
b/src/pages/community-report/_reports/2026-06-29.mdx
index af9553c6d87..997b77267de 100644
--- a/src/pages/community-report/_reports/2026-06-29.mdx
+++ b/src/pages/community-report/_reports/2026-06-29.mdx
@@ -20,58 +20,32 @@ export const stats = [
export const report = {
"summary": {
- "lead": "This week Apache Doris merged 113 PRs with 42 contributors
active, with the community concentrating on real-time data warehousing and
kernel engineering while advancing the multi-modal lakehouse and cloud-native
compute-storage separation tracks. Core capabilities deepened around Catalog
SPI decoupling, scan execution optimization, inverted index evolution, and peer
routing with cache tiering, alongside reinforced security/governance and
observability—signaling a clear direc [...]
+ "lead": "This week the Doris community merged 113 PRs with 42
contributors, showing intense iteration around the twin tracks of real-time
data warehousing and kernel engineering. The capability footprint is steadily
expanding toward multi-modal lakehouse, cloud-native multi-tenancy, and
next-generation inverted indexing, with security, governance, and observability
hardening in parallel — signaling clear acceleration on real-time analytics and
lakehouse convergence.",
"highlights": [
{
- "title": "Catalog SPI decoupling and external data source expansion",
- "narrative": "FE connectors move to a loadable Catalog SPI, easing new
data-source onboarding and upgrades, while BE gains a unified File Scanner v2
for Parquet, CSV, JSON and similar external files. Paimon write support and
OIDC session credentials for Iceberg REST close the lakehouse read-write and
secure-access loop, making Doris easier",
+ "title": "Lakehouse catalog plugin-ization and write support",
+ "narrative": "Doris kicks off a Catalog SPI migration to decouple
built-in connectors from FE core into loadable plugins, adds native write
support for Apache Paimon tables, and lands the file scanner v2 reader stack
with native Parquet/CSV/JSON readers, projection, and predicate
pushdown—tightening the read-write loop for multi-modal lakehouse workloads.",
"prs": [
- {
- "num": 65185,
- "title": "[Tracking][Catalog] Catalog SPI migration — decouple
built-in connectors from FE core into loadable plugins",
- "url": "https://github.com/apache/doris/issues/65185"
- },
{
"num": 65086,
"title": "Support writing to Apache Paimon tables",
"url": "https://github.com/apache/doris/issues/65086"
},
+ {
+ "num": 65185,
+ "title": "[Tracking][Catalog] Catalog SPI migration — decouple
built-in connectors from FE core into loadable plugins",
+ "url": "https://github.com/apache/doris/issues/65185"
+ },
{
"num": 65046,
"title": "[feature](be) Add file scanner v2 readers ",
"url": "https://github.com/apache/doris/pull/65046"
- },
- {
- "num": 63068,
- "title": "[feature](fe) Support OIDC session credentials for
Iceberg REST catalog",
- "url": "https://github.com/apache/doris/pull/63068"
}
]
},
{
- "title": "Cloud-native compute-storage separation: peer routing and
cache tiering",
- "narrative": "Cross-compute-group peer read routing enables data
sharing across groups, while a new write-index-only cache config curbs IO
amplification under hot writes. Tenant-level colocation trims replica
redundancy in multi-tenant deployments, together pushing the
separation-of-storage-and-compute architecture toward higher elasticity and
finer resource control.",
- "prs": [
- {
- "num": 63818,
- "title": "[feat](cloud) cross compute group peer read routing with
peer cache I/O optimization",
- "url": "https://github.com/apache/doris/pull/63818"
- },
- {
- "num": 64995,
- "title": "[feature](cloud) Support file cache write index only",
- "url": "https://github.com/apache/doris/pull/64995"
- },
- {
- "num": 64167,
- "title": "[feat](colocate) support tenant-level colocation",
- "url": "https://github.com/apache/doris/pull/64167"
- }
- ]
- },
- {
- "title": "Scan and query execution: pruning, lazy read, and runtime
filters",
- "narrative": "Lazy reads for pruned complex-type subcolumns and
expression-based ZoneMap pruning cut IO across internal and Parquet scans.
Global runtime filters now publish through an adaptive tree, removing duplicate
broadcasts of large filters in big clusters, while dynamic table snapshot reads
keep extending real-time warehouse capabilities.",
+ "title": "Real-time DWH: query pushdown and IO pruning",
+ "narrative": "This week brings lazy reading on pruned complex columns,
expression-based ZoneMap pruning (comparisons, IN, IS NULL, starts_with) across
internal and Parquet scans, adaptive global runtime filter publishing to ease
coordinator fan-out, and ongoing work on multi-stage predicate lazy
materialization—sharper pruning and leaner IO for real-time queries.",
"prs": [
{
"num": 59263,
@@ -92,33 +66,33 @@ export const report = {
"num": 64891,
"title": "[enhancement](Multi-stage lm) Multi-Stage Predicate Lazy
Materialization",
"url": "https://github.com/apache/doris/pull/64891"
- },
- {
- "num": 64776,
- "title": " [feat](dynamic table) support table stream part 4:
support snapshot read",
- "url": "https://github.com/apache/doris/pull/64776"
}
]
},
{
- "title": "Inverted index evolution: Japanese tokenizer and SNII
format",
- "narrative": "A new Kuromoji morphological analyzer closes Doris's gap
on space-less Japanese text, while the SNII inverted-index storage format lands
as an alternative path for better compression and extensibility. Together they
strengthen full-text search and observability for multi-language corpora and
AI-agent workloads.",
+ "title": "Cloud-native multi-tenant compute and cache",
+ "narrative": "Cloud gains cross-compute-group peer read routing with
optimized peer cache IO, a new option to cache only index files during rowset
writes and compaction to protect hot data, and tenant-level colocation entering
review to cut replica redundancy for multi-tenant JOINs—together improving
isolation and cache efficiency in the cloud.",
"prs": [
{
- "num": 64667,
- "title": "[feature](inverted-index) Add Japanese (Kuromoji)
morphological analyzer",
- "url": "https://github.com/apache/doris/pull/64667"
+ "num": 63818,
+ "title": "[feat](cloud) cross compute group peer read routing with
peer cache I/O optimization",
+ "url": "https://github.com/apache/doris/pull/63818"
},
{
- "num": 64909,
- "title": "[feature](be) Add SNII inverted index storage format",
- "url": "https://github.com/apache/doris/pull/64909"
+ "num": 64995,
+ "title": "[feature](cloud) Support file cache write index only",
+ "url": "https://github.com/apache/doris/pull/64995"
+ },
+ {
+ "num": 64167,
+ "title": "[feat](colocate) support tenant-level colocation",
+ "url": "https://github.com/apache/doris/pull/64167"
}
]
},
{
- "title": "Security and governance hardening across FE and TDE",
- "narrative": "Intra-FE RPC now switches to HTTPS when TLS is enabled,
removing the plaintext fallback in hardened deployments. TDE gains Aliyun KMS
and Ranger KMS provider metadata, letting transparent encryption plug into
enterprise key management. The combined effect raises Doris's default security
posture for compliance-sensitive workloads.",
+ "title": "Security and governance hardening",
+ "narrative": "Intra-FE communication now upgrades to HTTPS when
enable_https is set, closing the plaintext gap in hardened deployments; TDE
adds Aliyun KMS and Ranger KMS as recognized root-key providers, with refreshed
KMS configuration documentation for cloud and Hadoop/Ranger endpoints—hardening
key management and transport encryption.",
"prs": [
{
"num": 60921,
@@ -131,6 +105,22 @@ export const report = {
"url": "https://github.com/apache/doris/pull/64561"
}
]
+ },
+ {
+ "title": "Next-gen inverted index and Japanese tokenization",
+ "narrative": "Doris adds a Japanese Kuromoji morphological analyzer to
the inverted index, fixing tokenization for space-less Japanese text so MATCH
queries work end-to-end, and integrates the SNII inverted index storage format
as a separate write/read path—advancing both multilingual search and index
storage efficiency.",
+ "prs": [
+ {
+ "num": 64667,
+ "title": "[feature](inverted-index) Add Japanese (Kuromoji)
morphological analyzer",
+ "url": "https://github.com/apache/doris/pull/64667"
+ },
+ {
+ "num": 64909,
+ "title": "[feature](be) Add SNII inverted index storage format",
+ "url": "https://github.com/apache/doris/pull/64909"
+ }
+ ]
}
],
"numbers": {
@@ -145,51 +135,217 @@ export const report = {
"scenarios": [
{
"name": "Multi-modal Lakehouse",
- "mergedNarrative": "The multi-modal lakehouse scenario stabilized
Iceberg/Hive/external-write paths. Iceberg v3 row-lineage columns are rejected
to avoid hidden conflicts; COUNT(*) pushdown tolerates missing snapshot summary
counters; LZ4 compression now ships to Iceberg/Hive Parquet/ORC writers; binary
columns are emitted with correct Arrow types; nested decimal precision
promotion is supported; external writers clean up",
- "merged": [],
- "inProgressNarrative": "Multi-modal Lakehouse work strengthens
external read/write paths: Paimon write P0, Iceberg position-deletes system
table, ORC format v2 reader, Parquet dict bounds checks, Arrow Flight
coordinator lifecycle, OSS/HTTP FS SPI normalization, MaxCompute
partition-by-name parsing, Iceberg REST OAuth re-auth on 401, S3 load complex
types for Parquet/ORC, and Hive-ORC column-name default —",
- "inProgress": []
+ "mergedNarrative": "Lakehouse gaps were closed: Iceberg v3
row-lineage hidden column collisions are rejected up front, COUNT(*) pushdown
tolerates missing snapshot counters, Parquet/ORC writers gain LZ4 support,
binary columns now emit proper Arrow types instead of utf8, and nested decimal
precision promotion is validated. External writes clean up the real target
file",
+ "merged": [
+ {
+ "num": 63825,
+ "title": "[fix](fe) Reject Iceberg v3 row lineage columns",
+ "url": "https://github.com/apache/doris/pull/63825"
+ },
+ {
+ "num": 64648,
+ "title": "[fix](iceberg) Fix NPE in COUNT(*) pushdown when
snapshot summary omits total-* counters",
+ "url": "https://github.com/apache/doris/pull/64648"
+ },
+ {
+ "num": 64678,
+ "title": "[fix](external-write) Delete the actual data file on
write failure to avoid orphan files",
+ "url": "https://github.com/apache/doris/pull/64678"
+ },
+ {
+ "num": 64723,
+ "title": "[fix](iceberg)Support LZ4 compression for iceberg/hive
Parquet/ORC writers.",
+ "url": "https://github.com/apache/doris/pull/64723"
+ }
+ ],
+ "inProgressNarrative": "Lakehouse work keeps broadening
Iceberg/Hive/Paimon/MaxCompute read-write and governance. The key addition of
OIDC user-session credential forwarding for Iceberg REST lets queries access
data under the real user identity, paired with OAuth 401 re-auth, Arrow Flight
coordinator lifetime fixes, the new ORC format v2 reader, and Paimon write P0
to steadily",
+ "inProgress": [
+ {
+ "num": 63068,
+ "title": "[feature](fe) Support OIDC session credentials for
Iceberg REST catalog",
+ "url": "https://github.com/apache/doris/pull/63068"
+ }
+ ]
},
{
"name": "Real-time Data Warehouse",
- "mergedNarrative": "Real-time data warehouse work targeted P0
stability and correctness. Group commit recovers from missing block queues and
load_id reuse that dropped rows; SimplifyAggGroupBy now verifies injectivity;
local shuffle eliminates the bucket-shuffle serial bottleneck and upgrades
parallelism; local runtime filter merge deadlocks, pipeline-task
wake-after-finalize crashes, and variable-length column overflows across
sorted-run",
- "merged": [],
- "inProgressNarrative": "Real-time DWH advances the optimizer, load
pipeline, and ops visibility: Nereids adds expression defaults, named
BloomFilter, regexp rewrite, FD-redundant group-by elimination, stats-driven
distinct/eager-agg pushdown, anti/outer-join conversion, bucket shuffle for set
ops; loads gain routine-load target swap, stream-load progress observability,
UTF-8 validation toggle, Arrow case-sensitive columns, label-aware abort,
binlog hidden keys,",
- "inProgress": []
+ "mergedNarrative": "Real-time DWH query and ingest paths were both
hardened: SimplifyAggGroupBy now checks injectivity to avoid wrong grouping,
group commit tracks pending requests and isolates reused prepared plans'
load_ids, and recursive CTE target blocks are dispatched per scan instance
instead of per backend. The BE fixed BIGINT_MIN div SIGFPE, null child",
+ "merged": [
+ {
+ "num": 63379,
+ "title": "[improvement](fe) Prune partition keys from partition
topn sort",
+ "url": "https://github.com/apache/doris/pull/63379"
+ },
+ {
+ "num": 63722,
+ "title": "[fix](group commit) fix can not get a block queue",
+ "url": "https://github.com/apache/doris/pull/63722"
+ },
+ {
+ "num": 64335,
+ "title": "[fix](simplify agg) SimplifyAggGroupBy should verify
injectivity",
+ "url": "https://github.com/apache/doris/pull/64335"
+ },
+ {
+ "num": 64362,
+ "title": "[fix](group commit) fix lost row when prepared stmt
reused plan shares one load_id",
+ "url": "https://github.com/apache/doris/pull/64362"
+ }
+ ],
+ "inProgressNarrative": "A highlight of real-time DWH work is the
snapshot-read slice of the dynamic table streaming series, a key milestone for
continuously refreshing tables; alongside it, MTMV refresh serialization,
routine-load target-table switching, last-schedule-time visibility, and
INSERT-INTO-SELECT progress through SHOW LOAD make ingestion and refresh far
more observable and reliable. Many newly",
+ "inProgress": [
+ {
+ "num": 64776,
+ "title": " [feat](dynamic table) support table stream part 4:
support snapshot read",
+ "url": "https://github.com/apache/doris/pull/64776"
+ }
+ ]
},
{
"name": "Compute-Storage Separation & Cloud-Native",
- "mergedNarrative": "Compute-storage separation and cloud-native
reliability advanced this week. Queries hitting E-230 now force a fresh version
cache; start.sh accepts multiple config files; version reads use snapshot
transactions to avoid write conflicts with update_table_version; S3FileWriter
now recovers from async submit failures; file-cache evict metrics are aligned
with the FileCacheType enum; Azure",
- "merged": [],
- "inProgressNarrative": "Compute-storage separation and cloud-native
work keeps hardening meta service, filesystem, and cache reliability and
observability: capability-gated MS_TOO_BUSY, warm-up job count bvar, recycler
S3 timeout fix, LRU restore speedup, file-cache skip-after-threshold,
post-alter tablet meta sync, label-aware transaction abort, Azure glob
pushdown, HDFS property migration, HTTP FS SPI scaffolding, segment id list,",
+ "mergedNarrative": "Compute-storage separation and cloud-native work
emphasized control and stability: retries on E-230 now drop the version-cache
TTL to fetch the freshest version, table_version reads inside transactions
switch to snapshot reads to remove self-conflicts, and bugs in S3 async
submission, file-cache queue metrics, Azure resource persistence (missing
clazz), and partition storage-policy",
+ "merged": [
+ {
+ "num": 63721,
+ "title": "[fix](fe) set cloud version_cache_ttl to 0 temporarily
if retry a query with -230",
+ "url": "https://github.com/apache/doris/pull/63721"
+ },
+ {
+ "num": 63924,
+ "title": "[opt](cloud) Support multiple config files in
start.sh",
+ "url": "https://github.com/apache/doris/pull/63924"
+ },
+ {
+ "num": 64647,
+ "title": "[fix](cloud) use snapshot read for table version to
avoid txn conflict",
+ "url": "https://github.com/apache/doris/pull/64647"
+ },
+ {
+ "num": 64779,
+ "title": "[fix](s3) handle S3 file writer async task submission
failures",
+ "url": "https://github.com/apache/doris/pull/64779"
+ },
+ {
+ "num": 64897,
+ "title": "[fix](be) Fix file cache queue evict size metrics",
+ "url": "https://github.com/apache/doris/pull/64897"
+ }
+ ],
+ "inProgressNarrative": "Compute-storage separation work this week
sharpens Meta Service, file cache, and tiered storage. Fixes for cloud recycler
S3 timeouts, proactive tablet meta sync after alter, and capability-gated
MS_TOO_BUSY errors improve cross-version stability and operability, while new
warm-up job metrics, threshold-based remote cache write cutoff, parallel LRU
restore, and TopN lazy-materialization",
"inProgress": []
},
{
"name": "Agent Observability",
- "mergedNarrative": "This scenario hardens observability across
Variant, inverted-index, and Delete paths. Variant compaction now distinguishes
empty keys from the root to prevent misrouting into sparse columns;
tokenization rejects invalid char_filter replacements; DELETE supports
generated-column partial updates; inverted-index predicates no longer crash on
null literals; and regression-side pinning plus bool-output normalization
reduce",
- "merged": [],
- "inProgressNarrative": "Agent Observability work is hardening legacy
index paths by blocking creation of inverted index V1 in FE, preventing the
small-file merge and packed-file path bypass that could amplify issues during
agent monitoring and export.",
+ "mergedNarrative": "Half-structured and indexing paths were hardened
this week: variant compaction now correctly distinguishes the root path from
empty keys instead of forcing them into sparse columns, FE tightens
inverted-index char_filter replacement validation, and the BE fixes a crash
from NULL literals in index predicates while properly handling generated
columns in",
+ "merged": [
+ {
+ "num": 64641,
+ "title": "[fix](variant) Preserve empty key during variant
compaction",
+ "url": "https://github.com/apache/doris/pull/64641"
+ },
+ {
+ "num": 64794,
+ "title": "[fix](fe) Reject invalid char filter replacement in
tokenize",
+ "url": "https://github.com/apache/doris/pull/64794"
+ },
+ {
+ "num": 64884,
+ "title": "[fix](fe) Handle generated columns in delete partial
update",
+ "url": "https://github.com/apache/doris/pull/64884"
+ },
+ {
+ "num": 65093,
+ "title": "[fix](test) pin variant defaults in check_before_quit",
+ "url": "https://github.com/apache/doris/pull/65093"
+ },
+ {
+ "num": 65138,
+ "title": "[fix](be) Fix null query crash in inverted index
predicates",
+ "url": "https://github.com/apache/doris/pull/65138"
+ }
+ ],
+ "inProgressNarrative": "To prevent tables from silently being
created with inverted index V1 when users replay historical DDL, the community
is gating V1 creation at the FE so index format stays intentional and storage
amplification from bypassing small-file merging and packed paths is avoided.",
"inProgress": []
},
{
"name": "Ecosystem Integration",
- "mergedNarrative": "Ecosystem-integration work reconciled
client-side protocol differences. The regression suite now skips
Arrow-incompatible map cast cases with null keys and asserts bitmaps via
bitmap_to_string so Arrow Flight SQL and JDBC return semantically consistent
results without spurious failures.",
- "merged": [],
- "inProgressNarrative": "Ecosystem Integration is restoring the
dbt-doris adapter dev loop by fixing long-broken test dependencies so
contributors can run adapter tests from a clean checkout (new this month).",
- "inProgress": []
+ "mergedNarrative": "External ecosystem paths are more robust: Arrow
Flight SQL now skips cases that intentionally yield null map keys, and bitmap
assertions compare via bitmap_to_string instead of raw bytes, working around
Arrow Map's lack of null-key support so JDBC and Arrow regression outputs stay
aligned.",
+ "merged": [
+ {
+ "num": 65182,
+ "title": "[test](regression) skip Arrow-incompatible complex
outputs",
+ "url": "https://github.com/apache/doris/pull/65182"
+ }
+ ],
+ "inProgressNarrative": "The dbt-doris adapter's broken test
dependencies that have blocked fresh-checkout development are being repaired by
re-aligning the dbt-tests-adapter source and filling missing packages, enabling
community contributors to iterate on the adapter again.",
+ "inProgress": [
+ {
+ "num": 64929,
+ "title": "[fix](dbt-doris) Fix broken test dependencies
preventing adapter development",
+ "url": "https://github.com/apache/doris/pull/64929",
+ "isNew": true
+ }
+ ]
},
{
"name": "Security & Governance",
- "mergedNarrative": "Security governance closed loopholes across
credentials, gateway, and REST APIs. Kafka routine load properties are now
masked in SHOW/metadata; the _stream_load_forward endpoint is gated by a new BE
config and requires auth to block SSRF; brpc disables an SSL BIO buffer to
avoid mTLS write issues on large responses; and",
- "merged": [],
- "inProgressNarrative": "Security & Governance tightens TLS and
supply-chain hygiene: enabling cert verification by default in the Go SDK,
pinning Python deps with known CVEs across doris-compose/dbt-doris/cost_model,
and normalizing FE-internal HTTP calls to https when enable_https is on (all
new this month).",
+ "mergedNarrative": "Security work narrowed the credential-exposure
surface: Kafka routine-load custom properties are now masked in SHOW and
information_schema to prevent SASL/SSL/AWS credential leaks,
_stream_load_forward is gated by a new BE config to block unauthenticated SSRF,
brpc TLS drops the extra BIO buffer to fix TLS write issues on large
meta-service responses,",
+ "merged": [
+ {
+ "num": 64786,
+ "title": "[fix](fe) Mask Kafka routine load sensitive
properties",
+ "url": "https://github.com/apache/doris/pull/64786"
+ },
+ {
+ "num": 64935,
+ "title": "[fix](security) Add auth and config gate for
_stream_load_forward endpoint",
+ "url": "https://github.com/apache/doris/pull/64935"
+ },
+ {
+ "num": 64962,
+ "title": "[fix](brpc) disable SSL BIO buffer ",
+ "url": "https://github.com/apache/doris/pull/64962"
+ },
+ {
+ "num": 65042,
+ "title": "[fix](auth) add auth check for manager node and query
qerror REST APIs",
+ "url": "https://github.com/apache/doris/pull/65042"
+ },
+ {
+ "num": 65149,
+ "title": "[regression-test](auth) Scope export cancel by label",
+ "url": "https://github.com/apache/doris/pull/65149"
+ }
+ ],
+ "inProgressNarrative": "Security and governance work this week
tightens transport encryption and dependency hygiene: enabling TLS verification
by default in the Go SDK, capping Python packages with known CVEs in
doris-compose, dbt-doris, and cost_model, and normalizing internal FE HTTP URLs
to https when enable_https is on, closing plaintext and insecure-component gaps
across",
"inProgress": []
},
{
"name": "Kernel & Engineering",
- "mergedNarrative": "Kernel and engineering foundations received
broad hardening. Key fixes address bvar SIGSEGV under high EPS, NaN propagation
in PERCENTILE, SIGFPE on BIGINT_MIN/-1, sliced FixedSizeBinary reads, redundant
partition keys in PartitionTopN sort, AuditLoader concurrent assembly, and
AsyncIO workers without ThreadContext. Refactors moved array functions to
ColumnArrayView and split const vs. mutable",
- "merged": [],
- "inProgressNarrative": "Kernel & Engineering spans core correctness
and infra: the key change is adaptive random-bucket load routing for cloud
mode, alongside bitmap/Prometheus/TabletStatMgr/Broker-Load fixes, stable
`now()` folding, DECIMAL-returning round functions, rollback handling, Arrow
buffer validation, ORC SerDe decoding, UDF rollback, SetPreAggStatus stack
refactor, bucketed hash aggregate plan refactor, and many regression/Docker/CI
stabilizations",
+ "mergedNarrative": "Kernel work swept up crashes and correctness
traps: SIGSEGV in bvar take_sample under high EPS, missing ThreadContext on
AsyncIO workers, missing storage-policy pre-checks, SIGFPE on BIGINT_MIN DIV
-1, escaping block-serialization exceptions, std::exception leaks in the
pipeline scheduler, workload-group smart-pointer cycles, and unchecked task
executor scan handles. FE now rejects complex",
+ "merged": [
+ {
+ "num": 62842,
+ "title": "[enhancement](limitreach) FE receives many limit reach
error messages and make very confused",
+ "url": "https://github.com/apache/doris/pull/62842"
+ },
+ {
+ "num": 63472,
+ "title": "[fix](be) Skip NaN values in
PERCENTILE/PERCENTILE_ARRAY aggregations",
+ "url": "https://github.com/apache/doris/pull/63472"
+ },
+ {
+ "num": 63621,
+ "title": "[fix](fe) Reject complex types (ARRAY/MAP/STRUCT) as
MAP key types",
+ "url": "https://github.com/apache/doris/pull/63621"
+ },
+ {
+ "num": 64040,
+ "title": "[fix](be) Fix SIGSEGV in bvar::take_sample caused by
AgentCombiner/TLS Agent lifetime race under high EPS",
+ "url": "https://github.com/apache/doris/pull/64040"
+ }
+ ],
+ "inProgressNarrative": "Kernel work this week balances stability,
performance, and developer experience. The highlighted cloud-mode adaptive
routing for random bucket load assigns candidate buckets on the FE and routes
locally on the BE, removing sender-side reshuffle cost; alongside it, schema
change, txn rollback, Arrow/Parquet/ORC decoding, and expression evaluation
keep getting hardened, while",
"inProgress": [
{
"num": 62661,
diff --git a/src/scss/custom.scss b/src/scss/custom.scss
index 56951afe636..a0e90ac9bef 100644
--- a/src/scss/custom.scss
+++ b/src/scss/custom.scss
@@ -167,3 +167,11 @@ body {
// Centering the Kapa modal itself is done by injecting CSS into its shadow
// root from static/js/custom-script.js, since light-DOM rules can't pierce it.
+
+@media (min-width: 997px) {
+ .docs-wrapper .theme-back-to-top-button {
+ right: calc(386px + 2rem);
+ bottom: 1.5rem;
+ z-index: 259;
+ }
+}
diff --git a/static/images/doris-ecosystem.jpg
b/static/images/doris-ecosystem.jpg
new file mode 100644
index 00000000000..1ca8ad05dd5
Binary files /dev/null and b/static/images/doris-ecosystem.jpg differ
diff --git
a/versioned_docs/version-4.x/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md
b/versioned_docs/version-4.x/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md
index c6f03d1fb2e..cccb068748d 100644
---
a/versioned_docs/version-4.x/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md
+++
b/versioned_docs/version-4.x/install/deploy-on-kubernetes/doris-operator/doris-operator-overview.md
@@ -8,7 +8,7 @@
}
---
-Doris Operator is the official Kubernetes Operator for Apache Doris. It
combines Doris operational experience with Kubernetes-native resource
management to provide a simpler, more efficient, and easier-to-use way to
deploy and operate Doris on Kubernetes.
+[Doris Operator](https://github.com/apache/doris-operator) is the official
Kubernetes Operator for Apache Doris. It combines Doris operational experience
with Kubernetes-native resource management to provide a simpler, more
efficient, and easier-to-use way to deploy and operate Doris on Kubernetes.
Doris Operator extends the Kubernetes API through CustomResourceDefinitions
(CRDs). After you submit a Doris custom resource, the Operator creates and
maintains the corresponding Kubernetes resources such as `StatefulSet`,
`Service`, and `PersistentVolumeClaim`, and in some scenarios performs Doris
metadata-level actions such as node registration, decommissioning, or cleanup.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]