$count
+$cards +No plugin matches your search.
+From 1af7564aba7e8cf9432bb20c9ad9305ec1120a37 Mon Sep 17 00:00:00 2001
From: Pierre Raybaut <1311787+PierreRaybaut@users.noreply.github.com>
Date: Thu, 8 Oct 2026 15:46:37 +0200
Subject: [PATCH] feat: redesign the catalog page with plugin cards and search
Assisted-by: Claude Opus 5.5
---
README.md | 6 +-
tests/test_catalog.py | 50 +++-
tools/catalog.py | 201 +++++++++++-----
tools/page/catalog.js | 46 ++++
tools/page/favicon.ico | Bin 0 -> 5430 bytes
tools/page/index.html | 71 ++++++
tools/page/logo.svg | 83 +++++++
tools/page/style.css | 515 +++++++++++++++++++++++++++++++++++++++++
8 files changed, 911 insertions(+), 61 deletions(-)
create mode 100644 tools/page/catalog.js
create mode 100644 tools/page/favicon.ico
create mode 100644 tools/page/index.html
create mode 100644 tools/page/logo.svg
create mode 100644 tools/page/style.css
diff --git a/README.md b/README.md
index b66c186..74c6f2a 100644
--- a/README.md
+++ b/README.md
@@ -4,11 +4,13 @@ Catalog of plugins for [DataLab](https://datalab-platform.com/) desktop and [Dat
## Installing a plugin
+In DataLab 1.4 or later, open **Plugins > Configure plugins...**, select the **Available plugins** tab and click **Install**: DataLab downloads the plugin and checks it against the catalog.
+
+To install a downloaded file instead (also with the standalone version of DataLab):
+
1. Open
Malicious code
' in page + assert "No installable release" in page + assert "download>" not in page + + +def test_page_escapes_metadata_read_from_wheels() -> None: + """Wheel summaries are untrusted and must not inject markup.""" + page = catalog.render_index( + { + "generated_at": "2026-10-08T13:29:23+00:00", + "plugins": [ + { + "id": "io.github.someone.example", + "name": "Camera & Detector", + "tier": "community", + "status": "active", + "repository": "https://github.com/someone/example", + "summary": '', + "keywords": ['">Extend DataLab with plugins from the DataLab team and the community. Each release is checked automatically (pure Python, open-source license, dependencies provided by DataLab) and mirrored here with its SHA-256 digest.
+Plugins run with the same rights as DataLab: install only plugins from authors you trust. Official plugins are maintained by the DataLab team, community plugins by their authors. Being listed here does not mean that a plugin was audited.
+$count
+$cards +No plugin matches your search.
+