diff --git a/_data/perf.toml b/_data/perf.toml
new file mode 100644
index 00000000..e760e81d
--- /dev/null
+++ b/_data/perf.toml
@@ -0,0 +1,28 @@
+# Example of a homepage performance card.
+# Both `title` and `description` can contain markdown for styles, but not links.
+# [[dashboards]]
+# title = "GETs/SETs on `9.0.0`"
+# description = "Performance dashboard of GETs and SETs on the Valkey 9.0.0 release. Updated on Oct 21, 2025."
+# link = "https://perf-dashboard.valkey.io/public-dashboards/3e45bf8ded3043edaa941331cd1a94e2"
+
+# Order in this file indicates rendering order.
+
+[[dashboards]]
+title = "Valkey Performance Dashboards"
+description = "Valkey Performance Dashboards provide a consolidated view of throughput and memory efficiency trends across versions, helping teams validate improvements and identify regressions."
+link = "/performance/"
+
+# Performance dashboard sections for /performance page
+# Order in this file indicates rendering order.
+
+[[sections]]
+title = "Throughput Across Versions"
+iframe_url = "https://perf-dashboard.valkey.io/public-dashboards/38ad683dbd06456c829b547d97e2b7da"
+description = "This dashboard visualizes throughput trends across Valkey versions. It helps compare key releases side by side, highlight performance gains from new features. Read more about [Unlocking 1 Million RPS in Valkey](/blog/unlock-one-million-rps/)."
+methodology = "These metrics are generated using the [valkey-perf-benchmark](https://github.com/valkey-io/valkey-perf-benchmark) tool an AWS `c8g.metal.24xl` instance, running a matrix of configurations that vary pipelining (1, 10), I/O threading (1, 9), and with a data size of 512 bytes. To further stabilize results, we apply IRQ tuning by pinning network interrupts away from CPUs dedicated to the server process, and we isolate the server and benchmark client on separate NUMA nodes to remove L3 cache contention."
+
+[[sections]]
+title = "Memory Overhead Across Versions"
+iframe_url = "https://perf-dashboard.valkey.io/public-dashboards/0501007755004ae098dcc27d06bcda6a"
+description = "This dashboard visualizes Memory Efficiency trends across Valkey versions. It helps compare releases side by side, highlight Memory Efficiency gains from new features. Discover how [our new hash table design](/blog/new-hash-table/) reduces memory overhead."
+methodology = "These benchmarks are generated by starting an empty instance of Valkey for each test, measuring memory usage, then adding 3 million string items of a certain data size, then measuring Valkey memory usage again. We take the increase in memory use, divide by the number of items, and subtract the size of the user data (key and value) to get the extra overhead bytes Valkey uses to track and organize the data. For this graph, we tested every value size from 8B to 128B inclusive, then averaged the numbers for each range in this chart."
\ No newline at end of file
diff --git a/content/performance.md b/content/performance.md
new file mode 100644
index 00000000..d039211b
--- /dev/null
+++ b/content/performance.md
@@ -0,0 +1,6 @@
+---
+title: Valkey Performance Dashboards
+template: performance.html
+---
+
+Valkey Performance Dashboards provide a consolidated view of throughput and memory efficiency trends across versions, helping teams validate improvements and identify regressions quickly.
diff --git a/sass/_valkey.scss b/sass/_valkey.scss
index 8bc0c1d1..1b706148 100644
--- a/sass/_valkey.scss
+++ b/sass/_valkey.scss
@@ -769,7 +769,7 @@ p {
}
}
- .col_3 {
+ .col-3 {
@include respond-min(768px) {
flex: 1 1 25%;
}
@@ -1853,7 +1853,7 @@ html.banner-hidden .banner {
.inner-card {
background: white;
padding: 3rem;
- border-radius: 20px;
+ border-radius: 10px;
margin: 0 0 3rem;
h4 {
@@ -2046,12 +2046,17 @@ blockquote {
}
// Homepage Blog Cards with Featured Images
+.homepage-performance-section,
.homepage-blog-section {
display: flex;
flex-direction: column;
gap: 2rem;
}
+.homepage-performance-section {
+ margin-bottom: 3rem;
+}
+.homepage-performance-card,
.homepage-blog-card {
background: #fff;
border-radius: 10px;
@@ -2078,6 +2083,7 @@ blockquote {
border-top-right-radius: 10px;
}
+.homepage-performance-card-content,
.homepage-blog-card-content {
padding: 1.5rem;
flex: 1;
@@ -2085,6 +2091,10 @@ blockquote {
flex-direction: column;
}
+.homepage-performance-card h4 p {
+ margin: none;
+}
+.homepage-performance-card h4,
.homepage-blog-card-title {
margin: 0 0 1rem 0;
font-size: 1.6rem;
@@ -2101,7 +2111,7 @@ blockquote {
color: #667eea;
}
}
-
+.homepage-performance-card h4 + p,
.homepage-blog-card-description {
margin: 0 0 1.5rem 0;
font-size: 1.4rem;
@@ -2113,7 +2123,7 @@ blockquote {
overflow: hidden;
flex: 1;
}
-
+.homepage-performance-card .view-dashboard,
.homepage-blog-card-readmore {
display: inline-flex;
align-items: center;
@@ -2130,7 +2140,7 @@ blockquote {
transition: all 0.2s ease;
background: #fff;
}
-
+.homepage-performance-card .view-dashboard:hover,
.homepage-blog-card-readmore:hover {
background: #667eea;
color: #fff;
diff --git a/templates/index.html b/templates/index.html
index 9a7b6e29..e0972bc2 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -17,79 +17,95 @@
{{ heading }}
-
- {% set release_section = get_section(path="download/releases/_index.md") %}
- {% set releases = release_section.pages | reverse %}
-
- {% set_global active_releases = [] %}
- {% for release in releases %}
- {% if release.extra.tag is not matching(".*-.*") %}
- {% set_global active_releases = active_releases | concat(with=release) %}
- {% endif %}
- {% endfor %}
-
- {% set most_recent_release_page = active_releases | slice(end= 1) %}
- {% set release_date = most_recent_release_page[0].date %}
- {% set release = most_recent_release_page[0].extra %}
-
- {% set split_ver = release.tag | split(pat=".")%}
- {% set_global major = split_ver | nth(n= 0) %}
-
-
Version {{major}}.x.x
-
- {% include "includes/release.html" %}
-
-
-
Latest supported version of past releases
-
-
- {% for older_release in active_releases %}
- {% set older_split_ver = older_release.extra.tag | split(pat=".")%}
- {% set older_major = older_split_ver | nth(n= 0) %}
- {% if older_major != major %}
- {% set_global major = older_major %}
- {% set release = older_release.extra %}
-
Version {{major}}.x.x
- {% include "includes/release.html" %}
+
+ {% set release_section = get_section(path="download/releases/_index.md") %}
+ {% set releases = release_section.pages | reverse %}
+
+ {% set_global active_releases = [] %}
+ {% for release in releases %}
+ {% if release.extra.tag is not matching(".*-.*") %}
+ {% set_global active_releases = active_releases | concat(with=release) %}
{% endif %}
{% endfor %}
-
-
-
-
-
Latest From Our Blog
-
- {% set blog_post_section = get_section(path="blog/_index.md") %}
- {% set blog_posts = blog_post_section.pages | slice(end=2) %}
- {% for post in blog_posts %}
-
-
-
-
{{ post.description }}
-
Read More
+
+ {% set most_recent_release_page = active_releases | slice(end= 1) %}
+ {% set release_date = most_recent_release_page[0].date %}
+ {% set release = most_recent_release_page[0].extra %}
+
+ {% set split_ver = release.tag | split(pat=".")%}
+ {% set_global major = split_ver | nth(n= 0) %}
+
+
Version {{major}}.x.x
+
+ {% include "includes/release.html" %}
+
+
+
Latest supported version of past releases
+
+
+ {% for older_release in active_releases %}
+ {% set older_split_ver = older_release.extra.tag | split(pat=".")%}
+ {% set older_major = older_split_ver | nth(n= 0) %}
+ {% if older_major != major %}
+ {% set_global major = older_major %}
+ {% set release = older_release.extra %}
+
Version {{major}}.x.x
+ {% include "includes/release.html" %}
+ {% endif %}
+ {% endfor %}
+
+
+
+
Performance
+
+ {% set perf = load_data(path="_data/perf.toml") %}
+ {% for perf_dashboard in perf.dashboards %}
+
+
+
+ {{ perf_dashboard.description | markdown | safe }}
+
Explore
+
- {% endfor %}
+ {% endfor %}
+
+
+
+
Latest Blog Posts
+
+ {% set blog_post_section = get_section(path="blog/_index.md") %}
+ {% set blog_posts = blog_post_section.pages | slice(end=2) %}
+ {% for post in blog_posts %}
+
+
+
+
{{ post.description }}
+
Read More
+
+
+ {% endfor %}
+
- {% if section.extra and section.extra.sidebar %}
- {% for sidebar_category in section.extra.sidebar %}
-
{{sidebar_category.title}}
-
- {% endfor %}
- {% endif %}
-
+ {% if section.extra and section.extra.sidebar %}
+ {% for sidebar_category in section.extra.sidebar %}
+
{{sidebar_category.title}}
+
+ {% endfor %}
+ {% endif %}
+
@@ -102,7 +118,7 @@
{{sidebar_category.title}}
{% if section.extra and section.extra.documentation_cards %}
{% for card in section.extra.documentation_cards %}
-
+
{{ card.title }}
{{ card.description }}
diff --git a/templates/performance.html b/templates/performance.html
new file mode 100644
index 00000000..bfe306dd
--- /dev/null
+++ b/templates/performance.html
@@ -0,0 +1,38 @@
+{% extends "default.html" %}
+
+{% block content %}
+
+
{{ page.title }}
+
+
+
+
+ {{ page.content | markdown | safe }}
+
+ {% set perf = load_data(path="_data/perf.toml") %}
+ {% for section in perf.sections %}
+
+ {% endfor %}
+
+
+ For questions about performance or to contribute benchmarking data, visit our community
+ page or join the discussion on GitHub.
+
+
+
+{% endblock content %}
\ No newline at end of file