();
+
+for (const entry of registry) {
+ nameMap.set(entry.name, entry);
+ for (const alias of entry.altnames) {
+ aliasMap.set(alias.toLowerCase(), entry.name);
+ }
+}
+
+/**
+ * Get the devicon class name for a tag.
+ *
+ * @param name - Tag name (case-insensitive, aliases supported)
+ * @param colored - Whether to use brand colours (default: true)
+ * @returns Class string like "devicon-react-original colored" or null if not found
+ *
+ * @example
+ * getDeviconClassName("react") // "devicon-react-original colored"
+ * getDeviconClassName("js") // "devicon-javascript-plain colored"
+ * getDeviconClassName("react", false) // "devicon-react-original" (monotone)
+ * getDeviconClassName("unknown") // null
+ */
+export function getDeviconClassName(
+ name: string,
+ colored = true,
+): string | null {
+ const normalised = name.toLowerCase().trim();
+
+ // Try direct name lookup first, then alias lookup
+ const resolvedName = nameMap.has(normalised)
+ ? normalised
+ : aliasMap.get(normalised);
+
+ if (!resolvedName) return null;
+
+ const entry = nameMap.get(resolvedName);
+ if (!entry) return null;
+
+ const fontStyles = entry.versions.font;
+ if (!fontStyles || fontStyles.length === 0) return null;
+
+ // Select style by preference order, fallback to first available
+ const style =
+ STYLE_PREFERENCE.find((s) => fontStyles.includes(s)) ?? fontStyles[0];
+
+ return `devicon-${resolvedName}-${style}${colored ? " colored" : ""}`;
+}
diff --git a/x_docs/mine/2025-12-14-eval-auth-ui-customise.md b/x_docs/DONE/2025-12-14-eval-auth-ui-customise.md
similarity index 100%
rename from x_docs/mine/2025-12-14-eval-auth-ui-customise.md
rename to x_docs/DONE/2025-12-14-eval-auth-ui-customise.md
diff --git a/x_docs/mine/2025-12-17-make-mobile-nav.md b/x_docs/DONE/2025-12-17-make-mobile-nav.md
similarity index 100%
rename from x_docs/mine/2025-12-17-make-mobile-nav.md
rename to x_docs/DONE/2025-12-17-make-mobile-nav.md
diff --git a/x_docs/mine/2025-12-17-page-spacing.md b/x_docs/DONE/2025-12-17-page-spacing.md
similarity index 100%
rename from x_docs/mine/2025-12-17-page-spacing.md
rename to x_docs/DONE/2025-12-17-page-spacing.md
diff --git a/x_docs/mine/2025-12-25-layout-refactor.md b/x_docs/DONE/2025-12-25-layout-refactor.md
similarity index 100%
rename from x_docs/mine/2025-12-25-layout-refactor.md
rename to x_docs/DONE/2025-12-25-layout-refactor.md
diff --git a/x_docs/mine/2026-01-01-right-sidebar/current.jpg b/x_docs/DONE/2026-01-01-right-sidebar/current.jpg
similarity index 100%
rename from x_docs/mine/2026-01-01-right-sidebar/current.jpg
rename to x_docs/DONE/2026-01-01-right-sidebar/current.jpg
diff --git a/x_docs/DONE/2026-01-01-right-sidebar/devicon-readme.md b/x_docs/DONE/2026-01-01-right-sidebar/devicon-readme.md
new file mode 100644
index 0000000..e070409
--- /dev/null
+++ b/x_docs/DONE/2026-01-01-right-sidebar/devicon-readme.md
@@ -0,0 +1,319 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+TL;DR
+
+```html
+
+
+
+
+
+```
+
+Table of Contents
+
+ About the Project
+ Getting Started
+ Requesting Icon
+ Contributing
+ Discord Community
+ develop vs master
+ Stale Pull Requests
+ Building Devicon
+
+
+About the Project
+
+ Devicon aims to gather all logos representing development languages and tools.
+ Each icon comes in several versions: font/SVG, original/plain/line, colored/not colored, wordmark/no wordmark.
+ Devicon has 150+ icons. And it's growing!
+
+
+ See the devicon.json or our website for complete and up to date reference of
+ all available icons.
+
+
+
+ Thanks to all our contributors and the IcoMoon app . Devicon would not be possible without you.
+
+
+
+ All product names, logos, and brands are property of their respective owners. All company, product and service
+ names used in this website are for identification purposes only. Use of these names, logos, and brands does not
+ imply endorsement. Usage of these logos should be done according to the company/brand/service's brand policy.
+
+
+Getting Started
+
+ For a super fast setup, go check devicon.dev .
+ You can either use the raw SVG icons, our Devicon font (which is
+ also available via CDN ), or by building Devicon yourself.
+
+
+Use the devicon font (recommended)
+
+ You can install devicon as a dependency to your project either with npm or yarn:
+
+
+```bash
+npm install --save devicon
+yarn add devicon
+```
+
+
+ If you don't want to use a package manager, you can also download
+ and include devicon.min.css next to the font files to your project.
+ See devicon.dev for details about how to add Devicon to your project via
+ a CDN.
+
+
+ After setting up you just have to include the stylesheet in your header
+ to get started:
+
+
+```html
+
+```
+
+Start using icons with <i>-tag:
+
+```html
+
+
+
+
+
+
+
+
+
+
+
+```
+
+
+ An alternate way to use devicon is by copy/pasting the raw SVG code
+ to your project.
+
+
+
+```html
+
+
+```
+
+Add the following CSS rules in your stylesheet:
+
+```css
+.devicon-devicon-plain {
+ max-width: 2em;
+}
+
+/* if you want to change the original color */
+.devicon-devicon-plain path {
+ fill: #4691f6;
+}
+```
+
+You can also use the img tag and reference an SVG directly from the repository:
+
+```html
+
+```
+
+Requesting an icon
+
+ When you want to request an icon please feel free to create an issue. Check out our Wiki for more information.
+
+
+Contributing
+
+ We are happy with every contribution, whether it's new icons, features, or maintainers. Please have a look at our Wiki to see how you can contribute to this project.
+
+
+
+
+We have a Discord community for Devicons. You can easily request icons, discuss, and have a good time talking with the community members! Join the official Discord Server here!
+
+
+develop vs master
+
+All official releases shall be in master. Any updates in between (icons, features, etc.) will be kept in develop.
+
+develop contains:
+
+
+ Latest SVGs (non-optimized).
+
+
+ No icons for the latest SVGs. These will be built at every release.
+ Can be built manually. See Building Devicon .
+
+
+ Experimental changes.
+
+
+master contains:
+
+
+ Latest official release, which contains all the SVGs and icons.
+
+
+ Official, tested changes.
+
+
+
+Stale Pull Requests
+
+After a pull request has been open for over 30 days with no activity or response from the author, it'll be automatically marked as stale. We might fork your changes and merge the changes ourselves. Since GitHub tracks contributions by commits, you will be credited.
+
+
+Building Devicon
+
+Follow these steps to build the website and icons either locally or using Gitpod.io .
+
+
+Table of contents
+
+ Using Gitpod to build
+ Local Installation
+
+ Install dependencies
+ Build the icons
+ Build the CSS stylesheet
+ Setting up the web server
+
+
+
+Using Gitpod.io
+By using Gitpod.io , you can easily build the icons and install the required dependencies in one single click. No extra setup is required.
+
+> alt="Open in Gitpod">
+
+> **Note**
+> In case some of the commands are not properly ran, you can\
+> follow the steps below and run the same commands on Gitpod.io
+
+Local Installation
+
+Install dependencies
+
+ Fork the repository and clone the forked repository.
+
+```bash
+git clone https://github.com//devicon.git
+```
+
+> **Note**
+> In case you don't have Git installed, check the official guide to install Git on your operating system.
+
+Install all the necessary NPM dependencies
+
+```bash
+npm install
+```
+
+> **Note**
+> In case you don't have NPM installed, check this >ultimate guide on installing Node.js and NPM. These tools are required in order to build Devicon properly.
+
+Install Firefox
+https://www.mozilla.org/en-US/firefox/new/
+
+Install Python 3.8
+https://www.python.org/downloads/
+
+> **Note**
+> Make sure your Python install includes [pip](https://pypi.org/project/pip/)
+
+Install Dependencies
+
+```bash
+python -m pip install -r ./.github/scripts/requirements.txt
+```
+
+Build the new icons
+
+Once all the dependencies are installed, you can proceed to build the newest icons.
+Usually, this is done on each release, but you can have a sneak peek before a release.
+
+```bash
+npm run build-icons
+```
+
+The process might take a while, depending on your operating system's speed and the amount of icons.
+If there are any errors shown, please let us know by creating an issue or contacting us on our Discord community .
+
+Build the CSS stylesheet
+
+Run the following command to build the new CSS stylesheet.
+This file is used to show all the new icons previously built.
+
+```bash
+npm run build-css
+```
+
+Setting up the web server
+
+Run the following command to start the web server with Python.
+
+```bash
+npm run dev # Will run on port 8000
+```
+
+Or this command, which does exactly the same, but the port can be customized.
+
+```bash
+python -m http.server
+```
+
+You're done now! :tada: Your build of Devicons should be available at https://localhost:8000 (or the desired port).
+
+
+
+
+
+
diff --git a/x_docs/DONE/2026-01-01-right-sidebar/devicon.json b/x_docs/DONE/2026-01-01-right-sidebar/devicon.json
new file mode 100644
index 0000000..2d2cb94
--- /dev/null
+++ b/x_docs/DONE/2026-01-01-right-sidebar/devicon.json
@@ -0,0 +1,8460 @@
+[
+ {
+ "name": "aarch64",
+ "altnames": ["arm64"],
+ "tags": ["architecture", "programming", "language", "ARM"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#16358C",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "original-wordmark"
+ },
+ {
+ "base": "plain",
+ "alias": "plain-wordmark"
+ },
+ {
+ "base": "line",
+ "alias": "line-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "adonisjs",
+ "altnames": ["adonis"],
+ "tags": ["nodejs", "framework"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#5A45FF",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "aerospike",
+ "altnames": [],
+ "tags": ["data", "database", "nosql"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#c21417",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "aframe",
+ "altnames": ["a-frame"],
+ "tags": ["framework", "html", "javascript", "js", "web"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain"],
+ "font": ["original-wordmark", "plain"]
+ },
+ "color": "#ee295f",
+ "aliases": [
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "aftereffects",
+ "altnames": ["adobeaftereffects", "ae"],
+ "tags": ["video", "editor"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#1F0740",
+ "aliases": []
+ },
+ {
+ "name": "akka",
+ "altnames": ["akka-framework"],
+ "tags": ["framework", "java", "scala", "open-source"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#15a9ce",
+ "aliases": []
+ },
+ {
+ "name": "algolia",
+ "altnames": [],
+ "tags": ["algorithms", "api", "documentation", "tool"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#003dff",
+ "aliases": []
+ },
+ {
+ "name": "almalinux",
+ "altnames": ["AlmaLinux OS"],
+ "tags": ["linux", "os", "open-source"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#ffffff",
+ "aliases": []
+ },
+ {
+ "name": "alpinejs",
+ "altnames": ["Alpine"],
+ "tags": ["framework", "javascript"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#2d3441",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "amazonwebservices",
+ "altnames": ["aws"],
+ "tags": ["cloud", "hosting", "server"],
+ "versions": {
+ "svg": ["original-wordmark", "plain-wordmark", "line-wordmark"],
+ "font": ["plain-wordmark", "line-wordmark"]
+ },
+ "color": "#f90",
+ "aliases": [
+ {
+ "base": "original-wordmark",
+ "alias": "original"
+ },
+ {
+ "base": "plain-wordmark",
+ "alias": "plain"
+ },
+ {
+ "base": "line-wordmark",
+ "alias": "line"
+ }
+ ]
+ },
+ {
+ "name": "anaconda",
+ "altnames": [],
+ "tags": ["python", "data-science"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#3eb049",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "android",
+ "altnames": [],
+ "tags": ["os", "mobile"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#A4C439",
+ "aliases": []
+ },
+ {
+ "name": "androidstudio",
+ "altnames": [],
+ "tags": ["application", "editor", "jetbrains", "ide", "android", "mobile"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#4285F4",
+ "aliases": []
+ },
+ {
+ "name": "angular",
+ "altnames": [],
+ "tags": ["framework", "javascript"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#FFFFFF",
+ "aliases": []
+ },
+ {
+ "name": "angularjs",
+ "altnames": [],
+ "tags": ["framework", "javascript"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#c4473a",
+ "aliases": []
+ },
+ {
+ "name": "angularmaterial",
+ "altnames": [],
+ "tags": ["framework", "javascript"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#ffa726",
+ "aliases": []
+ },
+ {
+ "name": "ansible",
+ "altnames": [],
+ "tags": ["automation", "provisioning", "deployment", "continuous-delivery"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#1A1918",
+ "aliases": []
+ },
+ {
+ "name": "ansys",
+ "altnames": [],
+ "tags": ["simulation"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#000000",
+ "aliases": []
+ },
+ {
+ "name": "antdesign",
+ "altnames": [],
+ "tags": ["reactjs", "design", "language"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#0073bb",
+ "aliases": []
+ },
+ {
+ "name": "apache",
+ "altnames": ["The Apache Software Foundation"],
+ "tags": ["php"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#cb2533",
+ "aliases": []
+ },
+ {
+ "name": "apacheairflow",
+ "altnames": ["Airflow"],
+ "tags": ["platform", "pipeline", "orchestrator", "open-source"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#017cee",
+ "aliases": []
+ },
+ {
+ "name": "apachekafka",
+ "altnames": [],
+ "tags": ["streaming", "open-source"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#231f20",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "apachespark",
+ "altnames": [],
+ "tags": ["data-processing", "data-science", "machine-learning"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain-wordmark"],
+ "font": ["original", "plain-wordmark"]
+ },
+ "color": "#e15919",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "apex",
+ "altnames": [],
+ "tags": ["language"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#0d9dda",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "apl",
+ "altnames": ["A Programming Language"],
+ "tags": ["programming", "language", "open-source", "cross-platform"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#24a148",
+ "aliases": []
+ },
+ {
+ "name": "apollographql",
+ "altnames": ["Apollo"],
+ "tags": ["platform", "graphql", "api"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "line", "line-wordmark"],
+ "font": ["original", "original-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#112B49",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "appcelerator",
+ "altnames": [],
+ "tags": ["app", "mobile"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain-wordmark"],
+ "font": ["original", "plain-wordmark"]
+ },
+ "color": "#ac162c",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "apple",
+ "altnames": [],
+ "tags": ["brand", "mobile"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#000000",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "appwrite",
+ "altnames": [],
+ "tags": ["cloud", "platform", "server"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain-wordmark"],
+ "font": ["original", "plain-wordmark"]
+ },
+ "color": "#fd366e",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "archlinux",
+ "altnames": [],
+ "tags": ["linux", "distribution", "desktop"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#1791cf",
+ "aliases": []
+ },
+ {
+ "name": "arduino",
+ "altnames": [],
+ "tags": ["microcontroller", "hardware"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#00979d",
+ "aliases": []
+ },
+ {
+ "name": "argocd",
+ "altnames": [],
+ "tags": ["gitops", "continuous-delivery"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#ef7b4d",
+ "aliases": []
+ },
+ {
+ "name": "artixlinux",
+ "altnames": ["artix"],
+ "tags": ["linux", "os", "distribution", "desktop"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#10a0cc",
+ "aliases": []
+ },
+ {
+ "name": "astro",
+ "altnames": [],
+ "tags": ["static site generator", "framework", "web-development"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#ff5d01",
+ "aliases": []
+ },
+ {
+ "name": "atom",
+ "altnames": [],
+ "tags": ["editor"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#67595D",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "awk",
+ "altnames": ["the awk programming language"],
+ "tags": ["programming", "language", "unix"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain-wordmark"],
+ "font": ["plain-wordmark"]
+ },
+ "color": "#0a094d",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "axios",
+ "altnames": [],
+ "tags": ["http", "promise", "nodejs"],
+ "versions": {
+ "svg": ["plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#5a29e4",
+ "aliases": []
+ },
+ {
+ "name": "azure",
+ "altnames": ["microsoftazure"],
+ "tags": ["cloud", "devops"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#0089D6",
+ "aliases": []
+ },
+ {
+ "name": "azuredevops",
+ "altnames": ["azure-devops"],
+ "tags": ["azure", "devops", "cloud", "version control", "vcs"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["plain"]
+ },
+ "color": "#0078d4",
+ "aliases": []
+ },
+ {
+ "name": "azuresqldatabase",
+ "altnames": ["azure-sql-database"],
+ "tags": ["azure", "database", "tool", "sql"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["plain"]
+ },
+ "color": "#005ba1",
+ "aliases": []
+ },
+ {
+ "name": "babel",
+ "altnames": ["babeljs"],
+ "tags": ["javascript", "transpiler"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#f9dc3e",
+ "aliases": [
+ {
+ "base": "plain",
+ "alias": "original"
+ }
+ ]
+ },
+ {
+ "name": "babylonjs",
+ "altnames": ["babylon.js"],
+ "tags": ["3d", "javascript", "library", "web"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#bb464b",
+ "aliases": []
+ },
+ {
+ "name": "backbonejs",
+ "altnames": [],
+ "tags": ["javascript", "framework"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#002A41",
+ "aliases": []
+ },
+ {
+ "name": "ballerina",
+ "altnames": ["bal"],
+ "tags": ["java", "cloud", "server", "networking"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "line", "line-wordmark"],
+ "font": ["original", "original-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#46C0BC",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "bamboo",
+ "altnames": ["atlassianbamboo"],
+ "tags": ["platform", "integration", "server"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#1068e2",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "bash",
+ "altnames": ["bourneagainshell"],
+ "tags": ["shell", "command", "scripting"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#293138",
+ "aliases": []
+ },
+ {
+ "name": "bazel",
+ "altnames": ["buildtoolbazel"],
+ "tags": ["build", "automation", "open-source"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#76D275",
+ "aliases": []
+ },
+ {
+ "name": "beats",
+ "altnames": [],
+ "tags": ["elastic", "data-transfer"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["plain"]
+ },
+ "color": "#07c",
+ "aliases": []
+ },
+ {
+ "name": "behance",
+ "altnames": [],
+ "tags": ["social", "website"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#0071e0",
+ "aliases": []
+ },
+ {
+ "name": "bevyengine",
+ "altnames": ["bevy engine", "bevy"],
+ "tags": ["game-engine", "game", "rust", "open-source"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#282828",
+ "aliases": []
+ },
+ {
+ "name": "biome",
+ "altnames": ["biomejs"],
+ "tags": [
+ "linter",
+ "javascript",
+ "typescript",
+ "code-quality",
+ "coding-style",
+ "format",
+ "tool"
+ ],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["original", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#60a5fa",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "bitbucket",
+ "altnames": ["atlassianbitbucket"],
+ "tags": ["version-control"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#205081",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "blazor",
+ "altnames": [],
+ "tags": ["dotnet", ".net", "framework", "design", "ui"],
+ "versions": {
+ "svg": ["original", "line"],
+ "font": ["original", "line"]
+ },
+ "color": "#5c2d91",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "blender",
+ "altnames": [],
+ "tags": ["modelling", "python", "3d", "animation"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#DC7B2E",
+ "aliases": []
+ },
+ {
+ "name": "bootstrap",
+ "altnames": [],
+ "tags": ["css", "framework", "html", "javascript", "library"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#712cf9",
+ "aliases": []
+ },
+ {
+ "name": "bower",
+ "altnames": [],
+ "tags": ["package", "manager"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#ef5734",
+ "aliases": []
+ },
+ {
+ "name": "browserstack",
+ "altnames": [],
+ "tags": ["website", "app", "testing", "tool"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#0070f0",
+ "aliases": []
+ },
+ {
+ "name": "bulma",
+ "altnames": ["bulmacss"],
+ "tags": ["css", "framework"],
+ "versions": {
+ "svg": ["plain"],
+ "font": ["plain"]
+ },
+ "color": "#00d1b2",
+ "aliases": []
+ },
+ {
+ "name": "bun",
+ "altnames": [],
+ "tags": ["javascript", "zig", "language"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#FBF0DF",
+ "aliases": []
+ },
+ {
+ "name": "c",
+ "altnames": [],
+ "tags": ["language"],
+ "versions": {
+ "svg": ["original", "line"],
+ "font": ["original", "line"]
+ },
+ "color": "#a9bacd",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "original-wordmark"
+ },
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original",
+ "alias": "plain-wordmark"
+ },
+ {
+ "base": "line",
+ "alias": "line-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "cairo",
+ "altnames": ["cairographics"],
+ "tags": ["graphic", "library", "c", "open-source"],
+ "versions": {
+ "svg": ["original", "plain", "original-wordmark", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#f39914",
+ "aliases": []
+ },
+ {
+ "name": "cakephp",
+ "altnames": [],
+ "tags": ["framework"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#D43D44",
+ "aliases": []
+ },
+ {
+ "name": "canva",
+ "altnames": [],
+ "tags": ["design"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#00C4CC",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "capacitor",
+ "altnames": ["capacitorjs"],
+ "tags": ["javascript", "js", "ionic", "framework", "universal"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#53B9FF",
+ "aliases": []
+ },
+ {
+ "name": "carbon",
+ "altnames": ["Carbon Language"],
+ "tags": ["programming", "language"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#000000",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "cassandra",
+ "altnames": ["Apache Cassandra"],
+ "tags": ["nosql", "database", "open-source"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#1185b0",
+ "aliases": []
+ },
+ {
+ "name": "centos",
+ "altnames": [],
+ "tags": ["server", "linux"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#932178",
+ "aliases": []
+ },
+ {
+ "name": "ceylon",
+ "altnames": ["eclipseceylon", "ceylonlang"],
+ "tags": ["language"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#AB710A",
+ "aliases": []
+ },
+ {
+ "name": "chakraui",
+ "altnames": ["chakra ui"],
+ "tags": ["ui", "library"],
+ "versions": {
+ "svg": ["original", "plain", "original-wordmark", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#52c8c5",
+ "aliases": []
+ },
+ {
+ "name": "chartjs",
+ "altnames": ["chart.js"],
+ "tags": ["javascript", "chart", "framework"],
+ "versions": {
+ "svg": ["original", "plain", "original-wordmark", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#ff6384",
+ "aliases": []
+ },
+ {
+ "name": "chrome",
+ "altnames": ["googlechrome"],
+ "tags": ["browser"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#ce4e4e",
+ "aliases": []
+ },
+ {
+ "name": "circleci",
+ "altnames": [],
+ "tags": ["integration", "platform"],
+ "versions": {
+ "svg": ["plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#343434",
+ "aliases": []
+ },
+ {
+ "name": "clarity",
+ "altnames": ["clarity-lang"],
+ "tags": ["programming", "language", "blockchain"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#13171a",
+ "aliases": []
+ },
+ {
+ "name": "clickhouse",
+ "altnames": [],
+ "tags": ["cloud", "column-oriented", "database", "warehouse"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#f9ff69",
+ "aliases": []
+ },
+ {
+ "name": "clion",
+ "altnames": [],
+ "tags": ["jetbrains", "editor", "c", "c++", "cpp", "cplusplus"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#21d789",
+ "aliases": []
+ },
+ {
+ "name": "clojure",
+ "altnames": [],
+ "tags": ["language", "jvm"],
+ "versions": {
+ "svg": ["original", "line"],
+ "font": ["line", "plain"]
+ },
+ "color": "#5881d8",
+ "aliases": [
+ {
+ "base": "line",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "clojurescript",
+ "altnames": [],
+ "tags": ["language"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#96ca4b",
+ "aliases": []
+ },
+ {
+ "name": "cloudflare",
+ "altnames": [],
+ "tags": ["web", "cdn", "dns", "proxy", "security"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#F38020",
+ "aliases": []
+ },
+ {
+ "name": "cloudflareworkers",
+ "altnames": ["Cloudflare Workers"],
+ "tags": ["platform", "serverless", "deploy", "performance", "javascript"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#ea9344",
+ "aliases": []
+ },
+ {
+ "name": "cloudrun",
+ "altnames": ["Cloud Run"],
+ "tags": ["platform", "serverless", "deploy", "cloud-computing-platform"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#4285f4",
+ "aliases": []
+ },
+ {
+ "name": "cmake",
+ "altnames": [],
+ "tags": ["build"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#0e8a16",
+ "aliases": []
+ },
+ {
+ "name": "cobol",
+ "altnames": [],
+ "tags": ["language"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#000000",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "codeac",
+ "altnames": ["codeacio"],
+ "tags": ["platform", "integration"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#005096",
+ "aliases": []
+ },
+ {
+ "name": "codecov",
+ "altnames": [],
+ "tags": ["platform", "integration"],
+ "versions": {
+ "svg": ["plain"],
+ "font": ["plain"]
+ },
+ "color": "#e0225c",
+ "aliases": []
+ },
+ {
+ "name": "codeigniter",
+ "altnames": [],
+ "tags": ["php", "framework"],
+ "versions": {
+ "svg": ["plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#ee4323",
+ "aliases": []
+ },
+ {
+ "name": "codepen",
+ "altnames": [],
+ "tags": ["social", "website", "editor"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "line", "line-wordmark"],
+ "font": ["original", "original-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#000",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "coffeescript",
+ "altnames": [],
+ "tags": ["javascript", "transpiler", "language"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#28334c",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "composer",
+ "altnames": [],
+ "tags": ["package", "manager", "php"],
+ "versions": {
+ "svg": ["original", "line", "line-wordmark"],
+ "font": ["line", "line-wordmark"]
+ },
+ "color": "#000000",
+ "aliases": [
+ {
+ "base": "line",
+ "alias": "plain"
+ },
+ {
+ "base": "line-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "confluence",
+ "altnames": ["atlassianconfluence"],
+ "tags": ["collaboration", "documentation", "wiki"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#136be6",
+ "aliases": []
+ },
+ {
+ "name": "consul",
+ "altnames": ["HashiCorp Consul"],
+ "tags": ["networking", "infrastructure", "security", "tool"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain-wordmark"],
+ "font": ["original", "plain-wordmark"]
+ },
+ "color": "#e03875",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "contao",
+ "altnames": [],
+ "tags": ["cms"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#f47c00",
+ "aliases": []
+ },
+ {
+ "name": "corejs",
+ "altnames": ["core-js", "core.js"],
+ "tags": ["javascript", "library", "polyfill", "tool"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#000000",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "cosmosdb",
+ "altnames": ["azurecosmosdb"],
+ "tags": ["database", "nosql", "cloud", "azure"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#59B3D8",
+ "aliases": []
+ },
+ {
+ "name": "couchbase",
+ "altnames": [],
+ "tags": ["database", "nosql", "cloud"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain-wordmark"],
+ "font": ["original", "plain-wordmark"]
+ },
+ "color": "#EA2328",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "couchdb",
+ "altnames": ["apachecouchdb"],
+ "tags": ["database"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#e42528",
+ "aliases": []
+ },
+ {
+ "name": "cpanel",
+ "altnames": [],
+ "tags": ["hosting", "web hosting", "server", "control panel"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#ff6c2c",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "cplusplus",
+ "altnames": ["c++", "cpp"],
+ "tags": ["language"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#004482",
+ "aliases": [
+ {
+ "base": "plain",
+ "alias": "plain-wordmark"
+ },
+ {
+ "base": "line",
+ "alias": "line-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "crystal",
+ "altnames": ["crystallang"],
+ "tags": ["programming", "language"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "line", "line-wordmark"],
+ "font": ["original", "original-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#000",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "csharp",
+ "altnames": ["c#"],
+ "tags": ["language"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#68217a",
+ "aliases": [
+ {
+ "base": "plain",
+ "alias": "plain-wordmark"
+ },
+ {
+ "base": "line",
+ "alias": "line-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "css3",
+ "altnames": ["cascadingstylesheets3"],
+ "tags": ["language", "programming"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#3d8fc6",
+ "aliases": []
+ },
+ {
+ "name": "cucumber",
+ "altnames": ["cucumberjs"],
+ "tags": ["framework"],
+ "versions": {
+ "svg": ["plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#00a818",
+ "aliases": []
+ },
+ {
+ "name": "cypressio",
+ "altnames": ["cypress"],
+ "tags": ["testing", "framework"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#1b1e2e",
+ "aliases": []
+ },
+ {
+ "name": "d3js",
+ "altnames": [],
+ "tags": [],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#f7974e",
+ "aliases": []
+ },
+ {
+ "name": "dart",
+ "altnames": ["googledart"],
+ "tags": ["programming", "language"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#00A8E1",
+ "aliases": []
+ },
+ {
+ "name": "datadog",
+ "altnames": [],
+ "tags": ["monitoring", "platform", "integration"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#632ca6",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "datagrip",
+ "altnames": [],
+ "tags": ["jetbrains", "ide", "sql", "database"],
+ "versions": {
+ "svg": ["original", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#21d789",
+ "aliases": []
+ },
+ {
+ "name": "dataspell",
+ "altnames": [],
+ "tags": ["jetbrains", "ide", "jupyter notebook", "data science"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#087cfa",
+ "aliases": []
+ },
+ {
+ "name": "datatables",
+ "altnames": [],
+ "tags": ["css", "framework", "html", "javascript", "library"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#ffffff",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original",
+ "alias": "line"
+ }
+ ]
+ },
+ {
+ "name": "dbeaver",
+ "altnames": [],
+ "tags": ["tool", "database"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["plain"]
+ },
+ "color": "#382a24",
+ "aliases": []
+ },
+ {
+ "name": "debian",
+ "altnames": [],
+ "tags": ["os", "server"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#A80030",
+ "aliases": []
+ },
+ {
+ "name": "delphi",
+ "altnames": ["embarcadero"],
+ "tags": ["language"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#a81c21",
+ "aliases": []
+ },
+ {
+ "name": "denojs",
+ "altnames": [],
+ "tags": ["javascript", "rust", "runtime"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#000000",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "detaspace",
+ "altnames": ["Deta", "Deta Space"],
+ "tags": ["cloud", "hosting", "server"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "line", "line-wordmark"],
+ "font": ["line", "line-wordmark"]
+ },
+ "color": "#f73b95",
+ "aliases": []
+ },
+ {
+ "name": "devicon",
+ "altnames": [],
+ "tags": ["iconset"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#60BE86",
+ "aliases": []
+ },
+ {
+ "name": "digitalocean",
+ "altnames": [],
+ "tags": ["cloud", "hosting", "database", "storage"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#0080FF",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "discloud",
+ "altnames": [],
+ "tags": ["cloud", "hosting", "database", "storage"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain-wordmark"],
+ "font": ["original", "plain-wordmark"]
+ },
+ "color": "#57f287",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "discordjs",
+ "altnames": [],
+ "tags": ["wrapper", "api_wrapper", "nodejs"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#0c0c14",
+ "aliases": []
+ },
+ {
+ "name": "django",
+ "altnames": [],
+ "tags": [],
+ "versions": {
+ "svg": ["plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#092e20",
+ "aliases": []
+ },
+ {
+ "name": "djangorest",
+ "altnames": ["Django REST framework"],
+ "tags": ["framework", "rest", "api", "python", "web"],
+ "versions": {
+ "svg": [
+ "original",
+ "plain",
+ "line",
+ "original-wordmark",
+ "plain-wordmark",
+ "line-wordmark"
+ ],
+ "font": ["plain", "line", "plain-wordmark", "line-wordmark"]
+ },
+ "color": "#a30000",
+ "aliases": []
+ },
+ {
+ "name": "docker",
+ "altnames": [],
+ "tags": ["platform", "deploy"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#019bc6",
+ "aliases": []
+ },
+ {
+ "name": "doctrine",
+ "altnames": [],
+ "tags": [],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#f56d39",
+ "aliases": []
+ },
+ {
+ "name": "dot-net",
+ "altnames": ["dotnet", ".net"],
+ "tags": ["framework"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#1384c8",
+ "aliases": []
+ },
+ {
+ "name": "dotnetcore",
+ "altnames": [".netcore"],
+ "tags": ["framework"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#623697",
+ "aliases": []
+ },
+ {
+ "name": "dovecot",
+ "altnames": [],
+ "tags": ["imap", "pop3", "e-mail"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#54bbab",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "original-wordmark"
+ },
+ {
+ "base": "plain",
+ "alias": "line-wordmark"
+ },
+ {
+ "base": "line",
+ "alias": "line-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "dreamweaver",
+ "altnames": ["Adobe Dreamweaver"],
+ "tags": ["web-development", "editor", "software", "tool"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#470137",
+ "aliases": []
+ },
+ {
+ "name": "dropwizard",
+ "altnames": [],
+ "tags": ["java", "framework"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#24265d",
+ "aliases": []
+ },
+ {
+ "name": "drupal",
+ "altnames": [],
+ "tags": ["cms"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#0073BA",
+ "aliases": []
+ },
+ {
+ "name": "duckdb",
+ "altnames": [],
+ "tags": ["database", "sql"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#000000",
+ "aliases": []
+ },
+ {
+ "name": "dyalog",
+ "altnames": [],
+ "tags": ["language"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#ff6a13",
+ "aliases": []
+ },
+ {
+ "name": "dynamodb",
+ "altnames": [],
+ "tags": ["key-value", "database", "java"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#527fff",
+ "aliases": []
+ },
+ {
+ "name": "dynatrace",
+ "altnames": [],
+ "tags": ["monitoring", "performance", "cloud"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#000000",
+ "aliases": []
+ },
+ {
+ "name": "eclipse",
+ "altnames": ["Eclipse IDE"],
+ "tags": ["editor", "IDE"],
+ "versions": {
+ "svg": ["original-wordmark", "original"],
+ "font": ["plain-wordmark", "plain"]
+ },
+ "color": "#2c2255",
+ "aliases": []
+ },
+ {
+ "name": "ecto",
+ "altnames": [],
+ "tags": ["data", "elixir", "integration", "query"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain-wordmark"],
+ "font": ["original", "plain-wordmark"]
+ },
+ "color": "#77bf43",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "elasticsearch",
+ "altnames": [],
+ "tags": ["elastic", "data", "logs"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain-wordmark", "plain"]
+ },
+ "color": "#00bfb3",
+ "aliases": []
+ },
+ {
+ "name": "electron",
+ "altnames": ["electronjs"],
+ "tags": ["framework"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#47848f",
+ "aliases": []
+ },
+ {
+ "name": "eleventy",
+ "altnames": ["11ty"],
+ "tags": ["ssg", "static site generator"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#1f1f1f",
+ "aliases": []
+ },
+ {
+ "name": "elixir",
+ "altnames": ["elexirlang"],
+ "tags": ["language"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#380A4D",
+ "aliases": []
+ },
+ {
+ "name": "elm",
+ "altnames": ["elmlang"],
+ "tags": ["framework"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#34495E",
+ "aliases": []
+ },
+ {
+ "name": "emacs",
+ "altnames": ["editingmacros"],
+ "tags": ["editor"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#421f5f",
+ "aliases": []
+ },
+ {
+ "name": "embeddedc",
+ "altnames": [],
+ "tags": ["language", "programming"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#444444",
+ "aliases": []
+ },
+ {
+ "name": "ember",
+ "altnames": ["ember.js", "emberjs"],
+ "tags": ["framework", "javascript", "web-development", "build"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain"],
+ "font": ["original-wordmark", "plain"]
+ },
+ "color": "#E04E39",
+ "aliases": [
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "entityframeworkcore",
+ "altnames": ["ef core", "entity framework core"],
+ "tags": ["dotnet", ".net", "framework", "database"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#512bd4",
+ "aliases": []
+ },
+ {
+ "name": "envoy",
+ "altnames": ["envoyproxy"],
+ "tags": ["proxy", "cloud"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#e13eaf",
+ "aliases": []
+ },
+ {
+ "name": "erlang",
+ "altnames": [],
+ "tags": [],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#a90533",
+ "aliases": []
+ },
+ {
+ "name": "eslint",
+ "altnames": [],
+ "tags": ["linter", "javascript", "code-quality", "coding-style"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#4b32c3",
+ "aliases": []
+ },
+ {
+ "name": "expo",
+ "altnames": [],
+ "tags": ["framework", "react", "react-native"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "line", "line-wordmark"],
+ "font": ["original", "original-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#000000",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "express",
+ "altnames": ["expressjs"],
+ "tags": ["framework"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#444",
+ "aliases": []
+ },
+ {
+ "name": "facebook",
+ "altnames": [],
+ "tags": ["auth"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#3d5a98",
+ "aliases": [
+ {
+ "base": "plain",
+ "alias": "original"
+ }
+ ]
+ },
+ {
+ "name": "fastapi",
+ "altnames": [],
+ "tags": ["python", "framework"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#009688",
+ "aliases": []
+ },
+ {
+ "name": "fastify",
+ "altnames": [],
+ "tags": ["framework", "web", "node.js", "javascript", "performance"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#000000",
+ "aliases": []
+ },
+ {
+ "name": "faunadb",
+ "altnames": ["fauna"],
+ "tags": ["database"],
+ "versions": {
+ "svg": ["original-wordmark", "original", "line", "line-wordmark"],
+ "font": ["original-wordmark", "original", "line", "line-wordmark"]
+ },
+ "color": "#3A1AB6",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "feathersjs",
+ "altnames": [],
+ "tags": ["framework", "rest"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#333333",
+ "aliases": []
+ },
+ {
+ "name": "fedora",
+ "altnames": [],
+ "tags": ["linux", "distribution", "desktop"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#294172",
+ "aliases": []
+ },
+ {
+ "name": "fiber",
+ "altnames": ["GoFiber"],
+ "tags": ["framework", "go", "web"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#00acd7",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "original-wordmark"
+ },
+ {
+ "base": "plain",
+ "alias": "plain-wordmark"
+ },
+ {
+ "base": "line",
+ "alias": "line-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "figma",
+ "altnames": [],
+ "tags": ["design"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#f24e1e",
+ "aliases": []
+ },
+ {
+ "name": "filamentphp",
+ "altnames": [],
+ "tags": ["framework", "laravel"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#000000",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "original-wordmark"
+ },
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "filezilla",
+ "altnames": [],
+ "tags": ["ftp"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#bb0001",
+ "aliases": []
+ },
+ {
+ "name": "firebase",
+ "altnames": [],
+ "tags": ["auth", "hosting", "storage", "cloud"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#ffa000",
+ "aliases": []
+ },
+ {
+ "name": "firebird",
+ "altnames": [],
+ "tags": ["database"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#f4790e",
+ "aliases": []
+ },
+ {
+ "name": "firefox",
+ "altnames": ["mozillafirefox"],
+ "tags": ["browser"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#DD732A",
+ "aliases": []
+ },
+ {
+ "name": "flask",
+ "altnames": [],
+ "tags": ["python", "framework"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#010101",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "flutter",
+ "altnames": [],
+ "tags": ["framework", "sdk"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#3FB6D3",
+ "aliases": []
+ },
+ {
+ "name": "forgejo",
+ "altnames": [],
+ "tags": ["software", "git", "version-control"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#FF5500",
+ "aliases": []
+ },
+ {
+ "name": "fortran",
+ "altnames": [],
+ "tags": ["programming", "language"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#734f96",
+ "aliases": []
+ },
+ {
+ "name": "foundation",
+ "altnames": [],
+ "tags": ["framework", "css"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#008cba",
+ "aliases": []
+ },
+ {
+ "name": "framermotion",
+ "altnames": ["framer-motion", "framer"],
+ "tags": ["library", "open-source", "react", "animation"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#000",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "framework7",
+ "altnames": [],
+ "tags": [
+ "framework",
+ "cross-platform",
+ "development",
+ "mobile",
+ "android",
+ "ios",
+ "open-source"
+ ],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#ee350f",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "fsharp",
+ "altnames": ["f#"],
+ "tags": ["language"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#378BBA",
+ "aliases": []
+ },
+ {
+ "name": "fusion",
+ "altnames": ["Autodesk Fusion", "Autodesk Fusion 360"],
+ "tags": ["design"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#FF6A00",
+ "aliases": []
+ },
+ {
+ "name": "gardener",
+ "altnames": [],
+ "tags": ["kubernetes", "cloud"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#009f76",
+ "aliases": []
+ },
+ {
+ "name": "gatling",
+ "altnames": [],
+ "tags": ["framework", "testing"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["original", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#f78557",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "gatsby",
+ "altnames": ["gatsbyjs"],
+ "tags": ["reactjs", "framework"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain-wordmark"],
+ "font": ["original", "plain-wordmark"]
+ },
+ "color": "#64328B",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "gazebo",
+ "altnames": [],
+ "tags": ["robotics", "3d"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#f58113",
+ "aliases": []
+ },
+ {
+ "name": "gcc",
+ "altnames": ["gnucompilercollection"],
+ "tags": ["compiler", "linux"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#ffcfab",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "original-wordmark"
+ },
+ {
+ "base": "plain",
+ "alias": "plain-wordmark"
+ },
+ {
+ "base": "line",
+ "alias": "line-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "gentoo",
+ "altnames": [],
+ "tags": ["linux", "distribution", "desktop"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#9991d9",
+ "aliases": []
+ },
+ {
+ "name": "ghost",
+ "altnames": [],
+ "tags": ["cms"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#000000",
+ "aliases": []
+ },
+ {
+ "name": "gimp",
+ "altnames": [],
+ "tags": ["graphic"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#716955",
+ "aliases": []
+ },
+ {
+ "name": "git",
+ "altnames": [],
+ "tags": ["version-control"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#f34f29",
+ "aliases": []
+ },
+ {
+ "name": "gitbook",
+ "altnames": [],
+ "tags": ["documentation", "pages", "git", "markup"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "line", "line-wordmark"],
+ "font": ["original", "original-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#346ddb",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "github",
+ "altnames": [],
+ "tags": ["version-control"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#181616",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "githubactions",
+ "altnames": ["GitHub Actions"],
+ "tags": ["devops", "integration"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#2088FF",
+ "aliases": []
+ },
+ {
+ "name": "githubcodespaces",
+ "altnames": ["GitHub Codespaces"],
+ "tags": ["development", "remote-development", "editor", "browser", "cloud"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#24292e",
+ "aliases": []
+ },
+ {
+ "name": "gitkraken",
+ "altnames": [],
+ "tags": ["git", "version-control"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain-wordmark"],
+ "font": ["original", "plain-wordmark"]
+ },
+ "color": "#179287",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "gitlab",
+ "altnames": [],
+ "tags": ["version-control"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#E24329",
+ "aliases": []
+ },
+ {
+ "name": "gitpod",
+ "altnames": ["gitpod-io"],
+ "tags": ["open-source", "remote-development", "cloud", "IDE"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#FFA132",
+ "aliases": []
+ },
+ {
+ "name": "gitter",
+ "altnames": [],
+ "tags": ["social", "chat"],
+ "versions": {
+ "svg": ["plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#000000",
+ "aliases": []
+ },
+ {
+ "name": "gleam",
+ "altnames": [],
+ "tags": ["language", "programming"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#ffaff3",
+ "aliases": []
+ },
+ {
+ "name": "glitch",
+ "altnames": [],
+ "tags": [
+ "web-apps",
+ "online-platform",
+ "programming-environment",
+ "collaborative-environment"
+ ],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#000000",
+ "aliases": []
+ },
+ {
+ "name": "go",
+ "altnames": ["golang"],
+ "tags": ["language"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "line"],
+ "font": ["original-wordmark", "plain", "line"]
+ },
+ "color": "#00acd7",
+ "aliases": [
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "godot",
+ "altnames": [],
+ "tags": ["game-engine", "open-source"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#478cbf",
+ "aliases": []
+ },
+ {
+ "name": "goland",
+ "altnames": [],
+ "tags": ["jetbrains", "ide", "go"],
+ "versions": {
+ "svg": ["original", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#087cfa",
+ "aliases": []
+ },
+ {
+ "name": "google",
+ "altnames": [],
+ "tags": ["auth"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#587dbd",
+ "aliases": [
+ {
+ "base": "plain",
+ "alias": "original"
+ },
+ {
+ "base": "plain-wordmark",
+ "alias": "original-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "googlecloud",
+ "altnames": [],
+ "tags": ["google", "cloud"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#557ebf",
+ "aliases": []
+ },
+ {
+ "name": "googlecolab",
+ "altnames": ["googlecolaboratory"],
+ "tags": [
+ "cloud-computing-platform",
+ "data science",
+ "google",
+ "machine-learning",
+ "python",
+ "virtual machine"
+ ],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#ffb300",
+ "aliases": []
+ },
+ {
+ "name": "gradle",
+ "altnames": ["apachegradle", "gradlebuildtool"],
+ "tags": ["open-source", "task-runner"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#02303a",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "grafana",
+ "altnames": [],
+ "tags": [
+ "monitoring",
+ "analytics",
+ "metrics",
+ "logs",
+ "visualization",
+ "web-application"
+ ],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#f7a525",
+ "aliases": []
+ },
+ {
+ "name": "grails",
+ "altnames": ["Grails Framework"],
+ "tags": ["framework", "groovy", "web-development", "jvm", "build"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#feb571",
+ "aliases": []
+ },
+ {
+ "name": "graphql",
+ "altnames": [],
+ "tags": ["language", "data", "query"],
+ "versions": {
+ "svg": ["plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#e434aa",
+ "aliases": []
+ },
+ {
+ "name": "groovy",
+ "altnames": ["groovylang", "apachegroovy"],
+ "tags": ["programming", "language", "jvm"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#619cbc",
+ "aliases": []
+ },
+ {
+ "name": "grpc",
+ "altnames": ["grpcio", "Google Remote Procedure Call"],
+ "tags": ["programming", "c++", "java", "python", "go", "library"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#00b0ad",
+ "aliases": []
+ },
+ {
+ "name": "grunt",
+ "altnames": ["gruntjs"],
+ "tags": ["task-runner", "nodejs"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#fcaa1a",
+ "aliases": []
+ },
+ {
+ "name": "gulp",
+ "altnames": ["gulpjs"],
+ "tags": ["task-runner", "nodejs"],
+ "versions": {
+ "svg": ["plain"],
+ "font": ["plain"]
+ },
+ "color": "#eb4a4b",
+ "aliases": []
+ },
+ {
+ "name": "hadoop",
+ "altnames": ["Apache Hadoop"],
+ "tags": [
+ "framework",
+ "big data",
+ "open-source",
+ "software",
+ "library",
+ "framework",
+ "java"
+ ],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#ffff00",
+ "aliases": [
+ {
+ "base": "plain",
+ "alias": "line"
+ },
+ {
+ "base": "plain-wordmark",
+ "alias": "line-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "handlebars",
+ "altnames": ["handlebarsjs"],
+ "tags": ["framework"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "line", "line-wordmark"],
+ "font": ["original", "original-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#000000",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "harbor",
+ "altnames": [],
+ "tags": ["docker", "artifact", "oci", "registry"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#666666",
+ "aliases": []
+ },
+ {
+ "name": "hardhat",
+ "altnames": [],
+ "tags": ["ethereum", "development", "solidity", "javascript", "typescript"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#fff100",
+ "aliases": []
+ },
+ {
+ "name": "harvester",
+ "altnames": ["harvesterhci"],
+ "tags": ["kubernetes", "operating-system", "hypervisor", "rancher"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain-wordmark"],
+ "font": ["original", "plain-wordmark"]
+ },
+ "color": "#00A580",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "haskell",
+ "altnames": [],
+ "tags": ["language", "functional"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#5E5185",
+ "aliases": []
+ },
+ {
+ "name": "haxe",
+ "altnames": [],
+ "tags": ["language"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#EA8220",
+ "aliases": []
+ },
+ {
+ "name": "helm",
+ "altnames": [],
+ "tags": ["package", "manager", "kubernetes"],
+ "versions": {
+ "svg": ["original", "line"],
+ "font": ["original", "line"]
+ },
+ "color": "#0F1689",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "heroku",
+ "altnames": [],
+ "tags": ["cloud"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["original", "original-wordmark", "plain", "plain-wordmark"]
+ },
+ "color": "#6762a6",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "line"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "line-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "hibernate",
+ "altnames": [],
+ "tags": ["database", "framework", "java"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#bcae79",
+ "aliases": []
+ },
+ {
+ "name": "homebrew",
+ "altnames": [],
+ "tags": ["package", "manager", "linux", "apple", "os"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#fbb040",
+ "aliases": []
+ },
+ {
+ "name": "hoppscotch",
+ "altnames": [],
+ "tags": ["rest", "testing", "api"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#00d196",
+ "aliases": []
+ },
+ {
+ "name": "html5",
+ "altnames": ["hypertextmarkdownlanguage5"],
+ "tags": ["programming", "language"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#e54d26",
+ "aliases": []
+ },
+ {
+ "name": "htmx",
+ "altnames": ["html ui framework"],
+ "tags": ["framework", "web", "html", "ui"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#333333",
+ "aliases": []
+ },
+ {
+ "name": "hugo",
+ "altnames": ["gohugo"],
+ "tags": ["framework", "ssg", "static-site-generator", "go", "html", "css"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#FF4088",
+ "aliases": []
+ },
+ {
+ "name": "hyperv",
+ "altnames": ["hyper-v"],
+ "tags": ["hypervisor", "operating-system"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain"],
+ "font": ["original-wordmark", "plain"]
+ },
+ "color": "#00188f",
+ "aliases": [
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "ie10",
+ "altnames": ["internetexplorer10"],
+ "tags": ["browser"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#1EBBEE",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "ifttt",
+ "altnames": ["ifthisthenthat"],
+ "tags": ["automation", "applets", "programming"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#000",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "illustrator",
+ "altnames": ["adobeillustrator"],
+ "tags": ["editor", "vector"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#330000",
+ "aliases": []
+ },
+ {
+ "name": "inertiajs",
+ "altnames": ["inertia.js"],
+ "tags": ["javascript", "js", "library"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#8163eb",
+ "aliases": []
+ },
+ {
+ "name": "influxdb",
+ "altnames": [],
+ "tags": ["database", "monitoring", "open-source", "api"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#020a47",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "inkscape",
+ "altnames": [],
+ "tags": ["editor", "vector"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#000000",
+ "aliases": []
+ },
+ {
+ "name": "insomnia",
+ "altnames": ["Insomnia Rest Client"],
+ "tags": ["open-source", "Rest API", "Soap API", "JSON-XML"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#4000bf",
+ "aliases": []
+ },
+ {
+ "name": "intellij",
+ "altnames": ["intellijidea"],
+ "tags": ["jetbrains", "editor", "java"],
+ "versions": {
+ "svg": ["original", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#087cfa",
+ "aliases": []
+ },
+ {
+ "name": "ionic",
+ "altnames": [],
+ "tags": ["framework"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#4e8ef7",
+ "aliases": []
+ },
+ {
+ "name": "jaegertracing",
+ "altnames": ["jaeger"],
+ "tags": ["monitoring", "tracing"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#67cfe3",
+ "aliases": []
+ },
+ {
+ "name": "jamstack",
+ "altnames": [],
+ "tags": ["javascript", "markup"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain-wordmark"],
+ "font": ["original", "plain-wordmark"]
+ },
+ "color": "#F0047F",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "jasmine",
+ "altnames": ["jasminejs"],
+ "tags": ["testing"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#8a4182",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "java",
+ "altnames": [],
+ "tags": ["programming", "language", "jvm"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#EA2D2E",
+ "aliases": []
+ },
+ {
+ "name": "javascript",
+ "altnames": ["js", "ecmascript"],
+ "tags": ["programming", "language"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#f0db4f",
+ "aliases": []
+ },
+ {
+ "name": "jeet",
+ "altnames": [],
+ "tags": ["framework", "css"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#FF664A",
+ "aliases": []
+ },
+ {
+ "name": "jekyll",
+ "altnames": ["jestjs"],
+ "tags": ["ruby", "blog"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#000000",
+ "aliases": []
+ },
+ {
+ "name": "jenkins",
+ "altnames": ["hudson"],
+ "tags": ["platform", "integration", "server"],
+ "versions": {
+ "svg": ["line", "original", "plain"],
+ "font": ["line", "plain"]
+ },
+ "color": "#F0D6B7",
+ "aliases": []
+ },
+ {
+ "name": "jest",
+ "altnames": ["jestjs"],
+ "tags": ["testing", "javascript"],
+ "versions": {
+ "svg": ["plain"],
+ "font": ["plain"]
+ },
+ "color": "#99425b",
+ "aliases": []
+ },
+ {
+ "name": "jetbrains",
+ "altnames": ["intellijsoftware"],
+ "tags": ["ide"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#FDCC21",
+ "aliases": []
+ },
+ {
+ "name": "jetpackcompose",
+ "altnames": [],
+ "tags": ["framework", "language", "kotlin", "android"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain-wordmark", "plain", "line", "line-wordmark"]
+ },
+ "color": "#4285f4",
+ "aliases": []
+ },
+ {
+ "name": "jhipster",
+ "altnames": [],
+ "tags": [
+ "development",
+ "framework",
+ "java",
+ "platform",
+ "web",
+ "web-application",
+ "web-development"
+ ],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#4289c7",
+ "aliases": []
+ },
+ {
+ "name": "jira",
+ "altnames": ["atlassianjira"],
+ "tags": ["platform", "organize"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#2684ff",
+ "aliases": []
+ },
+ {
+ "name": "jiraalign",
+ "altnames": ["Jira Align"],
+ "tags": ["development", "integration", "software"],
+ "versions": {
+ "svg": ["original", "plain", "original-wordmark", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#2684FF",
+ "aliases": []
+ },
+ {
+ "name": "jquery",
+ "altnames": ["jqueryjs"],
+ "tags": ["library", "javascript"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#0769ad",
+ "aliases": []
+ },
+ {
+ "name": "json",
+ "altnames": ["JavaScript Object Notation"],
+ "tags": ["format", "standard", "file-format", "object-notation"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#505050",
+ "aliases": []
+ },
+ {
+ "name": "jule",
+ "altnames": ["julelang"],
+ "tags": ["programming", "language"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#5f7389",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "julia",
+ "altnames": ["julialang"],
+ "tags": ["programming", "language"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#28a745",
+ "aliases": []
+ },
+ {
+ "name": "junit",
+ "altnames": [],
+ "tags": ["testing", "framework", "java"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#dc514a",
+ "aliases": []
+ },
+ {
+ "name": "jupyter",
+ "altnames": ["jupyternotebook"],
+ "tags": ["programming", "language"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#F37726",
+ "aliases": []
+ },
+ {
+ "name": "k3os",
+ "altnames": [],
+ "tags": ["kubernetes", "operating-system", "k3s", "rancher"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["original", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#fd824e",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "k3s",
+ "altnames": [],
+ "tags": ["kubernetes", "container", "platform"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain-wordmark"],
+ "font": ["original", "plain-wordmark"]
+ },
+ "color": "#ffc519",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "k6",
+ "altnames": [],
+ "tags": ["testing", "performance", "load"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#7D64FF",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "kaggle",
+ "altnames": [],
+ "tags": ["platform", "auth", "machine-learning"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#20BEFF",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "kaldi",
+ "altnames": [],
+ "tags": ["audio", "open-source", "library"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#8c6432",
+ "aliases": []
+ },
+ {
+ "name": "kalilinux",
+ "altnames": ["kali"],
+ "tags": ["linux", "operating-system", "security"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["original", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#2777ff",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "karatelabs",
+ "altnames": ["karate"],
+ "tags": ["framework", "testing"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#000000",
+ "aliases": []
+ },
+ {
+ "name": "karma",
+ "altnames": ["karmarunner", "karmajs"],
+ "tags": ["testing", "test-runner"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#56c5a8",
+ "aliases": []
+ },
+ {
+ "name": "kdeneon",
+ "altnames": [],
+ "tags": ["linux", "operating system", "open-source"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#21769a",
+ "aliases": []
+ },
+ {
+ "name": "keras",
+ "altnames": [],
+ "tags": ["machine-learning", "python", "library"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#d00000",
+ "aliases": []
+ },
+ {
+ "name": "kibana",
+ "altnames": [],
+ "tags": ["elastic", "dashboard"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#F04E98",
+ "aliases": []
+ },
+ {
+ "name": "knexjs",
+ "altnames": [],
+ "tags": ["database", "query", "sql", "javascript", "library"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain-wordmark"],
+ "font": ["original", "plain-wordmark"]
+ },
+ "color": "#e16426",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "knockout",
+ "altnames": ["knockoutjs"],
+ "tags": ["framework", "javascript"],
+ "versions": {
+ "svg": ["plain-wordmark"],
+ "font": ["plain-wordmark"]
+ },
+ "color": "#e42e16",
+ "aliases": []
+ },
+ {
+ "name": "kotlin",
+ "altnames": ["kotlinlang"],
+ "tags": ["language", "jetbrains", "jvm"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#c711e1",
+ "aliases": []
+ },
+ {
+ "name": "krakenjs",
+ "altnames": ["kraken"],
+ "tags": ["nodejs", "framework"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#0081C2",
+ "aliases": []
+ },
+ {
+ "name": "ktor",
+ "altnames": [],
+ "tags": ["jetbrains", "kotlin", "framework"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#fc801d",
+ "aliases": []
+ },
+ {
+ "name": "kubeflow",
+ "altnames": [],
+ "tags": ["kubernetes", "deployment", "machine-learning"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#72a1e5",
+ "aliases": []
+ },
+ {
+ "name": "kubernetes",
+ "altnames": [],
+ "tags": ["container", "deployment"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#326ce5",
+ "aliases": []
+ },
+ {
+ "name": "labview",
+ "altnames": [],
+ "tags": ["language"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#fed500",
+ "aliases": []
+ },
+ {
+ "name": "laminas",
+ "altnames": ["Laminas Project", "Zend Framework"],
+ "tags": ["php", "framework", "web", "mvc", "middleware"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "line", "line-wordmark"],
+ "font": ["original", "original-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#013755",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "laravel",
+ "altnames": [],
+ "tags": ["php", "framework"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "line", "line-wordmark"],
+ "font": ["original", "original-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#f0513f",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "laraveljetstream",
+ "altnames": ["jetstream", "Laravel Jetstream"],
+ "tags": ["php", "laravel", "tailwind", "scaffolding"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain-wordmark"],
+ "font": ["original", "plain-wordmark"]
+ },
+ "color": "#6875f5",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "latex",
+ "altnames": [],
+ "tags": ["latex3", "latex2e", "markup", "tex", "typesetting-system"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#000000",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "leetcode",
+ "altnames": [],
+ "tags": [
+ "online-platform",
+ "coding-platform",
+ "platform",
+ "coding",
+ "dsa",
+ "interview-preparation"
+ ],
+ "versions": {
+ "svg": [
+ "original",
+ "plain",
+ "line",
+ "original-wordmark",
+ "plain-wordmark",
+ "line-wordmark"
+ ],
+ "font": ["plain", "line", "plain-wordmark", "line-wordmark"]
+ },
+ "color": "#ffa116",
+ "aliases": []
+ },
+ {
+ "name": "less",
+ "altnames": ["lesscss"],
+ "tags": ["css", "pre-processor"],
+ "versions": {
+ "svg": ["plain-wordmark"],
+ "font": ["plain-wordmark"]
+ },
+ "color": "#2a4d80",
+ "aliases": []
+ },
+ {
+ "name": "libgdx",
+ "altnames": [],
+ "tags": [
+ "framework",
+ "java",
+ "game-development",
+ "cross-platform",
+ "open-source"
+ ],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#e74a45",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "original-wordmark"
+ },
+ {
+ "base": "plain",
+ "alias": "plain-wordmark"
+ },
+ {
+ "base": "line",
+ "alias": "line-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "linkedin",
+ "altnames": [],
+ "tags": ["social", "auth"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#0076b2",
+ "aliases": []
+ },
+ {
+ "name": "linux",
+ "altnames": [],
+ "tags": ["os"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#000000",
+ "aliases": []
+ },
+ {
+ "name": "linuxmint",
+ "altnames": [],
+ "tags": ["os", "linux"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#69b53f",
+ "aliases": []
+ },
+ {
+ "name": "liquibase",
+ "altnames": [],
+ "tags": ["tool", "database"],
+ "versions": {
+ "svg": ["original-wordmark", "original"],
+ "font": ["original-wordmark", "original"]
+ },
+ "color": "#FF3C00",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "livewire",
+ "altnames": ["laravel-livewire"],
+ "tags": ["framework", "laravel", "php", "open-source"],
+ "versions": {
+ "svg": ["original-wordmark", "original", "plain", "plain-wordmark"],
+ "font": ["plain-wordmark", "plain"]
+ },
+ "color": "#FB70A9",
+ "aliases": []
+ },
+ {
+ "name": "llvm",
+ "altnames": ["Low Level Virtual Machine"],
+ "tags": ["compiler", "framework", "c++", "open-source"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#5A90B6",
+ "aliases": []
+ },
+ {
+ "name": "lodash",
+ "altnames": [],
+ "tags": ["javascript", "framework"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#000",
+ "aliases": []
+ },
+ {
+ "name": "logstash",
+ "altnames": [],
+ "tags": ["logs", "elastic"],
+ "versions": {
+ "svg": ["original-wordmark", "original", "plain-wordmark", "plain"],
+ "font": ["plain-wordmark", "plain"]
+ },
+ "color": "#fec514",
+ "aliases": []
+ },
+ {
+ "name": "love2d",
+ "altnames": ["lΓΆve"],
+ "tags": ["programming", "game-engine"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#fff",
+ "aliases": []
+ },
+ {
+ "name": "lua",
+ "altnames": ["lualang"],
+ "tags": [
+ "programming",
+ "language",
+ "object-oriented",
+ "scripting",
+ "procedural",
+ "prototype-based",
+ "functional"
+ ],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#000080",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "original-wordmark"
+ },
+ {
+ "base": "plain",
+ "alias": "plain-wordmark"
+ },
+ {
+ "base": "line",
+ "alias": "line-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "lumen",
+ "altnames": [
+ "Laravel Lumen",
+ "Lumen Laravel",
+ "Laravel Lumen Framework",
+ "laravel.lumen"
+ ],
+ "tags": ["laravel", "php", "framework", "micro-framework"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#e54537",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "magento",
+ "altnames": [],
+ "tags": ["php", "framework"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["original", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#f26322",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "mapbox",
+ "altnames": [],
+ "tags": ["map", "navigation", "data"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#000000",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original",
+ "alias": "original-wordmark"
+ },
+ {
+ "base": "original",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "mariadb",
+ "altnames": [],
+ "tags": ["database", "sql", "open-source"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#003545",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "markdown",
+ "altnames": ["md"],
+ "tags": ["markup", "language"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#000000",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "materializecss",
+ "altnames": ["materialize", "materialize-css", "materialize css"],
+ "tags": ["framework", "css", "design", "material-design"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#EB7077",
+ "aliases": []
+ },
+ {
+ "name": "materialui",
+ "altnames": ["mui"],
+ "tags": ["framework", "design", "ui"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#1FA6CA",
+ "aliases": []
+ },
+ {
+ "name": "matlab",
+ "altnames": [],
+ "tags": ["programming", "language"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#6dd0c7",
+ "aliases": []
+ },
+ {
+ "name": "matplotlib",
+ "altnames": [],
+ "tags": ["plotting", "library", "math", "visualization", "python", "api"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#11557C",
+ "aliases": []
+ },
+ {
+ "name": "mattermost",
+ "altnames": [],
+ "tags": ["app", "chat", "collaboration", "open-source", "platform"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#19191c",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "maven",
+ "altnames": ["apachemaven", "mvn"],
+ "tags": ["build"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#e97826",
+ "aliases": []
+ },
+ {
+ "name": "maya",
+ "altnames": [],
+ "tags": [
+ "mel",
+ "pymel",
+ "python",
+ "3d",
+ "programming",
+ "vfx",
+ "graphic",
+ "graphics",
+ "game",
+ "animation"
+ ],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#149B9A",
+ "aliases": []
+ },
+ {
+ "name": "memcached",
+ "altnames": [],
+ "tags": ["data", "database", "nosql"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#2A9790",
+ "aliases": []
+ },
+ {
+ "name": "mercurial",
+ "altnames": [],
+ "tags": ["version-control"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#999",
+ "aliases": []
+ },
+ {
+ "name": "meteor",
+ "altnames": ["meteorjs"],
+ "tags": ["javascript", "framework"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#df5052",
+ "aliases": []
+ },
+ {
+ "name": "microsoftsqlserver",
+ "altnames": ["msql", "mssql", "Microsoft SQL Server"],
+ "tags": ["database", "sql", "db"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#ee352c",
+ "aliases": []
+ },
+ {
+ "name": "minitab",
+ "altnames": [],
+ "tags": ["package", "statistics"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#8dc63f",
+ "aliases": []
+ },
+ {
+ "name": "mithril",
+ "altnames": ["mithril.js"],
+ "tags": ["javascript", "framework", "frontend", "js"],
+ "versions": {
+ "svg": ["original", "line"],
+ "font": ["original", "line"]
+ },
+ "color": "#010002",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "mobx",
+ "altnames": ["mobxjs"],
+ "tags": ["state-management", "testing", "reactjs", "nodejs"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#e05e11",
+ "aliases": []
+ },
+ {
+ "name": "mocha",
+ "altnames": [],
+ "tags": ["testing"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#8d6748",
+ "aliases": []
+ },
+ {
+ "name": "modx",
+ "altnames": [],
+ "tags": ["cms", "php", "framework"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#00decc",
+ "aliases": []
+ },
+ {
+ "name": "moleculer",
+ "altnames": ["moleculerjs", "moleculer.js"],
+ "tags": [
+ "nodejs",
+ "javascript",
+ "js",
+ "microservices",
+ "micro-services",
+ "framework"
+ ],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#3cafce",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "mongodb",
+ "altnames": [],
+ "tags": ["database"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#4FAA41",
+ "aliases": []
+ },
+ {
+ "name": "mongoose",
+ "altnames": ["mongoosejs"],
+ "tags": ["data-model", "nodejs"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#860000",
+ "aliases": []
+ },
+ {
+ "name": "monogame",
+ "altnames": [],
+ "tags": ["engine", "game-engine", "C#", "c-sharp", "csharp"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["original", "line", "line-wordmark"]
+ },
+ "color": "#e73c00",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "moodle",
+ "altnames": [],
+ "tags": ["platform"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#F7931E",
+ "aliases": []
+ },
+ {
+ "name": "msdos",
+ "altnames": ["microsoftdiskoperatingsystem"],
+ "tags": ["os"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#000",
+ "aliases": []
+ },
+ {
+ "name": "mysql",
+ "altnames": ["mystructuredquerylanguage"],
+ "tags": ["database", "language"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain-wordmark"],
+ "font": ["original", "plain-wordmark"]
+ },
+ "color": "#00618a",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "nano",
+ "altnames": ["gnu-nano", "GNU nano"],
+ "tags": ["text editor", "editor", "GNU", "terminal"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#C8F",
+ "aliases": []
+ },
+ {
+ "name": "nats",
+ "altnames": ["nats-io", "nats.io", "NATS-io", "NATS.io"],
+ "tags": ["streaming", "open-source", "go"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#27aae1",
+ "aliases": []
+ },
+ {
+ "name": "neo4j",
+ "altnames": [],
+ "tags": ["database"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#018BFF",
+ "aliases": []
+ },
+ {
+ "name": "neovim",
+ "altnames": [],
+ "tags": ["text editor", "editor", "ide", "IDE", "open-source"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#5fb950",
+ "aliases": []
+ },
+ {
+ "name": "nestjs",
+ "altnames": [],
+ "tags": ["framework"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "line", "line-wordmark"],
+ "font": ["original", "original-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#df234f",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "netbeans",
+ "altnames": [],
+ "tags": ["ide", "java", "open-source"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#1e6abf",
+ "aliases": []
+ },
+ {
+ "name": "netbox",
+ "altnames": [],
+ "tags": ["network", "automation", "infrastructure", "open-source"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#00857d",
+ "aliases": []
+ },
+ {
+ "name": "netlify",
+ "altnames": [],
+ "tags": [
+ "cloud hosting",
+ "serverless",
+ "dynamic websites",
+ "web applications",
+ "open-source"
+ ],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#05BDBA",
+ "aliases": []
+ },
+ {
+ "name": "networkx",
+ "altnames": [],
+ "tags": ["graph", "library", "python"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#2c7fb8",
+ "aliases": []
+ },
+ {
+ "name": "newrelic",
+ "altnames": [],
+ "tags": ["monitoring", "observability", "analysis"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#1d252c",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "original-wordmark"
+ },
+ {
+ "base": "plain",
+ "alias": "plain-wordmark"
+ },
+ {
+ "base": "line",
+ "alias": "line-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "nextjs",
+ "altnames": [],
+ "tags": ["framework"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["original-wordmark", "plain", "line", "line-wordmark"]
+ },
+ "color": "#000",
+ "aliases": [
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "nginx",
+ "altnames": [],
+ "tags": ["server"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#090",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "original-wordmark"
+ },
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "ngrok",
+ "altnames": [],
+ "tags": ["networking", "server"],
+ "versions": {
+ "svg": ["original", "line"],
+ "font": ["original", "line"]
+ },
+ "color": "#02228e",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "original-wordmark"
+ },
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original",
+ "alias": "plain-wordmark"
+ },
+ {
+ "base": "line",
+ "alias": "line-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "ngrx",
+ "altnames": [],
+ "tags": ["state-management", "angular", "redux", "store", "javascript"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#ba2bd2",
+ "aliases": []
+ },
+ {
+ "name": "nhibernate",
+ "altnames": [],
+ "tags": [
+ "library",
+ "dotnet",
+ ".net",
+ "object-relational mapper",
+ "orm",
+ "C#",
+ "c-sharp"
+ ],
+ "versions": {
+ "svg": [
+ "original-wordmark",
+ "original",
+ "plain-wordmark",
+ "plain",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain-wordmark", "plain", "line", "line-wordmark"]
+ },
+ "color": "#903a36",
+ "aliases": []
+ },
+ {
+ "name": "nim",
+ "altnames": ["nimlang"],
+ "tags": ["programming", "functional", "object-oriented", "procedural"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#ffe953",
+ "aliases": []
+ },
+ {
+ "name": "nimble",
+ "altnames": [],
+ "tags": ["package-manager"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#f7e941",
+ "aliases": []
+ },
+ {
+ "name": "nixos",
+ "altnames": [],
+ "tags": ["os"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#5277C3",
+ "aliases": []
+ },
+ {
+ "name": "nodejs",
+ "altnames": [],
+ "tags": ["javascript", "language"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#5fa04e",
+ "aliases": []
+ },
+ {
+ "name": "nodemon",
+ "altnames": ["nodemonjs"],
+ "tags": ["nodejs", "tool", "javascript"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#76d04b",
+ "aliases": []
+ },
+ {
+ "name": "nodered",
+ "altnames": ["node-red"],
+ "tags": ["programming", "tool"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#8f0000",
+ "aliases": []
+ },
+ {
+ "name": "nodewebkit",
+ "altnames": ["nwjs"],
+ "tags": [],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#3d3b47",
+ "aliases": []
+ },
+ {
+ "name": "nomad",
+ "altnames": ["HashiCorp Nomad"],
+ "tags": ["container", "virtual machine", "deployment"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain-wordmark"],
+ "font": ["original", "plain-wordmark"]
+ },
+ "color": "#00ca8e",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "norg",
+ "altnames": ["neorg"],
+ "tags": ["note-taking", "organization"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#4878be",
+ "aliases": []
+ },
+ {
+ "name": "notion",
+ "altnames": [],
+ "tags": ["project-management"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#fff",
+ "aliases": []
+ },
+ {
+ "name": "npm",
+ "altnames": ["npmjs", "nodepackagemanager"],
+ "tags": ["package", "manager"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain"],
+ "font": ["original-wordmark", "plain"]
+ },
+ "color": "#cb3837",
+ "aliases": []
+ },
+ {
+ "name": "npss",
+ "altnames": [],
+ "tags": [],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#0a37b2",
+ "aliases": []
+ },
+ {
+ "name": "nuget",
+ "altnames": [],
+ "tags": ["package", "manager"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#004880",
+ "aliases": []
+ },
+ {
+ "name": "numpy",
+ "altnames": [],
+ "tags": ["library", "python"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#4dabcf",
+ "aliases": []
+ },
+ {
+ "name": "nuxt",
+ "altnames": [],
+ "tags": ["js", "javascript", "framework", "fullstack", "vuejs"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain-wordmark"],
+ "font": ["original", "plain-wordmark"]
+ },
+ "color": "#00dc82",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "nuxtjs",
+ "altnames": [],
+ "tags": ["js", "javascript", "framework", "frontend", "vuejs"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#00c48d",
+ "aliases": []
+ },
+ {
+ "name": "oauth",
+ "altnames": [],
+ "tags": ["authentication", "security"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#000000",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "original-wordmark"
+ },
+ {
+ "base": "plain",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "objectivec",
+ "altnames": [],
+ "tags": ["programming", "language"],
+ "versions": {
+ "svg": ["plain"],
+ "font": ["plain"]
+ },
+ "color": "#0b5a9d",
+ "aliases": []
+ },
+ {
+ "name": "ocaml",
+ "altnames": [],
+ "tags": ["programming", "language"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#F18803",
+ "aliases": []
+ },
+ {
+ "name": "ohmyzsh",
+ "altnames": ["omz", "ohmyz.sh", "Oh My Zsh"],
+ "tags": ["shell", "script", "scripting", "language", "command"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#000000",
+ "aliases": []
+ },
+ {
+ "name": "okta",
+ "altnames": ["okta developer"],
+ "tags": ["auth", "security"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#0f82c2",
+ "aliases": []
+ },
+ {
+ "name": "openal",
+ "altnames": [],
+ "tags": ["library", "audio", "game", "3d"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#7e000d",
+ "aliases": []
+ },
+ {
+ "name": "openapi",
+ "altnames": [],
+ "tags": ["specification", "api", "open-source"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#91d400",
+ "aliases": []
+ },
+ {
+ "name": "opencl",
+ "altnames": [],
+ "tags": [
+ "framework",
+ "language",
+ "heterogeneous-computing",
+ "cpp",
+ "api",
+ "khronos",
+ "programming"
+ ],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#000",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "original-wordmark"
+ },
+ {
+ "base": "plain",
+ "alias": "plain-wordmark"
+ },
+ {
+ "base": "line",
+ "alias": "line-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "opencv",
+ "altnames": [],
+ "tags": ["library", "c/c++", "computer-vision"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#128dff",
+ "aliases": []
+ },
+ {
+ "name": "opengl",
+ "altnames": ["opengraphicslibrary"],
+ "tags": ["library", "graphics", "game", "3d"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#5586a4",
+ "aliases": []
+ },
+ {
+ "name": "openstack",
+ "altnames": [],
+ "tags": ["infrastructure-as-a-service", "cloud-computing-platform"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain-wordmark"],
+ "font": ["original", "plain-wordmark"]
+ },
+ "color": "#ed1944",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "opensuse",
+ "altnames": [],
+ "tags": ["linux", "distribution", "desktop"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#73ba25",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "opentelemetry",
+ "altnames": [],
+ "tags": ["telemetry"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#f5a800",
+ "aliases": []
+ },
+ {
+ "name": "opera",
+ "altnames": [],
+ "tags": ["browser"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#f7192d",
+ "aliases": []
+ },
+ {
+ "name": "oracle",
+ "altnames": ["oracledatabase"],
+ "tags": ["database"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#EA1B22",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "ory",
+ "altnames": [],
+ "tags": ["library", "open-source", "security"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#5528ff",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "p5js",
+ "altnames": ["p5.js"],
+ "tags": ["javascript", "js", "library"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#ED225D",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original",
+ "alias": "original-wordmark"
+ },
+ {
+ "base": "original",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "packer",
+ "altnames": [],
+ "tags": ["infrastructure", "infrastructure-as-code", "continuous-delivery"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#1d94dd",
+ "aliases": []
+ },
+ {
+ "name": "pandas",
+ "altnames": [],
+ "tags": ["library", "python"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#130754",
+ "aliases": []
+ },
+ {
+ "name": "passport",
+ "altnames": ["passportjs"],
+ "tags": ["authentication", "security"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain"],
+ "font": ["plain", "original-wordmark"]
+ },
+ "color": "#35df79",
+ "aliases": [
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "perl",
+ "altnames": [],
+ "tags": ["programming", "language"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#212177",
+ "aliases": []
+ },
+ {
+ "name": "pfsense",
+ "altnames": ["pfSense"],
+ "tags": ["cloud", "network", "open-source", "security", "software"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#000000",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "phalcon",
+ "altnames": [],
+ "tags": ["php", "framework"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#76c39b",
+ "aliases": []
+ },
+ {
+ "name": "phoenix",
+ "altnames": ["Phoenix Framework"],
+ "tags": [
+ "framework",
+ "build",
+ "web",
+ "web-development",
+ "development",
+ "elixir"
+ ],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain-wordmark"],
+ "font": ["original", "plain-wordmark"]
+ },
+ "color": "#FD4F00",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "photonengine",
+ "altnames": ["photon"],
+ "tags": ["game", "game-engine"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#004480",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "original-wordmark"
+ },
+ {
+ "base": "plain",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "photoshop",
+ "altnames": ["adobephotoshop"],
+ "tags": ["editor", "graphic"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#001e36",
+ "aliases": []
+ },
+ {
+ "name": "php",
+ "altnames": ["PHP Hypertext Preprocessor", "Personal Home Page"],
+ "tags": ["programming", "language"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#777bb3",
+ "aliases": []
+ },
+ {
+ "name": "phpstorm",
+ "altnames": [],
+ "tags": ["jetbrains", "editor", "php", "web", "html"],
+ "versions": {
+ "svg": ["original", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#b74af7",
+ "aliases": []
+ },
+ {
+ "name": "pixijs",
+ "altnames": [],
+ "tags": [
+ "animation",
+ "graphics",
+ "html",
+ "javascript",
+ "library",
+ "visualization",
+ "ui"
+ ],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#e72264",
+ "aliases": []
+ },
+ {
+ "name": "playwright",
+ "altnames": [],
+ "tags": ["testing", "framework"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#2EAD33",
+ "aliases": []
+ },
+ {
+ "name": "plotly",
+ "altnames": [],
+ "tags": ["frontend", "machine-learning", "dashboard"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#3d4c73",
+ "aliases": []
+ },
+ {
+ "name": "pm2",
+ "altnames": [],
+ "tags": ["nodejs", "javascript", "js", "manager", "monitoring"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#000",
+ "aliases": []
+ },
+ {
+ "name": "pnpm",
+ "altnames": ["performant npm"],
+ "tags": ["package", "manager"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#f9ad00",
+ "aliases": []
+ },
+ {
+ "name": "podman",
+ "altnames": [],
+ "tags": ["container", "pods", "docker"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#892ca0",
+ "aliases": []
+ },
+ {
+ "name": "poetry",
+ "altnames": ["python-poetry"],
+ "tags": ["package-manager", "python"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["plain"]
+ },
+ "color": "#0080c5",
+ "aliases": []
+ },
+ {
+ "name": "polygon",
+ "altnames": [],
+ "tags": ["ethereum", "erc20", "blockchain"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#7950DD",
+ "aliases": []
+ },
+ {
+ "name": "portainer",
+ "altnames": [],
+ "tags": ["docker", "kubernetes", "orchestrator"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#3BBCED",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "postcss",
+ "altnames": [],
+ "tags": ["pre-processor", "css", "framework"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain-wordmark"],
+ "font": ["original", "plain-wordmark"]
+ },
+ "color": "#DD3A0A",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "postgresql",
+ "altnames": [],
+ "tags": ["database"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#336791",
+ "aliases": []
+ },
+ {
+ "name": "postman",
+ "altnames": [],
+ "tags": ["tool", "testing"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#f37036",
+ "aliases": []
+ },
+ {
+ "name": "powershell",
+ "altnames": ["ps"],
+ "tags": ["command-line", "shell", "terminal", "cli", "windows", "cmdlets"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#1E2A3A",
+ "aliases": []
+ },
+ {
+ "name": "premierepro",
+ "altnames": ["adobepremierepro"],
+ "tags": ["editor", "video"],
+ "versions": {
+ "svg": ["plain", "original"],
+ "font": ["plain"]
+ },
+ "color": "#2A0634",
+ "aliases": []
+ },
+ {
+ "name": "primeng",
+ "altnames": [],
+ "tags": ["angular", "ui", "component", "library", "framework"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#000",
+ "aliases": []
+ },
+ {
+ "name": "prisma",
+ "altnames": [],
+ "tags": ["orm", "nodejs", "typescript"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#2D3748",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "processing",
+ "altnames": ["processingpy"],
+ "tags": ["java", "python", "android", "application", "ide", "framework"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#1f34ab",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "original-wordmark"
+ },
+ {
+ "base": "plain",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "processwire",
+ "altnames": [],
+ "tags": ["cms", "php", "framework"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain-wordmark"],
+ "font": ["original", "plain-wordmark"]
+ },
+ "color": "#1e87f0",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "prolog",
+ "altnames": ["swi-prolog"],
+ "tags": ["programming", "logic", "language", "open-source"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#F46C30",
+ "aliases": []
+ },
+ {
+ "name": "prometheus",
+ "altnames": [],
+ "tags": ["monitoring", "observability", "analysis"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["original", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#e75225",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "protractor",
+ "altnames": ["protractorjs", "protractortest"],
+ "tags": ["framework", "javascript"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#d51c2f",
+ "aliases": []
+ },
+ {
+ "name": "proxmox",
+ "altnames": [],
+ "tags": ["container", "lxc", "virtual machine"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#e57000",
+ "aliases": []
+ },
+ {
+ "name": "pug",
+ "altnames": ["pugjs"],
+ "tags": ["framework", "javascript", "nodejs"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#56332b",
+ "aliases": []
+ },
+ {
+ "name": "pulsar",
+ "altnames": ["Pulsar Edit"],
+ "tags": ["open-source", "cross-platform", "editor"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#2c3e50",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "pulumi",
+ "altnames": [],
+ "tags": ["infrastructure-as-code", "cloud"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#f6bf29",
+ "aliases": []
+ },
+ {
+ "name": "puppeteer",
+ "altnames": [],
+ "tags": ["open-source", "devtools protocol", "testing", "extension"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#00d8a2",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "original-wordmark"
+ },
+ {
+ "base": "plain",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "purescript",
+ "altnames": [],
+ "tags": ["functional", "programming", "javascript"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#14161a",
+ "aliases": []
+ },
+ {
+ "name": "putty",
+ "altnames": [],
+ "tags": ["ssh", "server"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#0000fc",
+ "aliases": []
+ },
+ {
+ "name": "pycharm",
+ "altnames": [],
+ "tags": ["jetbrains", "editor"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#21D789",
+ "aliases": []
+ },
+ {
+ "name": "pypi",
+ "altnames": ["Python Package Index"],
+ "tags": ["python", "package", "programming"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#3775a9",
+ "aliases": []
+ },
+ {
+ "name": "pyscript",
+ "altnames": [],
+ "tags": ["browser", "python", "html", "framework"],
+ "versions": {
+ "svg": ["original-wordmark", "plain-wordmark"],
+ "font": ["plain-wordmark"]
+ },
+ "color": "#fda703",
+ "aliases": []
+ },
+ {
+ "name": "pytest",
+ "altnames": [],
+ "tags": ["python", "framework", "testing"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#009fe3",
+ "aliases": []
+ },
+ {
+ "name": "python",
+ "altnames": [],
+ "tags": ["programming", "language"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#ffd845",
+ "aliases": []
+ },
+ {
+ "name": "pytorch",
+ "altnames": [],
+ "tags": ["programming", "framework", "machine-learning", "python"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain-wordmark"],
+ "font": ["original", "plain-wordmark"]
+ },
+ "color": "#EE4C2C",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "qodana",
+ "altnames": [],
+ "tags": ["jetbrains", "code quality", "security"],
+ "versions": {
+ "svg": ["original", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#ff318c",
+ "aliases": []
+ },
+ {
+ "name": "qt",
+ "altnames": [],
+ "tags": ["framework"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#41cd52",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "qtest",
+ "altnames": [],
+ "tags": ["testing"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#1a62b3",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "quarkus",
+ "altnames": [],
+ "tags": ["java", "framework"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#4695EB",
+ "aliases": []
+ },
+ {
+ "name": "quasar",
+ "altnames": [],
+ "tags": ["framework", "javascript"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain-wordmark", "plain"]
+ },
+ "color": "#00b4ff",
+ "aliases": []
+ },
+ {
+ "name": "qwik",
+ "altnames": [],
+ "tags": ["framework", "open-source"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#18B6F6",
+ "aliases": []
+ },
+ {
+ "name": "r",
+ "altnames": ["rlang"],
+ "tags": ["programming", "language"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#1f65b7",
+ "aliases": []
+ },
+ {
+ "name": "rabbitmq",
+ "altnames": [],
+ "tags": ["message-broker", "open-source"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain-wordmark"],
+ "font": ["original", "plain-wordmark"]
+ },
+ "color": "#ff6600",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "racket",
+ "altnames": [],
+ "tags": ["programming", "language"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#9f1d20",
+ "aliases": []
+ },
+ {
+ "name": "radstudio",
+ "altnames": ["RAD Studio"],
+ "tags": ["editor", "IDE"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#f42434",
+ "aliases": []
+ },
+ {
+ "name": "rails",
+ "altnames": ["rubyonrails"],
+ "tags": ["framework"],
+ "versions": {
+ "svg": ["original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#CC0000",
+ "aliases": []
+ },
+ {
+ "name": "railway",
+ "altnames": [],
+ "tags": ["hosting", "platform", "deployment"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "line", "line-wordmark"],
+ "font": ["original", "original-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#fff",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "rancher",
+ "altnames": [],
+ "tags": ["kubernetes", "orchestrator"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["original", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#2453FF",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "raspberrypi",
+ "altnames": ["rpi"],
+ "tags": ["arm", "computer"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#c51850",
+ "aliases": []
+ },
+ {
+ "name": "reach",
+ "altnames": ["Reach Lang"],
+ "tags": ["web3", "blockchain", "development"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#6AC6E7",
+ "aliases": []
+ },
+ {
+ "name": "react",
+ "altnames": ["reactjs"],
+ "tags": ["framework"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#61dafb",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "reactbootstrap",
+ "altnames": ["React-Bootstrap", "react bootstrap"],
+ "tags": ["framework", "library", "frontend", "reactjs", "javascript"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#41e0fd",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "reactnative",
+ "altnames": ["react-native"],
+ "tags": ["framework"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#61dafb",
+ "aliases": []
+ },
+ {
+ "name": "reactnavigation",
+ "altnames": [],
+ "tags": ["routing", "navigation", "react native", "app", "open-source"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#7b61c1",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "reactrouter",
+ "altnames": [],
+ "tags": ["framework", "react"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#f44250",
+ "aliases": []
+ },
+ {
+ "name": "readthedocs",
+ "altnames": ["Read The Docs"],
+ "tags": ["documentation", "python", "open-source"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "line"],
+ "font": ["original", "original-wordmark", "line"]
+ },
+ "color": "#32322A",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "realm",
+ "altnames": [],
+ "tags": ["sql", "database", "cloud"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#6e60f9",
+ "aliases": []
+ },
+ {
+ "name": "rect",
+ "altnames": ["rectlang"],
+ "tags": ["programming", "language"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#262626",
+ "aliases": []
+ },
+ {
+ "name": "redhat",
+ "altnames": [],
+ "tags": ["server", "linux"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#e93442",
+ "aliases": []
+ },
+ {
+ "name": "redis",
+ "altnames": ["remotedictionaryserver"],
+ "tags": ["server"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#d82c20",
+ "aliases": []
+ },
+ {
+ "name": "redux",
+ "altnames": ["reduxjs"],
+ "tags": ["framework"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#764abc",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "reflex",
+ "altnames": [],
+ "tags": ["framework", "python", "web"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#664ec6",
+ "aliases": []
+ },
+ {
+ "name": "remix",
+ "altnames": ["remix.run"],
+ "tags": ["framework", "fullstack", "web"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "line", "line-wordmark"],
+ "font": ["original", "original-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#121212",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "renpy",
+ "altnames": ["Ren'Py"],
+ "tags": ["programming", "game-engine", "engine", "python"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#ff7f7f",
+ "aliases": []
+ },
+ {
+ "name": "replit",
+ "altnames": [],
+ "tags": ["software"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain-wordmark"],
+ "font": ["original", "plain-wordmark"]
+ },
+ "color": "#F26207",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "rexx",
+ "altnames": [],
+ "tags": ["language"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#d81511",
+ "aliases": []
+ },
+ {
+ "name": "rider",
+ "altnames": [],
+ "tags": ["jetbrains", "ide", "editor", "dotnet"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#dd1265",
+ "aliases": []
+ },
+ {
+ "name": "rocksdb",
+ "altnames": [],
+ "tags": ["database"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#ffbe00",
+ "aliases": []
+ },
+ {
+ "name": "rockylinux",
+ "altnames": ["rocky"],
+ "tags": ["os", "open-source", "linux"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain-wordmark"],
+ "font": ["original", "plain-wordmark"]
+ },
+ "color": "#10b982",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "rollup",
+ "altnames": ["rollupjs", "rollup.js"],
+ "tags": ["bundler", "build", "javascript"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#ff3333",
+ "aliases": []
+ },
+ {
+ "name": "ros",
+ "altnames": ["robotoperatingsystem"],
+ "tags": ["robotics"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#21304c",
+ "aliases": []
+ },
+ {
+ "name": "rspec",
+ "altnames": [],
+ "tags": ["ruby", "framework", "testing"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#6de1fa",
+ "aliases": []
+ },
+ {
+ "name": "rstudio",
+ "altnames": [],
+ "tags": ["editor", "package", "statistics"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#75aadb",
+ "aliases": []
+ },
+ {
+ "name": "ruby",
+ "altnames": ["rubylang"],
+ "tags": ["programming", "language"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#d91404",
+ "aliases": []
+ },
+ {
+ "name": "rubymine",
+ "altnames": [],
+ "tags": ["jetbrains", "editor"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#FC801D",
+ "aliases": []
+ },
+ {
+ "name": "rust",
+ "altnames": ["rustlang"],
+ "tags": ["programming", "language"],
+ "versions": {
+ "svg": ["original", "line"],
+ "font": ["original", "line"]
+ },
+ "color": "#000",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "rxjs",
+ "altnames": ["Reactive Extensions for JavaScript"],
+ "tags": ["javascript", "library", "observability"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#df1c85",
+ "aliases": []
+ },
+ {
+ "name": "safari",
+ "altnames": ["applesafari"],
+ "tags": ["browser"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line-wordmark",
+ "line"
+ ],
+ "font": ["plain", "plain-wordmark", "line-wordmark", "line"]
+ },
+ "color": "#1B88CA",
+ "aliases": []
+ },
+ {
+ "name": "salesforce",
+ "altnames": [],
+ "tags": ["platform", "ecommerce"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#00a1e0",
+ "aliases": []
+ },
+ {
+ "name": "sanity",
+ "altnames": [],
+ "tags": ["CMS"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#F03E2F",
+ "aliases": []
+ },
+ {
+ "name": "sass",
+ "altnames": ["scss"],
+ "tags": ["pre-processor", "css"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#cc6699",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "scala",
+ "altnames": ["scalalang"],
+ "tags": ["programming", "language", "jvm"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#de3423",
+ "aliases": []
+ },
+ {
+ "name": "scalingo",
+ "altnames": [],
+ "tags": ["cloud", "platform", "hosting"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#173aee",
+ "aliases": []
+ },
+ {
+ "name": "scikitlearn",
+ "altnames": ["scikit-learn", "scikit", "sklearn"],
+ "tags": ["machine-learning", "python", "tool", "library"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#f89939",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "original-wordmark"
+ },
+ {
+ "base": "plain",
+ "alias": "plain-wordmark"
+ },
+ {
+ "base": "line",
+ "alias": "line-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "sdl",
+ "altnames": ["simpledirectmedialayer"],
+ "tags": ["library", "cross-platform", "multimedia", "game"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#173354",
+ "aliases": []
+ },
+ {
+ "name": "selenium",
+ "altnames": [],
+ "tags": ["webdrive", "automation"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#CF0A2C",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "sema",
+ "altnames": ["Sema Software"],
+ "tags": [
+ "software",
+ "development",
+ "company",
+ "code-review",
+ "open-source"
+ ],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#000",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "sentry",
+ "altnames": [],
+ "tags": ["monitoring", "analytics", "metrics"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#362d59",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "sequelize",
+ "altnames": ["sequelizejs"],
+ "tags": ["database", "language"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#3b4b72",
+ "aliases": []
+ },
+ {
+ "name": "shopware",
+ "altnames": [],
+ "tags": ["cloud", "platform"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#179eff",
+ "aliases": []
+ },
+ {
+ "name": "shotgrid",
+ "altnames": [],
+ "tags": [
+ "web-application",
+ "autodesk",
+ "project-management",
+ "pipeline",
+ "production-tool",
+ "production-tracking"
+ ],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain"],
+ "font": ["plain", "original-wordmark"]
+ },
+ "color": "#000000",
+ "aliases": [
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "sketch",
+ "altnames": [],
+ "tags": ["application"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#fdad00",
+ "aliases": []
+ },
+ {
+ "name": "slack",
+ "altnames": [],
+ "tags": ["chat"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#2D333A",
+ "aliases": []
+ },
+ {
+ "name": "socketio",
+ "altnames": [],
+ "tags": ["library", "networking", "websockets"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#010101",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "solidity",
+ "altnames": ["soliditylang"],
+ "tags": ["programming", "language", "blockchain"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#383838",
+ "aliases": []
+ },
+ {
+ "name": "solidjs",
+ "altnames": [],
+ "tags": ["javascript", "framework", "frontend"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#2c4f7c",
+ "aliases": []
+ },
+ {
+ "name": "sonarqube",
+ "altnames": ["sonar"],
+ "tags": ["tool", "security"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["original", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#549dd0",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "sourceengine",
+ "altnames": ["source engine"],
+ "tags": ["game-engine", "valve", "javascript"],
+ "versions": {
+ "svg": ["original", "plain", "original-wordmark", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#f79a10",
+ "aliases": []
+ },
+ {
+ "name": "sourcetree",
+ "altnames": [],
+ "tags": ["version-control"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#205081",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "spack",
+ "altnames": [],
+ "tags": ["package-manager", "package", "manager", "python", "open-source"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#0F3A80",
+ "aliases": []
+ },
+ {
+ "name": "spicedb",
+ "altnames": [],
+ "tags": ["database", "authorization", "access-control", "Zanzibar"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#FB5B62",
+ "aliases": []
+ },
+ {
+ "name": "splunk",
+ "altnames": [],
+ "tags": ["platform", "data", "log", "monitoring"],
+ "versions": {
+ "svg": ["original-wordmark"],
+ "font": ["original-wordmark"]
+ },
+ "color": "#0C1724",
+ "aliases": [
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "spring",
+ "altnames": ["springframework"],
+ "tags": ["framework"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#5FB832",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "spss",
+ "altnames": ["ibmspss"],
+ "tags": ["package", "statistics"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#cc1e4c",
+ "aliases": []
+ },
+ {
+ "name": "spyder",
+ "altnames": [],
+ "tags": ["python", "ide", "editor", "data-science"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#8c0000",
+ "aliases": []
+ },
+ {
+ "name": "sqlalchemy",
+ "altnames": [],
+ "tags": ["python", "orm"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#333333",
+ "aliases": []
+ },
+ {
+ "name": "sqldeveloper",
+ "altnames": [],
+ "tags": ["tool", "database"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#adadad",
+ "aliases": []
+ },
+ {
+ "name": "sqlite",
+ "altnames": [],
+ "tags": ["sql", "database", "db"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#0f80cc",
+ "aliases": []
+ },
+ {
+ "name": "ssh",
+ "altnames": ["secureshell"],
+ "tags": ["security"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#231F20",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "stackblitz",
+ "altnames": [],
+ "tags": ["IDE", "editor", "remote-development"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["original", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#1389fd",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "stackoverflow",
+ "altnames": ["Stack Overflow"],
+ "tags": ["website", "development", "community"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#F58025",
+ "aliases": []
+ },
+ {
+ "name": "stata",
+ "altnames": [],
+ "tags": ["analysis", "data", "data-science", "software", "statistics"],
+ "versions": {
+ "svg": ["original-wordmark"],
+ "font": ["original-wordmark"]
+ },
+ "color": "#195f92",
+ "aliases": [
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "stenciljs",
+ "altnames": ["stencil"],
+ "tags": ["framework", "ui"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#000",
+ "aliases": []
+ },
+ {
+ "name": "storybook",
+ "altnames": ["storybookjs"],
+ "tags": ["framework", "documentation", "ui"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#FF4785",
+ "aliases": []
+ },
+ {
+ "name": "streamlit",
+ "altnames": [],
+ "tags": ["python", "machine-learning", "data-science"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#7d353b",
+ "aliases": []
+ },
+ {
+ "name": "styledcomponents",
+ "altnames": ["Styled Components", "styled-components"],
+ "tags": ["css", "javascript", "js", "library", "nodejs", "web"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#d268a7",
+ "aliases": []
+ },
+ {
+ "name": "stylus",
+ "altnames": ["styluslang"],
+ "tags": ["css", "pre-processor"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#333333",
+ "aliases": []
+ },
+ {
+ "name": "subversion",
+ "altnames": ["apachesubversion"],
+ "tags": ["svn", "version"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain-wordmark"],
+ "font": ["original", "plain-wordmark"]
+ },
+ "color": "#809cc8",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "sulu",
+ "altnames": [],
+ "tags": ["cms", "platform"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "line", "line-wordmark"],
+ "font": ["original", "original-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#112a46",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "supabase",
+ "altnames": [],
+ "tags": [
+ "authentication",
+ "cloud-computing-platform",
+ "database",
+ "storage"
+ ],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#3ecf8e",
+ "aliases": []
+ },
+ {
+ "name": "surrealdb",
+ "altnames": [],
+ "tags": ["db", "database", "storage"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#c900d1",
+ "aliases": []
+ },
+ {
+ "name": "svelte",
+ "altnames": ["sveltejs"],
+ "tags": ["javascript", "framework", "compiler"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#ff3e00",
+ "aliases": []
+ },
+ {
+ "name": "svgo",
+ "altnames": [],
+ "tags": ["svg", "optimization", "tool", "javascript", "library", "node.js"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#fff",
+ "aliases": []
+ },
+ {
+ "name": "swagger",
+ "altnames": ["Swagger"],
+ "tags": ["development", "software", "tool"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#85ea2d",
+ "aliases": []
+ },
+ {
+ "name": "swift",
+ "altnames": [],
+ "tags": ["language"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#F05138",
+ "aliases": []
+ },
+ {
+ "name": "swiper",
+ "altnames": [],
+ "tags": ["library", "javascript", "open-source"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#0080FF",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "symfony",
+ "altnames": [],
+ "tags": ["framework", "php"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#1A171B",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "tailwindcss",
+ "altnames": [],
+ "tags": ["css", "framework"],
+ "versions": {
+ "svg": ["original-wordmark", "original", "plain-wordmark"],
+ "font": ["original", "plain-wordmark"]
+ },
+ "color": "#38bdf8",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "talos",
+ "altnames": [],
+ "tags": ["container", "linux", "distribution"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#f92a20",
+ "aliases": []
+ },
+ {
+ "name": "tauri",
+ "altnames": [],
+ "tags": ["nodejs", "rust", "desktop", "framework", "programming"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#FFC131",
+ "aliases": []
+ },
+ {
+ "name": "teleport",
+ "altnames": [],
+ "tags": ["ssh", "security", "auth", "authentication", "infrastructure"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "line", "line-wordmark"],
+ "font": ["original", "original-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#512fc9",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "tensorflow",
+ "altnames": [],
+ "tags": ["library", "machine-learning", "deep-learning"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "line", "line-wordmark"],
+ "font": ["original", "original-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#ff6f00",
+ "aliases": []
+ },
+ {
+ "name": "terraform",
+ "altnames": [],
+ "tags": ["deployment", "architecture", "automation"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#5c4ee5",
+ "aliases": []
+ },
+ {
+ "name": "terramate",
+ "altnames": [],
+ "tags": ["deployment", "devops", "automation"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#fff",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "tex",
+ "altnames": [],
+ "tags": ["typesetting-system", "markup", "tex"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#000000",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "original-wordmark"
+ },
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "thealgorithms",
+ "altnames": [],
+ "tags": ["organization", "algorithms"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#00BCB4",
+ "aliases": []
+ },
+ {
+ "name": "threedsmax",
+ "altnames": ["Autodesk 3ds Max", "3dsmax"],
+ "tags": [
+ "3d",
+ "programming",
+ "vfx",
+ "graphic",
+ "graphics",
+ "game",
+ "animation"
+ ],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#37a5cc",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "original-wordmark"
+ },
+ {
+ "base": "plain",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "threejs",
+ "altnames": [],
+ "tags": ["javascript", "framework"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#000000",
+ "aliases": []
+ },
+ {
+ "name": "thymeleaf",
+ "altnames": [],
+ "tags": ["engine", "html", "java", "server"],
+ "versions": {
+ "svg": ["original", "plain", "original-wordmark", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#005f0f",
+ "aliases": []
+ },
+ {
+ "name": "titaniumsdk",
+ "altnames": [],
+ "tags": ["app", "mobile", "javascript", "cross-platform", "sdk"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#bd222b",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "tmux",
+ "altnames": [],
+ "tags": ["cli", "terminal", "multiplexer"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#1bb91f",
+ "aliases": []
+ },
+ {
+ "name": "tomcat",
+ "altnames": [],
+ "tags": ["server"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "line", "line-wordmark"],
+ "font": ["line", "line-wordmark"]
+ },
+ "color": "#D1A41A",
+ "aliases": []
+ },
+ {
+ "name": "tortoisegit",
+ "altnames": [],
+ "tags": ["git"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#4b8eb4",
+ "aliases": []
+ },
+ {
+ "name": "towergit",
+ "altnames": ["towergitclient"],
+ "tags": ["git"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#d18900",
+ "aliases": []
+ },
+ {
+ "name": "traefikmesh",
+ "altnames": [],
+ "tags": ["mesh", "kubernetes"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["original", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#9D0FB0",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "traefikproxy",
+ "altnames": [],
+ "tags": ["proxy", "router"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["original", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#24a1c1",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "travis",
+ "altnames": ["travisci"],
+ "tags": ["platform", "integration"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#2d3136",
+ "aliases": []
+ },
+ {
+ "name": "trello",
+ "altnames": ["atlassiantrello"],
+ "tags": ["platform", "organize"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#0052cc",
+ "aliases": []
+ },
+ {
+ "name": "trpc",
+ "altnames": ["Typescript Remote Procedure Call"],
+ "tags": ["typescript", "javascript", "typesafe", "api"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#398ccb",
+ "aliases": []
+ },
+ {
+ "name": "turbo",
+ "altnames": [],
+ "tags": ["spa", "js"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain-wordmark"],
+ "font": ["original", "plain-wordmark"]
+ },
+ "color": "#5cd8e5",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "twilio",
+ "altnames": [],
+ "tags": ["api", "automation", "platform"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#f22f46",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "twitter",
+ "altnames": ["x"],
+ "tags": ["auth"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#000",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "typescript",
+ "altnames": ["ts"],
+ "tags": ["programming", "transpiler", "javascript", "language"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#007acc",
+ "aliases": [
+ {
+ "base": "plain",
+ "alias": "original"
+ }
+ ]
+ },
+ {
+ "name": "typo3",
+ "altnames": [],
+ "tags": ["cms", "php"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["original", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#f49700",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "ubuntu",
+ "altnames": [],
+ "tags": ["os", "open-source", "linux"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#e95420",
+ "aliases": []
+ },
+ {
+ "name": "unifiedmodelinglanguage",
+ "altnames": ["uml", "unified modeling language"],
+ "tags": ["modeling", "design", "language"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#452e7f",
+ "aliases": []
+ },
+ {
+ "name": "unity",
+ "altnames": [],
+ "tags": ["C#", "c-sharp", "csharp", "engine", "game-engine"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#4d4d4d",
+ "aliases": []
+ },
+ {
+ "name": "unix",
+ "altnames": [],
+ "tags": ["os"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#4051b5",
+ "aliases": []
+ },
+ {
+ "name": "unrealengine",
+ "altnames": [],
+ "tags": ["c++", "engine", "game-engine"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#000000",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "uwsgi",
+ "altnames": ["uwebservergatewayinterface"],
+ "tags": ["hosting"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#bad05e",
+ "aliases": []
+ },
+ {
+ "name": "v8",
+ "altnames": ["v8 engine"],
+ "tags": ["javascript-runtime", "framework", "javascript", "web", "cpp"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#00C4CC",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "original-wordmark"
+ },
+ {
+ "base": "plain",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "vaadin",
+ "altnames": [],
+ "tags": ["framework", "java", "web"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original"]
+ },
+ "color": "#00b4f0",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "vagrant",
+ "altnames": [],
+ "tags": ["platform"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#127eff",
+ "aliases": []
+ },
+ {
+ "name": "vala",
+ "altnames": [],
+ "tags": ["programming", "language"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#a56de2",
+ "aliases": []
+ },
+ {
+ "name": "vault",
+ "altnames": ["HashiCorp Vault"],
+ "tags": ["tool", "security", "infrastructure"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain-wordmark"],
+ "font": ["original", "plain-wordmark"]
+ },
+ "color": "#ffd814",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "veevalidate",
+ "altnames": [],
+ "tags": ["vuejs", "vuejs-library", "package"],
+ "versions": {
+ "svg": ["original", "line"],
+ "font": ["original", "line"]
+ },
+ "color": "#04c971",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "vercel",
+ "altnames": [],
+ "tags": ["hosting", "platform", "deployment", "git"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "line", "line-wordmark"],
+ "font": ["original", "original-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#000",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "vertx",
+ "altnames": ["eclipsevertx"],
+ "tags": ["sdk", "java", "framework"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#782a91",
+ "aliases": []
+ },
+ {
+ "name": "vim",
+ "altnames": ["viimproved"],
+ "tags": ["editor"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#179a33",
+ "aliases": []
+ },
+ {
+ "name": "visualbasic",
+ "altnames": ["vb"],
+ "tags": ["programming", "language"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#004e8c",
+ "aliases": []
+ },
+ {
+ "name": "visualstudio",
+ "altnames": ["vs"],
+ "tags": ["editor"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#52218a",
+ "aliases": []
+ },
+ {
+ "name": "vite",
+ "altnames": [],
+ "tags": ["web3", "blockchain", "DAG"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#006BFF",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "vitejs",
+ "altnames": ["vite.js", "Vite"],
+ "tags": ["javascript", "build", "compiler", "esbuild"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#ffdd35",
+ "aliases": []
+ },
+ {
+ "name": "vitess",
+ "altnames": [],
+ "tags": ["sharding", "database", "mysql"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#f16827",
+ "aliases": []
+ },
+ {
+ "name": "vitest",
+ "altnames": [],
+ "tags": ["framework", "open-source", "testing", "vite"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#fcc72b",
+ "aliases": []
+ },
+ {
+ "name": "vscode",
+ "altnames": ["visualstudiocode"],
+ "tags": ["editor", "ide"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#3C99D4",
+ "aliases": []
+ },
+ {
+ "name": "vscodium",
+ "altnames": [],
+ "tags": ["editor", "ide", "open-source"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#3C99D4",
+ "aliases": []
+ },
+ {
+ "name": "vsphere",
+ "altnames": ["vmwarevsphere"],
+ "tags": ["hypervisor", "operating-system", "vmware"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#0091da",
+ "aliases": []
+ },
+ {
+ "name": "vuejs",
+ "altnames": [],
+ "tags": ["framework"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#41B883",
+ "aliases": []
+ },
+ {
+ "name": "vuestorefront",
+ "altnames": [],
+ "tags": ["framework"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#5ecf7b",
+ "aliases": []
+ },
+ {
+ "name": "vuetify",
+ "altnames": [],
+ "tags": ["css", "framework", "vuejs-library", "material-design"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["line", "plain"]
+ },
+ "color": "#1697F6",
+ "aliases": []
+ },
+ {
+ "name": "vulkan",
+ "altnames": [],
+ "tags": ["api", "3d", "library", "graphics", "game"],
+ "versions": {
+ "svg": ["original", "line"],
+ "font": ["original", "line"]
+ },
+ "color": "#ac162c",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "original-wordmark"
+ },
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original",
+ "alias": "plain-wordmark"
+ },
+ {
+ "base": "line",
+ "alias": "line-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "vyper",
+ "altnames": ["vyperlang"],
+ "tags": ["blockchain", "ethereum", "language", "programming", "python"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#9F4CF2",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "waku",
+ "altnames": [],
+ "tags": ["react", "javascript", "framework", "web"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#dd2e44",
+ "aliases": []
+ },
+ {
+ "name": "wasm",
+ "altnames": ["WebAssembly"],
+ "tags": ["binary", "programming", "virtual machine", "web", "language"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain-wordmark"],
+ "font": ["original", "plain-wordmark"]
+ },
+ "color": "#654ff0",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "web3js",
+ "altnames": ["web3.js"],
+ "tags": ["blockchain", "ecommerce"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#f16822",
+ "aliases": []
+ },
+ {
+ "name": "webflow",
+ "altnames": [],
+ "tags": ["cms", "ecommerce"],
+ "versions": {
+ "svg": ["original"],
+ "font": ["original"]
+ },
+ "color": "#4353ff",
+ "aliases": []
+ },
+ {
+ "name": "webgpu",
+ "altnames": [],
+ "tags": ["graphics", "framework", "web"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#005a9c",
+ "aliases": []
+ },
+ {
+ "name": "weblate",
+ "altnames": [],
+ "tags": ["localization"],
+ "versions": {
+ "svg": ["original", "plain", "original-wordmark", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#2eccaa",
+ "aliases": []
+ },
+ {
+ "name": "webpack",
+ "altnames": ["webpackjs"],
+ "tags": ["package", "manager"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#1C78C0",
+ "aliases": []
+ },
+ {
+ "name": "webstorm",
+ "altnames": [],
+ "tags": ["jetbrains", "editor"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#07c3f2",
+ "aliases": []
+ },
+ {
+ "name": "windows11",
+ "altnames": [],
+ "tags": ["os"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#0078d4",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "windows8",
+ "altnames": [],
+ "tags": ["os"],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#00adef",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "wolfram",
+ "altnames": ["wolframlanguage"],
+ "tags": ["data-science", "functional", "programming"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#dd1100",
+ "aliases": []
+ },
+ {
+ "name": "woocommerce",
+ "altnames": [],
+ "tags": ["ecommerce"],
+ "versions": {
+ "svg": ["original", "plain", "original-wordmark", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#7f54b3",
+ "aliases": []
+ },
+ {
+ "name": "wordpress",
+ "altnames": [],
+ "tags": ["cms"],
+ "versions": {
+ "svg": ["original", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#494949",
+ "aliases": []
+ },
+ {
+ "name": "xamarin",
+ "altnames": [],
+ "tags": [
+ "application",
+ "programming",
+ "editor",
+ "ide",
+ "ios",
+ "mobile",
+ "apple",
+ "android",
+ "windows"
+ ],
+ "versions": {
+ "svg": ["original", "original-wordmark"],
+ "font": ["original", "original-wordmark"]
+ },
+ "color": "#3498DB",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "xcode",
+ "altnames": [],
+ "tags": [
+ "application",
+ "editor",
+ "ide",
+ "ios",
+ "iphone",
+ "mobile",
+ "apple"
+ ],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#069CEC",
+ "aliases": []
+ },
+ {
+ "name": "xd",
+ "altnames": ["adobexd"],
+ "tags": ["design", "editor", "ui"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#470137",
+ "aliases": []
+ },
+ {
+ "name": "xml",
+ "altnames": ["extensiblemarkuplanguage"],
+ "tags": ["markup", "language"],
+ "versions": {
+ "svg": ["original", "plain", "line"],
+ "font": ["plain", "line"]
+ },
+ "color": "#005fad",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "original-wordmark"
+ },
+ {
+ "base": "plain",
+ "alias": "plain-wordmark"
+ },
+ {
+ "base": "line",
+ "alias": "line-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "yaml",
+ "altnames": ["YAML Ain't Markup Language"],
+ "tags": ["data", "language"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#cb171e",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "original-wordmark"
+ },
+ {
+ "base": "plain",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "yarn",
+ "altnames": [],
+ "tags": ["package", "manager", "javascript", "js"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "line", "line-wordmark"],
+ "font": ["original", "original-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#2c8ebb",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "yii",
+ "altnames": ["yesitis"],
+ "tags": ["php", "framework"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#40b3d8",
+ "aliases": []
+ },
+ {
+ "name": "yugabytedb",
+ "altnames": [],
+ "tags": ["database", "relational", "sql", "scale", "open-source"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain", "plain-wordmark"],
+ "font": ["plain", "plain-wordmark"]
+ },
+ "color": "#ff5f3b",
+ "aliases": []
+ },
+ {
+ "name": "yunohost",
+ "altnames": [],
+ "tags": ["os"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#ffffff",
+ "aliases": []
+ },
+ {
+ "name": "zend",
+ "altnames": [],
+ "tags": ["php", "framework"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "line", "line-wordmark"],
+ "font": ["original", "original-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#68b604",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ },
+ {
+ "base": "original-wordmark",
+ "alias": "plain-wordmark"
+ }
+ ]
+ },
+ {
+ "name": "zig",
+ "altnames": ["ziglang"],
+ "tags": ["language"],
+ "versions": {
+ "svg": ["original", "original-wordmark", "plain-wordmark"],
+ "font": ["original", "plain-wordmark"]
+ },
+ "color": "#f7a41d",
+ "aliases": [
+ {
+ "base": "original",
+ "alias": "plain"
+ }
+ ]
+ },
+ {
+ "name": "zsh",
+ "altnames": [],
+ "tags": ["shell", "script", "scripting", "language", "command"],
+ "versions": {
+ "svg": [
+ "original",
+ "original-wordmark",
+ "plain",
+ "plain-wordmark",
+ "line",
+ "line-wordmark"
+ ],
+ "font": ["plain", "plain-wordmark", "line", "line-wordmark"]
+ },
+ "color": "#000",
+ "aliases": []
+ },
+ {
+ "name": "zustand",
+ "altnames": [],
+ "tags": ["framework"],
+ "versions": {
+ "svg": ["original", "plain"],
+ "font": ["plain"]
+ },
+ "color": "#443e38",
+ "aliases": []
+ }
+]
diff --git a/x_docs/mine/2026-01-01-right-sidebar/handover.md b/x_docs/DONE/2026-01-01-right-sidebar/handover-1.md
similarity index 99%
rename from x_docs/mine/2026-01-01-right-sidebar/handover.md
rename to x_docs/DONE/2026-01-01-right-sidebar/handover-1.md
index 8f152c6..49c8157 100644
--- a/x_docs/mine/2026-01-01-right-sidebar/handover.md
+++ b/x_docs/DONE/2026-01-01-right-sidebar/handover-1.md
@@ -91,7 +91,7 @@ Replace the dated `hover:bg-accent/50` overlay with Linear-style microinteractio
---
-## Later: Devicon Integration
+## Now: Devicon Integration
### Goal
diff --git a/x_docs/DONE/2026-01-01-right-sidebar/handover-2.md b/x_docs/DONE/2026-01-01-right-sidebar/handover-2.md
new file mode 100644
index 0000000..fe2883c
--- /dev/null
+++ b/x_docs/DONE/2026-01-01-right-sidebar/handover-2.md
@@ -0,0 +1,123 @@
+# Devicon Integration Handover
+
+## Goal
+
+Add technology icons to tag badges using the [Devicon](https://devicon.dev/) font library. Icons should render automatically for tags when a matching devicon exists, with a fallback for unknown tags.
+
+## Usage Context
+
+Users can create arbitrary tags when asking questions β the system doesn't know ahead of time what technologies users will tag. Icons should appear automatically for any technology that exists in the devicon registry (600+ icons).
+
+## Visual Reference
+
+Target design: [tags.jpg](tags.jpg)
+
+Shows tags with devicon icons displayed inline before the tag name in:
+
+- Right sidebar "Popular Tags" section (with `showIcon colored`)
+
+Question cards on the home page use text-only badges (defaults) for a cleaner, less cluttered appearance.
+
+## References
+
+- [Devicon README](devicon-readme.md) β includes CDN installation and usage examples
+- [Icon registry JSON](devicon.json) β downloaded from
+
+## Technical Context
+
+Devicon is a **font-based** icon library. Icons render using `` elements with class names:
+
+```html
+
+```
+
+**Important:** Not all icons support all styles. The `devicon.json` registry defines which styles are available per icon via `versions.font`:
+
+| Icon | `versions.font` |
+|------|-----------------|
+| javascript | `["plain"]` |
+| react | `["original", "original-wordmark"]` |
+| nextjs | `["plain", "line", "original-wordmark", "line-wordmark"]` |
+| tailwindcss | `["original", "plain-wordmark"]` |
+| threejs | `["original", "original-wordmark"]` |
+
+A naive convention like `devicon-{name}-plain` will break for react, tailwindcss, and threejs.
+
+Style preference order: `plain` β `original` β `line` β first available
+
+The registry includes an `altnames` array for common variations, enabling automatic alias resolution without manual mapping:
+
+| Icon | `altnames` | Lookup examples |
+|------|------------|-----------------|
+| javascript | `["js", "ecmascript"]` | `js` or `ecmascript` β javascript |
+| typescript | `["ts"]` | `ts` β typescript |
+| react | `["reactjs"]` | `reactjs` β react |
+| nextjs | `[]` | (no aliases) |
+| android | `[]` | (no aliases) |
+
+## Current Implementation
+
+| File | Purpose |
+|------|---------|
+| `components/tag-link.tsx` | Shared TagLink component β wraps Badge in Link |
+| `app/(root)/page.tsx` | Uses ` ` (defaults: no icon, monotone) |
+| `components/right-sidebar/right-sidebar.tsx` | Uses ` ` |
+| `lib/data/tags.ts` | `Tag` type + `getPopularTags(limit)` |
+| `app/globals.css` | CSS custom properties `--tag-bg`, `--tag-text` |
+
+## Approach
+
+Use **JSON Registry Lookup** β commit `devicon.json` locally and use it to auto-validate icons and select correct styles.
+
+- Supports 600+ icons with correct style selection
+- Handles aliases automatically (js β javascript)
+- No manual maintenance when users create new tags
+
+*A manual mapping table was considered but rejected as unsustainable for user-generated tags.*
+
+## Implementation Architecture
+
+| File | Purpose |
+|------|---------|
+| `lib/devicon.ts` | `getDeviconClassName(name, colored): string \| null` β normalises tag name, looks up registry, selects correct style, returns class string or null |
+| `components/tag-link.tsx` | Props: `name`, `questionCount?`, `showIcon?`, `colored?`. Renders ` ` inline when `showIcon` is true and icon exists; falls back to Lucide ` ` for unknown tags |
+
+A separate ` ` component was considered but rejected β the rendering logic is trivial (one `` element) and TagLink is currently the only consumer. Can be extracted later if icons appear elsewhere.
+
+## Fallback Strategy
+
+When `showIcon` is enabled, tags without a matching devicon fall back to Lucide React's ` ` icon. This maintains visual rhythm across all badges while clearly indicating "this is a tag" without pretending to be a technology-specific icon.
+
+## Registry Management
+
+Commit `devicon.json` to the repository and update it periodically (monthly). This provides version control, predictable test behaviour, and no build-time external dependencies.
+
+## Test Strategy
+
+Unit tests for `getDeviconClassName()` in `lib/devicon.test.ts`:
+
+- Known icons return correct class (e.g., `react` β `devicon-react-original colored`)
+- Aliases resolve correctly (e.g., `js` β `devicon-javascript-plain colored`)
+- Style fallback works (prefer `plain` β fall back to `original`)
+- Unknown tags return `null`
+
+No E2E tests β visual verification is manual against `tags.jpg`. The resolution logic is pure and fully testable at the unit level.
+
+## Success Criteria
+
+- [x] Devicon CSS loaded via CDN
+- [x] Icons render for: nextjs, react, javascript, tailwindcss
+- [x] Alias resolution works: js β javascript, ts β typescript
+- [x] Unknown tags show Lucide ` ` icon as fallback
+- [x] Unit tests pass for `getDeviconClassName()` (known icons, aliases, fallback, unknown)
+- [x] Visual alignment matches `tags.jpg`
+
+## Enhancements
+
+Beyond the original specification:
+
+- [x] **Configurable `colored` parameter** β `getDeviconClassName(name, colored)` accepts a second boolean parameter (default: `true`) to toggle between brand colours and monotone icons that inherit `currentColor`
+- [x] **`colored` prop on TagLink** β Allows per-usage control: ` ` for brand colours, omit for monotone
+- [x] **`showIcon` prop on TagLink** β Allows per-usage control: ` ` for icons, omit for text-only badges
+- [x] **Simplest defaults** β TagLink defaults to no icon (`showIcon = false`) and monotone (`colored = false`) for clean, uncluttered tags; opt-in to `showIcon colored` where visual richness is desired
+- [x] **Extended test coverage** β 20 unit tests including colored option tests (default, explicit true, explicit false) and additional alias test (`pugjs` β `pug`)
diff --git a/x_docs/mine/2026-01-01-right-sidebar/pic1-target.jpg b/x_docs/DONE/2026-01-01-right-sidebar/pic1-target.jpg
similarity index 100%
rename from x_docs/mine/2026-01-01-right-sidebar/pic1-target.jpg
rename to x_docs/DONE/2026-01-01-right-sidebar/pic1-target.jpg
diff --git a/x_docs/DONE/2026-01-01-right-sidebar/tags.jpg b/x_docs/DONE/2026-01-01-right-sidebar/tags.jpg
new file mode 100755
index 0000000..0d92abe
Binary files /dev/null and b/x_docs/DONE/2026-01-01-right-sidebar/tags.jpg differ
diff --git a/x_docs/DONE/authentication.md b/x_docs/DONE/authentication.md
new file mode 100644
index 0000000..8827822
--- /dev/null
+++ b/x_docs/DONE/authentication.md
@@ -0,0 +1,169 @@
+# Authentication with Clerk
+
+Last updated: 2026-02-02
+
+This document describes how authentication is implemented in DevFlow using Clerk.
+
+---
+
+## Overview
+
+Clerk provides authentication via a hosted UI approach. The application wraps Clerk's pre-built components (``, ``) with custom wrapper components for branding, whilst Clerk handles all authentication logic, session management, and OAuth flows.
+
+---
+
+## Environment Variables
+
+Required in `.env.local`:
+
+```
+NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_...
+CLERK_SECRET_KEY=sk_...
+
+NEXT_PUBLIC_CLERK_SIGN_IN_URL=/sign-in
+NEXT_PUBLIC_CLERK_SIGN_UP_URL=/sign-up
+NEXT_PUBLIC_CLERK_SIGN_IN_FALLBACK_REDIRECT_URL=/
+NEXT_PUBLIC_CLERK_SIGN_UP_FALLBACK_REDIRECT_URL=/
+```
+
+The `NEXT_PUBLIC_CLERK_*_URL` variables tell Clerk where to redirect users. The fallback URLs determine where users land after authentication.
+
+---
+
+## Architecture
+
+### Provider Hierarchy
+
+The provider setup in `app/layout.tsx`:
+
+```
+ClerkProvider (authentication context)
+ βββ html
+ βββ body
+ βββ ThemeProvider (next-themes)
+ βββ {children}
+```
+
+`ClerkProvider` must wrap the entire app (including ``) because Clerk needs to inject authentication context before any rendering occurs. The custom wrapper at `components/providers/clerk-provider.tsx` applies global theming and localisation defaults.
+
+### Proxy (Route Protection)
+
+`proxy.ts` (renamed from middleware.ts in Next.js 16) runs Clerk's middleware on every request:
+
+```ts
+import { clerkMiddleware } from "@clerk/nextjs/server";
+export default clerkMiddleware();
+```
+
+The matcher config excludes static files and includes API routes. By default, `clerkMiddleware()` makes authentication available on all routes without blocking unauthenticated users. To protect specific routes, you would add route matchers or use `auth().protect()` in route handlers.
+
+### Auth Routes
+
+Clerk uses catch-all routes to handle its multi-step authentication flows:
+
+- `app/(auth)/sign-in/[[...sign-in]]/page.tsx`
+- `app/(auth)/sign-up/[[...sign-up]]/page.tsx`
+
+The `[[...slug]]` pattern captures all sub-paths (e.g., `/sign-in/factor-one`, `/sign-in/sso-callback`), allowing Clerk to manage its internal routing.
+
+Both pages render custom wrapper components (`ClerkSignIn`, `ClerkSignUp`) that wrap Clerk's `` and `` components with appearance customisations.
+
+### Auth Layout
+
+`app/(auth)/layout.tsx` provides a centred, full-screen background for auth pages using theme-aware CSS variables (`--auth-bg`).
+
+---
+
+## Custom Wrapper Components
+
+### Sign In (`components/auth/clerk-signin.tsx`)
+
+A **client component** that uses `useTheme()` from next-themes to detect the current theme and pass the appropriate logo URL to Clerk. This is necessary because Clerk's `logoImageUrl` prop requires a static URL string and cannot use CSS variables.
+
+The component also customises header alignment (left-aligned rather than centred).
+
+### Sign Up (`components/auth/clerk-signup.tsx`)
+
+A **server component** with a static logo. Theme detection isn't needed here because the icon-only logo (`site-logo.svg`) works on both light and dark backgrounds.
+
+---
+
+## UI Customisation
+
+Clerk's appearance is customised at two levels:
+
+### Global (ClerkProvider)
+
+`components/providers/clerk-provider.tsx` applies defaults to all Clerk components:
+
+- **Theme**: Uses `@clerk/themes/shadcn` for shadcn/ui visual consistency
+- **CSS Layer**: `cssLayerName: "clerk"` ensures Tailwind utilities override Clerk styles
+- **Font**: References the app's Inter font via CSS variable
+- **Button styling**: Primary buttons use the brand gradient (`--gradient-primary`)
+- **Localisation**: Custom text for sign-in/sign-up titles, subtitles, and OAuth button labels
+
+### Per-Component
+
+Individual wrapper components can override globals via the `appearance` prop. For example, `ClerkSignIn` sets a theme-aware logo and left-aligned header.
+
+### CSS Layer Integration
+
+To ensure Tailwind utilities can override Clerk's styles without `!important`:
+
+1. **Declare layer order** at the top of `globals.css`:
+
+ ```css
+ @layer theme, base, clerk, components, utilities;
+ ```
+
+2. **Import Clerk's styles** after the layer declaration:
+
+ ```css
+ @import "@clerk/themes/shadcn.css";
+ ```
+
+3. **Set `cssLayerName`** in ClerkProvider to place Clerk styles in the `clerk` layer.
+
+This ordering ensures utilities (highest priority) can override Clerk styles cleanly.
+
+### Theme-Aware Assets
+
+CSS variables in `globals.css` provide theme-aware URLs:
+
+```css
+:root {
+ --logo-full-themed: url("/images/logo-light.svg");
+ --auth-bg: url("/images/auth-bg-light.webp");
+}
+.dark {
+ --logo-full-themed: url("/images/logo-dark.svg");
+ --auth-bg: url("/images/auth-bg-dark.webp");
+}
+```
+
+These variables are used directly in Tailwind classes via arbitrary value syntax: `bg-(image:--auth-bg)`.
+
+For Clerk components specifically, JavaScript theme detection (`useTheme()`) is required because Clerk's API accepts only static URL strings.
+
+---
+
+## Key Files
+
+| File | Purpose |
+|------|---------|
+| `proxy.ts` | Route protection via `clerkMiddleware()` |
+| `app/layout.tsx` | ClerkProvider wrapping the app |
+| `components/providers/clerk-provider.tsx` | Global Clerk theming and localisation |
+| `app/(auth)/layout.tsx` | Auth page layout with background |
+| `app/(auth)/sign-in/[[...sign-in]]/page.tsx` | Sign-in route |
+| `app/(auth)/sign-up/[[...sign-up]]/page.tsx` | Sign-up route |
+| `components/auth/clerk-signin.tsx` | Custom sign-in wrapper (theme-aware logo) |
+| `components/auth/clerk-signup.tsx` | Custom sign-up wrapper (static logo) |
+| `app/globals.css` | CSS layer order and theme-aware asset variables |
+
+---
+
+## Notes
+
+- The `await connection()` call in auth pages forces dynamic rendering at request time. This may be unnecessary since Clerk components are client-side, but it ensures no caching issues with authentication state.
+- Clerk's localisation API allows customising any text string. The `{{provider|titleize}}` template formats OAuth provider names (e.g., "GitHub" instead of "Continue with GitHub").
diff --git a/x_docs/DONE/navigation.md b/x_docs/DONE/navigation.md
new file mode 100644
index 0000000..60741bb
--- /dev/null
+++ b/x_docs/DONE/navigation.md
@@ -0,0 +1,265 @@
+# Navigation Architecture: Mobile & Sidebar
+
+Last updated: 2026-02-02
+
+This document explains how the navigation system works across breakpoints, component structure, and the distinction between navigation and content discovery.
+
+---
+
+## Overview
+
+The app has **two navigation contexts** that share the same nav items but render differently:
+
+| Context | Breakpoint | Container | Implementation |
+|---------|------------|-----------|----------------|
+| Mobile Nav | `` | shadcn/ui Sidebar with `collapsible="icon"` |
+
+The Left Sidebar can collapse to icon-only mode, persisted via cookie.
+
+---
+
+## Visual Breakdown
+
+```text
+βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+β MOBILE (<640px) β
+βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
+β MobileTopBar: [Logo] [Theme] [Hamburger] β
+βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
+β β
+β Hamburger β Sheet slides in from left (max 320px) β
+β ββββββββββββββββββββ β
+β β [Logo] β β
+β β Home β β
+β β Community β β
+β β Collections β β
+β β Find Jobs β β
+β β Tags β β
+β β Ask a question β β
+β β β β
+β β [Auth buttons] β β SignedOut: Sign in + Sign up β
+β β [UserButton] β β SignedIn: avatar β
+β ββββββββββββββββββββ β
+β β
+βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+
+βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+β DESKTOP (β₯640px) β
+βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
+β DesktopTopBar: [Search placeholder] [Theme] [Auth] β
+ββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββ€
+βSidebar β β
+β 13rem β Main Content β
+β β β
+β Home β β Expanded: icon + label β
+β Comm. β β Collapsed: icon only (3rem width) β
+β Coll. β β
+β Jobs β β
+β Tags β β
+β Ask β β
+β β β
+β[User] β β UserButton (SignedIn only) β
+β[Toggle]β β Collapse/expand toggle β
+ββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββ
+
+βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+β XL DESKTOP (β₯1280px) β
+βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
+β DesktopTopBar β
+ββββββββββ¬βββββββββββββββββββββββββββββββ¬ββββββββββββββββββ€
+βSidebar β Main Content β RightSidebar β
+β β β (22rem) β
+β β β β
+β β β Top Questions β
+β β β Popular Tags β
+β β β β
+ββββββββββ΄βββββββββββββββββββββββββββββββ΄ββββββββββββββββββ
+```
+
+---
+
+## Authentication UI
+
+Auth controls appear in different locations based on screen size and auth state:
+
+| Context | Unauthenticated | Authenticated |
+|---------|-----------------|---------------|
+| **DesktopTopBar** | Sign in + Sign up buttons | Nothing |
+| **LeftSidebar** | Nothing | UserButton at bottom |
+| **MobileNav** | Sign in + Sign up buttons | UserButton |
+
+---
+
+## Navigation vs Content Discovery
+
+The application has two types of sidebars with different purposes:
+
+| Sidebar | Purpose | Content | Visibility |
+|---------|---------|---------|------------|
+| **LeftSidebar** | Navigation | Route links (Home, Community, etc.) | `β₯sm` (640px+) |
+| **RightSidebar** | Content discovery | Top Questions, Popular Tags | `β₯xl` (1280px+) |
+
+The LeftSidebar and MobileNav are **navigation components** β they help users move between routes.
+
+The RightSidebar is a **content discovery component** β it surfaces related content to encourage exploration but doesn't provide primary navigation.
+
+---
+
+## Component Architecture
+
+### Key Insight
+
+Navigation links are implemented differently for mobile and desktop, but share the same data source and styling utilities:
+
+- **MobileNav**: Uses `MobileNavLink` component in a Sheet overlay
+- **LeftSidebar**: Uses shadcn/ui `SidebarMenuButton` with collapsible behaviour
+
+Both consume the `NAV_LINKS` constant and use shared utilities for active state detection.
+
+```text
+βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+β SAME data source, DIFFERENT rendering: β
+β β
+β MobileNav (Sheet) LeftSidebar (shadcn/ui) β
+β βββββββββββββββββββ βββββββββββββββββββ β
+β β β β β β "icon"> β β
+β β β β Button /> β β
+β β β β β β
+β βββββββββββββββββββ βββββββββββββββββββ β
+β β β β
+β ββββββββββββ¬ββββββββββββββββββββ β
+β β β
+β NAV_LINKS constant β
+β Shared styling utilities β
+βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+```
+
+### Shared Utilities (`lib/utils.ts`)
+
+```typescript
+// Check if route is active (exact or nested)
+isRouteActive(pathname: string, route: string): boolean
+
+// Active state classes
+NAV_LINK_ACTIVE_CLASSES = "bg-(image:--gradient-primary) font-bold text-primary-foreground"
+NAV_LINK_INACTIVE_CLASSES = "font-medium"
+
+// Icon inversion for theme compatibility
+getNavIconInvertClasses(isActive: boolean): string
+```
+
+---
+
+## File Structure
+
+```text
+components/navigation/
+βββ nav-links.constants.ts β NAV_LINKS array (shared data)
+βββ desktop-topbar.tsx β Desktop top bar (β₯sm)
+βββ mobile-topbar.tsx β Mobile top bar (
- {children}
-
-```
-
----
-
-## Q1: What Are Flexboxes?
-
-Flexbox (Flexible Box Layout) is a CSS layout system designed to arrange items in a **single direction** β either as a row (horizontal) or a column (vertical). Think of it as laying items out along a line, with powerful controls for spacing, alignment, and distribution.
-
-### The Mental Model
-
-Imagine a bookshelf. You can arrange books:
-
-- Left to right (row)
-- Stacked top to bottom (column)
-- Spread evenly across the shelf
-- Pushed to one end
-- Centred in the middle
-
-Flexbox gives you all these controls.
-
-### ASCII Diagram: Flex Row vs Flex Column
-
-```
-βββββββββββββββββββββββββββββββββββββββββββββββββββ
-β FLEX ROW (default: flex-direction: row) β
-β β
-β βββββββββ βββββββββ βββββββββ β
-β β Item β β Item β β Item β ββββββββΊ β
-β β 1 β β 2 β β 3 β Main Axis β
-β βββββββββ βββββββββ βββββββββ β
-β β β β β
-β βΌ Cross Axis β
-βββββββββββββββββββββββββββββββββββββββββββββββββββ
-
-βββββββββββββββββββββββββββββββββββββββββββββββββββ
-β FLEX COLUMN (flex-direction: column) β
-β β
-β β β
-β βΌ Main Axis β
-β βββββββββββββββββββββ β
-β β Item 1 β β
-β βββββββββββββββββββββ β
-β βββββββββββββββββββββ β
-β β Item 2 β β
-β βββββββββββββββββββββ β
-β βββββββββββββββββββββ β
-β β Item 3 β ββββββββΊ Cross Axis β
-β βββββββββββββββββββββ β
-βββββββββββββββββββββββββββββββββββββββββββββββββββ
-```
-
-### Why Flexbox for the Auth Layout?
-
-We used flexbox because we needed to **centre one thing** (the login form) both horizontally and vertically within a container. This is flexbox's sweet spot:
-
-```
-βββββββββββββββββββββββββββββββββββββββββββββββββββ
-β β
-β β
-β βββββββββββββββ β
-β β Login β β
-β β Form β βββ children β
-β βββββββββββββββ β
-β β
-β β
-βββββββββββββββββββββββββββββββββββββββββββββββββββ
- Screen (min-h-screen)
-```
-
-The combination `flex items-center justify-center` achieves this perfectly.
-
----
-
-## Q2: When to Use Flexbox vs Grid?
-
-Both are CSS layout systems, but they solve different problems.
-
-### π Comparison Table
-
-| Aspect | π Flexbox | π² Grid |
-|--------|-----------|---------|
-| **Dimension** | One-dimensional (row OR column) | Two-dimensional (rows AND columns) |
-| **Best for** | Aligning items along a line | Creating structured layouts |
-| **Content-driven** | β
Yes β items determine their size | β No β grid defines the structure |
-| **Layout-driven** | β No | β
Yes β you define rows/columns first |
-| **Simple centering** | β
Perfect | β οΈ Works but overkill |
-| **Complex layouts** | β οΈ Hacky | β
Designed for this |
-| **Navigation bars** | β
Ideal | β οΈ Unnecessary |
-| **Photo galleries** | β οΈ Difficult | β
Ideal |
-| **Card grids** | β οΈ Requires wrapping | β
Natural fit |
-
-### When to Choose Each
-
-| Use Case | Choose | Why |
-|----------|--------|-----|
-| π― Centre a single element | Flexbox | Two lines of code |
-| π± Navigation bar | Flexbox | Items in a row with spacing |
-| π Form fields in a column | Flexbox | Items stacked vertically |
-| πΌοΈ Image gallery | Grid | Rows and columns together |
-| π° Magazine-style layout | Grid | Complex 2D positioning |
-| π Dashboard with widgets | Grid | Named areas, spanning cells |
-| βοΈ Space items evenly | Flexbox | `justify-between` or `space-evenly` |
-
-### ASCII Diagram: The Difference
-
-```
-FLEXBOX: Thinks in ONE direction at a time
-ββββββββββββββββββββββββββββββββββββββββββ
- βββββ βββββ βββββββ βββββ
- β A β β B β β C β β D β βββ Items flow, sizes vary
- βββββ βββββ βββββββ βββββ
-
-
-GRID: Thinks in ROWS and COLUMNS together
-ββββββββββββββββββββββββββββββββββββββββββ
- βββββββββββ¬ββββββββββ¬ββββββββββ
- β A β B β C β βββ Row 1
- βββββββββββΌββββββββββΌββββββββββ€
- β D β E β F β βββ Row 2
- βββββββββββΌββββββββββΌββββββββββ€
- β G β H β I β βββ Row 3
- βββββββββββ΄ββββββββββ΄ββββββββββ
- β² β² β²
- Col 1 Col 2 Col 3
-```
-
-**For our auth layout:** We chose flexbox because we only needed to position one child element. Grid would work but adds unnecessary complexity for such a simple requirement.
-
----
-
-## Q3: Why Are "Layout" and "Flexbox & Grid" Separate in Tailwind Docs?
-
-The Tailwind documentation organises utilities by the CSS concepts they control. Here's why they're separate:
-
-### ποΈ Category Breakdown
-
-| Category | What It Controls | Examples |
-|----------|------------------|----------|
-| π **Layout** | How elements participate in document flow | `display`, `position`, `float`, `z-index`, `overflow` |
-| π **Flexbox & Grid** | How children are arranged within a flex/grid container | `flex-direction`, `justify-content`, `align-items`, `grid-template-columns` |
-
-### The Key Distinction
-
-**Layout** answers: *"How does this element exist in the page?"*
-
-- Is it `block` or `inline`?
-- Is it `fixed` to the viewport?
-- Is it `absolute` and pulled out of normal flow?
-- What's its `z-index` (stacking order)?
-
-**Flexbox & Grid** answers: *"How are this element's children arranged?"*
-
-- Should children be in a row or column?
-- How should space be distributed?
-- How should children align?
-
-### Visual Example
-
-```
-ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-β β
-β β
-β ββββββββββββββββββββββββββββββββββββββββββββββββ β
-β β position: fixed βββ LAYOUT β β
-β ββββββββββββββββββββββββββββββββββββββββββββββββ β
-β β
-β ββββββββββββββββββββββββββββββββββββββββββββββββ β
-β β display: flex βββ LAYOUT β β
-β β β β
-β β ββββββ ββββββ ββββββ β β
-β β β A β β B β β C β β β
-β β ββββββ ββββββ ββββββ β β
-β β β² β β
-β β βββ justify-center βββ FLEXBOX β β
-β ββββββββββββββββββββββββββββββββββββββββββββββββ β
-β β
-ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-```
-
-In our auth layout:
-
-- `flex` is technically a **Layout** utility (it sets `display: flex`)
-- `items-center` and `justify-center` are **Flexbox** utilities (they control child alignment)
-
-They work together but control different aspects.
-
----
-
-## Q4: Is Flexbox a CSS Concept or Tailwind-Specific?
-
-**Flexbox is a native CSS standard.** Tailwind simply provides utility classes that map to the underlying CSS properties.
-
-### π The Relationship
-
-| What You Write (Tailwind) | What CSS Gets Applied | CSS Property |
-|---------------------------|----------------------|--------------|
-| `flex` | `display: flex;` | Native CSS |
-| `items-center` | `align-items: center;` | Native CSS |
-| `justify-center` | `justify-content: center;` | Native CSS |
-| `flex-col` | `flex-direction: column;` | Native CSS |
-| `gap-4` | `gap: 1rem;` | Native CSS |
-
-### The Same Thing, Two Ways
-
-```css
-/* Pure CSS */
-.container {
- display: flex;
- align-items: center;
- justify-content: center;
- min-height: 100vh;
-}
-
-/* Tailwind utility classes */
-
-```
-
-Both produce identical results. Tailwind is a **convenience layer** that:
-
-1. Provides short, memorable class names
-2. Ensures consistent spacing/sizing scales
-3. Enables responsive design with prefixes (`md:flex-row`)
-4. Enables state variants (`hover:items-start`)
-
-**The underlying concepts (flexbox, grid, etc.) are all standard CSS** that works in every modern browser, with or without Tailwind.
-
----
-
-## Q5: Utility Class Breakdown
-
-Here's every utility class used in the auth layout, explained:
-
-### π Complete Class Reference
-
-| Tailwind Class | CSS Property | Purpose | Impact |
-|----------------|--------------|---------|--------|
-| π `flex` | `display: flex;` | Enables flexbox on the container | Children can now be positioned using flex properties |
-| π `min-h-screen` | `min-height: 100vh;` | Container is at least full viewport height | Ensures the background covers the entire screen |
-| βοΈ `items-center` | `align-items: center;` | Centres children on the cross-axis (vertically for row) | Login form is vertically centred |
-| βοΈ `justify-center` | `justify-content: center;` | Centres children on the main-axis (horizontally for row) | Login form is horizontally centred |
-| πΌοΈ `bg-cover` | `background-size: cover;` | Image scales to cover entire container | No empty space, image may crop |
-| π― `bg-center` | `background-position: center;` | Image is centred within container | Cropping happens equally from edges |
-| π« `bg-no-repeat` | `background-repeat: no-repeat;` | Image displays once, not tiled | Prevents image from repeating if container is larger |
-| π
bg-β[url('β¦')] | `background-image: url(β¦);` | Sets the background image | Displays the light-mode background |
-| π dark:βbg-β[url('β¦')] | `background-image: url(β¦);` (when `.dark` class present) | Sets dark-mode background | Switches image when theme is dark |
-
-### π¨ Visual Impact Diagram
-
-```
-βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-β min-h-screen: Container fills viewport height β
-β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
-β β β β
-β β bg-cover + bg-center + bg-no-repeat: β β
-β β Background image fills and centres β β
-β β β β
-β β flex + items-center + justify-center: β β
-β β β β β
-β β βΌ β β
-β β βββββββββββββββ β β
-β β β Login β β β
-β β β Form β βββ children β β
-β β β (centred) β β β
-β β βββββββββββββββ β β
-β β β β
-β β bg-[url('/images/auth-bg-light.webp')] β β
-β β dark:bg-[url('/images/auth-bg-dark.webp')] β β
-β β β² β β
-β β βββ Theme-aware background switching β β
-β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
-βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-```
-
-### How the Classes Work Together
-
-1. **`flex`** β Enables the flexbox layout model on `
`
-2. **`items-center`** β Tells flex to centre children vertically
-3. **`justify-center`** β Tells flex to centre children horizontally
-4. **`min-h-screen`** β Ensures there's vertical space to centre within
-5. **`bg-*` classes** β Handle the decorative background independently of the layout
-
-The layout (centering) and decoration (background) are separate concerns that combine to create the final result.
-
----
-
-## Background Image: Did We Use the Documentation?
-
-Yes! We used the bg-β[url(β¦)] syntax documented in the Tailwind background-image reference.
-
-### What the Docs Show
-
-From the documentation:
-
-```txt
-
-```
-
-This is the **arbitrary value syntax** β square brackets `[]` let you use any CSS value directly.
-
-### What We Implemented
-
-```html
-
-```
-
-### π Features We Used from the Docs
-
-| Feature | From Docs | Our Usage |
-|---------|-----------|-----------|
-| β
Arbitrary URL syntax | bg-β[url(β¦)] | `bg-[url('/images/auth-bg-light.webp')]` |
-| β
Dark mode variant | Via `dark:` prefix (covered in variants docs) | `dark:bg-[url('/images/auth-bg-dark.webp')]` |
-
-### Features We Did NOT Use
-
-The documentation also covers gradients, colour stops, and interpolation modes β none of which we needed for a simple image background:
-
-- `bg-linear-to-r` β Linear gradients
-- `from-indigo-500 via-purple-500 to-pink-500` β Colour stops
-- `bg-radial`, `bg-conic` β Other gradient types
-
-These are available if you want to add gradient overlays or effects in the future.
-
----
-
-## Summary
-
-| Concept | Key Takeaway |
-|---------|--------------|
-| π **Flexbox** | One-dimensional layout for arranging items in a row or column. Perfect for centering and distributing space. |
-| π² **Grid** | Two-dimensional layout for complex row/column structures. Ideal for galleries and dashboards. |
-| π **Layout vs Flex/Grid** | Layout controls *how an element exists* in the page. Flexbox/Grid control *how its children are arranged*. |
-| π¨ **CSS vs Tailwind** | Flexbox is native CSS. Tailwind provides convenient utility classes that compile to standard CSS. |
-| πΌοΈ **Background Images** | Use bg-β[url(β¦)] for arbitrary images. Combine with `dark:` for theme-aware switching. |
-
----
-
-*Document created to explain the auth layout implementation in DevFlow.*
diff --git a/x_docs/mine/globals-compare.md b/x_docs/mine/globals-compare.md
deleted file mode 100644
index 352a2ad..0000000
--- a/x_docs/mine/globals-compare.md
+++ /dev/null
@@ -1,983 +0,0 @@
-# Tailwind Theming Comparison: `globals-old.css` vs My Modern Approach `globals.css`
-
-This document compares the light/dark mode approach from an old file (`globals-old.css`) with the modern Tailwind v4 approach (`globals.css`), and categorises all configuration patterns with explanations.
-
----
-
-## Light/Dark Mode Comparison
-
-| Aspect | Old File (globals-old.css) | Your File (globals.css) |
-|--------|-------------------------------|-------------------------|
-| **Approach** | Composite utility classes with `dark:` variant | CSS custom properties + `@theme inline` |
-| **Colour Format** | Named scales (light-850, dark-100) | OKLCH (perceptually uniform) |
-| **Theme Switching** | Class-based via Tailwind `dark:` | CSS variables that swap at runtime |
-| **Naming** | Arbitrary (light-850, dark-400) | Semantic (primary, muted, accent) |
-| **Tailwind Version** | v3 patterns | v4 native patterns |
-
-### Verdict: The modern globals.css approach is significantly better
-
-**Why the modern approach wins:**
-
-1. **Runtime theme switching** β CSS variables can be changed via JavaScript without recompiling CSS. This enables features like system preference detection, user preference persistence, and instant theme toggling.
-
-2. **OKLCH colour space** β A modern, perceptually uniform colour space. Unlike HSL or RGB, OKLCH ensures that colours with the same lightness value actually *appear* equally light to human eyes. This produces better gradients and more accessible colour combinations.
-
-3. **Semantic naming** β `bg-primary` communicates intent; `bg-light-850` is meaningless without context. Semantic names make code self-documenting and easier to maintain.
-
-4. **shadcn/ui compatible** β The CSS variable pattern is the standard for shadcn/ui components, Radix UI, and most modern React component libraries. Your setup works out of the box.
-
-5. **DRY (Don't Repeat Yourself)** β Change one variable in `:root` or `.dark`, and all usages update automatically. The old file has 50+ hardcoded light/dark combinations that must be updated individually.
-
-6. **No `!important` spam** β The old file uses `!important` 20+ times, which is a code smell indicating specificity problems. The modern approach avoids this entirely through proper CSS layering.
-
----
-
-## Old File Categories Explained
-
-The old file contains various utility patterns. Below, each category is explained with context on what it does, why it exists, and what you would need in a modern setup.
-
----
-
-### 1. Base Settings
-
-```css
-body { font-family: "Inter", sans-serif; }
-:root { --radius: 8px; }
-```
-
-**What it does:**
-Sets the global font family and defines a CSS variable for border radius that can be used throughout the application.
-
-**Why it exists:**
-Centralising design tokens like border radius allows for consistent UI and easy global changes.
-
-**What you'd need:**
-Already handled in your file. Your setup is more sophisticated:
-
-- `--radius` is defined in `:root` and mapped via `@theme inline` to generate `rounded-sm`, `rounded-md`, `rounded-lg`, `rounded-xl` utilities
-- Fonts are defined as CSS variables (`--font-display`, `--font-serif`, `--font-mono`) that integrate with Next.js font optimisation
-
----
-
-### 2. Background Theme Utilities (17 classes)
-
-```css
-.background-light850_dark100 { @apply bg-light-850 dark:bg-dark-100; }
-.background-light900_dark200 { @apply bg-light-900 dark:bg-dark-200; }
-.background-light900_dark300 { @apply bg-light-900 dark:bg-dark-300; }
-/* ... 14 more variations */
-```
-
-**What it does:**
-Pre-composed utility classes that apply different background colours depending on whether light or dark mode is active. The naming convention `light850_dark100` indicates "use light-850 in light mode, dark-100 in dark mode".
-
-**Why it exists:**
-In Tailwind v3, this was a common pattern to avoid writing `bg-light-850 dark:bg-dark-100` repeatedly in JSX. It keeps component markup cleaner.
-
-**Problems with this approach:**
-
-- Creates dozens of single-purpose classes
-- Arbitrary numbers (850, 100) have no semantic meaning
-- Must create a new class for every light/dark combination needed
-- Tightly couples colour values to class names
-
-**What you'd need:**
-Nothing. Use semantic classes instead:
-
-```html
-
-
-
-
-
-
-```
-
-The modern approach uses semantic names that describe *purpose* (card, muted, secondary) rather than *appearance* (light-900, dark-200).
-
----
-
-### 3. Text Theme Utilities (16 classes)
-
-```css
-.text-dark100_light900 { @apply text-dark-100 dark:text-light-900 !important; }
-.text-dark200_light800 { @apply text-dark-200 dark:text-light-800 !important; }
-.text-dark300_light700 { @apply text-dark-300 dark:text-light-700; }
-/* ... 13 more variations */
-```
-
-**What it does:**
-Pre-composed text colour classes for light/dark mode. Note that many use `!important` to force specificity.
-
-**Why it exists:**
-Same rationale as background utilities β reduces repetition in markup.
-
-**Problems with this approach:**
-
-- Heavy use of `!important` indicates specificity battles
-- Arbitrary colour values make it hard to understand visual hierarchy
-- No indication of what each colour combination is *for*
-
-**What you'd need:**
-Nothing. Use semantic text colours:
-
-```html
-
-
Secondary text
-
-
-
Secondary text
-```
-
-Common semantic text colours in your setup:
-
-- `text-foreground` β Primary text
-- `text-muted-foreground` β Secondary/subdued text
-- `text-primary` β Brand/accent text
-- `text-destructive` β Error/warning text
-
----
-
-### 4. Border Utilities
-
-```css
-.light-border { @apply border-light-800 dark:border-dark-300; }
-.light-border-2 { @apply border-light-700 dark:border-dark-400 !important; }
-```
-
-**What it does:**
-Consistent border colours that adapt to light/dark mode.
-
-**Why it exists:**
-Borders often need different opacity/colour in dark mode to remain visible without being too harsh.
-
-**What you'd need:**
-Already handled. Your `@layer base` includes:
-
-```css
-* {
- @apply border-border outline-ring/50;
-}
-```
-
-This sets a default border colour on all elements using the `--border` CSS variable, which automatically changes between light and dark mode. Simply use the `border` class:
-
-```html
-
-```
-
----
-
-### 5. Typography Scale (16 classes)
-
-```css
-.h1-bold { @apply text-[30px] font-bold leading-[42px] tracking-tighter; }
-.h2-bold { @apply text-[24px] font-bold leading-[31.2px]; }
-.h2-semibold { @apply text-[24px] font-semibold leading-[31.2px]; }
-.h3-bold { @apply text-[20px] font-bold leading-[26px]; }
-.h3-semibold { @apply text-[20px] font-semibold leading-[24.8px]; }
-.base-medium { @apply text-[18px] font-medium leading-[25.2px]; }
-.base-semibold { @apply text-[18px] font-semibold leading-[25.2px]; }
-.base-bold { @apply text-[18px] font-bold leading-[140%]; }
-.paragraph-regular { @apply text-[16px] font-normal leading-[22.4px]; }
-.paragraph-medium { @apply text-[16px] font-medium leading-[22.4px]; }
-.paragraph-semibold { @apply text-[16px] font-semibold leading-[20.8px]; }
-.body-regular { @apply text-[14px] font-normal leading-[19.6px]; }
-.body-medium { @apply text-[14px] font-medium leading-[18.2px]; }
-.body-semibold { @apply text-[14px] font-semibold leading-[18.2px]; }
-.body-bold { @apply text-[14px] font-bold leading-[18.2px]; }
-.small-regular { @apply text-[12px] font-normal leading-[15.6px]; }
-.small-medium { @apply text-[12px] font-medium leading-[15.6px]; }
-.small-semibold { @apply text-[12px] font-semibold leading-[15.6px]; }
-.subtle-medium { @apply text-[10px] font-medium leading-[13px] !important; }
-.subtle-regular { @apply text-[10px] font-normal leading-[13px]; }
-```
-
-**What it does:**
-A comprehensive type scale combining font size, weight, and line height into single utility classes. The naming convention is `{size}-{weight}`.
-
-**Why it exists:**
-Typography often requires coordinated changes to size, weight, and line-height. These utilities ensure consistent combinations across the app.
-
-**Analysis:**
-This is actually a reasonable pattern, though the arbitrary pixel values (`text-[30px]`, `leading-[42px]`) could be replaced with Tailwind's built-in scale for better maintainability.
-
-**What you'd need:**
-Your file already has base styles for `h1`β`h6` in `@layer base`. For additional utility combinations, you could add:
-
-```css
-@layer utilities {
- /* Using Tailwind's built-in scale instead of arbitrary values */
- .h1-bold { @apply text-5xl font-bold tracking-tight; }
- .h2-bold { @apply text-4xl font-bold; }
- .h2-semibold { @apply text-4xl font-semibold; }
- .h3-bold { @apply text-3xl font-bold; }
-
- .body-medium { @apply text-sm font-medium; }
- .body-semibold { @apply text-sm font-semibold; }
-
- .small-medium { @apply text-xs font-medium; }
- .caption { @apply text-xs text-muted-foreground; }
-}
-```
-
-Alternatively, just compose Tailwind utilities directly in your JSX β `text-sm font-medium` is clear and doesn't require custom classes.
-
----
-
-### 6. Placeholder Styles
-
-```css
-.placeholder { @apply placeholder:text-light-400 dark:placeholder:text-light-500; }
-```
-
-**What it does:**
-Sets consistent placeholder text colour in form inputs across light/dark modes.
-
-**Why it exists:**
-Placeholder text should be visually distinct from actual input text, but still readable. The colour often needs adjustment in dark mode.
-
-**What you'd need:**
-Add to your base layer for global application:
-
-```css
-@layer base {
- input::placeholder,
- textarea::placeholder {
- @apply text-muted-foreground;
- }
-}
-```
-
-Or apply per-component using Tailwind's placeholder modifier: `placeholder:text-muted-foreground`.
-
----
-
-### 7. Visual Effects
-
-```css
-.invert-colors { @apply invert dark:invert-0; }
-.shadow-light100_dark100 { @apply shadow-light-100 dark:shadow-dark-100; }
-.shadow-light100_darknone { @apply shadow-light-100 dark:shadow-none; }
-```
-
-**What it does:**
-
-- `invert-colors`: Inverts an element's colours in light mode, restores in dark mode. Useful for black icons that need to be white in dark mode.
-- Shadow utilities: Apply different shadow styles per theme. Shadows often look too harsh in dark mode and need to be softer or removed.
-
-**Why it exists:**
-Icons and shadows frequently need theme-specific treatment that simple colour changes don't address.
-
-**What you'd need:**
-If using icons that need inversion (e.g., black SVGs):
-
-```css
-@layer utilities {
- .invert-on-light { @apply invert dark:invert-0; }
- .invert-on-dark { @apply dark:invert; }
-}
-```
-
-For shadows, consider defining shadow values in your theme that work across modes, or use:
-
-```css
-@layer utilities {
- .shadow-theme {
- @apply shadow-md dark:shadow-none dark:ring-1 dark:ring-border;
- }
-}
-```
-
----
-
-### 8. Gradients
-
-```css
-.primary-gradient {
- background: linear-gradient(129deg, #ff7000 0%, #e2995f 100%);
-}
-
-.dark-gradient {
- background: linear-gradient(
- 232deg,
- rgba(23, 28, 35, 0.41) 0%,
- rgba(19, 22, 28, 0.7) 100%
- );
-}
-
-.light-gradient {
- background: linear-gradient(
- 132deg,
- rgba(247, 249, 255, 0.5) 0%,
- rgba(229, 237, 255, 0.25) 100%
- );
-}
-
-.primary-text-gradient {
- background: linear-gradient(129deg, #ff7000 0%, #e2995f 100%);
- background-clip: text;
- -webkit-background-clip: text;
- -webkit-text-fill-color: transparent;
-}
-```
-
-**What it does:**
-
-- `primary-gradient`: Brand gradient for buttons, CTAs, highlights (orange tones)
-- `dark-gradient`: Subtle overlay gradient for dark mode cards/surfaces
-- `light-gradient`: Subtle overlay gradient for light mode
-- `primary-text-gradient`: Applies gradient as text colour (the background shows through transparent text)
-
-**Why it exists:**
-Gradients add visual interest and depth. Brand gradients reinforce identity. The text gradient technique creates eye-catching headings.
-
-**What you'd need:**
-First, define brand colours as CSS variables, then create gradient utilities:
-
-```css
-:root {
- --brand-orange: #ff7000;
- --brand-gold: #e2995f;
-}
-
-@layer utilities {
- .bg-gradient-primary {
- background: linear-gradient(135deg, var(--brand-orange) 0%, var(--brand-gold) 100%);
- }
-
- .bg-gradient-surface {
- @apply bg-gradient-to-br from-background to-muted/50;
- }
-
- .text-gradient-primary {
- background: linear-gradient(135deg, var(--brand-orange) 0%, var(--brand-gold) 100%);
- -webkit-background-clip: text;
- -webkit-text-fill-color: transparent;
- background-clip: text;
- }
-}
-```
-
----
-
-### 9. Layout Utilities
-
-```css
-.flex-center { @apply flex justify-center items-center; }
-.flex-between { @apply flex justify-between items-center; }
-.flex-start { @apply flex justify-start items-center; }
-```
-
-**What it does:**
-Shorthand utilities for common flexbox patterns:
-
-- `flex-center`: Centre children both horizontally and vertically
-- `flex-between`: Space children to opposite ends, vertically centred
-- `flex-start`: Align children to start, vertically centred
-
-**Why it exists:**
-These three-class combinations (`flex justify-center items-center`) are extremely common. Single utilities reduce markup verbosity.
-
-**What you'd need:**
-These are genuinely useful shortcuts. Add if you find yourself writing these combinations frequently:
-
-```css
-@layer utilities {
- .flex-center { @apply flex items-center justify-center; }
- .flex-between { @apply flex items-center justify-between; }
- .flex-start { @apply flex items-center justify-start; }
- .flex-end { @apply flex items-center justify-end; }
-
- /* Inline variant (horizontal only) */
- .inline-center { @apply inline-flex items-center justify-center; }
-}
-```
-
----
-
-### 10. Component Utilities
-
-```css
-.card-wrapper {
- @apply bg-light-900 dark:dark-gradient shadow-light-100 dark:shadow-dark-100;
-}
-
-.btn { @apply bg-light-800 dark:bg-dark-300 !important; }
-.btn-secondary { @apply bg-light-800 dark:bg-dark-400 !important; }
-.btn-tertiary { @apply bg-light-700 dark:bg-dark-300 !important; }
-
-.tab {
- @apply min-h-full dark:bg-dark-400 bg-light-800 text-light-500
- dark:data-[state=active]:bg-dark-300 data-[state=active]:bg-primary-100
- data-[state=active]:text-primary-500 !important;
-}
-```
-
-**What it does:**
-Pre-styled component utilities for cards, buttons, and tabs.
-
-**Why it exists:**
-When not using a component library, these utilities provide consistent component styling without writing full CSS classes for each component.
-
-**Problems with this approach:**
-
-- Heavy use of `!important` to override other styles
-- Tightly coupled to specific colour values
-- Doesn't scale well β you end up with `.btn`, `.btn-secondary`, `.btn-tertiary`, `.btn-ghost`, `.btn-outline`...
-- State management (`:hover`, `:active`, `:disabled`) becomes complex
-
-**What you'd need:**
-With shadcn/ui or similar component libraries, you get actual React components (`
`, ``, ``) that:
-
-- Read from your CSS variables automatically
-- Handle all states (hover, focus, disabled, active)
-- Support variants via props (``)
-- Are fully accessible
-
-If building custom components without a library, define styles within the component file rather than in globals.
-
----
-
-### 11. Focus Utilities
-
-```css
-.no-focus {
- @apply focus-visible:ring-0 focus-visible:ring-transparent focus-visible:ring-offset-0 !important;
-}
-```
-
-**What it does:**
-Completely removes the focus ring from an element.
-
-**Why it exists:**
-Sometimes designers want to remove browser focus indicators for aesthetic reasons.
-
-**Accessibility warning:**
-Focus indicators are essential for keyboard navigation. Removing them makes your site inaccessible to keyboard users. This utility should be used sparingly, if at all, and only when a custom focus indicator is provided instead.
-
-**What you'd need:**
-If you must use this pattern, provide an alternative focus indicator:
-
-```css
-@layer utilities {
- .focus-custom {
- @apply focus-visible:ring-0 focus-visible:ring-offset-0
- focus-visible:outline-2 focus-visible:outline-primary;
- }
-}
-```
-
----
-
-### 12. Prose/Markdown Styles
-
-```css
-.markdown {
- @apply max-w-full prose dark:prose-p:text-light-700 dark:prose-ol:text-light-700
- dark:prose-ul:text-light-500 dark:prose-strong:text-white
- dark:prose-headings:text-white prose-headings:text-dark-400
- prose-h1:text-dark-300 prose-h2:text-dark-300 prose-p:text-dark-500
- prose-ul:text-dark-500 prose-ol:text-dark-500;
-}
-
-.markdown-editor {
- @apply prose max-w-full prose-p:m-0 dark:prose-headings:text-white
- prose-headings:text-dark-400 prose-p:text-dark-500 dark:prose-p:text-light-700
- prose-ul:text-dark-500 dark:prose-ul:text-light-700 prose-ol:text-dark-500
- dark:prose-ol:text-light-700 dark:prose-strong:text-white
- prose-blockquote:text-dark-500 dark:prose-blockquote:text-light-700;
-}
-```
-
-**What it does:**
-Customises the Tailwind Typography plugin (`@tailwindcss/typography`) for rendered markdown content. The `prose` class styles semantic HTML (headings, paragraphs, lists, etc.) and these utilities override specific elements for light/dark mode.
-
-**Why it exists:**
-User-generated content (blog posts, comments, documentation) often comes as HTML/Markdown that needs consistent styling without adding classes to every element.
-
-**What you'd need:**
-
-1. Install the typography plugin: `npm install @tailwindcss/typography`
-2. Add customised prose utilities:
-
-```css
-@layer utilities {
- .prose-custom {
- @apply prose prose-slate dark:prose-invert max-w-none
- prose-headings:font-display
- prose-a:text-primary prose-a:no-underline hover:prose-a:underline
- prose-code:before:content-none prose-code:after:content-none;
- }
-}
-```
-
-The `dark:prose-invert` modifier handles most light/dark adjustments automatically.
-
----
-
-### 13. Scrollbar Customisation
-
-```css
-.custom-scrollbar::-webkit-scrollbar {
- width: 3px;
- height: 3px;
- border-radius: 2px;
-}
-
-.custom-scrollbar::-webkit-scrollbar-track {
- background: #ffffff;
-}
-
-.custom-scrollbar::-webkit-scrollbar-thumb {
- background: #888;
- border-radius: 50px;
-}
-
-.custom-scrollbar::-webkit-scrollbar-thumb:hover {
- background: #555;
-}
-
-.no-scrollbar::-webkit-scrollbar {
- display: none;
-}
-
-.no-scrollbar {
- -ms-overflow-style: none;
- scrollbar-width: none;
-}
-```
-
-**What it does:**
-
-- `custom-scrollbar`: Thin, styled scrollbar for webkit browsers (Chrome, Safari, Edge)
-- `no-scrollbar`: Hides scrollbar while maintaining scroll functionality
-
-**Why it exists:**
-Default browser scrollbars can be visually heavy. Thin or hidden scrollbars create a cleaner UI, especially in sidebars, modals, and horizontally-scrolling containers.
-
-**Browser support note:**
-
-- `::-webkit-scrollbar` works in Chrome, Safari, Edge
-- `scrollbar-width` is the Firefox standard
-- `scrollbar-gutter` is a newer property for reserving scrollbar space
-
-**What you'd need:**
-Copy and adapt with CSS variables for theme awareness:
-
-```css
-.scrollbar-thin::-webkit-scrollbar {
- width: 6px;
- height: 6px;
-}
-
-.scrollbar-thin::-webkit-scrollbar-track {
- @apply bg-transparent;
-}
-
-.scrollbar-thin::-webkit-scrollbar-thumb {
- @apply rounded-full bg-border hover:bg-muted-foreground;
-}
-
-.scrollbar-thin {
- scrollbar-width: thin;
- scrollbar-color: var(--border) transparent;
-}
-
-.scrollbar-none {
- scrollbar-width: none;
- -ms-overflow-style: none;
-}
-
-.scrollbar-none::-webkit-scrollbar {
- display: none;
-}
-```
-
----
-
-### 14. Theme/Active State Utilities
-
-```css
-.active-theme {
- filter: invert(53%) sepia(98%) saturate(3332%) hue-rotate(0deg)
- brightness(104%) contrast(106%) !important;
-}
-
-.hash-span {
- margin-top: -140px;
- padding-bottom: 140px;
- display: block;
-}
-```
-
-**What it does:**
-
-- `active-theme`: Applies a colour filter to indicate active/selected state (makes elements orange)
-- `hash-span`: Offset anchor for hash links, accounting for fixed header height
-
-**Why it exists:**
-
-- `active-theme`: Colouring icons/elements to match brand colour when selected
-- `hash-span`: When navigating to `#section`, the browser scrolls the element to the top. With a fixed header, this hides the content. The negative margin + padding trick positions the anchor above the visible content.
-
-**What you'd need:**
-For active states, prefer Tailwind's state modifiers or CSS variables:
-
-```css
-@layer utilities {
- .active-brand {
- @apply text-primary;
- filter: none; /* Avoid filter hacks when possible */
- }
-}
-```
-
-For scroll offset with fixed headers, modern CSS has `scroll-margin-top`:
-
-```css
-@layer base {
- [id] {
- scroll-margin-top: 5rem; /* Adjust to your header height */
- }
-}
-```
-
----
-
-### 15. Third-Party Component Overrides
-
-```css
-.mdxeditor-toolbar {
- background: #ffffff !important;
-}
-
-.dark .mdxeditor-toolbar {
- background: #151821 !important;
-}
-
-.dark .mdxeditor-toolbar button svg {
- color: #858ead !important;
-}
-
-.dark .mdxeditor-toolbar button:hover svg {
- color: #000 !important;
-}
-
-.dark .mdxeditor-toolbar [role="separator"] {
- border-color: #555 !important;
-}
-
-[data-lexical-editor="true"] {
- height: 350px !important;
- overflow-y: auto !important;
-}
-
-.markdown a {
- color: #1da1f2;
-}
-
-.markdown pre {
- display: grid;
- width: 100%;
-}
-```
-
-**What it does:**
-Overrides default styles of third-party libraries (MDXEditor, Lexical) to match the application's theme.
-
-**Why it exists:**
-Third-party components come with their own styles that often don't match your design system. Overrides are necessary for visual consistency.
-
-**Problems with this approach:**
-
-- Fragile β breaks when libraries update their class names
-- Heavy use of `!important` to win specificity battles
-- Hardcoded colour values instead of CSS variables
-
-**What you'd need:**
-Only add when you install these specific libraries. Better approach:
-
-```css
-/* Use CSS variables so overrides follow your theme */
-.mdxeditor-toolbar {
- background: var(--background) !important;
-}
-
-.dark .mdxeditor-toolbar button svg {
- color: var(--muted-foreground) !important;
-}
-
-/* Consider keeping third-party overrides in a separate file */
-/* e.g., styles/vendor-overrides.css */
-```
-
----
-
-## Summary: What to Add to Your Modern Setup
-
-| Category | Recommendation | Priority |
-|----------|----------------|----------|
-| Theme colours | Already handled via CSS variables | N/A |
-| Typography base | Already in `@layer base` for h1βh6 | N/A |
-| Typography utilities | Add only if you need specific combos frequently | Low |
-| Gradients | Add when you define brand colours | Medium |
-| Flex shortcuts | Optional convenience utilities | Low |
-| Placeholder styles | Add to base layer | Low |
-| Scrollbar styles | Add when needed for specific UI | Low |
-| Prose/Markdown | Add when implementing markdown rendering | Medium |
-| Component utilities | Use shadcn components instead | N/A |
-| `!important` utilities | Avoid β indicates architecture issues | N/A |
-| Focus removal | Avoid β accessibility concern | N/A |
-| Third-party overrides | Add only when installing those libraries | As needed |
-
----
-
-## Key Takeaways
-
-1. **Prefer CSS variables over composite utility classes** β They're more flexible, maintainable, and work with runtime theme switching.
-
-2. **Use semantic naming** β `bg-primary`, `text-muted-foreground` communicate intent better than `bg-light-850`, `text-dark-400`.
-
-3. **Avoid `!important`** β If you need it frequently, your CSS architecture has problems. Use proper layering (`@layer base`, `@layer components`, `@layer utilities`).
-
-4. **Don't pre-optimise** β Add utilities as you need them, not upfront. You may never need half of the old file's utilities.
-
-5. **Leverage your component library** β With shadcn/ui, you get buttons, cards, tabs, etc. that already work with your CSS variables. Don't recreate them as utility classes.
-
----
-
-## Appendix: Which File is Superior for Tailwind v4 Theming?
-
-**Winner: `globals.css` (your current file)**
-
-The modern `globals.css` is unequivocally superior for centralised theming with Tailwind v4. Here's an educational breakdown of why.
-
----
-
-### The Core Principle: Single Source of Truth
-
-Good theming follows a fundamental principle: **define once, use everywhere**. Let's compare how each file handles this.
-
-#### Old File Approach (globals-old.css)
-
-```css
-/* Colour is defined inline, repeated for every combination */
-.background-light900_dark200 { @apply bg-light-900 dark:bg-dark-200; }
-.background-light900_dark300 { @apply bg-light-900 dark:bg-dark-300; }
-.text-dark400_light700 { @apply text-dark-400 dark:text-light-700; }
-.text-dark400_light800 { @apply text-dark-400 dark:text-light-800; }
-/* ... 50+ more classes */
-```
-
-**Problems:**
-
-- To change a colour, you must find and update every class that uses it
-- No single place defines what "the background colour" is
-- Adding a new theme (e.g., high contrast) requires duplicating all classes
-
-#### Modern Approach (globals.css)
-
-```css
-/* Define once */
-:root {
- --background: oklch(1 0 0);
- --card: oklch(1 0 0);
-}
-
-.dark {
- --background: oklch(0.129 0.042 264.695);
- --card: oklch(0.208 0.042 265.755);
-}
-
-/* Map to Tailwind */
-@theme inline {
- --color-background: var(--background);
- --color-card: var(--card);
-}
-```
-
-**Benefits:**
-
-- Change `--background` in one place, entire app updates
-- Adding a new theme is just another class (`.high-contrast { --background: ... }`)
-- Clear, auditable list of all theme colours in one location
-
----
-
-### Understanding the Tailwind v4 Architecture
-
-Tailwind v4 introduced a new theming system. Here's how the layers work together:
-
-```
-βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-β :root / .dark β
-β βββββββββββββββββ β
-β Raw CSS variables. These store values but don't generate β
-β any Tailwind utilities. They're just data. β
-β β
-β --background: oklch(1 0 0); β
-β --primary: oklch(0.208 0.042 265.755); β
-βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- β
- βΌ
-βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-β @theme inline β
-β βββββββββββββββββ β
-β Maps CSS variables to Tailwind's theme system. β
-β This is where utilities get generated. β
-β β
-β --color-background: var(--background); β
-β β Generates: bg-background, text-background, border-background, etc. β
-β β
-β --color-primary: var(--primary); β
-β β Generates: bg-primary, text-primary, border-primary, etc.β
-βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- β
- βΌ
-βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-β @layer base β
-β βββββββββββββββββ β
-β Applies default styles to HTML elements. β
-β Lowest specificity β easily overridden. β
-β β
-β body { @apply bg-background text-foreground; } β
-β h1 { @apply text-5xl font-bold; } β
-βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- β
- βΌ
-βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-β @layer utilities β
-β βββββββββββββββββ β
-β Custom utility classes. Highest specificity. β
-β Use sparingly β for patterns not covered by Tailwind. β
-β β
-β .flex-center { @apply flex items-center justify-center; } β
-βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-```
-
-The old file skips the first two layers entirely, jumping straight to utilities. This breaks the architecture.
-
----
-
-### Why `@custom-variant dark` Matters
-
-Your file includes this critical line:
-
-```css
-@custom-variant dark (&:where(.dark, .dark *));
-```
-
-**What it does:**
-
-This tells Tailwind v4 how to apply `dark:` variants. When you write `dark:bg-card`, Tailwind generates:
-
-```css
-.dark .dark\:bg-card, .dark.dark\:bg-card {
- background-color: var(--color-card);
-}
-```
-
-**Why `:where()` is used:**
-
-The `:where()` pseudo-class has zero specificity. This means:
-
-- `dark:` variants don't accidentally override other styles
-- You can still override dark styles with regular utilities if needed
-- Specificity remains predictable
-
-The old file relies on Tailwind v3's built-in `dark:` handling, which doesn't integrate with CSS variables in the same way.
-
----
-
-### The OKLCH Advantage
-
-Your file uses OKLCH colour space:
-
-```css
---primary: oklch(0.208 0.042 265.755);
-```
-
-The old file uses named colour scales that reference hex/rgb values defined elsewhere.
-
-**Why OKLCH is superior for theming:**
-
-1. **Perceptual uniformity** β Equal changes in lightness value produce equal *perceived* lightness changes. HSL doesn't guarantee this (yellow looks brighter than blue at the same L value).
-
-2. **Predictable colour manipulation** β You can programmatically generate colour scales:
-
- ```css
- --primary-50: oklch(0.95 0.042 265.755); /* Same chroma/hue, lighter */
- --primary-100: oklch(0.90 0.042 265.755);
- --primary-200: oklch(0.80 0.042 265.755);
- /* etc. */
- ```
-
-3. **Better gradients** β Gradients through OKLCH don't have the muddy middle tones that RGB gradients produce.
-
-4. **Accessibility calculations** β WCAG contrast calculations align better with OKLCH lightness than HSL.
-
----
-
-### Centralisation Score
-
-Let's quantify "centralisation" β how many places must change to update the theme:
-
-| Change | Old File | Modern File |
-|--------|-------------|-------------|
-| Update primary brand colour | ~15 classes + config | 2 lines (`:root` + `.dark`) |
-| Add high-contrast theme | Duplicate all 50+ classes | Add `.high-contrast { }` block |
-| Change all card backgrounds | Find/replace across classes | Change `--card` variable |
-| Adjust dark mode specifically | Edit every `dark:` variant | Edit `.dark { }` block only |
-| Update border colour globally | Edit multiple `.light-border-*` classes | Change `--border` variable |
-
-**Old file centralisation score: 2/10**
-**Modern file centralisation score: 9/10**
-
----
-
-### Runtime Theme Switching
-
-A key capability the modern approach enables:
-
-```typescript
-// With CSS variables (modern approach)
-function setTheme(theme: 'light' | 'dark' | 'system') {
- document.documentElement.classList.remove('light', 'dark');
- if (theme === 'system') {
- const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
- document.documentElement.classList.add(prefersDark ? 'dark' : 'light');
- } else {
- document.documentElement.classList.add(theme);
- }
-}
-// Theme switches instantly β CSS variables update, no recompilation
-```
-
-The old file approach requires the same class toggle, but the theme values are baked into utility classes at build time. The modern approach stores values in variables that the browser evaluates at runtime, enabling:
-
-- Instant theme switching without flash
-- System preference detection
-- Per-component theme overrides (nested `.dark` contexts)
-- CSS-only theme transitions
-
----
-
-### Conclusion
-
-The modern `globals.css` implements **proper separation of concerns**:
-
-1. **Data layer** (`:root`, `.dark`) β Stores theme values
-2. **Mapping layer** (`@theme inline`) β Connects values to Tailwind
-3. **Application layer** (`@layer base`) β Applies defaults to elements
-4. **Extension layer** (`@layer utilities`) β Custom utilities when needed
-
-The old file conflates all these into a single utilities layer, resulting in:
-
-- 50+ tightly-coupled utility classes
-- No single source of truth
-- Difficult theme modifications
-- Heavy `!important` usage to fight specificity
-- No runtime theme capabilities
-
-**For any Tailwind v4 project, use the CSS variable + `@theme inline` pattern.** It's the architecture Tailwind v4 was designed around, and it's what shadcn/ui, Radix, and other modern tooling expect.
diff --git a/x_docs/mine/nav_mobile_sidebar-and-rail.md b/x_docs/mine/nav_mobile_sidebar-and-rail.md
deleted file mode 100644
index 6455e39..0000000
--- a/x_docs/mine/nav_mobile_sidebar-and-rail.md
+++ /dev/null
@@ -1,255 +0,0 @@
-# Navigation Architecture: Mobile, Sidebar & Rail
-
-This document explains how the navigation system works across breakpoints, and how components are structured for reusability.
-
----
-
-## Overview
-
-The app has **three navigation contexts** that share the same nav items but render differently:
-
-| Context | Breakpoint | Container | NavLink Variant |
-| --------- | ------------ | ----------- | ----------------- |
-| Mobile Nav | `` | `rail` (icon-only) |
-| Left Sidebar | `β₯lg` (1024px+) | Persistent `` | `rail` (icon + label) |
-
----
-
-## Visual Breakdown
-
-```text
-βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-β β
-β MOBILE (<640px) β
-β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
-β β Navbar: [Logo] [Theme] [Hamburger] β β
-β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
-β β β β
-β β When hamburger tapped β Sheet slides in from left β β
-β β β β
-β β ββββββββββββββββββββ β β
-β β β Sheet (overlay) β β β
-β β β ββββββββββββββββ β β β
-β β β β π Home β β β NavLink (mobile) β β
-β β β β π₯ Community β β β NavLink (mobile) β β
-β β β β β Collectionsβ β β NavLink (mobile) β β
-β β β β πΌ Find Jobs β β β NavLink (mobile) β β
-β β β β π·οΈ Tags β β β NavLink (mobile) β β
-β β β β β Ask β β β NavLink (mobile) β β
-β β β ββββββββββββββββ β β β
-β β β β β β
-β β β ββββββββββββββββ β β SignedOut: auth buttons β β
-β β β β [Sign in] β β β SignedIn: UserButton avatar β β
-β β β β [Sign up] β β β β
-β β β ββββββββββββββββ β β β
-β β ββββββββββββββββββββ β β
-β β β β
-β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
-β β
-βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-
-βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-β β
-β TABLET (640px - 1023px) - Icon-only Rail β
-β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
-β β Navbar: [Logo] [Search] [Theme] [Auth] (SignedOut) β β
-β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
-β ββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
-β β Rail β β β
-β β ~64px β Main Content β β
-β β β β β
-β β π β β NavLink (rail) icon-only β β
-β β π₯ β β β
-β β β β β β
-β β πΌ β β β
-β β π·οΈ β β β
-β β β β β β
-β β β β β
-β β π€ β β UserButton (SignedIn only) β β
-β ββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
-β β
-βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-
-βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-β β
-β DESKTOP (β₯1024px) - Full Sidebar β
-β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
-β β Navbar: [Logo] [Search] [Theme] [Auth] (SignedOut) β β
-β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
-β ββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββ β
-β β Sidebar ~220px β β β
-β β β Main Content β β
-β β π Home β β β
-β β π₯ Community β β NavLink (rail) with labels at lg+ β β
-β β β Collections β β β
-β β πΌ Find Jobs β β β
-β β π·οΈ Tags β β β
-β β β Ask β β β
-β β β β β
-β β π€ UserButton β β UserButton (SignedIn only) β β
-β ββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββ β
-β β
-βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-```
-
----
-
-## Authentication UI
-
-Auth controls appear in different locations based on screen size and auth state:
-
-| Context | Unauthenticated | Authenticated |
-| --------- | ----------------- | --------------- |
-| **Navbar** | Sign in + Sign up buttons (sm+ only) | Nothing (avatar in sidebar) |
-| **LeftSidebar** | Nothing | UserButton avatar at bottom |
-| **MobileNav** | Sign in + Sign up buttons | UserButton avatar |
-
-```text
-ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-β β
-β Auth UI Flow: β
-β β
-β SignedOut (unauthenticated) SignedIn (authenticated) β
-β ββββββββββββββββββββββββββ ββββββββββββββββββββββββββ β
-β β Navbar: [Sign in/up] β β Navbar: [nothing] β β
-β β Sidebar: [nothing] β β Sidebar: [UserButton] β β
-β β Mobile: [Sign in/up] β β Mobile: [UserButton] β β
-β ββββββββββββββββββββββββββ ββββββββββββββββββββββββββ β
-β β
-ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-```
-
----
-
-## Component Architecture
-
-### Key Insight
-
-**NavLink doesn't know what container it's in.** It just renders itself with either:
-
-- `mobile` variant (default): icon + label, generous padding for touch
-- `rail` variant: responsive β icon-only at sm-lg, full at lg+
-
-The **parent component** determines the context (Sheet vs persistent sidebar).
-
-```text
-βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-β β
-β SAME NavLink component, DIFFERENT containers & variants: β
-β β
-β MobileNav (Sheet) LeftSidebar (persistent) β
-β βββββββββββββββββββ βββββββββββββββββββ β
-β β β β β β
-β β β β mobile β β (default)β variant= β (responsive)
-β β β β "rail" /> β β
-β β β β β β
-β βββββββββββββββββββ βββββββββββββββββββ β
-β β
-βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-```
-
-### Containers & Components
-
-| Component | Container Type | When Visible | NavLink Variant | Auth Section |
-| :--------- | :-------------- | :------------ | :--------------- | :------------- |
-| MobileNav | Sheet (overlay) | ` | β₯sm | `rail` (responsive) | SignedIn only (UserButton) |
-
-### Variants
-
-Two variants, but `"rail"` is **responsive** β it handles its own breakpoint transformation internally via Tailwind classes.
-
-```text
-ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-β β
-β NavLink variants: β
-β β
-β 1. "mobile" (default) 2. "rail" (responsive) β
-β ββββββββββββββββββββ βββββββββββ ββββββββββββββββββββ β
-β β π Home β β π β β β π Home β β
-β ββββββββββββββββββββ βββββββββββ ββββββββββββββββββββ β
-β Always icon + label sm-lg: icon lg+: icon + label β
-β Generous padding (py-3) Compact (40px) Tight padding (p-2) β
-β β
-β Used in: Used in: β
-β β’ Mobile sheet β’ LeftSidebar (handles both states) β
-β β
-ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-```
-
----
-
-## File Structure
-
-```text
-components/navigation/
-βββ nav-links.constants.ts β NAV_LINKS array (shared data)
-βββ navbar.tsx β Top bar with logo, search, auth
-βββ mobile-nav.tsx β Sheet drawer for mobile (> $GITHUB_OUTPUT
-
-- name: Cache Playwright browsers
- uses: actions/cache@
- id: playwright-cache
- with:
- path: ~/.cache/ms-playwright
- key: playwright-browsers-${{ steps.playwright-version.outputs.PLAYWRIGHT_VERSION }}-${{ runner.os }}
-
-- name: Install Playwright Browsers
- if: steps.playwright-cache.outputs.cache-hit != 'true'
- run: npx playwright install chromium firefox webkit --with-deps
-```
-
-**Impact:** 30-60s faster E2E workflow, reduced bandwidth costs. **Effort:** 5 minutes.
-**Source:** eval.github-actions.md (Recommendation #2)
-
----
diff --git a/x_docs/textbook/url-state.md b/x_docs/textbook/url-state.md
new file mode 100644
index 0000000..c92801a
--- /dev/null
+++ b/x_docs/textbook/url-state.md
@@ -0,0 +1,38 @@
+# State Management Notes
+
+## Typtes of State Management
+
+1. **State management defined**: It's how you track and organize data in your app (scores, user info, UI states) so your application knows what's happening and can react accordingly.
+
+2. **Local state** is contained within a single component, managed with hooks like `useState`. Other components can't access it unless you explicitly pass it down as props.
+
+3. **Global state** is stored in a centralized location (like a context or store) and can be accessed by any component in the appβsolving the "prop drilling" problem where you'd otherwise have to pass data through many layers of components.
+
+4. **Context API** is React's built-in solution for global state. The pattern is: create a context β wrap your app in a Provider β access the state anywhere using a custom hook (like `useCounter`). Good enough for simple cases β passing down a theme, user auth, or locale works great
+
+5. **Other popular options** exist beyond Context API, each with tradeoffs:
+ - **Redux** β structured approach with actions/reducers (more boilerplate, good for complex apps)
+ - **Zustand** β lightweight, hook-based (simpler API)
+ - **Recoil** β atom-based state (fine-grained updates)
+ - **MobX** β reactive/observable pattern (minimal setup)
+
+The core concept to internalize: *local state for component-specific data, global state for data that multiple components need to share*.
+
+**Rule of thumb:**
+
+- Use **Context API** for infrequently changing, app-wide data (auth, theme, language)
+- Use **Zustand** (or Redux, etc.) when state changes often or you need fine-grained control over re-renders
+
+## URL State Management
+
+Here are the 5 key points reframed for instructing Claude Code effectively:
+
+1. **The problem with traditional state libraries in Next.js**: Redux, Zustand, and Context API all require hooks, which force components to become client-side. This undermines Next.js's server-rendering benefits. When instructing Claude Code, you can say things like "keep this as a server component" or "avoid client-side state here."
+
+2. **URL state management** is the server-friendly alternative. Instead of storing data in React state, you store it in the URL's query parameters (e.g., `?sort=price&page=2`). Key terms: "query parameters," "searchParams," "URL state." You can tell Claude Code: "use URL state management instead of useState" or "store the filter selection in searchParams."
+
+3. **Reading URL data**: In page components, you access `params` (dynamic route segments like `/books/[id]`) and `searchParams` (query string values like `?page=2`) as props. In nested components, you'd use the `useSearchParams` hook. Useful phrase: "pass searchParams down as props to avoid making this a client component."
+
+4. **Writing/updating URL state**: The main approaches are ` ` with a query object, `useRouter().push()`, or the native `URLSearchParams` API. For complex apps, the `query-string` npm package helps. You can instruct: "update the URL when the user selects a filter" or "use the query-string package to manage multiple URL parameters."
+
+5. **Preserving existing parameters**: When updating one query param, don't wipe out the others. Useful instruction: "preserve existing URL parameters when adding the new filter" or "append to the current searchParams instead of replacing them."