Install, use, contribute.
Everything about the gallery in one place — from loading your first extension in Chrome to publishing your own project.
Install an extension in Chrome
Gallery projects are open-source folders, not Web Store packages, so you load them yourself. It takes under a minute.
- Pick a project. Open All repos, filter by platform (ChatGPT, Gemini, GitHub, Lovable, Browser) and read the card.
- Download the source. Press ↓ Download ZIP on the card. The ZIP contains only that extension's folder. Extract it somewhere permanent.
- Open the extensions page. Type
chrome://extensionsin the address bar and turn on Developer mode (top right). - Load it. Click Load unpacked and select the extracted folder — the one that directly contains
manifest.json. - Use it. UI themes apply when you open the target site (for example chatgpt.com or gemini.google.com). Tools add a toolbar icon; pin it from the puzzle menu.
chrome://extensions → Details. Community contributions are not an automatic safety guarantee; the code is open so you can inspect it first.Updating or removing: to update, download the new ZIP, replace the folder and press the reload ↻ icon on the extension card. To remove it, use Remove on the same card.
How the gallery works
There are no hand-written project lists. The site reads catalog.json, which is generated from the repository folders.
- A contributor adds
Tools/new-tool/manifest.jsonwith aREADME.md, or a UI design under a platform/style folder withdesign.md. - The Pull Request runs Validate gallery and automatic-discovery integration tests.
- A maintainer reviews and merges it to
main. - Publish automatic gallery rebuilds
catalog.jsonand deploys with GitHub Actions. - The new card, search results, platform filters and project counts appear on the site.
Only merged projects appear — a Pull Request alone never publishes code. Each card links to the project's documentation and its source folder, and builds a per-extension ZIP at deploy time.
Submit your own project
Fork the repository, add one folder, open a Pull Request. You never edit app.js, the HTML or any filter buttons.
Tools/
└── your-new-tool/
├── manifest.json
├── README.md
├── popup.html
├── popup.js
└── gallery.json # optional card customizationNeed a starting point? Copy the starter template ↗ and read the contributor instructions ↗. Structural validation is automatic, but security, copyright and privacy reviews are still done by a person — never submit secrets or misleading author attribution.
Customize the card with gallery.json
A valid extension is published from its manifest.json and documentation alone. Add gallery.json next to the manifest only to customize its card.
{
"name": "Focus Tabs",
"description": "A simple tab organizer for deep work.",
"platform": "browser",
"style": "Productivity Tool",
"tags": ["Tabs", "Productivity", "Lightweight"],
"icon": "FT",
"palette": ["#152d36", "#1e5160", "#79d9c9"],
"author": {
"name": "Your GitHub username",
"url": "https://github.com/your-username"
},
"preview": "screenshots/preview.png"
}| Field | Required | Default |
|---|---|---|
name | No | manifest name |
description | No | manifest description |
platform | No | parent UI platform, or inferred category for Tools |
style | No | platform's style folder / Browser Tool |
tags | No | category and style |
icon | No | platform monogram |
palette | No | three deterministic hex gradient colors |
author | No | no author claim unless provided |
preview | No | generated gradient illustration |
Rules: at most six tags, exactly three 6-digit hex palette colors, a GitHub profile URL for author.url, and local PNG / JPG / WebP / SVG preview files inside the extension folder only.
Run and test locally
Requires Node.js 22 or newer. From the repository root:
node scripts/build-catalog.mjs
node scripts/test-catalog.mjs
node scripts/validate.mjs
node scripts/serve-gallery.mjsOpen http://127.0.0.1:4173 and press Ctrl+C to stop. Opening index.html through file:// is not supported because the page loads catalog.json with fetch.
One-time GitHub Pages setup
- Open Settings → Pages ↗ and change Build and deployment → Source from Deploy from a branch to GitHub Actions.
- Open Actions → Publish automatic gallery ↗, press Run workflow and choose
main, once.
After that every merge to main regenerates and deploys the catalog. If Pages stays on main /docs, the site can only use the committed catalog.json snapshot.
Search indexing: submit sitemap.xml in Google Search Console (URL-prefix property) and use Request indexing. Keep the verification file; indexing is never guaranteed.
Common questions
My project is not on the site.
Only merged projects are published. Check that the Pull Request passed validation, was merged to main, and that the publish workflow finished.
The Download ZIP button does nothing.
Per-extension ZIP files are built during a successful GitHub Pages deployment and are not committed to Git. Make sure Pages uses the GitHub Actions source.
The contributors list is empty.
Contributors load from GitHub's public API at runtime. Rate limits or network failures show a link to GitHub instead — counts are never invented.
Chrome says “Manifest file is missing or unreadable”.
You selected the wrong folder. Choose the directory that directly contains manifest.json, not its parent.
Do the animations slow my device?
Effects are lightweight and pause when the tab is hidden. They are disabled when your system requests reduced motion.