This is an automated email from the ASF dual-hosted git repository.

wu-sheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking-website.git


The following commit(s) were added to refs/heads/master by this push:
     new 5ff2c76661f feat(home): 3D infrastructure map demo + /#demo deep-link; 
release Horizon UI 0.6.0 (#851)
5ff2c76661f is described below

commit 5ff2c76661fd0a4d9d1fb48aee44ae5d67f66e7f
Author: 吴晟 Wu Sheng <[email protected]>
AuthorDate: Thu Jun 4 09:34:07 2026 +0800

    feat(home): 3D infrastructure map demo + /#demo deep-link; release Horizon 
UI 0.6.0 (#851)
---
 assets/scss/_custom_home.scss                      | 26 ++++++++
 content/_index.html                                |  2 +-
 .../index.md                                       | 75 ++++++++++++++++++++++
 data/docs.yml                                      |  5 +-
 data/releases.yml                                  | 30 +++++++--
 themes/docsy/layouts/partials/scripts-home.html    | 29 ++++++++-
 6 files changed, 156 insertions(+), 11 deletions(-)

diff --git a/assets/scss/_custom_home.scss b/assets/scss/_custom_home.scss
index a0156056844..0f03569698e 100644
--- a/assets/scss/_custom_home.scss
+++ b/assets/scss/_custom_home.scss
@@ -402,15 +402,41 @@ $brand-grad: linear-gradient(180deg, #479EEB 0%, #3788D0 
100%);
 
   // demo dropdown
   .demo-wrapper {
+    // Clear the fixed ~64px navbar when the page jumps to this anchor via 
/#demo,
+    // so the opened box lands below the navbar instead of tucking under it.
+    scroll-margin-top: 96px;
+
     .dropdown-item {
       color: #888; font-size: 14px; padding: .3rem 1.2rem;
       &:nth-last-child(-n + 2) { font-size: 15px; }
       a { font-weight: 600; display: block; color: $brand; }
     }
     .icon-arrow-up-right { font-size: 10px; position: relative; top: -3px; 
color: $brand; }
+
+    // Deep-link highlight: when a visitor lands on /#demo the box is opened
+    // (see scripts-home.html) and the whole drop box is highlighted.
+    &.demo-attention {
+      .dropdown-toggle { box-shadow: 0 0 0 3px rgba(55, 136, 208, .45); }
+      .dropdown-menu {
+        border: 1px solid $brand;
+        box-shadow: 0 0 0 4px rgba(55, 136, 208, .45),
+                    0 16px 40px -18px rgba(17, 24, 39, .35);
+        animation: demoAttentionPulse 1.3s ease-out 3;
+      }
+    }
   }
 }
 
+@keyframes demoAttentionPulse {
+  0%   { box-shadow: 0 0 0 0 rgba(55, 136, 208, .60), 0 16px 40px -18px 
rgba(17, 24, 39, .35); }
+  70%  { box-shadow: 0 0 0 14px rgba(55, 136, 208, 0), 0 16px 40px -18px 
rgba(17, 24, 39, .35); }
+  100% { box-shadow: 0 0 0 4px rgba(55, 136, 208, .45), 0 16px 40px -18px 
rgba(17, 24, 39, .35); }
+}
+
+@media (prefers-reduced-motion: reduce) {
+  .demo-wrapper.demo-attention .dropdown-menu { animation: none; }
+}
+
 // ---------- responsive ----------
 @media (max-width: 992px) {
   .td-home {
diff --git a/content/_index.html b/content/_index.html
index e6f8e3a6ded..f4e709dc22e 100644
--- a/content/_index.html
+++ b/content/_index.html
@@ -36,7 +36,7 @@ linkTitle = "Apache SkyWalking"
           <a href="/docs/#qs-showcase">
             <button class="sky-btn primary">Quick start <span class="hint">5 
min</span></button>
           </a>
-          <span class="dropdown demo-wrapper">
+          <span class="dropdown demo-wrapper" id="demo">
             <button class="sky-btn dropdown-toggle" type="button" 
id="dropdownMenuButton" data-toggle="dropdown">
               Live demo
             </button>
diff --git a/content/events/release-apache-skywalking-horizon-ui-0-6-0/index.md 
b/content/events/release-apache-skywalking-horizon-ui-0-6-0/index.md
new file mode 100644
index 00000000000..bf864d7ca37
--- /dev/null
+++ b/content/events/release-apache-skywalking-horizon-ui-0-6-0/index.md
@@ -0,0 +1,75 @@
+---
+title: Release Apache SkyWalking Horizon UI 0.6.0
+date: 2026-06-04
+author: SkyWalking Team
+description: "Release Apache SkyWalking Horizon UI 0.6.0."
+---
+
+SkyWalking Horizon UI 0.6.0 is released. Go to [downloads](/downloads) page to 
find release tars.
+
+This release is the production-readiness pass for Horizon UI: every page now 
renders correctly across the eight supported languages on non-UTC OAP 
deployments, with deliberate caps and validation on the load surfaces operators 
reach.
+
+##### Eight-locale internationalization
+
+* Eight first-class UI languages — English (source) plus zh-CN, ja, ko, es, 
pt, de, fr — selectable from the top-bar locale chip on every page (including 
the pre-auth login), persisted per device. Every routed page and shared 
sub-component renders through `vue-i18n`; missing leaves fall back to English 
so partial catalogs degrade invisibly.
+* All 42 layer dashboards and both overview dashboards carry per-locale 
overlay catalogs (~2,300 translatable leaves per non-English locale). The BFF 
picks the locale from the request's `X-Horizon-Locale` header, merges the 
overlay onto the source, and serves the localised template — translation 
resolves once on the BFF, never on every chart mount.
+* A new admin surface (Dashboard setup → Translations) edits the per-locale 
overlays through the live preview: pick a language, click any widget, type the 
translation. Per-locale status chips show which dashboards have drafts, are 
synced, diverge from disk, or are empty.
+* Product, project and protocol names (SkyWalking, Kubernetes, OAP, MQE, eBPF, 
Zipkin, OpenTelemetry, Istio, GraphQL…), OAP scope enums, layer keys, MQE 
function names, env vars, HTTP status codes and runtimes stay verbatim in every 
locale; OAP-supplied data (service names, alarm rule names, span operations, 
log messages) is never translated.
+* The `i18n:validate` gate is stricter: every source template must have a 
sibling overlay per advertised locale, and empty `{}` overlays are now a 
finding.
+
+##### 3D Infrastructure Map
+
+* A standalone bird's-eye view of the deployment at `/3d/map`: services render 
as cubes on stacked tier-planes (apps · service mesh · middleware · infra), 
each tier subdivided into per-layer zones. Drag to rotate, scroll to zoom, 
arrow keys / WASD to pan; click a cube for its detail card and a link into that 
layer's dashboard.
+* Live data windows: the map auto-refreshes every minute — per-cube traffic 
rolls up the last 2h of metrics and alarmed services light up from the last 20m 
of alarms. The deployment structure is read live from OAP (not a bundled 
snapshot), so the map is correct on any deployment.
+* **Beacon mode** dims every healthy cube to a wireframe ghost so firing 
services jump out during an incident. **Logic groups** cluster related layers 
into one labelled block (a Self-Observability group ships by default). Call 
relationships animate directional particles so traffic direction reads at a 
glance.
+* Tier order, per-layer plane mapping, cube colors, the traffic MQE per layer 
and the logic groups are all driven by a structured admin page at 
`/admin/3d-map`, published to OAP and shared across the deployment the same way 
as dashboards (local draft → **Check diff & push**). The per-layer service map 
gains a **View in 3D** link focused on just that layer.
+
+##### Smartscape service hierarchy
+
+* OAP 10's cross-layer service hierarchy is now reachable from any layer's 
service map — a logical service projected across observation layers (GENERAL 
agent ↔ MESH sidecar ↔ MESH_DP data-plane ↔ K8S_SERVICE pod) is one click away 
on every selected hex.
+* Picking a node lazily probes `getServiceHierarchy`; services with 
cross-layer peers get a chevron-stack chip. Clicking it opens a 
focus-and-context overlay with peers fanned by layer level; a two-step peer 
open arms then opens the destination layer in a new tab, pre-selecting the peer 
service.
+* Every per-layer page validates the URL-hydrated `?service=<id>` against the 
layer's real service roster (served from the BFF's 60s catalog cache), so deep 
links to low-traffic services resolve instead of silently swapping services or 
hanging on "Resolving service…".
+
+##### On-demand pod logs & BanyanDB cold-stage
+
+* A new per-layer **Pod Logs** tab live-tails a Kubernetes pod's container 
logs, pulled on demand through OAP and never persisted: pick a pod and 
container, choose a trailing window (30s–30m) and refresh interval (2s–30s), 
with Include / Exclude keyword filtering forwarded to OAP. Enabled on the 
Kubernetes-deployed layers (`K8S_SERVICE`, `MESH`, `MESH_DP`).
+* A topbar **Cold** pill (BanyanDB only) switches every page to read from the 
cold lifecycle stage — it replaces the read, not unions it. A cold-trap banner 
warns when the pill is on but the time range sits inside the hot+warm window. 
Trace lookup from a log row now carries the row's timestamp so a trace living 
in cold resolves from a cold-era log row.
+
+##### Dashboards, templates & authoring
+
+* The Layer dashboards and Overview templates admin pages share one editing 
model: your work-in-progress lives in your browser ("Save (local)" never 
touches the server), and the live shared version is whatever OAP serves. A 
**Reset to ▾** control loads Bundled or Remote into the editor; a **Preview ▾** 
control opens the real page rendering Local / Bundled / Remote; **Check diff & 
push** publishes with a side-by-side diff, enabled only when the local draft 
actually differs from remote.
+* "+ New dashboard" writes a local draft; **Delete = soft-disable** (OAP has 
no hard delete). The Overview templates editor is rebuilt as a layer-style 
12-column drag-to-reorder canvas that mirrors the live grid; the Layer 
dashboards picker is a single filterable dropdown with alias + key + sync 
status and a live menu preview.
+* A new **`table` widget** for label-dimensioned metrics; sync-status banners 
now count source rows only (per-locale translation rows no longer inflate the 
`remote-only` / `diverged` counts).
+
+##### Time picker drives every page
+
+* The global time picker now drives layer dashboards, overview widgets 
(Services Dashboard), landing and topology — previously hardcoded to the last 
60 minutes. Custom range seeds from the last applied range on reopen; the 
Active alarms widget title shows the actual window. Locale-bleed fixes on the 
alarms custom-range stamp and the log date column (`5月08日` → uniform `MM-DD`).
+
+##### Wire-correctness on non-UTC OAP
+
+* Every BFF query route now spells `Duration.start` / `end` in the OAP 
server's timezone (probed once per minute, cached). Previously only the alarms 
route did this; dashboards / landing / topology / endpoint / instance / eBPF / 
traces / logs all emitted UTC, silently shifting every query on non-UTC 
installs by the server's offset.
+* Traces and logs now query at SECOND precision (records, not metric buckets) 
so a just-finished trace falls inside the window instead of being rounded off 
the MINUTE boundary.
+
+##### Performance hardening
+
+* Per-layer landing batches no longer 5xx on wide layers — requests are 
chunked at 6 services per round-trip and fired in parallel instead of one 
GraphQL with up to 250 aliased fragments tripping OAP's complexity ceiling.
+* Trace waterfalls open fast on huge traces (rows render lazily via 
`content-visibility`; a 5000-span trace no longer freezes the main thread). 
Backgrounded tabs stop polling and resume with one immediate tick on return.
+
+##### RBAC & input-validation hardening
+
+* `/api/health` no longer leaks the active session count to unauthenticated 
callers — the public liveness probe returns only status + version.
+* `pageSize` is capped server-side on every trace (200) / log (100) route, 
defending the OAP storage `LIMIT` at the BFF boundary. Profiling task bodies 
(async-profiler, pprof, eBPF fixed-task, network) are sanitized and bounded — 
duration caps, target/event caps, payload clamps — closing a DoS vector for 
users with `profile:enable`.
+
+##### Alerting rules & live debugger
+
+* The **Operate › Alerting rules** *Currently watching* list now aggregates 
entities across the whole cluster and tags each row with the OAP node 
evaluating it. Clicking a watched entity opens a running-context popup: current 
state (`FIRING` / `SILENCED_FIRING` / `RECOVERY_OBSERVATION`), window size, 
silence/recovery countdowns, last-alarm time, and the per-metric snapshot 
rendered as a sparkline so you can see exactly why a rule is (or isn't) firing.
+* Live debugger fixes: `?historyId=…` deep-links no longer render blank (TDZ 
ReferenceError in `loadHistorical`); captured records are no longer wiped on 
stop; tab buttons route to the correct `/operate/live-debug/<tab>` path; node 
cards keep a stable order; empty captures show an explicit placeholder.
+
+##### Smaller touches & reliability
+
+* DSL / OAL catalog headers spell out the language name (`Metrics Analysis 
Language - OpenTelemetry Rules`, `Log Analysis Language`, `Observability 
Analysis Language`); the Layer dashboards / Overview editors now open REMOTE on 
diverged rows so you edit what users actually see.
+* The four admin "Check diff & push" diff modals no longer log a Monaco 
`resetSchema` console error. Inter + JetBrains Mono are now self-hosted (no 
Google Fonts CDN), so air-gapped deployments render the intended typography; 
one six-step typescale now spans every admin page.
+* The main sidebar folds to a narrow rail; overview dashboards appear in the 
sidebar only when their layers are reporting services; root `/` cascades 
through a sensible chain so the user never sees a blank page.
+* When the BFF is unreachable the UI shows a clear "Cannot reach the server" 
message instead of "body stream already read". A server-global service-by-layer 
catalog singleton (60s TTL + single-flight) caps OAP to one fan-out per minute 
regardless of how many routes poll. Aligned with upstream 
[skywalking#13884](https://github.com/apache/skywalking/pull/13884) — Horizon 
now sends `id = <envelope name>` on `POST /ui-management/templates`, working 
against both current and legacy OAP.
+
+Full release notes are 
[here](https://github.com/apache/skywalking-horizon-ui/releases/tag/v0.6.0).
diff --git a/data/docs.yml b/data/docs.yml
index 49530c96323..cf220f41512 100644
--- a/data/docs.yml
+++ b/data/docs.yml
@@ -94,7 +94,10 @@
           link: /docs/skywalking-horizon-ui/next/readme/
         - version: Latest
           link: /docs/skywalking-horizon-ui/latest/readme/
-          commitId: 6b8ee50e5d8b7c61699084b32247195c0d5bbea0
+          commitId: fc6d9d5b5233dc424dc878444f4459bd3a31edb0
+        - version: v0.6.0
+          link: /docs/skywalking-horizon-ui/v0.6.0/readme/
+          commitId: fc6d9d5b5233dc424dc878444f4459bd3a31edb0
         - version: v0.5.0
           link: /docs/skywalking-horizon-ui/v0.5.0/readme/
           commitId: 6b8ee50e5d8b7c61699084b32247195c0d5bbea0
diff --git a/data/releases.yml b/data/releases.yml
index cc90e422e65..1b8d93ed880 100644
--- a/data/releases.yml
+++ b/data/releases.yml
@@ -259,25 +259,43 @@
       icon: skywalking
       description: Apache SkyWalking next-generation UI (Horizon), natively 
supporting SkyWalking since v11, and partially for v10.
       source:
+        - version: v0.6.0
+          date: Jun. 4th, 2026
+          downloadLink:
+            - name: src
+              link: 
https://www.apache.org/dyn/closer.cgi/skywalking/horizon-ui/0.6.0/apache-skywalking-horizon-ui-0.6.0-src.tar.gz
+            - name: asc
+              link: 
https://downloads.apache.org/skywalking/horizon-ui/0.6.0/apache-skywalking-horizon-ui-0.6.0-src.tar.gz.asc
+            - name: sha512
+              link: 
https://downloads.apache.org/skywalking/horizon-ui/0.6.0/apache-skywalking-horizon-ui-0.6.0-src.tar.gz.sha512
         - version: v0.5.0
           date: May 24th, 2026
           downloadLink:
             - name: src
-              link: 
https://www.apache.org/dyn/closer.cgi/skywalking/horizon-ui/0.5.0/apache-skywalking-horizon-ui-0.5.0-src.tar.gz
+              link: 
https://archive.apache.org/dist/skywalking/horizon-ui/0.5.0/apache-skywalking-horizon-ui-0.5.0-src.tar.gz
             - name: asc
-              link: 
https://downloads.apache.org/skywalking/horizon-ui/0.5.0/apache-skywalking-horizon-ui-0.5.0-src.tar.gz.asc
+              link: 
https://archive.apache.org/dist/skywalking/horizon-ui/0.5.0/apache-skywalking-horizon-ui-0.5.0-src.tar.gz.asc
             - name: sha512
-              link: 
https://downloads.apache.org/skywalking/horizon-ui/0.5.0/apache-skywalking-horizon-ui-0.5.0-src.tar.gz.sha512
+              link: 
https://archive.apache.org/dist/skywalking/horizon-ui/0.5.0/apache-skywalking-horizon-ui-0.5.0-src.tar.gz.sha512
       distribution:
+        - version: v0.6.0
+          date: Jun. 4th, 2026
+          downloadLink:
+            - name: bin
+              link: 
https://www.apache.org/dyn/closer.cgi/skywalking/horizon-ui/0.6.0/apache-skywalking-horizon-ui-0.6.0-bin.tar.gz
+            - name: asc
+              link: 
https://downloads.apache.org/skywalking/horizon-ui/0.6.0/apache-skywalking-horizon-ui-0.6.0-bin.tar.gz.asc
+            - name: sha512
+              link: 
https://downloads.apache.org/skywalking/horizon-ui/0.6.0/apache-skywalking-horizon-ui-0.6.0-bin.tar.gz.sha512
         - version: v0.5.0
           date: May 24th, 2026
           downloadLink:
             - name: bin
-              link: 
https://www.apache.org/dyn/closer.cgi/skywalking/horizon-ui/0.5.0/apache-skywalking-horizon-ui-0.5.0-bin.tar.gz
+              link: 
https://archive.apache.org/dist/skywalking/horizon-ui/0.5.0/apache-skywalking-horizon-ui-0.5.0-bin.tar.gz
             - name: asc
-              link: 
https://downloads.apache.org/skywalking/horizon-ui/0.5.0/apache-skywalking-horizon-ui-0.5.0-bin.tar.gz.asc
+              link: 
https://archive.apache.org/dist/skywalking/horizon-ui/0.5.0/apache-skywalking-horizon-ui-0.5.0-bin.tar.gz.asc
             - name: sha512
-              link: 
https://downloads.apache.org/skywalking/horizon-ui/0.5.0/apache-skywalking-horizon-ui-0.5.0-bin.tar.gz.sha512
+              link: 
https://archive.apache.org/dist/skywalking/horizon-ui/0.5.0/apache-skywalking-horizon-ui-0.5.0-bin.tar.gz.sha512
     - name: Grafana Plugins
       icon: skywalking
       description: SkyWalking Grafana Plugins provide extensions to visualize 
topology on Grafana.
diff --git a/themes/docsy/layouts/partials/scripts-home.html 
b/themes/docsy/layouts/partials/scripts-home.html
index 8b528563160..793372680cc 100644
--- a/themes/docsy/layouts/partials/scripts-home.html
+++ b/themes/docsy/layouts/partials/scripts-home.html
@@ -10,9 +10,32 @@
     });
   }
 
+  // Visitors arriving via skywalking.apache.org/#demo should land with the
+  // Live demo box dropped open, highlighted, and scrolled clear of the fixed
+  // navbar. We own the scroll instead of leaving it to the native #demo jump:
+  // on a reload the browser's scroll restoration races and overrides that
+  // jump (it works on a fresh link-navigation but lands wrong on refresh), so
+  // we disable restoration for this case and position the box ourselves.
+  function focusDemoBox(scrollNow) {
+    var $wrapper = $('.demo-wrapper');
+    if (!$wrapper.length) return;
+    $wrapper.find('.dropdown-toggle').dropdown('show');
+    $wrapper.addClass('demo-attention');
+    // scrollIntoView honours the wrapper's CSS scroll-margin-top (clears nav).
+    var toBox = function () { $wrapper[0].scrollIntoView({ block: 'start' }); 
};
+    if (scrollNow) { toBox(); return; }
+    if ('scrollRestoration' in history) history.scrollRestoration = 'manual';
+    if (document.readyState === 'complete') toBox();
+    else $(window).on('load', toBox);
+  }
+
   function openDemoDropdown() {
-    if (location.hash === '#demo') {
-      $('.btn-demo').trigger('click')
-    }
+    if (location.hash === '#demo') focusDemoBox(false);
   }
+
+  // Honour the deep link on first load and on in-page hash changes; on a hash
+  // change the layout is already settled, so scroll immediately.
+  $(window).on('hashchange', function () {
+    if (location.hash === '#demo') focusDemoBox(true);
+  });
 </script>

Reply via email to