# icon-marquee
> HTTP API that returns tech-stack icons as SVG: an animated scrolling marquee or a static row. Embed the URL in Markdown or an HTML `
` tag; no API key, no JavaScript.
Base URL: https://angusu.de/icon-marquee
## Endpoints
### GET /api/:owner/:repository.svg
Live SVG for a public GitHub repository. The service reads GitHub's language summary, maps supported languages to bundled icons, and orders them by byte share. No GitHub workflow, user account or repository token is required.
Query parameters:
- `include` (optional): comma-separated extra icon names for frameworks, databases and tools that language statistics cannot detect. Max 50.
- `exclude` (optional): comma-separated detected or included icon names to hide. Max 100.
- `mode=icons` (optional): return a static row instead of a marquee.
- All geometry, motion, theme and effect options documented below are also supported; `i` is ignored because the repository supplies the detected lineup.
Example: `https://angusu.de/icon-marquee/api/IamAngusU/icon-marquee.svg?include=bun,hono,docker&width=760&height=56`
The companion `GET /api/:owner/:repository.json` response contains `languages` with byte counts, percentages and mapped icons; `icons`, `unsupported`, `selectedIcons`, `unknownIncludes` and the current `cache` state. Only public repositories are supported. Successful GitHub results are cached for one hour, revalidated with an ETag, and retained as a seven-day last-known-good fallback for temporary upstream failures. SVG responses use `Cache-Control: public, no-cache` so image proxies can revalidate them.
### GET /v1/marquee
Animated SVG that scrolls the icons left in a seamless loop at 30px/s. 48px tall. Stops for viewers with reduced motion enabled.
Query parameters:
- `i` (required): comma-separated icon names or short names, in display order. Max 100. Case and surrounding spaces are ignored; duplicates are allowed.
- `width` (optional): window width in px, a whole number from 1 to 3840. The row repeats to fill it. Without it, the window is at most 400px, or exactly one row if the row is shorter.
- `height` (optional): icon height in px, a whole number from 20 to 128. Default 48.
- `gap` (optional): space between icons in px, a whole number from 0 to 96. If omitted, spacing scales with icon height (44/256 of the height).
- `speed` (optional): a whole number from 5 to 200 px/s. Default 30.
- `direction` (optional): `left` (default) or `right`.
- `order` (optional): `repeat` (default) or `shuffle`. Shuffle deduplicates identical sources and excludes recently used icons. Exports contain 16 × unique icon count picks before looping; SVG images cannot run fresh JavaScript randomness.
- `seed` (optional): a whole number from 0 to 4294967295; default 1. Reproduces the same shuffled export.
### GET /v1/icons
Static SVG with the icons in one row, left to right in request order. 48px tall.
Query parameters:
- `i` (required): same rules as above.
- `height` and `gap` (optional): same rules as above.
### GET /v1/catalog
JSON object containing `names` (every canonical icon name) and `aliases` (short name to canonical name).
### GET /v1/assets?i=...
JSON containing aligned `names` and original `svgs` arrays, plus `unknown` names. Uses the same name validation and 100-icon limit. Used by the browser composer; only bundled icons are served.
## Responses
- 200 `image/svg+xml`, cached for 86400 seconds.
- Unknown names are skipped: the response is still 200 with the known icons, and the skipped names are listed, URL-encoded and comma-separated, in the `X-Unknown-Icons` response header.
- 400 `application/json` `{"error": "..."}` when `i` is missing or empty, has more than 100 names, contains no known name, or any supported option is invalid. Numeric options accept decimal digits only.
## Theme
Icons with light and dark versions follow the embedding page's color scheme by default. Both SVG endpoints accept `theme=auto|light|dark` (default auto) for an explicit override.
## Effects
Both SVG endpoints accept `effect=none|glint|chrome|holo`, `intensity=0..100`, `effectDuration=1..20` seconds, `effectInterval=0..30` seconds and `effectVariation=0..100` percent. Defaults are none, 35, 5, 3 and 55. Use `effectArea=surface|border`, `effectTiming=stagger|random|sync` and `effectCoverage=all|some|selected`. Selected coverage uses zero-based `effectIndices=0,2` into the loaded, deduplicated asset list. Marquees accept `edgeFade=0..96` px (default off). Effects are script-free; random timing repeats a seeded eight-sweep schedule with varied entry edges, directions and path offsets per asset, while repeated instances receive independent phases. Hover-to-pause and eased pause/resume are editor-only, and per-icon titles require inline SVG/HTML rather than README images. New composer exports include safe project metadata for re-import; API SVGs do not.
## Repository use and custom logos
For an automatically maintained public-repository embed, use `[](https://github.com/IamAngusU/icon-marquee)`. Pin non-language technologies with `include` and remove unwanted detections with `exclude`.
Download an SVG and commit it beside the README: `[](https://github.com/IamAngusU/icon-marquee)`. No hosted API is needed for that file. URL embeds need a publicly reachable server.
The composer accepts local SVG, PNG, JPEG and WebP logos up to 2 MB each (20 per session). These are rasterized locally to embedded 256px PNGs; no files are uploaded. Uploads use the same rounded tile shape as the library. Auto detects simple monochrome artwork and generates adaptive light/dark colors; colored or ambiguous artwork keeps its pixels. Per-logo Original colors and Monochrome overrides are available. These settings survive project re-import. Download before reloading. Custom logos cannot be included in API or editor links.
## Examples
Markdown:
```md

```
HTML, full-width banner:
```html
```
Static row:
```md

```
## Usage notes for LLMs
- Only use names from the lists below. Unknown names are silently dropped from the image, so check the `X-Unknown-Icons` header when you verify a URL.
- Prefer short names where they exist (e.g. `js`, `ts`, `py`, `k8s`).
- Commas in `i` work literal or encoded. A literal `+` becomes a space, so encode it: `notepad%2B%2B`.
## Short names
- `access` → `microsoftaccess`
- `acrobat` → `adobeacrobat`
- `adianti` → `adiantiframework`
- `adonis` → `adonisjs`
- `ae` → `adobeaftereffects`
- `aftereffects` → `adobeaftereffects`
- `ai` → `adobeillustrator`
- `amber` → `amberlang`
- `angular` → `angularjs`
- `antigravity` → `googleantigravity`
- `arc` → `arcbrowser`
- `arch` → `archlinux`
- `asm` → `assembly`
- `au` → `adobeaudition`
- `audition` → `adobeaudition`
- `aws` → `amazonwebservices`
- `batchfile` → `batch`
- `batchscript` → `batch`
- `beam` → `apachebeam`
- `beef` → `beeflang`
- `beekeeper` → `beekeeperstudio`
- `bigquery` → `googlebigquery`
- `bots` → `discordbots`
- `budgiedesktop` → `buddiesofbudgie`
- `c4d` → `cinema4d`
- `caddy` → `caddyserver`
- `capacitor` → `capacitorjs`
- `cf` → `cloudflare`
- `chrome` → `googlechrome`
- `clipchamp` → `microsoftclipchamp`
- `cloudcomposer` → `googlecloudcomposer`
- `cloudfirestore` → `firebasecloudfirestore`
- `cloudstorage` → `googlecloudstorage`
- `computeengine` → `googlecomputeengine`
- `copilot` → `microsoftcopilot`
- `csp` → `clipstudiopaint`
- `cudacpp` → `cudacplusplus`
- `d` → `dlang`
- `d3` → `d3js`
- `dataflow` → `googledataflow`
- `dataproc` → `googledataproc`
- `davinci` → `davinciresolve`
- `docs` → `googledocs`
- `dreamweaver` → `adobedreamweaver`
- `drf` → `djangorestframework`
- `drive` → `googledrive`
- `dvc` → `dataversioncontrol`
- `dw` → `adobedreamweaver`
- `elysia` → `elysiajs`
- `ember` → `emberjs`
- `entra` → `microsoftentra`
- `es` → `elasticsearch`
- `excel` → `microsoftexcel`
- `express` → `expressjs`
- `fabric` → `microsoftfabric`
- `fasm` → `flatassembler`
- `fb` → `facebook`
- `firebaseai` → `firebaseailogic`
- `firebasecloud` → `firebasecloudfirestore`
- `foundry` → `microsoftfoundry`
- `fs` → `fusejs`
- `fsd` → `featuresliceddesign`
- `fuse` → `fusejs`
- `gadsense` → `googleadsense`
- `gatsbyjs` → `gatsby`
- `gcloud` → `googlecloud`
- `gcp` → `googlecloud`
- `gemini` → `googlegemini`
- `gh` → `github`
- `ghactions` → `githubactions`
- `ghcopilot` → `githubcopilot`
- `ghpages` → `githubpages`
- `go` → `golang`
- `gql` → `graphql`
- `grunt` → `gruntjs`
- `hadoop` → `apachehadoop`
- `hf` → `huggingface`
- `hive` → `apachehive`
- `hop` → `apachehop`
- `htb` → `hackthebox`
- `id` → `adobeindesign`
- `idx` → `googleidx`
- `ig` → `instagram`
- `illustrator` → `adobeillustrator`
- `indesign` → `adobeindesign`
- `inertia` → `inertiajs`
- `intellij` → `intellijidea`
- `intune` → `microsoftintune`
- `jmeter` → `apachejmeter`
- `js` → `javascript`
- `jsr` → `javascriptregistry`
- `k8s` → `kubernetes`
- `kali` → `kalilinux`
- `ktorio` → `ktor`
- `lightroom` → `adobelightroom`
- `looker` → `lookerstudio`
- `lottie` → `lottiefiles`
- `lr` → `adobelightroom`
- `manifold` → `manifoldjs`
- `maven` → `apachemaven`
- `mcp` → `modelcontextprotocol`
- `md` → `markdown`
- `mongo` → `mongodb`
- `mui` → `materialui`
- `myshell` → `myshellai`
- `nest` → `nestjs`
- `net` → `dotnet`
- `next` → `nextjs`
- `nextauth` → `authjs`
- `nix` → `nixos`
- `node` → `nodejs`
- `notepad++` → `notepadplusplus`
- `notepadpp` → `notepadplusplus`
- `nuxt` → `nuxtjs`
- `objc` → `objectivec`
- `oci` → `oraclecloudinfrastructure`
- `office` → `microsoftoffice`
- `onedrive` → `microsoftonedrive`
- `onenote` → `microsoftonenote`
- `ood` → `openondemand`
- `otel` → `opentelemetry`
- `outlook` → `microsoftoutlook`
- `oxfmt` → `oxc`
- `oxlint` → `oxc`
- `pb` → `pocketbase`
- `photoshop` → `adobephotoshop`
- `pop` → `popos`
- `postgres` → `postgresql`
- `powerautomate` → `microsoftpowerautomate`
- `powerpoint` → `microsoftpowerpoint`
- `premierepro` → `adobepremierepro`
- `project` → `microsoftproject`
- `ps` → `adobephotoshop`
- `pwsh` → `powershell`
- `py` → `python`
- `pyspark` → `apachespark`
- `rails` → `rubyonrails`
- `react` → `reactjs`
- `regle` → `reglejs`
- `rollup` → `rollupjs`
- `ros` → `robotoperatingsystem`
- `s3` → `amazons3`
- `sc` → `scala`
- `sclearn` → `scikitlearn`
- `scss` → `sass`
- `sdl` → `simpledirectmedialayer`
- `sharepoint` → `microsoftsharepoint`
- `sheets` → `googlesheets`
- `sklearn` → `scikitlearn`
- `so` → `stackoverflow`
- `solid` → `solidjs`
- `spark` → `apachespark`
- `sqla` → `sqlalchemy`
- `stan` → `stanjs`
- `synapse` → `azuresynapse`
- `tailwind` → `tailwindcss`
- `teams` → `microsoftteams`
- `truenas` → `truenascore`
- `ts` → `typescript`
- `tseslint` → `typescripteslint`
- `unreal` → `unrealengine`
- `upstage` → `upstageai`
- `uv` → `astraluv`
- `visio` → `microsoftvisio`
- `vscode` → `visualstudiocode`
- `vscodeinsiders` → `visualstudiocodeinsiders`
- `vue` → `vuejs`
- `wasdk` → `windowsappsdk`
- `wasm` → `webassembly`
- `windi` → `windicss`
- `word` → `microsoftword`
- `workspace` → `googleworkspace`
- `wp` → `wordpress`
- `ws` → `websocket`
- `xd` → `adobexd`
- `yml` → `yaml`
- `yt` → `youtube`
## All icon names (1041)
7zip, 8th, activitypub, actix, adiantiframework, adobe, adobeacrobat, adobeaftereffects, adobeaudition, adobecoldfusion, adobedreamweaver, adobeexpress, adobeillustrator, adobeindesign, adobelightroom, adobephotoshop, adobepremierepro, adobexd, adonisjs, affinity, agda, airflow, aiscript, aisdk, alacritty, alchemy, algolia, alibabacloud, alpinejs, alpinelinux, amazons3, amazonwebservices, amberlang, amplify, anaconda, android, androidstudio, angularjs, animejs, ansible, antdesign, anyrun, anyscale, anytype, apache, apachebeam, apachehadoop, apachehive, apachehop, apachejmeter, apachemaven, apachespark, apachesubversion, apidog, apifox, apipost, apktool, apollo, appian, appium, apple, appwrite, arcbrowser, archlinux, archunit, arduino, argocd, arturo, asciidoctordocs, aseprite, aspaper, assembly, astraluv, astro, atom, auth0, authjs, authy, autocad, autodeskfusion, autohotkey, avaloniaui, axios, azul, azure, azuresynapse, babel, babylonjs, backblaze, backbonejs, balenaetcher, ballerina, bambustudio, baseui, bash, batch, bazarr, beagleboard, beeflang, beekeeperstudio, bento, betterauth, bevy, bing, binijs, biome, bitbucket, blazor, blender, bloc, bluesky, bolt, bookstack, bootstrap, boundary, box2d, brave, browserstack, bruno, buddiesofbudgie, bugsnag, builder, bullmq, bulma, bun, bunnynet, burncloud, burpsuite, bytedance, c, cachyos, caddyserver, cairo, cakebuild, cakephp, camtasia, camunda, canva, capacitorjs, capcut, cassandra, catboost, catch2, celery, centos, chakraui, chartjs, chatgpt, chocolatey, chroma, chromium, cinema4d, circleci, cisco, civitai, claudeai, claudecode, clerk, clickhouse, clickup, cline, clion, clipstudiopaint, clojure, cloudflare, cloudflareworkers, cloudinary, cmake, cmder, codeberg, codeblocks, codechef, codecov, codeforces, codegeex, codeigniter, codepen, codeql, coderabbit, codewars, codex, coffeescript, cohere, comfyui, commitlint, composehotreload, composemultiplatform, composer, conar, confluence, consul, convex, cookiecutter, coolify, coze, cpanel, cpp, crewai, crush, crusoe, crystal, csharp, css, css3, csv, cucumber, cudacplusplus, curl, curseforge, cursor, cypress, d3js, dagshub, dailydev, daisyui, dart, databricks, datadog, datagrip, datalore, dataversioncontrol, datefns, davinciresolve, dbeaver, dbt, debian, deepin, deepseek, deno, dependabot, designali, devto, dhizuku, digitalocean, directus, discord, discordbots, discordjs, disqus, django, djangorestframework, dlang, dlthub, dndkit, dnspy, docker, dockge, docus, docusaurus, dokploy, dotnet, drawio, dremio, drizzle, dropbox, drupal, duckdb, dyad, easybuild, echo, eclipseide, edge, edgeimpulse, effect, ejs, elasticsearch, electron, element, elementaryos, elementor, elementplus, elevenlabs, elixir, elysiajs, emberjs, emby, endeavouros, erlang, esbuild, eslint, esp32, etcd, eventbridge, excalidraw, expo, exposed, expressjs, expressvpn, fabricjs, fabricmc, facebook, fastapi, fastify, fdroid, featuresliceddesign, fedora, fiber, figma, filezilla, filmora, firebase, firebaseailogic, firebaseauthentication, firebasecloudfirestore, firebasestudio, firefox, fivetran, flameengine, flask, flatassembler, fleet, flightcontrol, flourish, flowbite, flutter, flutterflow, flyio, forem, forgejo, forgemc, fortran, framer, freebsd, freecad, freecodecamp, freelancer, fresh, fresheditor, fsharp, fusejs, ganache, gatsby, gdevelop, geany, geminicli, genkit, gentoo, getx, ghdl, ghidra, ghostty, gimp, gin, git, gitbash, gitbook, gitea, github, githubactions, githubcopilot, githubpages, gitkraken, gitlab, gitlocalize, gitmind, gitpod, gleam, gmail, gnu, godot, goland, golang, googleadk, googleadsense, googleantigravity, googlebigquery, googlechrome, googlecloud, googlecloudcomposer, googlecloudstorage, googlecolaboratory, googlecomputeengine, googledataflow, googledataproc, googledocs, googledrive, googleforms, googlegemini, googleidx, googlesheets, googleslides, googleworkspace, gorm, gradle, grafana, graphite, graphql, greeter, gridsome, grok, groovy, groq, grpc, gruntjs, gsap, gtkwave, hackerrank, hackthebox, hacs, handycontrols, haproxy, hashicorp, hashnode, haskell, haxe, headlessui, helia, helm, herdr, heroku, heroui, hexo, heyapi, hibernate, homeassistant, homebrew, hono, hoppscotch, hostgator, html, htmx, httpie, hub, hubspot, huggingface, hugo, hyper, hyprland, i18next, iceberg, ida, ifttt, inertiajs, influxdb, inkscape, insomnia, instagram, intellijidea, ionic, ios, ipados, istio, jaeger, jakartaee, jamstack, jasmine, jaspr, java, javascript, javascriptregistry, jdbc, jekyll, jellyfin, jellyseerr, jenkins, jest, jetpack, jetpackcompose, jira, jitsi, joomla, jotai, jquery, json, jsonschema, jujutsu, julia, junit4, junit5, jupyter, jwt, k3s, k6, kafka, kaggle, kalilinux, katalon, keet, kepware, keras, kestra, keycloak, kiali, kicad, kiro, kitty, kofi, koin, konva, kotlin, kotlinmultiplatform, kotlinnotebook, koyeb, krita, ktor, kubernetes, kubuntu, lando, langchain, laravel, latex, launchdarkly, lavalink, leaflet, leetcode, lemonsqueezy, lenis, less, letterboxd, librepcb, lidarr, linkedin, linux, linuxmint, liquidsoap, litert, litestar, litmus, livewire, llamaindex, llmrouter, llvm, lmstudio, logto, lokalise, loki, lookerstudio, lottiefiles, lovable, lua, lubuntu, lucia, lucide, lumo, lynxjs, macos, magicui, magisk, makecode, mambaui, manifoldjs, manim, manjaro, mapbox, mariadb, markdown, mastodon, materialdesign, materialformkdocs, materialui, matlab, matplotlib, matrix, medium, medusa, mermaid, meta, metabase, metasploit, mgx, micropython, microsoft365copilot, microsoftaccess, microsoftclipchamp, microsoftcopilot, microsoftentra, microsoftexcel, microsoftfabric, microsoftforms, microsoftfoundry, microsoftintune, microsoftoffice, microsoftonedrive, microsoftonenote, microsoftoutlook, microsoftpowerautomate, microsoftpowerpoint, microsoftproject, microsoftsharepoint, microsoftteams, microsoftvisio, microsoftword, mikroc, milligram, mimir, minimax, minio, mkdocs, mlflow, modelcontextprotocol, mohistmc, mongodb, motherduck, motion, mqtt, msdos, msys2, myshellai, mysql, n8n, navicat, neo4j, neocities, neoforge, neon, neovim, nestjs, netbeans, netbird, netflixdgs, netlify, newrelic, nextdns, nextjs, nginx, ngrok, ngrx, nim, niri, nitro, nixos, nmap, noctalia, nodejs, nodemon, nodered, nomad, notepadplusplus, notion, npm, nuget, numpy, nunjucks, nuxthub, nuxtjs, oauth, objectivec, obs, obsidian, obtainium, ocaml, ollama, omarchy, ombi, onyx, openapi, openclaw, opencode, opencv, opengl, openlayers, openondemand, openscad, opensergo, openstreetmap, opensuse, opentelemetry, openvpn, openweather, openwebui, opera, oracle, oraclecloudinfrastructure, orcaslicer, orpc, oumi, overleaf, overpassapi, overseerr, oxc, p4, packer, pandacss, pandas, papermc, parcel, parrotos, passportjs, patreon, payload, peazip, peerlist, pennylane, penpot, pentahopdi, perplexity, phoenix, php, phpstorm, pinia, pinterest, pkgroll, platformio, plausible, playwright, plex, plotly, pnpm, pocketbase, podman, polars, popos, portugolstudio, postcss, postgresql, posthog, postman, powerbi, powershell, preact, prettier, primevue, prisma, prismic, procure, prolog, prometheus, protoncalendar, protondrive, protonmail, protonpass, protonvpn, protonwallet, prowlarr, proxmox, psycopg, pug, pull, pulumi, puppeteer, puppylinux, purpur, putty, pwa, pycharm, pydantic, pygame, pymc, pypi, pyramid, pytest, python, pytorch, pytorch3d, pywebview, qdrant, qoder, qtwidgets, quarkus, quasar, qubesos, quiltmc, qwik, qwiklabs, r, rabbitmq, radarr, radixui, railway, raspberrypi, raygui, raylib, reactdatepicker, reacthookform, reactjs, reactlynx, reactnative, reactquery, reactrouter, readarr, readthedocs, reddit, redhat, redis, redoc, redux, refine, regex, reglejs, rekaui, render, renovate, replit, resend, rest, revolt, rider, riverpod, robotoperatingsystem, rocketmq, rocksdb, rolldown, rollupjs, roocode, ruby, rubymine, rubyonrails, rust, rxjs, sanity, sap, sass, scala, scikitlearn, scipy, scratch, seaborn, semanticui, sentry, sequelize, serverless, servicenow, session, setapp, seyfert, shadcnui, shiki, shizuku, shopify, signal, signoz, simpledirectmedialayer, singlespa, singularity, skeletonui, sketch, slack, slackwarelinux, slidev, slint, slurm, snipcart, snowflake, snyk, soap, socketio, solidity, solidjs, solidstart, solr, solus, sonarqube, sonarr, soundbridge, sphinx, splunk, spring, springai, springbatch, springboot, springcloud, springgraphql, springsecurity, springshell, spss, spyder, sql, sqlalchemy, sqlite, sqlserver, sst, stackblitz, stackoverflow, stanjs, starlight, stata, steam, stimulus, storyblok, storybook, strapi, streamlit, stride, stripe, styledcomponents, sublime, suitecrm, supabase, surrealdb, svelte, svg, swagger, swc, swift, swiftui, swiper, swr, symfony, systemd, t0ggles, tabby, tableau, taiga, tailscale, tailwindcss, tailwindmerge, tanstack, targon, tauri, telegram, tempo, tensorflow, termux, terraform, testcontainers, thesvg, threads, threejs, thunderbird, thunderclient, tidb, tiktok, tinacms, tinkercad, tinyhttp, tmux, toml, trae, traefik, treesitter, trello, triage, trivy, trpc, truenascore, truenasenterprise, truenasscale, tsdown, turborepo, turso, twilio, twine, twitter, typeorm, typescript, typescripteslint, typst, ubuntu, udemy, umami, umbraco, umbriel, uml, unity, unocss, unrealengine, upstageai, upstash, uvicorn, v0, vagrant, vala, valibot, valkey, vanillaos, vapor, vault, vaxee, vegaspro, velocity, veracrypt, vercel, vhdl, videojs, vike, vim, virtualbox, virustotal, visualstudio, visualstudiocode, visualstudiocodeinsiders, vite, vitepress, vitepwa, vitest, vivaldi, vk, vlc, vlitejs, vmix, vmware, voidlinux, vscodium, vuefire, vueform, vuejs, vuepress, vuetify, vueuse, vulkan, wakatime, wampserver, warp, waypoint, weaviate, webassembly, weblate, websocket, webstorm, webstudio, whatsapp, whisparr, windicss, windows, windowsappsdk, windsurf, winui, wireshark, wolframmathematica, woocommerce, wordpress, wxt, x, xamarin, xaml, xampp, xcode, xftp, xml, xposed, xshell, xubuntu, yaak, yaml, yandexen, yandexru, yarn, yii, yolo, youtube, zabbix, zeabur, zed, zen, zensical, zerops, zig, zod, zorinos, zshell, zustand