[
  {
    "path": ".gitattributes",
    "content": "# Auto detect text files and perform LF normalization\n* text=auto\n*.svg linguist-detectable\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ngithub: [tandpfun]\npatreon: # Replace with a single Patreon username\nopen_collective: # Replace with a single Open Collective username\nko_fi: thijsdev\ntidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel\ncommunity_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry\nliberapay: # Replace with a single Liberapay username\nissuehunt: # Replace with a single IssueHunt username\nlfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry\npolar: # Replace with a single Polar username\nbuy_me_a_coffee: # Replace with a single Buy Me a Coffee username\ncustom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug-report.yml",
    "content": "name: 🐛 Bug Report\ntitle: '[BUG REPORT] Bug'\ndescription: A bug in the API or elsewhere\nlabels: 'bug report'\nbody:\n\n- type: input\n  id: bug\n  attributes:\n    label: The bug\n    description: \"A complete of what the bug is\"\n  validations:\n    required: true\n    \n- type: input\n  id: steps\n  attributes:\n    label: Steps to reproduce\n    description: \"What'd you do to make the bug happen?\"\n    placeholder: \"1. Request API...\"\n  validations:\n    required: false\n    \n- type: input\n  id: extra\n  attributes:\n    label: Any extra info\n  validations:\n    required: false\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature-request.yml",
    "content": "name: 💡 Feature Request\ntitle: '[FEATURE REQUEST] Feature'\ndescription: Request a feature with the API\nlabels: 'feature request'\nbody:\n\n# skill name block\n- type: input\n  id: request\n  attributes:\n    label: Feature requested\n    description: \"The feature you're requesting. Should have to do with the API.\"\n    placeholder: \"Add this endpoint because...\"\n  validations:\n    required: true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/suggest-icon.yml",
    "content": "name: 🚀 Suggest an Icon\ntitle: '[NEW ICON] Skill Name'\ndescription: Suggest an icon to be added to the list!\nlabels: 'icon suggestion'\nbody:\n\n# skill name block\n- type: input\n  id: skill-name\n  attributes:\n    label: Skill Name\n    description: \"The name of the skill you're suggesting. Feel free to suggest more than one!\"\n    placeholder: \"VS Code\"\n  validations:\n    required: true\n\n# reason to add block\n- type: textarea\n  id: reason\n  attributes:\n    label: Why?\n    description: \"Why we should add the skill(s) to the project.\"\n    placeholder: \"It's popular for web development...\"\n  validations:\n    required: true\n\n# reference image block\n- type: textarea\n  id: reference-image\n  attributes:\n    label: Reference Image\n    description: \"Do you have any images of what the logo looks like? SVG preferred.\"\n    placeholder: \"Feel free to drag and drop the files here.\"\n  validations:\n    required: false\n"
  },
  {
    "path": ".github/workflows/wrangler-action.yml",
    "content": "name: Deploy\n\non:\n  push:\n    branches:\n      - main\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    name: Deploy\n    steps:\n      - uses: actions/checkout@v2\n\n      - name: Set up Node.js\n        uses: actions/setup-node@v1\n        with:\n          node-version: 16\n\n      - name: build\n        run: yarn build\n\n      - name: Publish\n        uses: cloudflare/wrangler-action@1.3.0\n        with:\n          apiToken: ${{ secrets.CF_API_TOKEN }}\n"
  },
  {
    "path": ".gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\nlerna-debug.log*\n.pnpm-debug.log*\n\n# Diagnostic reports (https://nodejs.org/api/report.html)\nreport.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json\n\n# Runtime data\npids\n*.pid\n*.seed\n*.pid.lock\n\n# Directory for instrumented libs generated by jscoverage/JSCover\nlib-cov\n\n# Coverage directory used by tools like istanbul\ncoverage\n*.lcov\n\n# nyc test coverage\n.nyc_output\n\n# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)\n.grunt\n\n# Bower dependency directory (https://bower.io/)\nbower_components\n\n# node-waf configuration\n.lock-wscript\n\n# Compiled binary addons (https://nodejs.org/api/addons.html)\nbuild/Release\n\n# Dependency directories\nnode_modules/\njspm_packages/\n\n# Snowpack dependency directory (https://snowpack.dev/)\nweb_modules/\n\n# TypeScript cache\n*.tsbuildinfo\n\n# Optional npm cache directory\n.npm\n\n# Optional eslint cache\n.eslintcache\n\n# Optional stylelint cache\n.stylelintcache\n\n# Microbundle cache\n.rpt2_cache/\n.rts2_cache_cjs/\n.rts2_cache_es/\n.rts2_cache_umd/\n\n# Optional REPL history\n.node_repl_history\n\n# Output of 'npm pack'\n*.tgz\n\n# Yarn Integrity file\n.yarn-integrity\n\n# dotenv environment variable files\n.env\n.env.development.local\n.env.test.local\n.env.production.local\n.env.local\n\n# parcel-bundler cache (https://parceljs.org/)\n.cache\n.parcel-cache\n\n# Next.js build output\n.next\nout\n\n# Nuxt.js build / generate output\n.nuxt\ndist\n\n# Gatsby files\n.cache/\n# Comment in the public line in if your project uses Gatsby and not Next.js\n# https://nextjs.org/blog/next-9-1#public-directory-support\n# public\n\n# vuepress build output\n.vuepress/dist\n\n# vuepress v2.x temp and cache directory\n.temp\n.cache\n\n# Serverless directories\n.serverless/\n\n# FuseBox cache\n.fusebox/\n\n# DynamoDB Local files\n.dynamodb/\n\n# TernJS port file\n.tern-port\n\n# Stores VSCode versions used for testing VSCode extensions\n.vscode-test\n\n# yarn v2\n.yarn/cache\n.yarn/unplugged\n.yarn/build-state.yml\n.yarn/install-state.gz\n.pnp.*\n\n# Cloudflare Worker\nworker/"
  },
  {
    "path": ".prettierignore",
    "content": "icons/"
  },
  {
    "path": ".prettierrc",
    "content": "{\n  \"singleQuote\": true,\n  \"arrowParens\": \"avoid\",\n  \"semi\": true,\n  \"tabWidth\": 2\n}\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2022 tandpfun\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "build.js",
    "content": "const fs = require('fs');\n\nconst iconsDir = fs.readdirSync('./icons');\nconst icons = {};\nfor (const icon of iconsDir) {\n  const name = icon.replace('.svg', '').toLowerCase();\n  icons[name] = String(fs.readFileSync(`./icons/${icon}`));\n}\n\nif (!fs.existsSync('./dist')) fs.mkdirSync('./dist');\nfs.writeFileSync('./dist/icons.json', JSON.stringify(icons));\n"
  },
  {
    "path": "index.js",
    "content": "const icons = require('./dist/icons.json');\nconst iconNameList = [...new Set(Object.keys(icons).map(i => i.split('-')[0]))];\nconst shortNames = {\n  js: 'javascript',\n  ts: 'typescript',\n  py: 'python',\n  tailwind: 'tailwindcss',\n  vue: 'vuejs',\n  nuxt: 'nuxtjs',\n  go: 'golang',\n  cf: 'cloudflare',\n  wasm: 'webassembly',\n  postgres: 'postgresql',\n  k8s: 'kubernetes',\n  next: 'nextjs',\n  mongo: 'mongodb',\n  md: 'markdown',\n  ps: 'photoshop',\n  ai: 'illustrator',\n  pr: 'premiere',\n  ae: 'aftereffects',\n  scss: 'sass',\n  sc: 'scala',\n  net: 'dotnet',\n  gatsbyjs: 'gatsby',\n  gql: 'graphql',\n  vlang: 'v',\n  amazonwebservices: 'aws',\n  bots: 'discordbots',\n  express: 'expressjs',\n  googlecloud: 'gcp',\n  mui: 'materialui',\n  windi: 'windicss',\n  unreal: 'unrealengine',\n  nest: 'nestjs',\n  ktorio: 'ktor',\n  pwsh: 'powershell',\n  au: 'audition',\n  rollup: 'rollupjs',\n  rxjs: 'reactivex',\n  rxjava: 'reactivex',\n  ghactions: 'githubactions',\n  sklearn: 'scikitlearn',\n};\nconst themedIcons = [\n  ...Object.keys(icons)\n    .filter(i => i.includes('-light') || i.includes('-dark'))\n    .map(i => i.split('-')[0]),\n];\n\nconst ICONS_PER_LINE = 15;\nconst ONE_ICON = 48;\nconst SCALE = ONE_ICON / (300 - 44);\n\nfunction generateSvg(iconNames, perLine) {\n  const iconSvgList = iconNames.map(i => icons[i]);\n\n  const length = Math.min(perLine * 300, iconNames.length * 300) - 44;\n  const height = Math.ceil(iconSvgList.length / perLine) * 300 - 44;\n  const scaledHeight = height * SCALE;\n  const scaledWidth = length * SCALE;\n\n  return `\n  <svg width=\"${scaledWidth}\" height=\"${scaledHeight}\" viewBox=\"0 0 ${length} ${height}\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" version=\"1.1\">\n    ${iconSvgList\n      .map(\n        (i, index) =>\n          `\n        <g transform=\"translate(${(index % perLine) * 300}, ${\n            Math.floor(index / perLine) * 300\n          })\">\n          ${i}\n        </g>\n        `\n      )\n      .join(' ')}\n  </svg>\n  `;\n}\n\nfunction parseShortNames(names, theme = 'dark') {\n  return names.map(name => {\n    if (iconNameList.includes(name))\n      return name + (themedIcons.includes(name) ? `-${theme}` : '');\n    else if (name in shortNames)\n      return (\n        shortNames[name] +\n        (themedIcons.includes(shortNames[name]) ? `-${theme}` : '')\n      );\n  });\n}\n\nasync function handleRequest(request) {\n  const { pathname, searchParams } = new URL(request.url);\n\n  const path = pathname.replace(/^\\/|\\/$/g, '');\n\n  if (path === 'icons') {\n    const iconParam = searchParams.get('i') || searchParams.get('icons');\n    if (!iconParam)\n      return new Response(\"You didn't specify any icons!\", { status: 400 });\n    const theme = searchParams.get('t') || searchParams.get('theme');\n    if (theme && theme !== 'dark' && theme !== 'light')\n      return new Response('Theme must be either \"light\" or \"dark\"', {\n        status: 400,\n      });\n    const perLine = searchParams.get('perline') || ICONS_PER_LINE;\n    if (isNaN(perLine) || perLine < -1 || perLine > 50)\n      return new Response('Icons per line must be a number between 1 and 50', {\n        status: 400,\n      });\n\n    let iconShortNames = [];\n    if (iconParam === 'all') iconShortNames = iconNameList;\n    else iconShortNames = iconParam.split(',');\n\n    const iconNames = parseShortNames(iconShortNames, theme || undefined);\n    if (!iconNames)\n      return new Response(\"You didn't format the icons param correctly!\", {\n        status: 400,\n      });\n\n    const svg = generateSvg(iconNames, perLine);\n\n    return new Response(svg, { headers: { 'Content-Type': 'image/svg+xml' } });\n  } else if (path === 'api/icons') {\n    return new Response(JSON.stringify(iconNameList), {\n      headers: {\n        'content-type': 'application/json;charset=UTF-8',\n      },\n    });\n  } else if (path === 'api/svgs') {\n    return new Response(JSON.stringify(icons), {\n      headers: {\n        'content-type': 'application/json;charset=UTF-8',\n      },\n    });\n  } else {\n    return fetch(request);\n  }\n}\n\naddEventListener('fetch', event => {\n  event.respondWith(\n    handleRequest(event.request).catch(\n      err => new Response(err.stack, { status: 500 })\n    )\n  );\n});\n"
  },
  {
    "path": "package.json",
    "content": "{\n\t\"name\": \"skill-icons\",\n\t\"version\": \"1.0.0\",\n\t\"main\": \"index.js\",\n\t\"license\": \"MIT\",\n\t\"scripts\": {\n\t\t\"dev\": \"node build.js && miniflare --watch\",\n\t\t\"build\": \"node build.js\",\n\t\t\"deploy\": \"node build.js && wrangler publish\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@cloudflare/wrangler\": \"^1.19.8\",\n\t\t\"miniflare\": \"^2.3.0\",\n\t\t\"prettier\": \"^2.5.1\"\n\t}\n}\n"
  },
  {
    "path": "readme.md",
    "content": "<p align=\"center\"><img align=\"center\" width=\"280\" src=\"./.github/text-logo.svg#gh-dark-mode-only\"/></p>\n<p align=\"center\"><img align=\"center\" width=\"280\" src=\"./.github/text-logo-light.svg#gh-light-mode-only\"/></p>\n<h3 align=\"center\">Showcase your skills on your GitHub or resumé with ease!</h3>\n<hr>\n\n<h3 align=\"center\">Powered by Cloudflare Workers ⚡</h3>\n\n<h3>NOTE: To keep icons consistent and to ensure browser support, we don't accept pull requests for icon submissions. If you would like an icon added, please open an issue.<h3>\n\n# Docs\n\n- [Example](#example)\n- [Specifying Icons](#specifying-icons)\n- [Themed Icons](#themed-icons)\n- [Icons Per Line](#icons-per-line)\n- [Centering Icons](#centering-icons)\n- [Icons List](#icons-list)\n\n# Example\n\n<p align=\"center\"><img align=\"center\" src=\"./.github/example-dark.png#gh-dark-mode-only\"/></p>\n<p align=\"center\"><img align=\"center\" src=\"./.github/example-light.png#gh-light-mode-only\"/></p>\n\n# Specifying Icons\n\nCopy and paste the code block below into your readme to add the skills icon element!\n\nChange the `?i=js,html,css` to a list of your skills separated by \",\"s! You can find a full list of icons [here](#icons-list).\n\n```md\n[![My Skills](https://skillicons.dev/icons?i=js,html,css,wasm)](https://skillicons.dev)\n```\n\n[![My Skills](https://skillicons.dev/icons?i=js,html,css,wasm)](https://skillicons.dev)\n\n# Themed Icons\n\nSome icons have a dark and light themed background. You can specify which theme you want as a url parameter.\n\nThis is optional. The default theme is dark.\n\nChange the `&theme=light` to either `dark` or `light`. The theme is the background color, so light theme has a white icon background, and dark has a black-ish.\n\n**Light Theme Example:**\n\n```md\n[![My Skills](https://skillicons.dev/icons?i=java,kotlin,nodejs,figma&theme=light)](https://skillicons.dev)\n```\n\n[![My Skills](https://skillicons.dev/icons?i=java,kotlin,nodejs,figma&theme=light)](https://skillicons.dev)\n\n# Icons Per Line\n\nYou can specify how many icons you would like per line! It's an optional argument, and the default is 15.\n\nChange the `&perline=3` to any number between 1 and 50.\n\n```md\n[![My Skills](https://skillicons.dev/icons?i=aws,gcp,azure,react,vue,flutter&perline=3)](https://skillicons.dev)\n```\n\n[![My Skills](https://skillicons.dev/icons?i=aws,gcp,azure,react,vue,flutter&perline=3)](https://skillicons.dev)\n\n# Centering Icons\n\nWant to center the icons in your readme? The SVGs are automatically resized, so you can do it the same way you'd normally center an image.\n\n```html\n<p align=\"center\">\n  <a href=\"https://skillicons.dev\">\n    <img src=\"https://skillicons.dev/icons?i=git,kubernetes,docker,c,vim\" />\n  </a>\n</p>\n```\n\n<p align=\"center\">\n  <a href=\"https://skillicons.dev\">\n    <img src=\"https://skillicons.dev/icons?i=git,kubernetes,docker,c,vim\" />\n  </a>\n</p>\n\n# Icons List\n\nHere's a list of all the icons currently supported. Feel free to open an issue to suggest icons to add!\n\n|      Icon ID       |                         Icon                          |\n| :----------------: | :---------------------------------------------------: |\n|     `ableton`      |    <img src=\"./icons/Ableton-Dark.svg\" width=\"48\">    |\n|   `activitypub`    |  <img src=\"./icons/ActivityPub-Dark.svg\" width=\"48\">  |\n|      `actix`       |     <img src=\"./icons/Actix-Dark.svg\" width=\"48\">     |\n|      `adonis`      |       <img src=\"./icons/Adonis.svg\" width=\"48\">       |\n|        `ae`        |    <img src=\"./icons/AfterEffects.svg\" width=\"48\">    |\n|     `aiscript`     |   <img src=\"./icons/AiScript-Dark.svg\" width=\"48\">    |\n|     `alpinejs`     |   <img src=\"./icons/AlpineJS-Dark.svg\" width=\"48\">    |\n|     `anaconda`     |   <img src=\"./icons/Anaconda-Dark.svg\" width=\"48\">    |\n|  `androidstudio`   | <img src=\"./icons/AndroidStudio-Dark.svg\" width=\"48\"> |\n|     `angular`      |    <img src=\"./icons/Angular-Dark.svg\" width=\"48\">    |\n|     `ansible`      |      <img src=\"./icons/Ansible.svg\" width=\"48\">       |\n|      `apollo`      |       <img src=\"./icons/Apollo.svg\" width=\"48\">       |\n|      `apple`       |     <img src=\"./icons/Apple-Dark.svg\" width=\"48\">     |\n|     `appwrite`     |      <img src=\"./icons/Appwrite.svg\" width=\"48\">      |\n|       `arch`       |     <img src=\"./icons/Arch-Dark.svg\" width=\"48\">      |\n|     `arduino`      |      <img src=\"./icons/Arduino.svg\" width=\"48\">       |\n|      `astro`       |       <img src=\"./icons/Astro.svg\" width=\"48\">        |\n|       `atom`       |        <img src=\"./icons/Atom.svg\" width=\"48\">        |\n|        `au`        |      <img src=\"./icons/Audition.svg\" width=\"48\">      |\n|     `autocad`      |    <img src=\"./icons/AutoCAD-Dark.svg\" width=\"48\">    |\n|       `aws`        |      <img src=\"./icons/AWS-Dark.svg\" width=\"48\">      |\n|       `azul`       |        <img src=\"./icons/Azul.svg\" width=\"48\">        |\n|      `azure`       |     <img src=\"./icons/Azure-Dark.svg\" width=\"48\">     |\n|      `babel`       |       <img src=\"./icons/Babel.svg\" width=\"48\">        |\n|       `bash`       |     <img src=\"./icons/Bash-Dark.svg\" width=\"48\">      |\n|       `bevy`       |     <img src=\"./icons/Bevy-Dark.svg\" width=\"48\">      |\n|    `bitbucket`     |   <img src=\"./icons/BitBucket-Dark.svg\" width=\"48\">   |\n|     `blender`      |    <img src=\"./icons/Blender-Dark.svg\" width=\"48\">    |\n|    `bootstrap`     |     <img src=\"./icons/Bootstrap.svg\" width=\"48\">      |\n|       `bsd`        |      <img src=\"./icons/BSD-Dark.svg\" width=\"48\">      |\n|       `bun`        |      <img src=\"./icons/Bun-Dark.svg\" width=\"48\">      |\n|        `c`         |         <img src=\"./icons/C.svg\" width=\"48\">          |\n|        `cs`        |         <img src=\"./icons/CS.svg\" width=\"48\">         |\n|       `cpp`        |        <img src=\"./icons/CPP.svg\" width=\"48\">         |\n|     `crystal`      |    <img src=\"./icons/Crystal-Dark.svg\" width=\"48\">    |\n|    `cassandra`     |   <img src=\"./icons/Cassandra-Dark.svg\" width=\"48\">   |\n|      `clion`       |     <img src=\"./icons/CLion-Dark.svg\" width=\"48\">     |\n|     `clojure`      |    <img src=\"./icons/Clojure-Dark.svg\" width=\"48\">    |\n|    `cloudflare`    |  <img src=\"./icons/Cloudflare-Dark.svg\" width=\"48\">   |\n|      `cmake`       |     <img src=\"./icons/CMake-Dark.svg\" width=\"48\">     |\n|     `codepen`      |    <img src=\"./icons/CodePen-Dark.svg\" width=\"48\">    |\n|   `coffeescript`   | <img src=\"./icons/CoffeeScript-Dark.svg\" width=\"48\">  |\n|       `css`        |        <img src=\"./icons/CSS.svg\" width=\"48\">         |\n|     `cypress`      |    <img src=\"./icons/Cypress-Dark.svg\" width=\"48\">    |\n|        `d3`        |      <img src=\"./icons/D3-Dark.svg\" width=\"48\">       |\n|       `dart`       |     <img src=\"./icons/Dart-Dark.svg\" width=\"48\">      |\n|      `debian`      |    <img src=\"./icons/Debian-Dark.svg\" width=\"48\">     |\n|       `deno`       |     <img src=\"./icons/DENO-Dark.svg\" width=\"48\">      |\n|      `devto`       |     <img src=\"./icons/DevTo-Dark.svg\" width=\"48\">     |\n|     `discord`      |      <img src=\"./icons/Discord.svg\" width=\"48\">       |\n|       `bots`       |    <img src=\"./icons/DiscordBots.svg\" width=\"48\">     |\n|    `discordjs`     |   <img src=\"./icons/DiscordJS-Dark.svg\" width=\"48\">   |\n|      `django`      |       <img src=\"./icons/Django.svg\" width=\"48\">       |\n|      `docker`      |       <img src=\"./icons/Docker.svg\" width=\"48\">       |\n|      `dotnet`      |       <img src=\"./icons/DotNet.svg\" width=\"48\">       |\n|     `dynamodb`     |   <img src=\"./icons/DynamoDB-Dark.svg\" width=\"48\">    |\n|     `eclipse`      |    <img src=\"./icons/Eclipse-Dark.svg\" width=\"48\">    |\n|  `elasticsearch`   | <img src=\"./icons/Elasticsearch-Dark.svg\" width=\"48\"> |\n|     `electron`     |      <img src=\"./icons/Electron.svg\" width=\"48\">      |\n|      `elixir`      |    <img src=\"./icons/Elixir-Dark.svg\" width=\"48\">     |\n|      `elysia`      |    <img src=\"./icons/Elysia-Dark.svg\" width=\"48\">     |\n|      `emacs`       |       <img src=\"./icons/Emacs.svg\" width=\"48\">        |\n|      `ember`       |       <img src=\"./icons/Ember.svg\" width=\"48\">        |\n|     `emotion`      |    <img src=\"./icons/Emotion-Dark.svg\" width=\"48\">    |\n|     `express`      |   <img src=\"./icons/ExpressJS-Dark.svg\" width=\"48\">   |\n|     `fastapi`      |      <img src=\"./icons/FastAPI.svg\" width=\"48\">       |\n|    `fediverse`     |   <img src=\"./icons/Fediverse-Dark.svg\" width=\"48\">   |\n|      `figma`       |     <img src=\"./icons/Figma-Dark.svg\" width=\"48\">     |\n|     `firebase`     |   <img src=\"./icons/Firebase-Dark.svg\" width=\"48\">    |\n|      `flask`       |     <img src=\"./icons/Flask-Dark.svg\" width=\"48\">     |\n|     `flutter`      |    <img src=\"./icons/Flutter-Dark.svg\" width=\"48\">    |\n|      `forth`       |       <img src=\"./icons/Forth.svg\" width=\"48\">        |\n|     `fortran`      |      <img src=\"./icons/Fortran.svg\" width=\"48\">       |\n| `gamemakerstudio`  |  <img src=\"./icons/GameMakerStudio.svg\" width=\"48\">   |\n|      `gatsby`      |       <img src=\"./icons/Gatsby.svg\" width=\"48\">       |\n|       `gcp`        |      <img src=\"./icons/GCP-Dark.svg\" width=\"48\">      |\n|       `git`        |        <img src=\"./icons/Git.svg\" width=\"48\">         |\n|      `github`      |    <img src=\"./icons/Github-Dark.svg\" width=\"48\">     |\n|  `githubactions`   | <img src=\"./icons/GithubActions-Dark.svg\" width=\"48\"> |\n|      `gitlab`      |    <img src=\"./icons/GitLab-Dark.svg\" width=\"48\">     |\n|      `gmail`       |     <img src=\"./icons/Gmail-Dark.svg\" width=\"48\">     |\n|     `gherkin`      |    <img src=\"./icons/Gherkin-Dark.svg\" width=\"48\">    |\n|        `go`        |       <img src=\"./icons/GoLang.svg\" width=\"48\">       |\n|      `gradle`      |    <img src=\"./icons/Gradle-Dark.svg\" width=\"48\">     |\n|      `godot`       |     <img src=\"./icons/Godot-Dark.svg\" width=\"48\">     |\n|     `grafana`      |    <img src=\"./icons/Grafana-Dark.svg\" width=\"48\">    |\n|     `graphql`      |    <img src=\"./icons/GraphQL-Dark.svg\" width=\"48\">    |\n|       `gtk`        |      <img src=\"./icons/GTK-Dark.svg\" width=\"48\">      |\n|       `gulp`       |        <img src=\"./icons/Gulp.svg\" width=\"48\">        |\n|     `haskell`      |    <img src=\"./icons/Haskell-Dark.svg\" width=\"48\">    |\n|       `haxe`       |     <img src=\"./icons/Haxe-Dark.svg\" width=\"48\">      |\n|    `haxeflixel`    |  <img src=\"./icons/HaxeFlixel-Dark.svg\" width=\"48\">   |\n|      `heroku`      |       <img src=\"./icons/Heroku.svg\" width=\"48\">       |\n|    `hibernate`     |   <img src=\"./icons/Hibernate-Dark.svg\" width=\"48\">   |\n|       `html`       |        <img src=\"./icons/HTML.svg\" width=\"48\">        |\n|       `htmx`       |     <img src=\"./icons/Htmx-Dark.svg\" width=\"48\">      |\n|       `idea`       |     <img src=\"./icons/Idea-Dark.svg\" width=\"48\">      |\n|        `ai`        |    <img src=\"./icons/Illustrator.svg\" width=\"48\">     |\n|    `instagram`     |     <img src=\"./icons/Instagram.svg\" width=\"48\">      |\n|       `ipfs`       |     <img src=\"./icons/IPFS-Dark.svg\" width=\"48\">      |\n|       `java`       |     <img src=\"./icons/Java-Dark.svg\" width=\"48\">      |\n|        `js`        |     <img src=\"./icons/JavaScript.svg\" width=\"48\">     |\n|     `jenkins`      |    <img src=\"./icons/Jenkins-Dark.svg\" width=\"48\">    |\n|       `jest`       |        <img src=\"./icons/Jest.svg\" width=\"48\">        |\n|      `jquery`      |       <img src=\"./icons/JQuery.svg\" width=\"48\">       |\n|      `kafka`       |       <img src=\"./icons/Kafka.svg\" width=\"48\">        |\n|       `kali`       |     <img src=\"./icons/Kali-Dark.svg\" width=\"48\">      |\n|      `kotlin`      |    <img src=\"./icons/Kotlin-Dark.svg\" width=\"48\">     |\n|       `ktor`       |     <img src=\"./icons/Ktor-Dark.svg\" width=\"48\">      |\n|    `kubernetes`    |     <img src=\"./icons/Kubernetes.svg\" width=\"48\">     |\n|     `laravel`      |    <img src=\"./icons/Laravel-Dark.svg\" width=\"48\">    |\n|      `latex`       |     <img src=\"./icons/LaTeX-Dark.svg\" width=\"48\">     |\n|       `less`       |     <img src=\"./icons/Less-Dark.svg\" width=\"48\">      |\n|     `linkedin`     |      <img src=\"./icons/LinkedIn.svg\" width=\"48\">      |\n|      `linux`       |     <img src=\"./icons/Linux-Dark.svg\" width=\"48\">     |\n|       `lit`        |      <img src=\"./icons/Lit-Dark.svg\" width=\"48\">      |\n|       `lua`        |      <img src=\"./icons/Lua-Dark.svg\" width=\"48\">      |\n|        `md`        |   <img src=\"./icons/Markdown-Dark.svg\" width=\"48\">    |\n|     `mastodon`     |   <img src=\"./icons/Mastodon-Dark.svg\" width=\"48\">    |\n|    `materialui`    |  <img src=\"./icons/MaterialUI-Dark.svg\" width=\"48\">   |\n|      `matlab`      |    <img src=\"./icons/Matlab-Dark.svg\" width=\"48\">     |\n|      `maven`       |     <img src=\"./icons/Maven-Dark.svg\" width=\"48\">     |\n|       `mint`       |     <img src=\"./icons/Mint-Dark.svg\" width=\"48\">      |\n|     `misskey`      |    <img src=\"./icons/Misskey-Dark.svg\" width=\"48\">    |\n|     `mongodb`      |      <img src=\"./icons/MongoDB.svg\" width=\"48\">       |\n|      `mysql`       |     <img src=\"./icons/MySQL-Dark.svg\" width=\"48\">     |\n|      `neovim`      |    <img src=\"./icons/NeoVim-Dark.svg\" width=\"48\">     |\n|      `nestjs`      |    <img src=\"./icons/NestJS-Dark.svg\" width=\"48\">     |\n|     `netlify`      |    <img src=\"./icons/Netlify-Dark.svg\" width=\"48\">    |\n|      `nextjs`      |    <img src=\"./icons/NextJS-Dark.svg\" width=\"48\">     |\n|      `nginx`       |       <img src=\"./icons/Nginx.svg\" width=\"48\">        |\n|       `nim`        |      <img src=\"./icons/Nim-Dark.svg\" width=\"48\">      |\n|       `nix`        |      <img src=\"./icons/Nix-Dark.svg\" width=\"48\">      |\n|      `nodejs`      |    <img src=\"./icons/NodeJS-Dark.svg\" width=\"48\">     |\n|      `notion`      |    <img src=\"./icons/Notion-Dark.svg\" width=\"48\">     |\n|       `npm`        |      <img src=\"./icons/Npm-Dark.svg\" width=\"48\">      |\n|      `nuxtjs`      |    <img src=\"./icons/NuxtJS-Dark.svg\" width=\"48\">     |\n|     `obsidian`     |   <img src=\"./icons/Obsidian-Dark.svg\" width=\"48\">    |\n|      `ocaml`       |       <img src=\"./icons/OCaml.svg\" width=\"48\">        |\n|      `octave`      |    <img src=\"./icons/Octave-Dark.svg\" width=\"48\">     |\n|      `opencv`      |    <img src=\"./icons/OpenCV-Dark.svg\" width=\"48\">     |\n|    `openshift`     |     <img src=\"./icons/OpenShift.svg\" width=\"48\">      |\n|    `openstack`     |   <img src=\"./icons/OpenStack-Dark.svg\" width=\"48\">   |\n|       `p5js`       |        <img src=\"./icons/p5js.svg\" width=\"48\">        |\n|       `perl`       |        <img src=\"./icons/Perl.svg\" width=\"48\">        |\n|        `ps`        |     <img src=\"./icons/Photoshop.svg\" width=\"48\">      |\n|       `php`        |      <img src=\"./icons/PHP-Dark.svg\" width=\"48\">      |\n|     `phpstorm`     |   <img src=\"./icons/PhpStorm-Dark.svg\" width=\"48\">    |\n|      `pinia`       |     <img src=\"./icons/Pinia-Dark.svg\" width=\"48\">     |\n|       `pkl`        |      <img src=\"./icons/Pkl-Dark.svg\" width=\"48\">      |\n|      `plan9`       |     <img src=\"./icons/Plan9-Dark.svg\" width=\"48\">     |\n|   `planetscale`    |  <img src=\"./icons/PlanetScale-Dark.svg\" width=\"48\">  |\n|       `pnpm`       |     <img src=\"./icons/Pnpm-Dark.svg\" width=\"48\">      |\n|     `postgres`     |  <img src=\"./icons/PostgreSQL-Dark.svg\" width=\"48\">   |\n|     `postman`      |      <img src=\"./icons/Postman.svg\" width=\"48\">       |\n|    `powershell`    |  <img src=\"./icons/Powershell-Dark.svg\" width=\"48\">   |\n|        `pr`        |      <img src=\"./icons/Premiere.svg\" width=\"48\">      |\n|      `prisma`      |       <img src=\"./icons/Prisma.svg\" width=\"48\">       |\n|    `processing`    |  <img src=\"./icons/Processing-Dark.svg\" width=\"48\">   |\n|    `prometheus`    |     <img src=\"./icons/Prometheus.svg\" width=\"48\">     |\n|       `pug`        |      <img src=\"./icons/Pug-Dark.svg\" width=\"48\">      |\n|     `pycharm`      |    <img src=\"./icons/PyCharm-Dark.svg\" width=\"48\">    |\n|        `py`        |    <img src=\"./icons/Python-Dark.svg\" width=\"48\">     |\n|     `pytorch`      |    <img src=\"./icons/PyTorch-Dark.svg\" width=\"48\">    |\n|        `qt`        |      <img src=\"./icons/QT-Dark.svg\" width=\"48\">       |\n|        `r`         |       <img src=\"./icons/R-Dark.svg\" width=\"48\">       |\n|     `rabbitmq`     |   <img src=\"./icons/RabbitMQ-Dark.svg\" width=\"48\">    |\n|      `rails`       |       <img src=\"./icons/Rails.svg\" width=\"48\">        |\n|   `raspberrypi`    |  <img src=\"./icons/RaspberryPi-Dark.svg\" width=\"48\">  |\n|      `react`       |     <img src=\"./icons/React-Dark.svg\" width=\"48\">     |\n|    `reactivex`     |   <img src=\"./icons/ReactiveX-Dark.svg\" width=\"48\">   |\n|      `redhat`      |    <img src=\"./icons/RedHat-Dark.svg\" width=\"48\">     |\n|      `redis`       |     <img src=\"./icons/Redis-Dark.svg\" width=\"48\">     |\n|      `redux`       |       <img src=\"./icons/Redux.svg\" width=\"48\">        |\n|      `regex`       |     <img src=\"./icons/Regex-Dark.svg\" width=\"48\">     |\n|      `remix`       |     <img src=\"./icons/Remix-Dark.svg\" width=\"48\">     |\n|      `replit`      |    <img src=\"./icons/Replit-Dark.svg\" width=\"48\">     |\n|      `rider`       |     <img src=\"./icons/Rider-Dark.svg\" width=\"48\">     |\n|   `robloxstudio`   |    <img src=\"./icons/RobloxStudio.svg\" width=\"48\">    |\n|      `rocket`      |       <img src=\"./icons/Rocket.svg\" width=\"48\">       |\n|     `rollupjs`     |   <img src=\"./icons/RollupJS-Dark.svg\" width=\"48\">    |\n|       `ros`        |      <img src=\"./icons/ROS-Dark.svg\" width=\"48\">      |\n|       `ruby`       |        <img src=\"./icons/Ruby.svg\" width=\"48\">        |\n|       `rust`       |        <img src=\"./icons/Rust.svg\" width=\"48\">        |\n|       `sass`       |        <img src=\"./icons/Sass.svg\" width=\"48\">        |\n|      `spring`      |    <img src=\"./icons/Spring-Dark.svg\" width=\"48\">     |\n|      `sqlite`      |       <img src=\"./icons/SQLite.svg\" width=\"48\">       |\n|  `stackoverflow`   | <img src=\"./icons/StackOverflow-Dark.svg\" width=\"48\"> |\n| `styledcomponents` |  <img src=\"./icons/StyledComponents.svg\" width=\"48\">  |\n|     `sublime`      |    <img src=\"./icons/Sublime-Dark.svg\" width=\"48\">    |\n|     `supabase`     |   <img src=\"./icons/Supabase-Dark.svg\" width=\"48\">    |\n|      `scala`       |     <img src=\"./icons/Scala-Dark.svg\" width=\"48\">     |\n|     `sklearn`      |  <img src=\"./icons/ScikitLearn-Dark.svg\" width=\"48\">  |\n|     `selenium`     |      <img src=\"./icons/Selenium.svg\" width=\"48\">      |\n|      `sentry`      |       <img src=\"./icons/Sentry.svg\" width=\"48\">       |\n|    `sequelize`     |   <img src=\"./icons/Sequelize-Dark.svg\" width=\"48\">   |\n|     `sketchup`     |   <img src=\"./icons/Sketchup-Dark.svg\" width=\"48\">    |\n|     `solidity`     |      <img src=\"./icons/Solidity.svg\" width=\"48\">      |\n|     `solidjs`      |    <img src=\"./icons/SolidJS-Dark.svg\" width=\"48\">    |\n|      `svelte`      |       <img src=\"./icons/Svelte.svg\" width=\"48\">       |\n|       `svg`        |      <img src=\"./icons/SVG-Dark.svg\" width=\"48\">      |\n|      `swift`       |       <img src=\"./icons/Swift.svg\" width=\"48\">        |\n|     `symfony`      |    <img src=\"./icons/Symfony-Dark.svg\" width=\"48\">    |\n|     `tailwind`     |  <img src=\"./icons/TailwindCSS-Dark.svg\" width=\"48\">  |\n|      `tauri`       |     <img src=\"./icons/Tauri-Dark.svg\" width=\"48\">     |\n|    `tensorflow`    |  <img src=\"./icons/TensorFlow-Dark.svg\" width=\"48\">   |\n|    `terraform`     |   <img src=\"./icons/Terraform-Dark.svg\" width=\"48\">   |\n|     `threejs`      |    <img src=\"./icons/ThreeJS-Dark.svg\" width=\"48\">    |\n|     `twitter`      |      <img src=\"./icons/Twitter.svg\" width=\"48\">       |\n|        `ts`        |     <img src=\"./icons/TypeScript.svg\" width=\"48\">     |\n|      `ubuntu`      |    <img src=\"./icons/Ubuntu-Dark.svg\" width=\"48\">     |\n|      `unity`       |     <img src=\"./icons/Unity-Dark.svg\" width=\"48\">     |\n|      `unreal`      |    <img src=\"./icons/UnrealEngine.svg\" width=\"48\">    |\n|        `v`         |       <img src=\"./icons/V-Dark.svg\" width=\"48\">       |\n|       `vala`       |        <img src=\"./icons/Vala.svg\" width=\"48\">        |\n|      `vercel`      |    <img src=\"./icons/Vercel-Dark.svg\" width=\"48\">     |\n|       `vim`        |      <img src=\"./icons/VIM-Dark.svg\" width=\"48\">      |\n|   `visualstudio`   | <img src=\"./icons/VisualStudio-Dark.svg\" width=\"48\">  |\n|       `vite`       |     <img src=\"./icons/Vite-Dark.svg\" width=\"48\">      |\n|      `vitest`      |    <img src=\"./icons/Vitest-Dark.svg\" width=\"48\">     |\n|      `vscode`      |    <img src=\"./icons/VSCode-Dark.svg\" width=\"48\">     |\n|     `vscodium`     |   <img src=\"./icons/VSCodium-Dark.svg\" width=\"48\">    |\n|       `vue`        |     <img src=\"./icons/VueJS-Dark.svg\" width=\"48\">     |\n|     `vuetify`      |    <img src=\"./icons/Vuetify-Dark.svg\" width=\"48\">    |\n|       `wasm`       |    <img src=\"./icons/WebAssembly.svg\" width=\"48\">     |\n|     `webflow`      |      <img src=\"./icons/Webflow.svg\" width=\"48\">       |\n|     `webpack`      |    <img src=\"./icons/Webpack-Dark.svg\" width=\"48\">    |\n|     `webstorm`     |   <img src=\"./icons/WebStorm-Dark.svg\" width=\"48\">    |\n|     `windicss`     |   <img src=\"./icons/WindiCSS-Dark.svg\" width=\"48\">    |\n|     `windows`      |    <img src=\"./icons/Windows-Dark.svg\" width=\"48\">    |\n|    `wordpress`     |     <img src=\"./icons/Wordpress.svg\" width=\"48\">      |\n|     `workers`      |    <img src=\"./icons/Workers-Dark.svg\" width=\"48\">    |\n|        `xd`        |         <img src=\"./icons/XD.svg\" width=\"48\">         |\n|       `yarn`       |     <img src=\"./icons/Yarn-Dark.svg\" width=\"48\">      |\n|       `yew`        |      <img src=\"./icons/Yew-Dark.svg\" width=\"48\">      |\n|       `zig`        |      <img src=\"./icons/Zig-Dark.svg\" width=\"48\">      |\n\n---\n\n## 💖 Support the Project\n\nThank you so much already for using my projects! If you want to go a step further and support my open source work, buy me a coffee:\n\n<a href='https://ko-fi.com/Q5Q860KQ2' target='_blank'><img height='36' style='border:0px;height:36px;' src='https://cdn.ko-fi.com/cdn/kofi1.png?v=3' border='0' alt='Buy Me a Coffee at ko-fi.com' /></a>\n\nTo support the project directly, feel free to open issues for icon suggestions, or contribute with a pull request!\n"
  },
  {
    "path": "wrangler.toml",
    "content": "name = \"skill-icons\"\ntype = \"webpack\"\nroute = ''\nzone_id = ''\nusage_model = ''\ncompatibility_flags = []\nworkers_dev = true\ncompatibility_date = \"2022-03-02\""
  }
]