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

rusackas pushed a commit to branch fix/readme-database-logos
in repository https://gitbox.apache.org/repos/asf/superset.git

commit 26b5ca9a64db268519c14bda64a8c4269492ffd8
Author: Evan Rusackas <[email protected]>
AuthorDate: Tue Jan 27 15:19:02 2026 -0800

    fix(docs): replace identicon logos and deduplicate README database wall
    
    - Replace cratedb.png and risingwave.png (GitHub identicon avatars)
      with actual logos sourced from the official CrateDB and RisingWave
      GitHub repos (SVG format)
    - Update engine spec metadata to reference .svg files
    - Add deduplication to generateReadmeLogos() in the docs script to
      match the docs homepage behavior (filters by unique logo filename)
    - Removes 4 duplicate entries: Databricks Interactive Cluster
      (same logo as Apache Hive), IBM Db2 for i (same as IBM Db2),
      MySQL (same as Aurora MySQL), PostgreSQL (same as Aurora PostgreSQL)
    - README now shows 61 unique database logos, matching the docs homepage
    
    Co-Authored-By: Claude Opus 4.5 <[email protected]>
---
 README.md                                |  12 ++++--------
 docs/scripts/generate-database-docs.mjs  |  19 ++++++++++++++-----
 docs/src/data/databases.json             |   6 +++---
 docs/static/img/databases/cratedb.png    | Bin 1534 -> 0 bytes
 docs/static/img/databases/cratedb.svg    | Bin 0 -> 2999 bytes
 docs/static/img/databases/risingwave.png | Bin 1548 -> 0 bytes
 docs/static/img/databases/risingwave.svg | Bin 0 -> 14392 bytes
 superset/db_engine_specs/crate.py        |   2 +-
 superset/db_engine_specs/risingwave.py   |   2 +-
 9 files changed, 23 insertions(+), 18 deletions(-)

diff --git a/README.md b/README.md
index d12a7d066cb..55421b80e44 100644
--- a/README.md
+++ b/README.md
@@ -120,18 +120,17 @@ Here are some of the major database solutions that are 
supported:
   <img src="https://superset.apache.org/img/databases/apache-solr.png"; 
alt="apache-solr" border="0" width="80" height="40" class="database-logo" />
   <img src="https://superset.apache.org/img/databases/apache-spark.png"; 
alt="apache-spark-sql" border="0" width="80" height="40" class="database-logo" 
/>
   <img src="https://superset.apache.org/img/databases/ascend.webp"; 
alt="ascend" border="0" width="80" height="40" class="database-logo" />
-  <img src="https://superset.apache.org/img/databases/mysql.png"; 
alt="aurora-mysql-(data-api)" border="0" width="80" height="40" 
class="database-logo" />
-  <img src="https://superset.apache.org/img/databases/postgresql.svg"; 
alt="aurora-postgresql-(data-api)" border="0" width="80" height="40" 
class="database-logo" />
+  <img src="https://superset.apache.org/img/databases/mysql.png"; 
alt="aurora-mysql-data-api" border="0" width="80" height="40" 
class="database-logo" />
+  <img src="https://superset.apache.org/img/databases/postgresql.svg"; 
alt="aurora-postgresql-data-api" border="0" width="80" height="40" 
class="database-logo" />
   <img src="https://superset.apache.org/img/databases/kusto.png"; 
alt="azure-data-explorer" border="0" width="80" height="40" 
class="database-logo" />
   <img src="https://superset.apache.org/img/databases/azure.svg"; 
alt="azure-synapse" border="0" width="80" height="40" class="database-logo" />
   <img src="https://superset.apache.org/img/databases/clickhouse.png"; 
alt="clickhouse" border="0" width="80" height="40" class="database-logo" />
   <img src="https://superset.apache.org/img/databases/cloudflare.png"; 
alt="cloudflare-d1" border="0" width="80" height="40" class="database-logo" />
   <img src="https://superset.apache.org/img/databases/cockroachdb.png"; 
alt="cockroachdb" border="0" width="80" height="40" class="database-logo" />
   <img src="https://superset.apache.org/img/databases/couchbase.svg"; 
alt="couchbase" border="0" width="80" height="40" class="database-logo" />
-  <img src="https://superset.apache.org/img/databases/cratedb.png"; 
alt="cratedb" border="0" width="80" height="40" class="database-logo" />
+  <img src="https://superset.apache.org/img/databases/cratedb.svg"; 
alt="cratedb" border="0" width="80" height="40" class="database-logo" />
   <img src="https://superset.apache.org/img/databases/databend.png"; 
alt="databend" border="0" width="80" height="40" class="database-logo" />
   <img src="https://superset.apache.org/img/databases/databricks.png"; 
alt="databricks" border="0" width="80" height="40" class="database-logo" />
-  <img src="https://superset.apache.org/img/databases/apache-hive.svg"; 
alt="databricks-interactive-cluster" border="0" width="80" height="40" 
class="database-logo" />
   <img src="https://superset.apache.org/img/databases/denodo.png"; alt="denodo" 
border="0" width="80" height="40" class="database-logo" />
   <img src="https://superset.apache.org/img/databases/dremio.png"; alt="dremio" 
border="0" width="80" height="40" class="database-logo" />
   <img src="https://superset.apache.org/img/databases/duckdb.png"; alt="duckdb" 
border="0" width="80" height="40" class="database-logo" />
@@ -144,19 +143,16 @@ Here are some of the major database solutions that are 
supported:
   <img src="https://superset.apache.org/img/databases/greenplum.png"; 
alt="greenplum" border="0" width="80" height="40" class="database-logo" />
   <img src="https://superset.apache.org/img/databases/hologres.png"; 
alt="hologres" border="0" width="80" height="40" class="database-logo" />
   <img src="https://superset.apache.org/img/databases/ibm-db2.svg"; 
alt="ibm-db2" border="0" width="80" height="40" class="database-logo" />
-  <img src="https://superset.apache.org/img/databases/ibm-db2.svg"; 
alt="ibm-db2-for-i" border="0" width="80" height="40" class="database-logo" />
   <img src="https://superset.apache.org/img/databases/netezza.png"; 
alt="ibm-netezza-performance-server" border="0" width="80" height="40" 
class="database-logo" />
   <img src="https://superset.apache.org/img/databases/mariadb.png"; 
alt="mariadb" border="0" width="80" height="40" class="database-logo" />
   <img src="https://superset.apache.org/img/databases/msql.png"; 
alt="microsoft-sql-server" border="0" width="80" height="40" 
class="database-logo" />
   <img src="https://superset.apache.org/img/databases/monet-db.png"; 
alt="monetdb" border="0" width="80" height="40" class="database-logo" />
   <img src="https://superset.apache.org/img/databases/mongodb.png"; 
alt="mongodb" border="0" width="80" height="40" class="database-logo" />
   <img src="https://superset.apache.org/img/databases/motherduck.png"; 
alt="motherduck" border="0" width="80" height="40" class="database-logo" />
-  <img src="https://superset.apache.org/img/databases/mysql.png"; alt="mysql" 
border="0" width="80" height="40" class="database-logo" />
   <img src="https://superset.apache.org/img/databases/oceanbase.svg"; 
alt="oceanbase" border="0" width="80" height="40" class="database-logo" />
   <img src="https://superset.apache.org/img/databases/oraclelogo.png"; 
alt="oracle" border="0" width="80" height="40" class="database-logo" />
-  <img src="https://superset.apache.org/img/databases/postgresql.svg"; 
alt="postgresql" border="0" width="80" height="40" class="database-logo" />
   <img src="https://superset.apache.org/img/databases/presto-og.png"; 
alt="presto" border="0" width="80" height="40" class="database-logo" />
-  <img src="https://superset.apache.org/img/databases/risingwave.png"; 
alt="risingwave" border="0" width="80" height="40" class="database-logo" />
+  <img src="https://superset.apache.org/img/databases/risingwave.svg"; 
alt="risingwave" border="0" width="80" height="40" class="database-logo" />
   <img src="https://superset.apache.org/img/databases/sap-hana.png"; 
alt="sap-hana" border="0" width="80" height="40" class="database-logo" />
   <img src="https://superset.apache.org/img/databases/sybase.png"; 
alt="sap-sybase" border="0" width="80" height="40" class="database-logo" />
   <img src="https://superset.apache.org/img/databases/shillelagh.png"; 
alt="shillelagh" border="0" width="80" height="40" class="database-logo" />
diff --git a/docs/scripts/generate-database-docs.mjs 
b/docs/scripts/generate-database-docs.mjs
index 04980f24f83..985fba74101 100644
--- a/docs/scripts/generate-database-docs.mjs
+++ b/docs/scripts/generate-database-docs.mjs
@@ -609,13 +609,22 @@ const README_END_MARKER = '<!-- SUPPORTED_DATABASES_END 
-->';
 
 /**
  * Generate the database logos HTML for README.md
- * Only includes databases that have logos defined
+ * Only includes databases that have logos and homepage URLs.
+ * Deduplicates by logo filename to match the docs homepage behavior.
  */
 function generateReadmeLogos(databases) {
-  // Get databases with logos, sorted alphabetically
+  // Get databases with logos and homepage URLs, sorted alphabetically,
+  // deduplicated by logo filename (matches docs homepage logic in index.tsx)
+  const seenLogos = new Set();
   const dbsWithLogos = Object.entries(databases)
-    .filter(([, db]) => db.documentation?.logo)
-    .sort(([a], [b]) => a.localeCompare(b));
+    .filter(([, db]) => db.documentation?.logo && 
db.documentation?.homepage_url)
+    .sort(([a], [b]) => a.localeCompare(b))
+    .filter(([, db]) => {
+      const logo = db.documentation.logo;
+      if (seenLogos.has(logo)) return false;
+      seenLogos.add(logo);
+      return true;
+    });
 
   if (dbsWithLogos.length === 0) {
     return '';
@@ -624,7 +633,7 @@ function generateReadmeLogos(databases) {
   // Generate HTML img tags
   const logoTags = dbsWithLogos.map(([name, db]) => {
     const logo = db.documentation.logo;
-    const alt = name.toLowerCase().replace(/\s+/g, '-');
+    const alt = name.toLowerCase().replace(/[^a-z0-9]+/g, 
'-').replace(/^-|-$/g, '');
     // Use docs site URL for logos
     return `  <img src="https://superset.apache.org/img/databases/${logo}"; 
alt="${alt}" border="0" width="80" height="40" class="database-logo" />`;
   });
diff --git a/docs/src/data/databases.json b/docs/src/data/databases.json
index d8aaa76e6c9..4a64d016760 100644
--- a/docs/src/data/databases.json
+++ b/docs/src/data/databases.json
@@ -1,5 +1,5 @@
 {
-  "generated": "2026-01-27T06:14:03.276Z",
+  "generated": "2026-01-27T23:17:43.310Z",
   "statistics": {
     "totalDatabases": 68,
     "withDocumentation": 68,
@@ -876,7 +876,7 @@
       "module": "crate",
       "documentation": {
         "description": "CrateDB is a distributed SQL database for machine data 
and IoT workloads.",
-        "logo": "cratedb.png",
+        "logo": "cratedb.svg",
         "homepage_url": "https://crate.io/";,
         "categories": [
           "TIME_SERIES",
@@ -4577,7 +4577,7 @@
       "module": "risingwave",
       "documentation": {
         "description": "RisingWave is a distributed streaming database.",
-        "logo": "risingwave.png",
+        "logo": "risingwave.svg",
         "homepage_url": "https://risingwave.com/";,
         "pypi_packages": [
           "psycopg2",
diff --git a/docs/static/img/databases/cratedb.png 
b/docs/static/img/databases/cratedb.png
deleted file mode 100644
index dedef2414c8..00000000000
Binary files a/docs/static/img/databases/cratedb.png and /dev/null differ
diff --git a/docs/static/img/databases/cratedb.svg 
b/docs/static/img/databases/cratedb.svg
new file mode 100644
index 00000000000..21e1ef12ce7
Binary files /dev/null and b/docs/static/img/databases/cratedb.svg differ
diff --git a/docs/static/img/databases/risingwave.png 
b/docs/static/img/databases/risingwave.png
deleted file mode 100644
index a5db27a527f..00000000000
Binary files a/docs/static/img/databases/risingwave.png and /dev/null differ
diff --git a/docs/static/img/databases/risingwave.svg 
b/docs/static/img/databases/risingwave.svg
new file mode 100644
index 00000000000..5614269b8e4
Binary files /dev/null and b/docs/static/img/databases/risingwave.svg differ
diff --git a/superset/db_engine_specs/crate.py 
b/superset/db_engine_specs/crate.py
index f23ccb4dcee..916f98f3f01 100644
--- a/superset/db_engine_specs/crate.py
+++ b/superset/db_engine_specs/crate.py
@@ -36,7 +36,7 @@ class CrateEngineSpec(BaseEngineSpec):
         "description": (
             "CrateDB is a distributed SQL database for machine data and IoT 
workloads."
         ),
-        "logo": "cratedb.png",
+        "logo": "cratedb.svg",
         "homepage_url": "https://crate.io/";,
         "categories": [DatabaseCategory.TIME_SERIES, 
DatabaseCategory.OPEN_SOURCE],
         "pypi_packages": ["crate", "sqlalchemy-cratedb"],
diff --git a/superset/db_engine_specs/risingwave.py 
b/superset/db_engine_specs/risingwave.py
index 1a4c9cfe91b..899a9f4c834 100644
--- a/superset/db_engine_specs/risingwave.py
+++ b/superset/db_engine_specs/risingwave.py
@@ -28,7 +28,7 @@ class RisingWaveDbEngineSpec(PostgresEngineSpec):
 
     metadata = {
         "description": "RisingWave is a distributed streaming database.",
-        "logo": "risingwave.png",
+        "logo": "risingwave.svg",
         "homepage_url": "https://risingwave.com/";,
         "categories": [
             DatabaseCategory.ANALYTICAL_DATABASES,

Reply via email to