diff --git a/.dockerignore b/.dockerignore index 86dd99838646..018644c56604 100644 --- a/.dockerignore +++ b/.dockerignore @@ -3,5 +3,7 @@ node_modules/ npm-debug.log # Build files -icons/*.js /index.js +/index.mjs +/index.d.ts +/sdk.js diff --git a/.github/ISSUE_TEMPLATE/icon_request.yml b/.github/ISSUE_TEMPLATE/icon_request.yml index 5bb1c63837eb..df29ded6e133 100644 --- a/.github/ISSUE_TEMPLATE/icon_request.yml +++ b/.github/ISSUE_TEMPLATE/icon_request.yml @@ -42,17 +42,14 @@ body: attributes: label: Popularity Metric description: >- - Provide either a [Similarweb rank] or the number of GitHub stars. If - Similarweb does not have a rank for your brand or the rank fails to meet our - requirements, we can also accept an [Alexa rank] as an alternative. If these - are not available or too low you can still open the issue. In this case, - please provide any information regarding the brand's popularity you think is - relevant. + Provide either a [Similarweb rank], which must range from 0-500,000 to qualify + or the number of GitHub stars, which must be above 5,000 to qualify. If + Similarweb does not have a rank for your brand or these numbers do not meet + our requirements, you can still open the issue. In this case, please provide + any information regarding the brand's popularity you think is relevant. [Similarweb rank]: https://www.similarweb.com - - [Alexa rank]: https://www.alexa.com/siteinfo placeholder: 'Example: The Similarweb rank is 261,758. See https://www.similarweb.com/website/simpleicons.org' validations: required: true diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 96af6135f979..97fefba592c0 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -17,4 +17,7 @@ // We generally always want the major version separateMajorMinor: false, + + // We manually update digest dependencies (eg. hashes in Github actions) + digest: { enabled: false }, } diff --git a/.github/workflows/add-labels-priority.yml b/.github/workflows/add-labels-priority.yml index bc34ec72ee0c..90be84ef30d3 100644 --- a/.github/workflows/add-labels-priority.yml +++ b/.github/workflows/add-labels-priority.yml @@ -24,13 +24,13 @@ jobs: name: Get labels run: | labels="$(curl --retry 5 -s https://api.github.com/repos/simple-icons/simple-icons/pulls/${{ github.event.pull_request.number }} | jq '.labels[].name' | tr '\n' ',' | sed -e 's/"//g' -e 's/,$//')" - echo "::set-output name=labels::$labels" + echo "labels=$labels" >> $GITHUB_OUTPUT - id: get-si-members name: Get simple-icons members run: | - members="$(curl --retry 5 -s https://api.github.com/orgs/simple-icons/members | jq .[].login | tr '\n' ',' | sed -e 's/"//g' -e 's/,$//')" - echo "::set-output name=members::$members" + members="$(curl -H 'Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' --retry 5 -s https://api.github.com/orgs/simple-icons/members | jq .[].login | tr '\n' ',' | sed -e 's/"//g' -e 's/,$//')" + echo "members=$members" >> $GITHUB_OUTPUT - id: get-linked-issues name: Get linked issue numbers @@ -65,7 +65,7 @@ jobs: if: | contains(steps.get-labels.outputs.labels, 'new icon') && join(steps.get-linked-issues.outputs.issues) != '' && - contains(steps.get-si-members.outputs.members, github.event.actor.login) == false + contains(steps.get-si-members.outputs.members, github.event.pull_request.user.login) == false with: project: https://github.com/orgs/simple-icons/projects/2 column_name: Priority 2 diff --git a/.github/workflows/autoclose-issues.yml b/.github/workflows/autoclose-issues.yml new file mode 100644 index 000000000000..867d23262fd8 --- /dev/null +++ b/.github/workflows/autoclose-issues.yml @@ -0,0 +1,56 @@ +name: Autocloser +on: + issues: + # we allow 'reopend' and 'edited' in case the issue was closed by accident + types: [opened] + +jobs: + run: + runs-on: ubuntu-latest + steps: + - id: match-title + name: Match title + # if the title contains the word Java (case insensitive) + # we make sure that this word is the end of the string or is followed by a space character (ex. we do not want to match javascript) + # we make sure that this word is the beginning of the string or is preceded by a space character (ex. we do not want to match foojava) + run: | + if [[ "${{ github.event.issue.title }}" =~ (^|[[:space:]])([jJ][aA][vV][aA])([[:space:]]|$) ]]; then + echo "match=true" >> $GITHUB_OUTPUT + fi + + - id: get-labels + name: Get labels + run: | + labels="$(curl --retry 5 -s https://api.github.com/repos/simple-icons/simple-icons/issues/${{ github.event.issue.number }} | jq '.labels[].name' | tr '\n' ',' | sed -e 's/"//g' -e 's/,$//')" + echo "labels=$labels" >> $GITHUB_OUTPUT + + # if the issue is labeled as a 'new icon' and it matches Java, we + # - add a comment referring to the removal request + # - we add the 'duplicate' label + # - we close the issue + - name: Close the issue + if: | + steps.match-title.outputs.match == 'true' && + contains(steps.get-labels.outputs.labels, 'new icon') + uses: actions/github-script@v6 + with: + script: | + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: 'This issue was automatically closed. Please refer to #7374.' + }) + github.rest.issues.addLabels({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + labels: ['duplicate'] + }) + github.rest.issues.update({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + state: 'closed', + state_reason: 'not_planned' + }); diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index c53d6b39dbad..5e2375112068 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -23,7 +23,7 @@ jobs: did-create-pr: ${{ steps.release.outputs.did-create-pr }} new-version: ${{ steps.release.outputs.new-version }} steps: - - uses: simple-icons/release-action@master + - uses: LitoMore/simple-icons-release-action@9969e1266c9e470fe015dbd825a2897423e9270e id: release with: repo-token: ${{ secrets.GITHUB_TOKEN }} @@ -41,16 +41,33 @@ jobs: token: ${{ secrets.RELEASE_TOKEN }} # Ensure we are checked out on the develop branch ref: develop + - name: Use Node.js 16.x + uses: actions/setup-node@v3 + with: + node-version: 16.x + - name: Cache dependencies + uses: actions/cache@v3 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package.json') }} + restore-keys: | + ${{ runner.os }}-node- - name: Bump version - run: node ./scripts/release/bump-version.js "${{ needs.release-pr.outputs.new-version }}" + run: | + npm version --no-commit-hooks --no-git-tag-version \ + "${{ needs.release-pr.outputs.new-version }}" + - name: Install dependencies + run: npm i - name: Update major version in CDN URLs run: node ./scripts/release/update-cdn-urls.js - name: Update SVGs count milestone run: node ./scripts/release/update-svgs-count.js - name: Update slugs table run: node ./scripts/release/update-slugs-table.js + - name: Update SDK Typescript definitions + run: node ./scripts/release/update-sdk-ts-defs.js - name: Commit version bump - uses: stefanzweifel/git-auto-commit-action@v4.14.1 + uses: stefanzweifel/git-auto-commit-action@v4.16.0 with: commit_message: version bump commit_user_name: 'github-actions[bot]' diff --git a/.github/workflows/merge-release.yml b/.github/workflows/merge-release.yml index 29e654f975b5..cf7db3b53232 100644 --- a/.github/workflows/merge-release.yml +++ b/.github/workflows/merge-release.yml @@ -8,6 +8,6 @@ jobs: runs-on: ubuntu-latest if: contains(github.event.pull_request.labels.*.name, 'release') steps: - - uses: simple-icons/release-action@master + - uses: simple-icons/release-action@v1 with: repo-token: ${{ secrets.RELEASE_TOKEN }} diff --git a/.github/workflows/potential-duplicates.yml b/.github/workflows/potential-duplicates.yml index 544cc0ddd1b2..ca7df204e450 100644 --- a/.github/workflows/potential-duplicates.yml +++ b/.github/workflows/potential-duplicates.yml @@ -28,6 +28,12 @@ jobs: requesting request project + updated + outdated + brand + assets + for + from state: all threshold: 0.7 comment: | diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index b17c0024d621..56153d394003 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -48,15 +48,16 @@ jobs: key: ${{ runner.os }}-node-${{ hashFiles('**/package.json') }} restore-keys: | ${{ runner.os }}-node- - - name: Remove dark theme images from README - uses: mondeja/strip-gh-theme-links@v3 - with: - files: README.md - strict: true - name: Install dependencies run: npm i + - name: Replace CDN theme image links from README + run: npm run strip-theme-link + - name: Update SDK Typescript definitions + run: node ./scripts/release/update-sdk-ts-defs.js + - name: Build NodeJS package + run: npm run build - name: Deploy to NPM - uses: JS-DevTools/npm-publish@v1 + uses: JS-DevTools/npm-publish@v2 with: token: ${{ secrets.NPM_TOKEN }} github: @@ -68,26 +69,23 @@ jobs: uses: actions/checkout@v3 - name: Get commit message (for release title and body) id: commit - uses: kceb/git-message-action@v1 + uses: kceb/git-message-action@v2 - name: Get release version id: get-version run: | export PACKAGE_VERSION=$(cat package.json | grep 'version' | sed 's/[ \",:]//g' | sed 's/version//') echo "::set-output name=version::$PACKAGE_VERSION" - - name: Remove dark theme images from README - uses: mondeja/strip-gh-theme-links@v3 - with: - files: README.md - strict: true + - name: Replace CDN theme image links from README + run: npm run strip-theme-link - name: Configure GIT credentials run: | git config user.name "${GITHUB_ACTOR}" git config user.email "${GITHUB_ACTOR}@users.noreply.github.com" # Commit that will only be included in the tag - - name: Commit dark theme images strip + - name: Commit CDN theme image links removal run: | git add README.md - git commit -m 'Strip README dark theme image links' + git commit -m 'Replace README CDN theme image links' - name: Create and push git tag run: | set -e diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index 2ebe97c4b0dc..6d1d84511729 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -44,6 +44,21 @@ jobs: run: npm i - name: Run linter run: npm run lint + - name: Detect changed documentation files + uses: dorny/paths-filter@v2 + id: changes + with: + list-files: shell + filters: | + docs: + - '*.md' + - '.github/**.md' + - name: Check documentation links + if: steps.changes.outputs.docs == 'true' + run: | + npx markdown-link-check --retry \ + ${{ steps.changes.outputs.docs_files }} + continue-on-error: ${{ github.ref == 'refs/heads/develop' }} - name: Verify file permissions run: | CHECK_DIRS="icons/ _data/" diff --git a/.gitignore b/.gitignore index c2287035c54a..7b569c6c09db 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,12 @@ +# Editor configurations +.vscode +.idea + # Files generated by build script /index.js -/icons.js -/icons.mjs -/icons.d.ts +/index.mjs +/index.d.ts +/sdk.js # Ignore all files in the icons folder icons/* @@ -22,6 +26,8 @@ yarn.lock # Dependency directories node_modules/ +# Generated files +*.tgz ### macOS ### # General diff --git a/.jsonschema.json b/.jsonschema.json index e6134f20950f..aaefae534abe 100644 --- a/.jsonschema.json +++ b/.jsonschema.json @@ -19,7 +19,7 @@ }, "source": { "description": "The website from which the icon was sourced", - "$ref": "#/definitions/url" + "$ref": "#/definitions/sourceUrl" }, "guidelines": { "description": "The brand guidelines", @@ -65,9 +65,15 @@ "enum": [ "0BSD", "AAL", + "Abstyles", + "AdaCore-doc", + "Adobe-2006", + "Adobe-Glyph", + "ADSL", "AFL-1.1", "AFL-1.2", "AFL-2.0", + "AFL-2.1", "AFL-3.0", "Afmparse", "AGPL-1.0-only", @@ -75,73 +81,514 @@ "AGPL-3.0-only", "AGPL-3.0-or-later", "Aladdin", + "AMDPLPA", "AML", "AMPAS", + "ANTLR-PD", + "ANTLR-PD-fallback", "Apache-1.0", "Apache-1.1", "Apache-2.0", + "APAFML", "APL-1.0", + "App-s2p", + "APSL-1.0", + "APSL-1.1", + "APSL-1.2", + "APSL-2.0", + "Arphic-1999", "Artistic-1.0", "Artistic-1.0-cl8", "Artistic-1.0-Perl", "Artistic-2.0", + "ASWF-Digital-Assets-1.0", + "ASWF-Digital-Assets-1.1", + "Baekmuk", + "Bahyph", + "Barr", + "Beerware", + "Bitstream-Charter", + "Bitstream-Vera", + "BitTorrent-1.0", + "BitTorrent-1.1", + "blessing", + "BlueOak-1.0.0", + "Boehm-GC", + "Borceux", + "Brian-Gladman-3-Clause", + "BSD-1-Clause", + "BSD-2-Clause", + "BSD-2-Clause-Patent", + "BSD-2-Clause-Views", + "BSD-3-Clause", + "BSD-3-Clause-Attribution", + "BSD-3-Clause-Clear", + "BSD-3-Clause-LBNL", + "BSD-3-Clause-Modification", + "BSD-3-Clause-No-Military-License", + "BSD-3-Clause-No-Nuclear-License", + "BSD-3-Clause-No-Nuclear-License-2014", + "BSD-3-Clause-No-Nuclear-Warranty", + "BSD-3-Clause-Open-MPI", + "BSD-4-Clause", + "BSD-4-Clause-Shortened", + "BSD-4-Clause-UC", + "BSD-4.3RENO", + "BSD-4.3TAHOE", + "BSD-Advertising-Acknowledgement", + "BSD-Attribution-HPND-disclaimer", + "BSD-Protection", + "BSD-Source-Code", + "BSL-1.0", + "BUSL-1.1", + "bzip2-1.0.6", + "C-UDA-1.0", + "CAL-1.0", + "CAL-1.0-Combined-Work-Exception", + "Caldera", + "CATOSL-1.1", "CC-BY-1.0", "CC-BY-2.0", "CC-BY-2.5", + "CC-BY-2.5-AU", "CC-BY-3.0", + "CC-BY-3.0-AT", + "CC-BY-3.0-DE", + "CC-BY-3.0-IGO", + "CC-BY-3.0-NL", + "CC-BY-3.0-US", "CC-BY-4.0", "CC-BY-NC-1.0", "CC-BY-NC-2.0", "CC-BY-NC-2.5", "CC-BY-NC-3.0", + "CC-BY-NC-3.0-DE", "CC-BY-NC-4.0", "CC-BY-NC-ND-1.0", "CC-BY-NC-ND-2.0", "CC-BY-NC-ND-2.5", "CC-BY-NC-ND-3.0", + "CC-BY-NC-ND-3.0-DE", + "CC-BY-NC-ND-3.0-IGO", "CC-BY-NC-ND-4.0", "CC-BY-NC-SA-1.0", "CC-BY-NC-SA-2.0", + "CC-BY-NC-SA-2.0-DE", + "CC-BY-NC-SA-2.0-FR", + "CC-BY-NC-SA-2.0-UK", "CC-BY-NC-SA-2.5", "CC-BY-NC-SA-3.0", + "CC-BY-NC-SA-3.0-DE", + "CC-BY-NC-SA-3.0-IGO", "CC-BY-NC-SA-4.0", "CC-BY-ND-1.0", "CC-BY-ND-2.0", "CC-BY-ND-2.5", "CC-BY-ND-3.0", + "CC-BY-ND-3.0-DE", "CC-BY-ND-4.0", "CC-BY-SA-1.0", "CC-BY-SA-2.0", + "CC-BY-SA-2.0-UK", + "CC-BY-SA-2.1-JP", "CC-BY-SA-2.5", "CC-BY-SA-3.0", + "CC-BY-SA-3.0-AT", + "CC-BY-SA-3.0-DE", + "CC-BY-SA-3.0-IGO", "CC-BY-SA-4.0", "CC-PDDC", "CC0-1.0", "CDDL-1.0", "CDDL-1.1", + "CDL-1.0", + "CDLA-Permissive-1.0", + "CDLA-Permissive-2.0", + "CDLA-Sharing-1.0", + "CECILL-1.0", + "CECILL-1.1", + "CECILL-2.0", + "CECILL-2.1", + "CECILL-B", + "CECILL-C", + "CERN-OHL-1.1", + "CERN-OHL-1.2", + "CERN-OHL-P-2.0", + "CERN-OHL-S-2.0", + "CERN-OHL-W-2.0", + "CFITSIO", + "checkmk", "ClArtistic", + "Clips", + "CMU-Mach", + "CNRI-Jython", + "CNRI-Python", + "CNRI-Python-GPL-Compatible", + "COIL-1.0", + "Community-Spec-1.0", + "Condor-1.1", "copyleft-next-0.3.0", "copyleft-next-0.3.1", + "Cornell-Lossless-JPEG", "CPAL-1.0", "CPL-1.0", "CPOL-1.02", + "Crossword", + "CrystalStacker", + "CUA-OPL-1.0", + "Cube", + "curl", + "D-FSL-1.0", + "diffmark", + "DL-DE-BY-2.0", + "DOC", + "Dotseqn", + "DRL-1.0", + "DSDP", + "dtoa", + "dvipdfm", + "ECL-1.0", + "ECL-2.0", + "EFL-1.0", + "EFL-2.0", + "eGenix", + "Elastic-2.0", + "Entessa", + "EPICS", + "EPL-1.0", + "EPL-2.0", + "ErlPL-1.1", + "etalab-2.0", + "EUDatagrid", "EUPL-1.0", "EUPL-1.1", "EUPL-1.2", + "Eurosym", + "Fair", + "FDK-AAC", + "Frameworx-1.0", + "FreeBSD-DOC", + "FreeImage", + "FSFAP", + "FSFUL", + "FSFULLR", + "FSFULLRWD", + "FTL", + "GD", + "GFDL-1.1-invariants-only", + "GFDL-1.1-invariants-or-later", + "GFDL-1.1-no-invariants-only", + "GFDL-1.1-no-invariants-or-later", + "GFDL-1.1-only", + "GFDL-1.1-or-later", + "GFDL-1.2-invariants-only", + "GFDL-1.2-invariants-or-later", + "GFDL-1.2-no-invariants-only", + "GFDL-1.2-no-invariants-or-later", + "GFDL-1.2-only", + "GFDL-1.2-or-later", + "GFDL-1.3-invariants-only", + "GFDL-1.3-invariants-or-later", + "GFDL-1.3-no-invariants-only", + "GFDL-1.3-no-invariants-or-later", + "GFDL-1.3-only", + "GFDL-1.3-or-later", + "Giftware", + "GL2PS", + "Glide", + "Glulxe", + "GLWTPL", + "gnuplot", "GPL-1.0-only", "GPL-1.0-or-later", "GPL-2.0-only", "GPL-2.0-or-later", "GPL-3.0-only", "GPL-3.0-or-later", + "Graphics-Gems", + "gSOAP-1.3b", + "HaskellReport", + "Hippocratic-2.1", + "HP-1986", + "HPND", + "HPND-export-US", + "HPND-Markus-Kuhn", + "HPND-sell-variant", + "HPND-sell-variant-MIT-disclaimer", + "HTMLTIDY", + "IBM-pibs", + "ICU", + "IEC-Code-Components-EULA", + "IJG", + "IJG-short", + "ImageMagick", + "iMatix", + "Imlib2", + "Info-ZIP", + "Inner-Net-2.0", + "Intel", + "Intel-ACPI", + "Interbase-1.0", + "IPA", + "IPL-1.0", + "ISC", + "Jam", + "JasPer-2.0", + "JPL-image", + "JPNIC", + "JSON", + "Kazlib", + "Knuth-CTAN", "LAL-1.2", "LAL-1.3", + "Latex2e", + "Latex2e-translated-notice", + "Leptonica", + "LGPL-2.0-only", + "LGPL-2.0-or-later", + "LGPL-2.1-only", + "LGPL-2.1-or-later", + "LGPL-3.0-only", + "LGPL-3.0-or-later", + "LGPLLR", + "Libpng", + "libpng-2.0", + "libselinux-1.0", + "libtiff", + "libutil-David-Nugent", + "LiLiQ-P-1.1", + "LiLiQ-R-1.1", + "LiLiQ-Rplus-1.1", + "Linux-man-pages-1-para", + "Linux-man-pages-copyleft", + "Linux-man-pages-copyleft-2-para", + "Linux-man-pages-copyleft-var", + "Linux-OpenIB", + "LOOP", + "LPL-1.0", + "LPL-1.02", + "LPPL-1.0", + "LPPL-1.1", + "LPPL-1.2", + "LPPL-1.3a", + "LPPL-1.3c", + "LZMA-SDK-9.11-to-9.20", + "LZMA-SDK-9.22", + "MakeIndex", + "Martin-Birgmeier", + "metamail", + "Minpack", + "MirOS", "MIT", + "MIT-0", + "MIT-advertising", + "MIT-CMU", + "MIT-enna", + "MIT-feh", + "MIT-Festival", + "MIT-Modern-Variant", + "MIT-open-group", + "MIT-Wu", + "MITNFA", + "Motosoto", + "mpi-permissive", + "mpich2", + "MPL-1.0", + "MPL-1.1", + "MPL-2.0", + "MPL-2.0-no-copyleft-exception", + "mplus", + "MS-LPL", + "MS-PL", + "MS-RL", + "MTLL", + "MulanPSL-1.0", + "MulanPSL-2.0", + "Multics", + "Mup", + "NAIST-2003", + "NASA-1.3", + "Naumen", + "NBPL-1.0", + "NCGL-UK-2.0", + "NCSA", + "Net-SNMP", + "NetCDF", + "Newsletr", + "NGPL", + "NICTA-1.0", + "NIST-PD", + "NIST-PD-fallback", + "NIST-Software", + "NLOD-1.0", + "NLOD-2.0", "NLPL", + "Nokia", + "NOSL", + "Noweb", + "NPL-1.0", + "NPL-1.1", + "NPOSL-3.0", + "NRL", + "NTP", + "NTP-0", + "O-UDA-1.0", + "OCCT-PL", + "OCLC-2.0", + "ODbL-1.0", + "ODC-By-1.0", + "OFFIS", + "OFL-1.0", + "OFL-1.0-no-RFN", + "OFL-1.0-RFN", + "OFL-1.1", + "OFL-1.1-no-RFN", + "OFL-1.1-RFN", + "OGC-1.0", + "OGDL-Taiwan-1.0", + "OGL-Canada-2.0", + "OGL-UK-1.0", + "OGL-UK-2.0", + "OGL-UK-3.0", + "OGTSL", + "OLDAP-1.1", + "OLDAP-1.2", + "OLDAP-1.3", + "OLDAP-1.4", + "OLDAP-2.0", + "OLDAP-2.0.1", + "OLDAP-2.1", + "OLDAP-2.2", + "OLDAP-2.2.1", + "OLDAP-2.2.2", + "OLDAP-2.3", + "OLDAP-2.4", + "OLDAP-2.5", + "OLDAP-2.6", + "OLDAP-2.7", + "OLDAP-2.8", + "OLFL-1.3", + "OML", + "OpenPBS-2.3", + "OpenSSL", "OPL-1.0", + "OPL-UK-3.0", + "OPUBL-1.0", + "OSET-PL-2.1", + "OSL-1.0", + "OSL-1.1", + "OSL-2.0", + "OSL-2.1", + "OSL-3.0", + "Parity-6.0.0", + "Parity-7.0.0", + "PDDL-1.0", + "PHP-3.0", + "PHP-3.01", + "Plexus", + "PolyForm-Noncommercial-1.0.0", + "PolyForm-Small-Business-1.0.0", + "PostgreSQL", + "PSF-2.0", + "psfrag", + "psutils", + "Python-2.0", + "Python-2.0.1", + "Qhull", + "QPL-1.0", + "QPL-1.0-INRIA-2004", + "Rdisc", + "RHeCos-1.1", + "RPL-1.1", + "RPL-1.5", + "RPSL-1.0", + "RSA-MD", + "RSCPL", + "Ruby", + "SAX-PD", + "Saxpath", + "SCEA", + "SchemeReport", + "Sendmail", + "Sendmail-8.23", + "SGI-B-1.0", + "SGI-B-1.1", + "SGI-B-2.0", + "SGP4", + "SHL-0.5", + "SHL-0.51", + "SimPL-2.0", + "SISSL", + "SISSL-1.2", + "Sleepycat", + "SMLNJ", + "SMPPL", + "SNIA", + "snprintf", + "Spencer-86", + "Spencer-94", + "Spencer-99", + "SPL-1.0", + "SSH-OpenSSH", + "SSH-short", + "SSPL-1.0", + "SugarCRM-1.1.3", + "SunPro", + "SWL", + "Symlinks", + "TAPR-OHL-1.0", + "TCL", + "TCP-wrappers", + "TermReadKey", + "TMate", + "TORQUE-1.1", + "TOSL", + "TPDL", + "TPL-1.0", + "TTWL", + "TU-Berlin-1.0", + "TU-Berlin-2.0", + "UCAR", + "UCL-1.0", + "Unicode-DFS-2015", + "Unicode-DFS-2016", + "Unicode-TOU", + "UnixCrypt", "Unlicense", "UPL-1.0", - "WTFPL" + "Vim", + "VOSTROM", + "VSL-1.0", + "W3C", + "W3C-19980720", + "W3C-20150513", + "w3m", + "Watcom-1.0", + "Widget-Workshop", + "Wsuipa", + "WTFPL", + "X11", + "X11-distribute-modifications-variant", + "Xdebug-1.03", + "Xerox", + "Xfig", + "XFree86-1.1", + "xinetd", + "xlock", + "Xnet", + "xpp", + "XSkat", + "YPL-1.0", + "YPL-1.1", + "Zed", + "Zend-2.0", + "Zimbra-1.3", + "Zimbra-1.4", + "Zlib", + "zlib-acknowledgement", + "ZPL-1.1", + "ZPL-2.0", + "ZPL-2.1" ] }, "url": { @@ -229,10 +676,25 @@ "description": "The name of the brand", "type": "string" }, + "sourceUrl": { + "$id": "#sourceUrl", + "description": "URL for icon source. If is a GitHub URL, is validated to contain a commit hash, to be an issue comment or to be a GitHub organization URL", + "type": "string", + "if": { + "pattern": "^https://github\\.com/(?!(features/actions)|(sponsors)|(logos)$)" + }, + "then": { + "pattern": "^https://github\\.com/[^/]+/[^/]+/(blob/[a-f\\d]{40}/[^\\s]+)|(tree/[a-f\\d]{40}(/[^\\s]+)?)|(((issues)|(pull))/\\d+#issuecomment-\\d+)$" + }, + "else": { + "$ref": "#/definitions/url" + } + }, "url": { "$id": "#url", + "description": "HTTPS-only URL for a source", "type": "string", - "pattern": "^https?://[^\\s]+$" + "pattern": "^https://[^\\s]+$" } }, "type": "object", diff --git a/.npmignore b/.npmignore index faf9f22d1314..c97285f703e0 100644 --- a/.npmignore +++ b/.npmignore @@ -9,8 +9,9 @@ !LICENSE.md !VERSIONING.md !index.js +!index.mjs !index.d.ts -!icons.js -!icons.mjs -!icons.d.ts -!alias.d.ts +!types.d.ts +!sdk.mjs +!sdk.js +!sdk.d.ts diff --git a/.prettierignore b/.prettierignore index 5ac4ad410e4a..1609b2c5ef18 100644 --- a/.prettierignore +++ b/.prettierignore @@ -10,9 +10,7 @@ _data/simple-icons.json scripts/build/templates/*.js # Generated JavaScript files don't need to be formatted -icons/*.js -icons/*.d.ts -icons.d.ts -icons.js -icons.mjs index.js +index.mjs +index.d.ts +sdk.js diff --git a/.prettierrc.js b/.prettierrc.js deleted file mode 100644 index 9166a0443afc..000000000000 --- a/.prettierrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - trailingComma: 'all', - singleQuote: true, -}; diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 000000000000..6e778b4fb9c5 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,4 @@ +{ + "trailingComma": "all", + "singleQuote": true +} diff --git a/.svglint-ignored.json b/.svglint-ignored.json index 1a8e3c3ec006..eceac7b33bff 100644 --- a/.svglint-ignored.json +++ b/.svglint-ignored.json @@ -4,8 +4,5 @@ }, "icon-size": { "M22.915 8.321c-.642-.997-1.542-1.879-2.672-2.624-2.185-1.436-5.056-2.227-8.084-2.227-1.012 0-2.009.088-2.976.262a9.84 9.84 0 0 0-2.046-1.509C4.378.848 1.947 1.361.719 1.802a.59.59 0 0 0-.229.964c.866.894 2.299 2.66 1.946 4.267C1.067 8.431.324 10.117.324 11.872c0 1.789.742 3.475 2.112 4.873.352 1.607-1.081 3.374-1.947 4.268a.589.589 0 0 0 .229.963c1.228.442 3.659.955 6.418-.421a9.892 9.892 0 0 0 2.046-1.509c.968.174 1.964.262 2.976.262 3.029 0 5.9-.79 8.084-2.226 1.131-.744 2.031-1.626 2.672-2.624.715-1.11 1.077-2.306 1.077-3.552.001-1.279-.361-2.473-1.076-3.585zm-10.881 9.916c-1.309 0-2.558-.169-3.696-.474l-.832.8A7.609 7.609 0 0 1 5.972 19.7a6.033 6.033 0 0 1-2.17.613c.041-.073.078-.147.117-.221.833-1.531 1.059-2.907.674-4.128-1.363-1.071-2.181-2.442-2.181-3.935 0-3.427 4.308-6.206 9.621-6.206 5.313 0 9.622 2.779 9.622 6.206.001 3.429-4.307 6.208-9.621 6.208zM8.85 12.01c0 .777-.635 1.407-1.418 1.407-.783 0-1.418-.63-1.418-1.407s.635-1.407 1.418-1.407c.783 0 1.418.63 1.418 1.407zm4.563 0c0 .777-.635 1.407-1.418 1.407-.783 0-1.418-.63-1.418-1.407s.635-1.407 1.418-1.407c.783 0 1.418.63 1.418 1.407zm4.565 0c0 .777-.635 1.407-1.418 1.407-.783 0-1.418-.63-1.418-1.407s.635-1.407 1.418-1.407c.783 0 1.418.63 1.418 1.407z": "Rocket.Chat" - }, - "ineffective-segments": { - "M12 1.25l6.75 6.637V2L12 1.25zm0 0l-6.05 7h12.1l-6.05-7zm0 0L5.25 2v5.887L12 1.25zM5.25 2L0 9l4.416-.68L5.25 2zM0 9l11.959 13.703.008-.014L4.443 9H0zm18.75-7l.834 6.32L24 9l-5.25-7zM24 9h-4.506l-7.523 13.69.029.06L24 9zM12 22.75l-.031-.057-.008.012.039.045zM5.436 9l6.533 13.686L18.564 9H5.436Z": "Sketch" } } diff --git a/.svglintrc.mjs b/.svglintrc.mjs index 28dc543acc64..861f200f2216 100644 --- a/.svglintrc.mjs +++ b/.svglintrc.mjs @@ -1,9 +1,12 @@ -import fs from 'node:fs'; +import fs from 'node:fs/promises'; import path from 'node:path'; +import process from 'node:process'; import { + SVG_PATH_REGEX, getDirnameFromImportMeta, htmlFriendlyToTitle, -} from './scripts/utils.js'; + collator, +} from './sdk.mjs'; import svgpath from 'svgpath'; import svgPathBbox from 'svg-path-bbox'; import parsePath from 'svg-path-segments'; @@ -18,17 +21,20 @@ const htmlNamedEntitiesFile = path.join( ); const svglintIgnoredFile = path.join(__dirname, '.svglint-ignored.json'); -const data = JSON.parse(fs.readFileSync(dataFile, 'utf8')); +const data = JSON.parse(await fs.readFile(dataFile, 'utf8')); const htmlNamedEntities = JSON.parse( - fs.readFileSync(htmlNamedEntitiesFile, 'utf8'), + await fs.readFile(htmlNamedEntitiesFile, 'utf8'), +); +const svglintIgnores = JSON.parse( + await fs.readFile(svglintIgnoredFile, 'utf8'), ); -const svglintIgnores = JSON.parse(fs.readFileSync(svglintIgnoredFile, 'utf8')); const svgRegexp = - /^.*<\/title><path d=".*"\/><\/svg>\n?$/; + /^<svg( [^\s]*=".*"){3}><title>.*<\/title><path d=".*"\/><\/svg>$/; const negativeZerosRegexp = /-0(?=[^\.]|[\s\d\w]|$)/g; const iconSize = 24; +const iconTargetCenter = iconSize / 2; const iconFloatPrecision = 3; const iconMaxFloatPrecision = 5; const iconTolerance = 0.001; @@ -46,7 +52,7 @@ const sortObjectByKey = (obj) => { const sortObjectByValue = (obj) => { return Object.keys(obj) - .sort((a, b) => ('' + obj[a]).localeCompare(obj[b])) + .sort((a, b) => collator.compare(obj[a], obj[b])) .reduce((r, k) => Object.assign(r, { [k]: obj[k] }), {}); }; @@ -104,23 +110,47 @@ const getTitleTextIndex = (svgFileContent) => { const hexadecimalToDecimal = (hex) => { let result = 0, digitValue; - hex = hex.toLowerCase(); - for (var i = 0; i < hex.length; i++) { - digitValue = '0123456789abcdefgh'.indexOf(hex[i]); + for (const digit of hex.toLowerCase()) { + digitValue = '0123456789abcdefgh'.indexOf(digit); result = result * 16 + digitValue; } return result; }; +const maybeShortenedWithEllipsis = (str) => { + return str.length > 20 ? `${str.substring(0, 20)}...` : str; +}; + +/** + * Memoize a function which accepts a single argument. + * A second argument can be passed to be used as key. + */ +const memoize = (func) => { + const results = {}; + + return (arg, defaultKey = null) => { + const key = defaultKey || arg; + + if (!results[key]) { + results[key] = func(arg); + } + return results[key]; + }; +}; + +const getIconPath = memoize(($icon, filepath) => $icon.find('path').attr('d')); +const getIconPathSegments = memoize((iconPath) => parsePath(iconPath)); +const getIconPathBbox = memoize((iconPath) => svgPathBbox(iconPath)); + if (updateIgnoreFile) { - process.on('exit', () => { + process.on('exit', async () => { // ensure object output order is consistent due to async svglint processing const sorted = sortObjectByKey(iconIgnored); for (const linterName in sorted) { sorted[linterName] = sortObjectByValue(sorted[linterName]); } - fs.writeFileSync(ignoreFile, JSON.stringify(sorted, null, 2) + '\n', { + await fs.writeFile(ignoreFile, JSON.stringify(sorted, null, 2) + '\n', { flag: 'w', }); }); @@ -153,7 +183,8 @@ export default { }, attr: [ { - // ensure that the SVG elm has the appropriate attrs alphabetically ordered + // ensure that the SVG element has the appropriate attributes + // alphabetically ordered role: 'img', viewBox: `0 0 ${iconSize} ${iconSize}`, xmlns: 'http://www.w3.org/2000/svg', @@ -162,13 +193,14 @@ export default { 'rule::order': true, }, { - // ensure that the title elm has the appropriate attr + // ensure that the title element has the appropriate attribute 'rule::selector': 'svg > title', 'rule::whitelist': true, }, { - // ensure that the path element only has the 'd' attr (no style, opacity, etc.) - d: /^[,a-zA-Z0-9\. -]+$/, + // ensure that the path element only has the 'd' attribute + // (no style, opacity, etc.) + d: SVG_PATH_REGEX, 'rule::selector': 'svg > path', 'rule::whitelist': true, }, @@ -189,7 +221,7 @@ export default { if (hexadecimalCodepoints.length > 0) { _validCodepointsRepr = false; - hexadecimalCodepoints.forEach((match) => { + for (const match of hexadecimalCodepoints) { const charHexReprIndex = getTitleTextIndex(ast.source) + match.index + 1; const charDec = hexadecimalToDecimal(match[1]); @@ -206,10 +238,11 @@ export default { } reporter.error( - `Hexadecimal representation of encoded character "${match[0]}" found at index ${charHexReprIndex}:` + + 'Hexadecimal representation of encoded character' + + ` "${match[0]}" found at index ${charHexReprIndex}:` + ` replace it with "${charRepr}".`, ); - }); + } } // avoid character codepoints as named entities @@ -217,7 +250,7 @@ export default { iconTitleText.matchAll(/&([A-Za-z0-9]+);/g), ); if (namedEntitiesCodepoints.length > 0) { - namedEntitiesCodepoints.forEach((match) => { + for (const match of namedEntitiesCodepoints) { const namedEntiyReprIndex = getTitleTextIndex(ast.source) + match.index + 1; @@ -241,11 +274,12 @@ export default { } reporter.error( - `Named entity representation of encoded character "${match[0]}" found at index ${namedEntiyReprIndex}.` + + 'Named entity representation of encoded character' + + ` "${match[0]}" found at index ${namedEntiyReprIndex}.` + ` Replace it with ${replacement}.`, ); } - }); + } } if (_validCodepointsRepr) { @@ -255,16 +289,15 @@ export default { ), encodedBuf = []; - const _indexesToIgnore = []; - for (let m = 0; m < encodingMatches.length; m++) { - let index = encodingMatches[m].index; - for (let r = index; r < index + encodingMatches[m][0].length; r++) { - _indexesToIgnore.push(r); + const indexesToIgnore = []; + for (const match of encodingMatches) { + for (let r = match.index; r < match.index + match[0].length; r++) { + indexesToIgnore.push(r); } } for (let i = iconTitleText.length - 1; i >= 0; i--) { - if (_indexesToIgnore.includes(i)) { + if (indexesToIgnore.includes(i)) { encodedBuf.unshift(iconTitleText[i]); } else { // encode all non ascii characters plus "'&<> (XML named entities) @@ -297,32 +330,32 @@ export default { // check if there are some other encoded characters in decimal notation // which shouldn't be encoded - encodingMatches - .filter((m) => !isNaN(m[2])) - .forEach((match) => { - const decimalNumber = parseInt(match[2]); - if (decimalNumber < 128) { - _validCodepointsRepr = false; - - const decimalCodepointCharIndex = - getTitleTextIndex(ast.source) + match.index + 1; - if (xmlNamedEntitiesCodepoints.includes(decimalNumber)) { - replacement = `"&${ - xmlNamedEntities[ - xmlNamedEntitiesCodepoints.indexOf(decimalNumber) - ] - };"`; - } else { - replacement = String.fromCharCode(decimalNumber); - replacement = replacement == '"' ? `'"'` : `"${replacement}"`; - } + for (const match of encodingMatches.filter((m) => !isNaN(m[2]))) { + const decimalNumber = parseInt(match[2]); + if (decimalNumber > 127) { + continue; + } + _validCodepointsRepr = false; - reporter.error( - `Unnecessary encoded character "${match[0]}" found at index ${decimalCodepointCharIndex}:` + - ` replace it with ${replacement}.`, - ); - } - }); + const decimalCodepointCharIndex = + getTitleTextIndex(ast.source) + match.index + 1; + if (xmlNamedEntitiesCodepoints.includes(decimalNumber)) { + replacement = `"&${ + xmlNamedEntities[ + xmlNamedEntitiesCodepoints.indexOf(decimalNumber) + ] + };"`; + } else { + replacement = String.fromCodePoint(decimalNumber); + replacement = replacement == '"' ? `'"'` : `"${replacement}"`; + } + + reporter.error( + `Unnecessary encoded character "${match[0]}" found` + + ` at index ${decimalCodepointCharIndex}:` + + ` replace it with ${replacement}.`, + ); + } if (_validCodepointsRepr) { const iconName = htmlFriendlyToTitle(iconTitleText); @@ -337,15 +370,15 @@ export default { } } }, - (reporter, $, ast) => { + (reporter, $, ast, filepath) => { reporter.name = 'icon-size'; - const iconPath = $.find('path').attr('d'); + const iconPath = getIconPath($, filepath); if (!updateIgnoreFile && isIgnored(reporter.name, iconPath)) { return; } - const [minX, minY, maxX, maxY] = svgPathBbox(iconPath); + const [minX, minY, maxX, maxY] = getIconPathBbox(iconPath); const width = +(maxX - minX).toFixed(iconFloatPrecision); const height = +(maxY - minY).toFixed(iconFloatPrecision); @@ -358,64 +391,49 @@ export default { } } else if (width !== iconSize && height !== iconSize) { reporter.error( - `Size of <path> must be exactly ${iconSize} in one dimension; the size is currently ${width} x ${height}`, + `Size of <path> must be exactly ${iconSize} in one dimension;` + + ` the size is currently ${width} x ${height}`, ); if (updateIgnoreFile) { ignoreIcon(reporter.name, iconPath, $); } } }, - (reporter, $, ast) => { + (reporter, $, ast, filepath) => { reporter.name = 'icon-precision'; - const iconPath = $.find('path').attr('d'); - if (!updateIgnoreFile && isIgnored(reporter.name, iconPath)) { - return; - } + const iconPath = getIconPath($, filepath); + const segments = getIconPathSegments(iconPath); - const segments = parsePath(iconPath), - svgFileContent = $.html(); - - segments.forEach((segment) => { + for (const segment of segments) { const precisionMax = Math.max( ...segment.params.slice(1).map(countDecimals), ); if (precisionMax > iconMaxFloatPrecision) { - let errorMsg = `found ${precisionMax} decimals in segment "${iconPath.substring( - segment.start, - segment.end, - )}"`; + let errorMsg = + `found ${precisionMax} decimals in segment` + + ` "${iconPath.substring(segment.start, segment.end)}"`; if (segment.chained) { - let readableChain = iconPath.substring( - segment.chainStart, - segment.chainEnd, + const readableChain = maybeShortenedWithEllipsis( + iconPath.substring(segment.chainStart, segment.chainEnd), ); - if (readableChain.length > 20) { - readableChain = `${readableChain.substring(0, 20)}...`; - } errorMsg += ` of chain "${readableChain}"`; } errorMsg += ` at index ${ - segment.start + getPathDIndex(svgFileContent) + segment.start + getPathDIndex(ast.source) }`; reporter.error( - `Maximum precision should not be greater than ${iconMaxFloatPrecision}; ${errorMsg}`, + 'Maximum precision should not be greater than' + + ` ${iconMaxFloatPrecision}; ${errorMsg}`, ); - if (updateIgnoreFile) { - ignoreIcon(reporter.name, iconPath, $); - } } - }); + } }, - (reporter, $, ast) => { + (reporter, $, ast, filepath) => { reporter.name = 'ineffective-segments'; - const iconPath = $.find('path').attr('d'); - if (!updateIgnoreFile && isIgnored(reporter.name, iconPath)) { - return; - } - - const segments = parsePath(iconPath); + const iconPath = getIconPath($, filepath); + const segments = getIconPathSegments(iconPath); const absSegments = svgpath(iconPath).abs().unshort().segments; const lowerMovementCommands = ['m', 'l']; @@ -450,6 +468,7 @@ export default { const isInvalidSegment = ( [command, x1Coord, y1Coord, ...rest], index, + previousSegmentIsZ, ) => { if (commands.includes(command)) { // Relative directions (h or v) having a length of 0 @@ -463,7 +482,9 @@ export default { x1Coord === 0 && y1Coord === 0 ) { - return true; + // When the path is closed (z), the new segment can start with + // a relative placement (m) as if it were absolute (M) + return command.toLowerCase() === 'm' ? !previousSegmentIsZ : true; } if ( lowerCurveCommands.includes(command) && @@ -486,7 +507,8 @@ export default { let [yPrevCoord, xPrevCoord] = [ ...absSegments[index - 1], ].reverse(); - // If the previous command was a direction one, we need to iterate back until we find the missing coordinates + // If the previous command was a direction one, + // we need to iterate back until we find the missing coordinates if (upperDirectionCommands.includes(xPrevCoord)) { xPrevCoord = undefined; yPrevCoord = undefined; @@ -498,12 +520,14 @@ export default { let [yPrevCoordDeep, xPrevCoordDeep] = [ ...absSegments[idx], ].reverse(); - // If the previous command was a horizontal movement, we need to consider the single coordinate as x + // If the previous command was a horizontal movement, + // we need to consider the single coordinate as x if (upperHorDirectionCommand === xPrevCoordDeep) { xPrevCoordDeep = yPrevCoordDeep; yPrevCoordDeep = undefined; } - // If the previous command was a vertical movement, we need to consider the single coordinate as y + // If the previous command was a vertical movement, + // we need to consider the single coordinate as y if (upperVerDirectionCommand === xPrevCoordDeep) { xPrevCoordDeep = undefined; } @@ -524,7 +548,9 @@ export default { if (upperCurveCommands.includes(command)) { const [x2Coord, y2Coord, xCoord, yCoord] = rest; - // Absolute shorthand curve (S) having the same coordinate as the previous segment and a control point equal to the ending point + // Absolute shorthand curve (S) having + // the same coordinate as the previous segment + // and a control point equal to the ending point if ( upperShorthandCurveCommand === command && x1Coord === xPrevCoord && @@ -534,7 +560,9 @@ export default { ) { return true; } - // Absolute bézier curve (C) having the same coordinate as the previous segment and last control point equal to the ending point + // Absolute bézier curve (C) having + // the same coordinate as the previous segment + // and last control point equal to the ending point if ( upperCurveCommand === command && x1Coord === xPrevCoord && @@ -547,13 +575,16 @@ export default { } return ( - // Absolute horizontal direction (H) having the same x coordinate as the previous segment + // Absolute horizontal direction (H) having + // the same x coordinate as the previous segment (upperHorDirectionCommand === command && x1Coord === xPrevCoord) || - // Absolute vertical direction (V) having the same y coordinate as the previous segment + // Absolute vertical direction (V) having + // the same y coordinate as the previous segment (upperVerDirectionCommand === command && x1Coord === yPrevCoord) || - // Absolute movement (M or L) having the same coordinate as the previous segment + // Absolute movement (M or L) having the same + // coordinate as the previous segment (upperMovementCommands.includes(command) && x1Coord === xPrevCoord && y1Coord === yPrevCoord) @@ -562,10 +593,12 @@ export default { } }; - const svgFileContent = $.html(); + for (let index = 0; index < segments.length; index++) { + const segment = segments[index]; + const previousSegmentIsZ = + index > 0 && segments[index - 1].params[0].toLowerCase() === 'z'; - segments.forEach((segment, index) => { - if (isInvalidSegment(segment.params, index)) { + if (isInvalidSegment(segment.params, index, previousSegmentIsZ)) { const [command, x1, y1, ...rest] = segment.params; let errorMsg = `Innefective segment "${iconPath.substring( @@ -603,44 +636,30 @@ export default { } if (segment.chained) { - let readableChain = iconPath.substring( - segment.chainStart, - segment.chainEnd, + const readableChain = maybeShortenedWithEllipsis( + iconPath.substring(segment.chainStart, segment.chainEnd), ); - if (readableChain.length > 20) { - readableChain = `${readableChain.substring(0, 20)}...`; - } errorMsg += ` in chain "${readableChain}"`; } errorMsg += ` at index ${ - segment.start + getPathDIndex(svgFileContent) + segment.start + getPathDIndex(ast.source) }`; reporter.error(`${errorMsg} (${resolutionTip})`); - - if (updateIgnoreFile) { - ignoreIcon(reporter.name, iconPath, $); - } } - }); + } }, - (reporter, $, ast) => { + (reporter, $, ast, filepath) => { reporter.name = 'collinear-segments'; - const iconPath = $.find('path').attr('d'); - if (!updateIgnoreFile && isIgnored(reporter.name, iconPath)) { - return; - } - /** * Extracts collinear coordinates from SVG path straight lines * (does not extracts collinear coordinates from curves). **/ const getCollinearSegments = (iconPath) => { - const segments = parsePath(iconPath), + const segments = getIconPathSegments(iconPath), collinearSegments = [], - straightLineCommands = 'HhVvLlMm', - zCommands = 'Zz'; + straightLineCommands = 'HhVvLlMm'; let currLine = [], currAbsCoord = [undefined, undefined], @@ -654,80 +673,103 @@ export default { cmd = seg[0], nextCmd = s + 1 < segments.length ? segments[s + 1][0] : null; - if (cmd === 'L') { - currAbsCoord[0] = seg[1]; - currAbsCoord[1] = seg[2]; - } else if (cmd === 'l') { - currAbsCoord[0] = - (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[1]; - currAbsCoord[1] = - (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[2]; - } else if (cmd === 'm') { - currAbsCoord[0] = - (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[1]; - currAbsCoord[1] = - (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[2]; - startPoint = undefined; - } else if (cmd === 'M') { - currAbsCoord[0] = seg[1]; - currAbsCoord[1] = seg[2]; - startPoint = undefined; - } else if (cmd === 'H') { - currAbsCoord[0] = seg[1]; - } else if (cmd === 'h') { - currAbsCoord[0] = - (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[1]; - } else if (cmd === 'V') { - currAbsCoord[1] = seg[1]; - } else if (cmd === 'v') { - currAbsCoord[1] = - (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[1]; - } else if (cmd === 'C') { - currAbsCoord[0] = seg[5]; - currAbsCoord[1] = seg[6]; - } else if (cmd === 'a') { - currAbsCoord[0] = - (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[6]; - currAbsCoord[1] = - (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[7]; - } else if (cmd === 'A') { - currAbsCoord[0] = seg[6]; - currAbsCoord[1] = seg[7]; - } else if (cmd === 's') { - currAbsCoord[0] = - (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[1]; - currAbsCoord[1] = - (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[2]; - } else if (cmd === 'S') { - currAbsCoord[0] = seg[1]; - currAbsCoord[1] = seg[2]; - } else if (cmd === 't') { - currAbsCoord[0] = - (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[1]; - currAbsCoord[1] = - (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[2]; - } else if (cmd === 'T') { - currAbsCoord[0] = seg[1]; - currAbsCoord[1] = seg[2]; - } else if (cmd === 'c') { - currAbsCoord[0] = - (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[5]; - currAbsCoord[1] = - (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[6]; - } else if (cmd === 'Q') { - currAbsCoord[0] = seg[3]; - currAbsCoord[1] = seg[4]; - } else if (cmd === 'q') { - currAbsCoord[0] = - (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[3]; - currAbsCoord[1] = - (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[4]; - } else if (zCommands.includes(cmd)) { - // Overlapping in Z should be handled in another rule - currAbsCoord = [startPoint[0], startPoint[1]]; - _resetStartPoint = true; - } else { - throw new Error(`"${cmd}" command not handled`); + switch (cmd) { + // Next switch cases have been ordered by frequency + // of occurrence in the SVG paths of the icons + case 'M': + currAbsCoord[0] = seg[1]; + currAbsCoord[1] = seg[2]; + startPoint = undefined; + break; + case 'm': + currAbsCoord[0] = + (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[1]; + currAbsCoord[1] = + (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[2]; + startPoint = undefined; + break; + case 'H': + currAbsCoord[0] = seg[1]; + break; + case 'h': + currAbsCoord[0] = + (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[1]; + break; + case 'V': + currAbsCoord[1] = seg[1]; + break; + case 'v': + currAbsCoord[1] = + (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[1]; + break; + case 'L': + currAbsCoord[0] = seg[1]; + currAbsCoord[1] = seg[2]; + break; + case 'l': + currAbsCoord[0] = + (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[1]; + currAbsCoord[1] = + (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[2]; + break; + case 'Z': + case 'z': + // Overlapping in Z should be handled in another rule + currAbsCoord = [startPoint[0], startPoint[1]]; + _resetStartPoint = true; + break; + case 'C': + currAbsCoord[0] = seg[5]; + currAbsCoord[1] = seg[6]; + break; + case 'c': + currAbsCoord[0] = + (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[5]; + currAbsCoord[1] = + (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[6]; + break; + case 'A': + currAbsCoord[0] = seg[6]; + currAbsCoord[1] = seg[7]; + break; + case 'a': + currAbsCoord[0] = + (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[6]; + currAbsCoord[1] = + (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[7]; + break; + case 's': + currAbsCoord[0] = + (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[1]; + currAbsCoord[1] = + (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[2]; + break; + case 'S': + currAbsCoord[0] = seg[1]; + currAbsCoord[1] = seg[2]; + break; + case 't': + currAbsCoord[0] = + (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[1]; + currAbsCoord[1] = + (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[2]; + break; + case 'T': + currAbsCoord[0] = seg[1]; + currAbsCoord[1] = seg[2]; + break; + case 'Q': + currAbsCoord[0] = seg[3]; + currAbsCoord[1] = seg[4]; + break; + case 'q': + currAbsCoord[0] = + (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[3]; + currAbsCoord[1] = + (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[4]; + break; + default: + throw new Error(`"${cmd}" command not handled`); } if (startPoint === undefined) { @@ -772,51 +814,49 @@ export default { return collinearSegments; }; - const collinearSegments = getCollinearSegments(iconPath), - pathDIndex = getPathDIndex($.html()); - collinearSegments.forEach((segment) => { + const iconPath = getIconPath($, filepath), + collinearSegments = getCollinearSegments(iconPath); + if (collinearSegments.length === 0) { + return; + } + const pathDIndex = getPathDIndex(ast.source); + for (const segment of collinearSegments) { let errorMsg = `Collinear segment "${iconPath.substring( segment.start, segment.end, )}" found`; if (segment.chained) { - let readableChain = iconPath.substring( - segment.chainStart, - segment.chainEnd, + let readableChain = maybeShortenedWithEllipsis( + iconPath.substring(segment.chainStart, segment.chainEnd), ); - if (readableChain.length > 20) { - readableChain = `${readableChain.substring(0, 20)}...`; - } errorMsg += ` in chain "${readableChain}"`; } errorMsg += ` at index ${ segment.start + pathDIndex } (should be removed)`; reporter.error(errorMsg); - }); - - if (collinearSegments.length) { - if (updateIgnoreFile) { - ignoreIcon(reporter.name, iconPath, $); - } } }, (reporter, $, ast) => { reporter.name = 'extraneous'; if (!svgRegexp.test(ast.source)) { - reporter.error( - 'Unexpected character(s), most likely extraneous whitespace, detected in SVG markup', - ); + if (ast.source.includes('\n') || ast.source.includes('\r')) { + reporter.error( + 'Unexpected newline character(s) detected in SVG markup', + ); + } else { + reporter.error( + 'Unexpected character(s), most likely extraneous' + + ' whitespace, detected in SVG markup', + ); + } } }, - (reporter, $, ast) => { + (reporter, $, ast, filepath) => { reporter.name = 'negative-zeros'; - const iconPath = $.find('path').attr('d'); - if (!updateIgnoreFile && isIgnored(reporter.name, iconPath)) { - return; - } + const iconPath = getIconPath($, filepath); // Find negative zeros inside path const negativeZeroMatches = Array.from( @@ -824,67 +864,71 @@ export default { ); if (negativeZeroMatches.length) { // Calculate the index for each match in the file - const svgFileContent = $.html(); - const pathDIndex = getPathDIndex(svgFileContent); + const pathDIndex = getPathDIndex(ast.source); - negativeZeroMatches.forEach((match) => { + for (const match of negativeZeroMatches) { const negativeZeroFileIndex = match.index + pathDIndex; - const previousChar = svgFileContent[negativeZeroFileIndex - 1]; + const previousChar = ast.source[negativeZeroFileIndex - 1]; const replacement = '0123456789'.includes(previousChar) ? ' 0' : '0'; reporter.error( - `Found "-0" at index ${negativeZeroFileIndex} (should be "${replacement}")`, + `Found "-0" at index ${negativeZeroFileIndex} (should` + + ` be "${replacement}")`, ); - }); + } } }, - (reporter, $, ast) => { + (reporter, $, ast, filepath) => { reporter.name = 'icon-centered'; - const iconPath = $.find('path').attr('d'); + const iconPath = getIconPath($, filepath); if (!updateIgnoreFile && isIgnored(reporter.name, iconPath)) { return; } - const [minX, minY, maxX, maxY] = svgPathBbox(iconPath); - const targetCenter = iconSize / 2; + const [minX, minY, maxX, maxY] = getIconPathBbox(iconPath); const centerX = +((minX + maxX) / 2).toFixed(iconFloatPrecision); - const devianceX = centerX - targetCenter; + const devianceX = centerX - iconTargetCenter; const centerY = +((minY + maxY) / 2).toFixed(iconFloatPrecision); - const devianceY = centerY - targetCenter; + const devianceY = centerY - iconTargetCenter; if ( Math.abs(devianceX) > iconTolerance || Math.abs(devianceY) > iconTolerance ) { reporter.error( - `<path> must be centered at (${targetCenter}, ${targetCenter}); the center is currently (${centerX}, ${centerY})`, + `<path> must be centered at (${iconTargetCenter}, ${iconTargetCenter});` + + ` the center is currently (${centerX}, ${centerY})`, ); if (updateIgnoreFile) { ignoreIcon(reporter.name, iconPath, $); } } }, - (reporter, $, ast) => { + (reporter, $, ast, filepath) => { reporter.name = 'path-format'; - const iconPath = $.find('path').attr('d'); + const iconPath = getIconPath($, filepath); - const validPathFormatRegex = /^[Mm][MmZzLlHhVvCcSsQqTtAaEe0-9-,.\s]+$/; - if (!validPathFormatRegex.test(iconPath)) { + if (!SVG_PATH_REGEX.test(iconPath)) { let errorMsg = 'Invalid path format', reason; - if (!/^[Mm]/.test(iconPath)) { + if (!iconPath.startsWith('M') && !iconPath.startsWith('m')) { // doesn't start with moveto - reason = `should start with \"moveto\" command (\"M\" or \"m\"), but starts with \"${iconPath[0]}\"`; + reason = + 'should start with "moveto" command ("M" or "m"),' + + ` but starts with \"${iconPath[0]}\"`; reporter.error(`${errorMsg}: ${reason}`); } - const validPathCharacters = 'MmZzLlHhVvCcSsQqTtAaEe0123456789-,. ', + const validPathCharacters = SVG_PATH_REGEX.source.replace( + /[\[\]+^$]/g, + '', + ), invalidCharactersMsgs = [], - pathDIndex = getPathDIndex($.html()); + pathDIndex = getPathDIndex(ast.source); for (let [i, char] of Object.entries(iconPath)) { if (validPathCharacters.indexOf(char) === -1) { @@ -898,8 +942,7 @@ export default { if (invalidCharactersMsgs.length > 0) { reason = `unexpected character${ invalidCharactersMsgs.length > 1 ? 's' : '' - } found`; - reason += ` (${invalidCharactersMsgs.join(', ')})`; + } found (${invalidCharactersMsgs.join(', ')})`; reporter.error(`${errorMsg}: ${reason}`); } } @@ -912,8 +955,8 @@ export default { const reason = `found a closing "path" tag at index ${ast.source.indexOf( '</path>', - )}.` + - " The path should be self-closing, use '/>' instead of '></path>'."; + )}. The path should be self-closing,` + + ' use "/>" instead of "></path>".'; reporter.error(`Invalid SVG content format: ${reason}`); } }, diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 06e2be81225f..3fb7ded2098e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,7 @@ # Contributing to Simple Icons -> :information_source: We ask that all users read our [legal disclaimer](./DISCLAIMER.md) before contributing to Simple Icons. +> **Note**\ +> We ask that all users read our [legal disclaimer](./DISCLAIMER.md) before contributing to Simple Icons. Simple Icons welcomes contributions and corrections. Before contributing, please make sure you have read the guidelines below. If you decide to contribute anything, please follow the steps below. If you're new to _git_ and/or _GitHub_, we suggest you go through [the GitHub Guides](https://guides.github.com/introduction/flow/). @@ -43,7 +44,7 @@ We welcome icon requests. Before you submit a new issue please make sure the ico * Has not already been requested. If you find an existing issue or pull request for the brand you're looking for then please add a reaction or comment to show your support. * Is of a _popular_ brand: - - For websites, the [Similarweb rank](https://www.similarweb.com) should be less than 500k. + - For websites, the [Similarweb global rank](https://www.similarweb.com) should be less than 500k. - Note that for brands that have already been added the threshold for continued inclusion rises to 750k. - For GitHub projects, the amount of "stars" should be above 5k. - For anything else, popularity will be judged on a case-by-case basis. @@ -59,6 +60,12 @@ We welcome icon requests. Before you submit a new issue please make sure the ico - Universities or other educational institutions - Any brands representing individuals rather than an organization, company, or product. This includes musicians, bands, and social media personalities. +Some companies and organizations are excessively protective with their brands, so please don't consider them: + +- Disney +- Oracle +- Do you know more? Please, [report them](https://github.com/simple-icons/simple-icons/issues/new?labels=docs&template=documentation.yml). + If you are in doubt, feel free to submit it and we'll have a look. When submitting a request for a new or updated icon include helpful information such as: @@ -117,7 +124,6 @@ There are many different tools for editing SVG files, some options include: | [Boxy SVG](https://boxy-svg.com/) | Vector Graphics Editor | Windows, Mac, Linux | $ / Free (Linux, Web) | | [Affinity Designer](https://affinity.serif.com/designer/) | Vector Graphics Editor | Windows, Mac | $ | | [Adobe Illustrator](https://www.adobe.com/products/illustrator.html) | Vector Graphics Editor | Windows, Mac | $ - $$$ | -| [IcoMoon](https://icomoon.io/) | Icon Editing/Management Tool | Online | Free | Using your preferred tool you should: @@ -139,9 +145,7 @@ If you have any problems or questions while creating the SVG, check out [the Git All icons in Simple Icons have been optimized with the [SVGO tool](https://github.com/svg/svgo). This can be done in one of three ways: * The [SVGO Command Line Tool](https://github.com/svg/svgo) - * Install dependencies - * With npm: `npm install` from the root of this repository - * Run the following command `npm run svgo -- icons/file-to-optimize.svg` + * Run the following command `npx svgo icons/file-to-optimize.svg` * Check if there is a loss of quality in the output, if so increase the precision. * The [SVGOMG Online Tool](https://jakearchibald.github.io/svgomg/) * Click "Open SVG" and select an SVG file. @@ -260,6 +264,8 @@ Here is the object of a fictional brand as an example: } ``` +You can use `npm run add-icon-data` to add metadata via a CLI prompt. + Make sure the icon is added in alphabetical order. If you're in doubt, you can always run `npm run our-lint` - this will tell you if any of the JSON data is in the wrong order. #### Optional Data @@ -286,6 +292,8 @@ Here is the object of the fictional brand from before, but with all optional val } ``` +> Non secured HTTP URLs are forbidden. If a brand's website only supports HTTP, you must still declare the URL using the `https://` protocol. + #### Source Guidelines We use the source URL as a reference for the current SVG in our repository and as a jumping-off point to find updates if the logo changes. If you used one of the sources listed below, make sure to follow these guidelines. If you're unsure about the source URL you can open a Pull Request and ask for help from others. @@ -389,3 +397,22 @@ Then, start a Docker container for simple-icons and attach to it: ```shell docker run -it --rm --entrypoint "/bin/ash" simple-icons ``` + +## Developing Third-Party Extensions + +A SDK is included in the `simple-icons/sdk` entrypoint of the npm package to make it easier the development of third party extensions with JavaScript and TypeScript. + +```typescript +import { getIconsData, type IconData } from 'simple-icons/sdk'; + +const iconsData: IconData[] = getIconsData(); +``` + +```javascript +import { getIconsData } from 'simple-icons/sdk'; + +/* @typedef {import("./simple-icons/sdk").IconData} IconData */ + +/* @type {IconData[]} */ +const iconsData = getIconsData(); +``` diff --git a/DISCLAIMER.md b/DISCLAIMER.md index 45eb42b73cb4..5edf56378dd6 100644 --- a/DISCLAIMER.md +++ b/DISCLAIMER.md @@ -11,9 +11,11 @@ Simple Icons asks that its users read this disclaimer fully before including an ## Licenses, Copyrights & Trademarks -> :information_source: NOTE: The addition of licenses to Simple Icons is an ongoing project. Hence, the absence of licence data for a particular icon does not imply that the icon is not released under a license. +> **Note**\ +> The addition of licenses to Simple Icons is an ongoing project. Hence, the absence of licence data for a particular icon does not imply that the icon is not released under a license. -> :information_source: NOTE: Simple Icons is released under CC0 - though that doesn't mean to imply that all icons within the project are also CC0. Please see individual licenses where available. +> **Note**\ +> Simple Icons is released under CC0 - though that doesn't mean to imply that all icons within the project are also CC0. Please see individual licenses where available. Simple Icons provides data on the license under which icons are available. We ask users to carefully consider this when using an icon. As licenses are subject to change we also ask our users to regularly check if the license of the icons they use have been changed. @@ -27,7 +29,8 @@ Simple Icons cannot be held responsible for any legal activity raised by a brand ## Brand Guidelines -> :information_source: NOTE: the addition of guidelines to Simple Icons is an ongoing project. In the meantime, users of Simple Icons are instead encouraged to check the `source` URL as, in some cases, the icon will have been sourced from official guidelines. The lack of a `guidelines` entry for a particular brand does not imply that the brand has no guidelines. +> **Note**\ +> The addition of guidelines to Simple Icons is an ongoing project. In the meantime, users of Simple Icons are instead encouraged to check the `source` URL as, in some cases, the icon will have been sourced from official guidelines. The lack of a `guidelines` entry for a particular brand does not imply that the brand has no guidelines. Simple Icons provides a link to a brand's _branding guidelines_ (or similar) if the brand provides one. We ask our users read these guidelines and ensure their usage of the brand's icon is in accordance with them. As guidelines are subject to change we also ask our users to regularly check if the brand guidelines of the icons they use have been updated. diff --git a/Dockerfile b/Dockerfile index 6cd532e79177..9f5ada103e26 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,11 +1,11 @@ -FROM node:18-alpine +FROM node:20-alpine RUN apk add --no-cache \ git WORKDIR /simple-icons -COPY package*.json /simple-icons/ -RUN npm install +COPY package.json /simple-icons/ +RUN npm install --ignore-scripts COPY . . diff --git a/LICENSE.md b/LICENSE.md index da5b887934e1..f0f4b0328708 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -27,4 +27,4 @@ For these and/or other purposes and motivations, and without any expectation of 3. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person’s Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work. 4. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work. -For more information, please see http://creativecommons.org/publicdomain/zero/1.0/. +For more information, please see https://creativecommons.org/publicdomain/zero/1.0/. diff --git a/README.md b/README.md index f098795b6412..c7e4efb19ea0 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,12 @@ <p align="center"> -<img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/simpleicons.svg#gh-light-mode-only" alt="Simple Icons" width=70><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/simpleicons-white.svg#gh-dark-mode-only" alt="Simple Icons" width=70> +<img src="https://cdn.simpleicons.org/simpleicons/000/fff" alt="Simple Icons" width=70> <h3 align="center">Simple Icons</h3> <p align="center"> -Over 2200 Free SVG icons for popular brands. See them all on one page at <a href="https://simpleicons.org">SimpleIcons.org</a>. Contributions, corrections & requests can be made on GitHub.</p> +Over 2600 Free SVG icons for popular brands. See them all on one page at <a href="https://simpleicons.org">SimpleIcons.org</a>. Contributions, corrections & requests can be made on GitHub.</p> </p> <p align="center"> -<a href="https://github.com/simple-icons/simple-icons/actions?query=workflow%3AVerify+branch%3Adevelop"><img src="https://img.shields.io/github/workflow/status/simple-icons/simple-icons/Verify/develop?logo=github&label=tests" alt="Build status"/></a> +<a href="https://github.com/simple-icons/simple-icons/actions?query=workflow%3AVerify+branch%3Adevelop"><img src="https://img.shields.io/github/actions/workflow/status/simple-icons/simple-icons/verify.yml?branch=develop&logo=github&label=tests" alt="Build status"/></a> <a href="https://www.npmjs.com/package/simple-icons"><img src="https://img.shields.io/npm/v/simple-icons.svg?logo=npm" alt="NPM version"/></a> <a href="https://packagist.org/packages/simple-icons/simple-icons"><img src="https://img.shields.io/packagist/v/simple-icons/simple-icons?logo=packagist&logoColor=white" alt="Build status"/></a> </p> @@ -17,68 +17,79 @@ Over 2200 Free SVG icons for popular brands. See them all on one page at <a href ## Usage -> :information_source: We ask that all users read our [legal disclaimer](./DISCLAIMER.md) before using icons from Simple Icons. +> **Note**\ +> We ask that all users read our [legal disclaimer](https://github.com/simple-icons/simple-icons/blob/develop/DISCLAIMER.md) before using icons from Simple Icons. ### General Usage -Icons can be downloaded as SVGs directly from [our website](https://simpleicons.org/) - simply click the icon you want, and the download should start automatically. +Icons can be downloaded as SVGs directly from [our website](https://simpleicons.org/) - simply click the download button of the icon you want, and the download will start automatically. ### CDN Usage -Icons can be served from a CDN such as [JSDelivr](https://www.jsdelivr.com/package/npm/simple-icons) or [Unpkg](https://unpkg.com/browse/simple-icons/). Simply use the `simple-icons` npm package and specify a version in the URL like the following: +Icons can be served from a CDN such as [jsDelivr](https://www.jsdelivr.com/package/npm/simple-icons) or [Unpkg](https://unpkg.com/browse/simple-icons/). Simply use the `simple-icons` npm package and specify a version in the URL like the following: ```html -<img height="32" width="32" src="https://cdn.jsdelivr.net/npm/simple-icons@v6/icons/[ICON SLUG].svg" /> -<img height="32" width="32" src="https://unpkg.com/simple-icons@v6/icons/[ICON SLUG].svg" /> +<img height="32" width="32" src="https://cdn.jsdelivr.net/npm/simple-icons@v9/icons/[ICON SLUG].svg" /> +<img height="32" width="32" src="https://unpkg.com/simple-icons@v9/icons/[ICON SLUG].svg" /> ``` Where `[ICON SLUG]` is replaced by the [slug] of the icon you want to use, for example: ```html -<img height="32" width="32" src="https://cdn.jsdelivr.net/npm/simple-icons@v6/icons/simpleicons.svg" /> -<img height="32" width="32" src="https://unpkg.com/simple-icons@v6/icons/simpleicons.svg" /> +<img height="32" width="32" src="https://cdn.jsdelivr.net/npm/simple-icons@v9/icons/simpleicons.svg" /> +<img height="32" width="32" src="https://unpkg.com/simple-icons@v9/icons/simpleicons.svg" /> ``` These examples use the latest major version. This means you won't receive any updates following the next major release. You can use `@latest` instead to receive updates indefinitely. However, this will result in a `404` error if the icon is removed. -### Node Usage <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/nodedotjs.svg#gh-light-mode-only" alt="Node" align=left width=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/nodedotjs-white.svg#gh-dark-mode-only" alt="Node" align=left width=24> +#### CDN with colors -The icons are also available through our npm package. To install, simply run: +We also provide a CDN service which allows you to use colors. -```shell -npm install simple-icons +```html +<img height="32" width="32" src="https://cdn.simpleicons.org/[ICON SLUG]" /> +<img height="32" width="32" src="https://cdn.simpleicons.org/[ICON SLUG]/[COLOR]" /> +<img height="32" width="32" src="https://cdn.simpleicons.org/[ICON SLUG]/[COLOR]/[DARK_MODE_COLOR]" /> ``` -The API can then be used as follows, where `[ICON SLUG]` is replaced by a [slug]: +Where `[COLOR]` is optional, and can be replaced by the [hex colors](https://developer.mozilla.org/en-US/docs/Web/CSS/hex-color) or [CSS keywords](https://www.w3.org/wiki/CSS/Properties/color/keywords) of the icon you want to you use. The color is defaulted to the HEX color of the icon shown in [simpleicons.org website](https://simpleicons.org). `[DARK_MODE_COLOR]` is used for dark mode. The [CSS prefers-color-scheme](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme) will be used when a value is specified. For example: -```javascript -const simpleIcons = require('simple-icons'); +```html +<img height="32" width="32" src="https://cdn.simpleicons.org/simpleicons" /> +<img height="32" width="32" src="https://cdn.simpleicons.org/simpleicons/gray" /> +<img height="32" width="32" src="https://cdn.simpleicons.org/simpleicons/hotpink" /> +<img height="32" width="32" src="https://cdn.simpleicons.org/simpleicons/0cf" /> +<img height="32" width="32" src="https://cdn.simpleicons.org/simpleicons/0cf9" /> +<img height="32" width="32" src="https://cdn.simpleicons.org/simpleicons/00ccff" /> +<img height="32" width="32" src="https://cdn.simpleicons.org/simpleicons/00ccff99" /> +<img height="32" width="32" src="https://cdn.simpleicons.org/simpleicons/orange/pink" /> +<img height="32" width="32" src="https://cdn.simpleicons.org/simpleicons/_/eee" /> +``` -// Get a specific icon by its slug as: -// simpleIcons.Get('[ICON SLUG]'); +### Node Usage <img src="https://cdn.simpleicons.org/nodedotjs/000/fff" alt="Node" align=left width=24> -// For example: -const icon = simpleIcons.Get('simpleicons'); +The icons are also available through our npm package. To install, simply run: +```shell +npm install simple-icons ``` -Alternatively, you can also import all icons from a single file, where `[ICON SLUG]` is replaced by a capitalized [slug]. We highly recommend using a bundler that can tree shake such as [webpack](https://webpack.js.org/) to remove the unused icon code: +All icons are imported from a single file, where `[ICON SLUG]` is replaced by a capitalized [slug]. We highly recommend using a bundler that can tree shake such as [webpack](https://webpack.js.org/) to remove the unused icon code: ```javascript // Import a specific icon by its slug as: -// import { si[ICON SLUG] } from 'simple-icons/icons' +// import { si[ICON SLUG] } from 'simple-icons' // For example: // use import/esm to allow tree shaking -import { siSimpleicons } from 'simple-icons/icons' +import { siSimpleicons } from 'simple-icons'; +// or with require/cjs +const { siSimpleicons } = require('simple-icons'); ``` -> :warning: The old way of importing with `require('simple-icons/icons/[ICON SLUG]')` is deprecated and -will be removed in v7.0.0. - -Either method will return an icon object: +It will return an icon object: ```javascript -console.log(icon); +console.log(siSimpleicons); /* { @@ -100,23 +111,21 @@ NOTE: the `license` entry will be `undefined` if we do not yet have license data */ ``` -Lastly, the `simpleIcons` object is also enumerable. -This is useful if you want to do a computation on every icon: +If you need to iterate over all icons, use: ```javascript -const simpleIcons = require('simple-icons'); - -for (const iconSlug in simpleIcons) { - const icon = simpleIcons.Get(iconSlug); - // do stuff -} +import * as icons from 'simple-icons'; ``` -#### TypeScript Usage <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/typescript.svg#gh-light-mode-only" alt="Typescript" align=left width=19 height=19><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/typescript-white.svg#gh-dark-mode-only" alt="Typescript" align=left width=19 height=19> +#### TypeScript Usage <img src="https://cdn.simpleicons.org/typescript/000/fff" alt="Typescript" align=left width=19 height=19> Type definitions are bundled with the package. -### PHP Usage <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/php.svg#gh-light-mode-only" alt="Php" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/php-white.svg#gh-dark-mode-only" alt="Php" align=left width=24 height=24> +```typescript +import type { SimpleIcon } from 'simple-icons'; +``` + +### PHP Usage <img src="https://cdn.simpleicons.org/php/000/fff" alt="Php" align=left width=24 height=24> The icons are also available through our Packagist package. To install, simply run: @@ -142,31 +151,37 @@ echo file_get_contents('path/to/package/icons/simpleicons.svg'); | Extension | Author | | :-- | :-- | -| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/angular.svg#gh-light-mode-only" alt="Angular" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/angular-white.svg#gh-dark-mode-only" alt="Angular" align=left width=24 height=24> [Angular Module](https://github.com/avmaisak/ngx-simple-icons) | [@avmaisak](https://github.com/avmaisak) | -| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/blender.svg#gh-light-mode-only" alt="Blender" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/blender-white.svg#gh-dark-mode-only" alt="Blender" align=left width=24 height=24> [Blender add-on](https://github.com/mondeja/simple-icons-blender) | [@mondeja](https://github.com/mondeja) | -| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/diagramsdotnet.svg#gh-light-mode-only" alt="Drawio" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/diagramsdotnet-white.svg#gh-dark-mode-only" alt="Drawio" align=left width=24 height=24> [Drawio library](https://github.com/mondeja/simple-icons-drawio) | [@mondeja](https://github.com/mondeja) | -| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/drupal.svg#gh-light-mode-only" alt="Drupal" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/drupal-white.svg#gh-dark-mode-only" alt="Drupal" align=left width=24 height=24> [Drupal module](https://www.drupal.org/project/simple_icons) | [Phil Wolstenholme](https://www.drupal.org/u/phil-wolstenholme) | -| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/flutter.svg#gh-light-mode-only" alt="Flutter" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/flutter-white.svg#gh-dark-mode-only" alt="Flutter" align=left width=24 height=24> [Flutter package](https://pub.dev/packages/simple_icons) | [@jlnrrg](https://jlnrrg.github.io/) | -| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/hexo.svg#gh-light-mode-only" alt="Hexo" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/hexo-white.svg#gh-dark-mode-only" alt="Hexo" align=left width=24 height=24> [Hexo plugin](https://github.com/nidbCN/hexo-simpleIcons) | [@nidbCN](https://github.com/nidbCN/) | -| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/homeassistant.svg#gh-light-mode-only" alt="Home Assistant" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/homeassistant-white.svg#gh-dark-mode-only" alt="Home Assistant" align=left width=24 height=24> [Home Assistant plugin](https://github.com/vigonotion/hass-simpleicons) | [@vigonotion](https://github.com/vigonotion/) | -| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/hugo.svg#gh-light-mode-only" alt="Hugo" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/hugo-white.svg#gh-dark-mode-only" alt="Hugo" align=left width=24 height=24> [Hugo module](https://github.com/foo-dogsquared/hugo-mod-simple-icons) | [@foo-dogsquared](https://github.com/foo-dogsquared) | -| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/java.svg#gh-light-mode-only" alt="Java" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/java-white.svg#gh-dark-mode-only" alt="Java" align=left width=24 height=24> [Java library](https://github.com/silentsoft/simpleicons4j) | [@silentsoft](https://github.com/silentsoft) | -| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/jetpackcompose.svg#gh-light-mode-only" alt="Jetpack Compose" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/jetpackcompose-white.svg#gh-dark-mode-only" alt="Jetpack Compose" align=left width=24 height=24> [Jetpack Compose library](https://github.com/DevSrSouza/compose-icons) | [@devsrsouza](https://github.com/devsrsouza/) | -| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/kirby.svg#gh-light-mode-only" alt="Kirby" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/kirby-white.svg#gh-dark-mode-only" alt="Kirby" align=left width=24 height=24> [Kirby plugin](https://github.com/runxel/kirby3-simpleicons) | [@runxel](https://github.com/runxel) | -| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/laravel.svg#gh-light-mode-only" alt="Laravel" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/laravel-white.svg#gh-dark-mode-only" alt="Laravel" align=left width=24 height=24> [Laravel Package](https://github.com/ublabs/blade-simple-icons) | [@adrian-ub](https://github.com/adrian-ub) | -| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/python.svg#gh-light-mode-only" alt="Python" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/python-white.svg#gh-dark-mode-only" alt="Python" align=left width=24 height=24> [Python package](https://github.com/sachinraja/simple-icons-py) | [@sachinraja](https://github.com/sachinraja) | -| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/react.svg#gh-light-mode-only" alt="React" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/react-white.svg#gh-dark-mode-only" alt="React" align=left width=24 height=24> [React package](https://github.com/icons-pack/react-simple-icons) | [@wootsbot](https://github.com/wootsbot) | -| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/svelte.svg#gh-light-mode-only" alt="Svelte" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/svelte-white.svg#gh-dark-mode-only" alt="Svelte" align=left width=24 height=24> [Svelte package](https://github.com/icons-pack/svelte-simple-icons) | [@wootsbot](https://github.com/wootsbot) | -| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/vuedotjs.svg#gh-light-mode-only" alt="Vue" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/vuedotjs-white.svg#gh-dark-mode-only" alt="Vue" align=left width=24 height=24> [Vue package](https://github.com/mainvest/vue-simple-icons) | [@noahlitvin](https://github.com/noahlitvin) | -| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/wordpress.svg#gh-light-mode-only" alt="Wordpress" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/wordpress-white.svg#gh-dark-mode-only" alt="Wordpress" align=left width=24 height=24> [WordPress plugin](https://wordpress.org/plugins/simple-icons/) | [@tjtaylo](https://github.com/tjtaylo) | - - -[slug]: ./slugs.md +| [Angular module](https://github.com/avmaisak/ngx-simple-icons) <img src="https://cdn.simpleicons.org/angular/000/fff" alt="Angular" align=left width=24 height=24> | [@avmaisak](https://github.com/avmaisak) | +| [Blazor Nuget package](https://github.com/TimeWarpEngineering/timewarp-simple-icons) <img src="https://cdn.simpleicons.org/blazor/000/fff" alt="Blazor" align=left width=24 height=24> | [@TimeWarpEngineering](https://github.com/TimeWarpEngineering) | +| [Blender add-on](https://github.com/mondeja/simple-icons-blender) <img src="https://cdn.simpleicons.org/blender/000/fff" alt="Blender" align=left width=24 height=24> | [@mondeja](https://github.com/mondeja) | +| [Drawio library](https://github.com/mondeja/simple-icons-drawio) <img src="https://cdn.simpleicons.org/diagramsdotnet/000/fff" alt="Drawio" align=left width=24 height=24> | [@mondeja](https://github.com/mondeja) | +| [Drupal module](https://www.drupal.org/project/simple_icons) <img src="https://cdn.simpleicons.org/drupal/000/fff" alt="Drupal" align=left width=24 height=24> | [Phil Wolstenholme](https://www.drupal.org/u/phil-wolstenholme) | +| [Figma plugin](https://www.figma.com/community/plugin/1149614463603005908/Simple-Icons) <img src="https://cdn.simpleicons.org/figma/000/fff" alt="Figma" align=left width=24 height=24> | [@LitoMore](https://github.com/LitoMore) | +| [Flutter package](https://pub.dev/packages/simple_icons) <img src="https://cdn.simpleicons.org/flutter/000/fff" alt="Flutter" align=left width=24 height=24> | [@jlnrrg](https://github.com/jlnrrg) | +| [Framer component](https://github.com/LitoMore/simple-icons-framer) <img src="https://cdn.simpleicons.org/framer/000/fff" alt="Framer" align=left width=24 height=24> | [@LitoMore](https://github.com/LitoMore) | +| [Hexo plugin](https://github.com/nidbCN/hexo-simpleIcons) <img src="https://cdn.simpleicons.org/hexo/000/fff" alt="Hexo" align=left width=24 height=24> | [@nidbCN](https://github.com/nidbCN/) | +| [Home Assistant plugin](https://github.com/vigonotion/hass-simpleicons) <img src="https://cdn.simpleicons.org/homeassistant/000/fff" alt="Home Assistant" align=left width=24 height=24> | [@vigonotion](https://github.com/vigonotion/) | +| [Hugo module](https://github.com/foo-dogsquared/hugo-mod-simple-icons) <img src="https://cdn.simpleicons.org/hugo/000/fff" alt="Hugo" align=left width=24 height=24> | [@foo-dogsquared](https://github.com/foo-dogsquared) | +| [Java library](https://github.com/silentsoft/simpleicons4j) <img src="https://cdn.simpleicons.org/openjdk/000/fff" alt="OpenJDK" align=left width=24 height=24> | [@silentsoft](https://github.com/silentsoft) | +| [Jetpack Compose library](https://github.com/DevSrSouza/compose-icons) <img src="https://cdn.simpleicons.org/jetpackcompose/000/fff" alt="Jetpack Compose" align=left width=24 height=24> | [@devsrsouza](https://github.com/devsrsouza/) | +| [Kirby plugin](https://github.com/runxel/kirby3-simpleicons) <img src="https://cdn.simpleicons.org/kirby/000/fff" alt="Kirby" align=left width=24 height=24> | [@runxel](https://github.com/runxel) | +| [LaTeX package](https://github.com/ineshbose/simple-icons-latex) <img src="https://cdn.simpleicons.org/latex/000/fff" alt="LaTeX" align=left width=24 height=24> | [@ineshbose](https://github.com/ineshbose) | +| [Laravel package](https://github.com/ublabs/blade-simple-icons) <img src="https://cdn.simpleicons.org/laravel/000/fff" alt="Laravel" align=left width=24 height=24> | [@adrian-ub](https://github.com/adrian-ub) | +| [Leptos crate](https://github.com/Carlosted/leptos-icons) <img src="https://cdn.simpleicons.org/leptos/000/fff" alt="Leptos" align=left width=24 height=24> | [@Carlosted](https://github.com/Carlosted) | +| [Python package](https://github.com/sachinraja/simple-icons-py) <img src="https://cdn.simpleicons.org/python/000/fff" alt="Python" align=left width=24 height=24> | [@sachinraja](https://github.com/sachinraja) | +| [React package](https://github.com/icons-pack/react-simple-icons) <img src="https://cdn.simpleicons.org/react/000/fff" alt="React" align=left width=24 height=24> | [@wootsbot](https://github.com/wootsbot) | +| [Ruby gem](https://rubygems.org/gems/simple-icons-rails) <img src="https://cdn.simpleicons.org/rubygems/000/fff" alt="Ruby" align=left width=24 height=24> | [@thepew](https://github.com/the-pew-inc) | +| [Solid package](https://github.com/x64Bits/solid-icons) <img src="https://cdn.simpleicons.org/solid/000/fff" alt="Solid" align=left width=24 height=24> | [@x64Bits](https://github.com/x64Bits) | +| [Stream Deck icon pack](https://github.com/mackenly/simple-icons-stream-deck) <img src="https://cdn.simpleicons.org/elgato/000/fff" alt="Stream Deck" align=left width=24 height=24> | [@mackenly](https://github.com/mackenly) | +| [Svelte package](https://github.com/icons-pack/svelte-simple-icons) <img src="https://cdn.simpleicons.org/svelte/000/fff" alt="Svelte" align=left width=24 height=24> | [@wootsbot](https://github.com/wootsbot) | +| [Vue 3 package](https://github.com/wyatt-herkamp/vue3-simple-icons) <img src="https://cdn.simpleicons.org/vuedotjs/000/fff" alt="Vue" align=left width=24 height=24> | [@wyatt-herkamp](https://github.com/wyatt-herkamp) | +| [Vue package](https://github.com/mainvest/vue-simple-icons) <img src="https://cdn.simpleicons.org/vuedotjs/000/fff" alt="Vue" align=left width=24 height=24> | [@noahlitvin](https://github.com/noahlitvin) | +| [WordPress plugin](https://wordpress.org/plugins/simple-icons/) <img src="https://cdn.simpleicons.org/wordpress/000/fff" alt="Wordpress" align=left width=24 height=24> | [@tjtaylo](https://github.com/tjtaylo) | ## Contribute [![Good first issues open](https://img.shields.io/github/issues/simple-icons/simple-icons/good%20first%20issue?label=good%20first%20issues&logo=git&logoColor=white)](https://github.com/simple-icons/simple-icons/labels/good%20first%20issue) -Information describing how to contribute can be found here: +Information describing how to contribute can be found in the file [CONTRIBUTING.md](https://github.com/simple-icons/simple-icons/blob/develop/CONTRIBUTING.md) -https://github.com/simple-icons/simple-icons/blob/develop/CONTRIBUTING.md +[slug]: https://github.com/simple-icons/simple-icons/blob/master/slugs.md diff --git a/_data/simple-icons.json b/_data/simple-icons.json index 37bbd76319bc..32fdf214fdeb 100644 --- a/_data/simple-icons.json +++ b/_data/simple-icons.json @@ -1,10 +1,26 @@ { "icons": [ + { + "title": ".ENV", + "hex": "ECD53F", + "source": "https://github.com/motdotla/dotenv/tree/40e75440337d1de2345dc8326d6108331f583fd8", + "aliases": { + "aka": [ + "Dotenv" + ] + } + }, { "title": ".NET", "hex": "512BD4", "source": "https://github.com/dotnet/brand/tree/defe0408e765b48223a434a0d9a94213edc062f8" }, + { + "title": "(ISC)²", + "slug": "iscsquared", + "hex": "007054", + "source": "https://www.isc2.org" + }, { "title": "/e/", "hex": "000000", @@ -13,32 +29,32 @@ { "title": "1001Tracklists", "hex": "40AEF0", - "source": "https://www.1001tracklists.com/" + "source": "https://www.1001tracklists.com" }, { "title": "1Password", - "hex": "0094F5", - "source": "https://1password.com/press/" + "hex": "1A285F", + "source": "https://1password.com" }, { "title": "3M", "hex": "FF0000", - "source": "https://www.3m.com/" + "source": "https://www.3m.com" }, { "title": "42", "hex": "000000", - "source": "https://www.42.fr/" + "source": "https://www.42.fr" }, { "title": "4chan", "hex": "006600", - "source": "https://www.4chan.org/" + "source": "https://www.4chan.org" }, { "title": "4D", "hex": "004088", - "source": "https://www.4d.com/" + "source": "https://www.4d.com" }, { "title": "500px", @@ -63,7 +79,7 @@ { "title": "Abbvie", "hex": "071D49", - "source": "https://www.abbvie.com/" + "source": "https://www.abbvie.com" }, { "title": "Ableton Live", @@ -83,17 +99,17 @@ { "title": "Academia", "hex": "41454A", - "source": "https://www.academia.edu/" + "source": "https://www.academia.edu" }, { "title": "Accenture", "hex": "A100FF", - "source": "https://www.accenture.com/" + "source": "https://www.accenture.com" }, { "title": "Acclaim", "hex": "26689A", - "source": "https://www.youracclaim.com/" + "source": "https://www.youracclaim.com" }, { "title": "Accusoft", @@ -108,37 +124,43 @@ { "title": "ACM", "hex": "0085CA", - "source": "http://identitystandards.acm.org/" + "source": "https://identitystandards.acm.org" }, { "title": "ActiGraph", "hex": "0B2C4A", - "source": "http://www.actigraphcorp.com/" + "source": "https://www.actigraphcorp.com" }, { "title": "Activision", "hex": "000000", - "source": "https://www.activision.com/" + "source": "https://www.activision.com" + }, + { + "title": "Acura", + "hex": "000000", + "source": "https://www.acura.com", + "guidelines": "https://www.honda.com/privacy/terms-and-conditions" }, { "title": "Adafruit", "hex": "000000", - "source": "https://www.adafruit.com/" + "source": "https://www.adafruit.com" }, { "title": "AdBlock", "hex": "F40D12", - "source": "https://getadblock.com/" + "source": "https://getadblock.com" }, { "title": "Adblock Plus", "hex": "C70D2C", - "source": "https://adblockplus.org/" + "source": "https://adblockplus.org" }, { "title": "AddThis", "hex": "FF6550", - "source": "http://www.addthis.com/" + "source": "https://www.addthis.com" }, { "title": "AdGuard", @@ -150,15 +172,20 @@ "hex": "000000", "source": "https://www.adidas.com" }, + { + "title": "Adminer", + "hex": "34567C", + "source": "https://www.adminer.org" + }, { "title": "Adobe", "hex": "FF0000", - "source": "https://www.adobe.com/" + "source": "https://www.adobe.com" }, { "title": "Adobe Acrobat Reader", "hex": "EC1C24", - "source": "https://acrobat.adobe.com/" + "source": "https://acrobat.adobe.com" }, { "title": "Adobe After Effects", @@ -218,12 +245,24 @@ { "title": "Adobe XD", "hex": "FF61F6", - "source": "https://www.adobe.com/products/xd.html" + "source": "https://commons.wikimedia.org/wiki/File:Adobe_XD_CC_icon.svg" }, { "title": "AdonisJS", - "hex": "220052", - "source": "https://adonisjs.com/" + "hex": "5A45FF", + "source": "https://adonisjs.com", + "guidelines": "https://www.notion.so/adonisjs/Welcome-to-the-AdonisJS-Brand-Assets-Guidelines-a042a6d0be7640c6bc78eb32e1bbaaa1" + }, + { + "title": "ADP", + "hex": "D0271D", + "source": "https://www.adp.com", + "guidelines": "https://www.adp.com/legal.aspx" + }, + { + "title": "Adroll", + "hex": "0DBDFF", + "source": "https://www.adroll.com" }, { "title": "Adyen", @@ -234,7 +273,7 @@ { "title": "Aer Lingus", "hex": "006272", - "source": "https://www.aerlingus.com/" + "source": "https://www.aerlingus.com" }, { "title": "Aeroflot", @@ -244,12 +283,12 @@ { "title": "Aeroméxico", "hex": "0B2343", - "source": "https://www.aeromexico.com/" + "source": "https://www.aeromexico.com" }, { "title": "Aerospike", "hex": "C41E25", - "source": "http://pages.aerospike.com/rs/aerospike/images/Acid_Whitepaper.pdf" + "source": "https://pages.aerospike.com/rs/aerospike/images/Acid_Whitepaper.pdf" }, { "title": "AEW", @@ -261,10 +300,15 @@ "hex": "000000", "source": "https://commons.wikimedia.org/wiki/File:AEW_Logo_(simplified).svg" }, + { + "title": "AFFiNE", + "hex": "1E96EB", + "source": "https://affine.pro" + }, { "title": "Affinity", "hex": "222324", - "source": "https://affinity.serif.com/" + "source": "https://affinity.serif.com" }, { "title": "Affinity Designer", @@ -281,6 +325,11 @@ "hex": "C9284D", "source": "https://affinity.serif.com/en-gb/publisher/" }, + { + "title": "Agora", + "hex": "099DFD", + "source": "https://github.com/AgoraIO/Docs/blob/c77b7131e351dbbb99158228971dc4e53de336b1/static/img/agora.svg" + }, { "title": "AI Dungeon", "hex": "000000", @@ -289,7 +338,7 @@ { "title": "AIB", "hex": "7F2B7B", - "source": "https://aib.ie/", + "source": "https://aib.ie", "aliases": { "aka": [ "Allied Irish Banks" @@ -309,17 +358,22 @@ { "title": "Air Canada", "hex": "F01428", - "source": "https://www.aircanada.com/" + "source": "https://www.aircanada.com" }, { "title": "Air China", "hex": "E30E17", - "source": "http://www.airchina.com.cn/en/investor_relations/" + "source": "https://www.airchina.com.cn/en/investor_relations/" }, { "title": "Air France", "hex": "002157", - "source": "https://www.airfrance.fr/" + "source": "https://www.airfrance.fr" + }, + { + "title": "Air India", + "hex": "D9000D", + "source": "https://www.airindia.com" }, { "title": "AirAsia", @@ -331,15 +385,25 @@ "hex": "FF5A5F", "source": "https://www.airbnb.com" }, + { + "title": "Airbrake.io", + "hex": "FFA500", + "source": "https://github.com/airbrake/slate/blob/c116f2968bcf4dfda126511de0a2d0f0dc8b6a8e/source/images/logo.svg" + }, { "title": "Airbus", "hex": "00205B", "source": "https://brand.airbus.com/brand-elements/logo.html" }, + { + "title": "Airbyte", + "hex": "615EFF", + "source": "https://airbyte.com" + }, { "title": "Aircall", "hex": "00B388", - "source": "https://aircall.io/" + "source": "https://aircall.io" }, { "title": "AirPlay Audio", @@ -361,6 +425,11 @@ "hex": "23C8D2", "source": "https://github.com/ajv-validator/ajv/blob/95b15b683dfb60f63c5129b0426629b968d53af8/docs/.vuepress/public/img/ajv.svg" }, + { + "title": "Akamai", + "hex": "0096D6", + "source": "https://www.akamai.com" + }, { "title": "Alacritty", "hex": "F46D01", @@ -369,7 +438,12 @@ { "title": "Albert Heijn", "hex": "04ACE6", - "source": "https://www.ah.nl/" + "source": "https://www.ah.nl" + }, + { + "title": "Alchemy", + "hex": "0C0C0E", + "source": "https://www.alchemy.com" }, { "title": "Aldi Nord", @@ -384,17 +458,22 @@ { "title": "Alfa Romeo", "hex": "981E32", - "source": "http://www.fcaci.com/x/Alfa" + "source": "https://www.fcaci.com/x/Alfa" }, { "title": "Alfred", "hex": "5C1F87", - "source": "https://www.alfredapp.com/" + "source": "https://www.alfredapp.com" }, { "title": "Algolia", - "hex": "5468FF", - "source": "https://www.algolia.com/press/?section=brand-guidelines" + "hex": "003DFF", + "source": "https://algolia.frontify.com/d/1AZwVNcFZiu7/style-guide" + }, + { + "title": "Algorand", + "hex": "000000", + "source": "https://www.algorand.com/about/media-kit" }, { "title": "Alibaba Cloud", @@ -413,101 +492,244 @@ }, { "title": "Alipay", - "hex": "00A1E9", - "source": "https://gw.alipayobjects.com/os/rmsportal/trUJZfSrlnRCcFgfZGjD.ai" - }, - { - "title": "Alitalia", - "hex": "006643", - "source": "https://www.alitalia.com/it_it/fly-alitalia/in-flight/ulisse-magazine.html" + "hex": "1890FF", + "source": "https://global.alipay.com" }, { "title": "Allegro", "hex": "FF5A00", - "source": "https://allegro.pl/" + "source": "https://allegro.pl" }, { "title": "AlliedModders", "hex": "1578D3", - "source": "https://forums.alliedmods.net/" + "source": "https://forums.alliedmods.net" }, { "title": "AlloCiné", "hex": "FECC00", - "source": "http://www.allocine.fr/" + "source": "https://www.allocine.fr" }, { "title": "AllTrails", "hex": "428813", - "source": "https://www.alltrails.com/" + "source": "https://www.alltrails.com" }, { "title": "Alpine Linux", "hex": "0D597F", - "source": "https://alpinelinux.org/" + "source": "https://alpinelinux.org" }, { "title": "Alpine.js", "hex": "8BC0D0", "source": "https://github.com/simple-icons/simple-icons/issues/5583#issuecomment-832770167" }, + { + "title": "Alteryx", + "hex": "0078C0", + "source": "https://www.alteryx.com" + }, { "title": "Altium Designer", "hex": "A5915F", "source": "https://www.altium.com/altium-designer/" }, + { + "title": "Alwaysdata", + "hex": "E9568E", + "source": "https://www.alwaysdata.com" + }, { "title": "Amazon", "hex": "FF9900", - "source": "https://worldvectorlogo.com/logo/amazon-icon" + "source": "https://worldvectorlogo.com/logo/amazon-icon", + "guidelines": "https://worldvectorlogo.com/terms-of-use" }, { "title": "Amazon Alexa", "hex": "00CAFF", "source": "https://developer.amazon.com/docs/alexa-voice-service/logo-and-brand.html" }, + { + "title": "Amazon API Gateway", + "hex": "FF4F8B", + "source": "https://aws.amazon.com/architecture/icons/", + "guidelines": "https://aws.amazon.com/architecture/icons/", + "aliases": { + "aka": [ + "AWS API Gateway" + ] + } + }, { "title": "Amazon AWS", "hex": "232F3E", - "source": "https://upload.wikimedia.org/wikipedia/commons/9/93/Amazon_Web_Services_Logo.svg" + "source": "https://upload.wikimedia.org/wikipedia/commons/9/93/Amazon_Web_Services_Logo.svg", + "aliases": { + "aka": [ + "AWS" + ] + } + }, + { + "title": "Amazon CloudWatch", + "hex": "FF4F8B", + "source": "https://aws.amazon.com/architecture/icons/", + "guidelines": "https://aws.amazon.com/architecture/icons/", + "aliases": { + "aka": [ + "AWS CloudWatch" + ] + } }, { "title": "Amazon DynamoDB", "hex": "4053D6", "source": "https://aws.amazon.com/architecture/icons/", - "guidelines": "https://aws.amazon.com/architecture/icons/" + "guidelines": "https://aws.amazon.com/architecture/icons/", + "aliases": { + "aka": [ + "AWS DynamoDB" + ] + } + }, + { + "title": "Amazon EC2", + "hex": "FF9900", + "source": "https://aws.amazon.com/architecture/icons/", + "guidelines": "https://aws.amazon.com/architecture/icons/", + "aliases": { + "aka": [ + "Amazon Elastic Compute Cloud", + "AWS EC2", + "AWS Elastic Compute Cloud" + ] + } + }, + { + "title": "Amazon ECS", + "hex": "FF9900", + "source": "https://aws.amazon.com/architecture/icons/", + "guidelines": "https://aws.amazon.com/architecture/icons/", + "aliases": { + "aka": [ + "Amazon Elastic Container Service", + "AWS ECS", + "AWS Elastic Container Service" + ] + } + }, + { + "title": "Amazon EKS", + "hex": "FF9900", + "source": "https://aws.amazon.com/architecture/icons/", + "guidelines": "https://aws.amazon.com/architecture/icons/", + "aliases": { + "aka": [ + "Amazon Elastic Kubernetes Service", + "AWS EKS", + "AWS Elastic Kubernetes Service" + ] + } }, { "title": "Amazon Fire TV", "hex": "FC4C02", "source": "https://www.amazon.com/gp/help/customer/display.html?nodeId=201348270" }, + { + "title": "Amazon Games", + "hex": "FF9900", + "source": "https://www.amazongames.com" + }, + { + "title": "Amazon Identity Access Management", + "slug": "amazoniam", + "hex": "DD344C", + "source": "https://aws.amazon.com/architecture/icons", + "guidelines": "https://aws.amazon.com/architecture/icons" + }, { "title": "Amazon Lumberyard", "hex": "66459B", "source": "https://aws.amazon.com/architecture/icons/", "guidelines": "https://aws.amazon.com/architecture/icons/" }, + { + "title": "Amazon Luna", + "hex": "9146FF", + "source": "https://luna.amazon.com" + }, { "title": "Amazon Pay", "hex": "FF9900", - "source": "https://pay.amazon.com/" + "source": "https://pay.amazon.com" }, { "title": "Amazon Prime", "hex": "00A8E1", "source": "https://www.amazon.com/b?node=17277626011" }, + { + "title": "Amazon RDS", + "hex": "527FFF", + "source": "https://aws.amazon.com/architecture/icons/", + "guidelines": "https://aws.amazon.com/architecture/icons/", + "aliases": { + "aka": [ + "AWS RDS" + ] + } + }, + { + "title": "Amazon Redshift", + "hex": "8C4FFF", + "source": "https://aws.amazon.com/architecture/icons/", + "guidelines": "https://aws.amazon.com/architecture/icons/" + }, { "title": "Amazon S3", "hex": "569A31", "source": "https://aws.amazon.com/architecture/icons/", - "guidelines": "https://aws.amazon.com/architecture/icons/" + "guidelines": "https://aws.amazon.com/architecture/icons/", + "aliases": { + "aka": [ + "AWS S3" + ] + } + }, + { + "title": "Amazon SQS", + "hex": "FF4F8B", + "source": "https://aws.amazon.com/architecture/icons/", + "guidelines": "https://aws.amazon.com/architecture/icons/", + "aliases": { + "aka": [ + "Amazon Simple Queue Service", + "AWS SQS", + "AWS Simple Queue Service" + ] + } }, { "title": "AMD", "hex": "ED1C24", - "source": "https://www.amd.com/" + "source": "https://www.amd.com" + }, + { + "title": "Ameba", + "hex": "2D8C3C", + "source": "https://ameblo.jp", + "aliases": { + "aka": [ + "Ameba Blog", + "Ameblo" + ], + "loc": { + "ja-JP": "アメブロ" + } + } }, { "title": "American Airlines", @@ -527,7 +749,7 @@ { "title": "AMP", "hex": "005AF0", - "source": "https://amp.dev/" + "source": "https://amp.dev" }, { "title": "Amul", @@ -547,17 +769,18 @@ { "title": "Analogue", "hex": "1A1A1A", - "source": "https://www.analogue.co/" + "source": "https://www.analogue.co" }, { "title": "Anchor", "hex": "5000B9", - "source": "https://anchor.fm/" + "source": "https://anchor.fm" }, { "title": "Andela", - "hex": "3359DF", - "source": "https://andela.com/press/" + "hex": "173B3F", + "source": "https://andela.com/press/", + "guidelines": "https://andela.com/press/" }, { "title": "Android", @@ -592,18 +815,23 @@ { "title": "AngularJS", "hex": "E23237", - "source": "https://angularjs.org/" + "source": "https://angularjs.org" }, { "title": "AniList", "hex": "02A9FF", - "source": "https://anilist.co/img/icons/icon.svg" + "source": "https://anilist.co" }, { "title": "Ansible", "hex": "EE0000", "source": "https://www.ansible.com/logos" }, + { + "title": "Answer", + "hex": "0033FF", + "source": "https://answer.dev" + }, { "title": "Ansys", "hex": "FFB71B", @@ -617,23 +845,23 @@ { "title": "Anta", "hex": "D70010", - "source": "https://www.anta.com/" + "source": "https://www.anta.com" }, { "title": "Antena 3", "hex": "FF7328", - "source": "https://www.antena3.com/" + "source": "https://www.antena3.com" }, { "title": "AnyDesk", "hex": "EF443B", - "source": "https://anydesk.com/" + "source": "https://anydesk.com" }, { "title": "AOL", "hex": "3399FF", - "source": "https://www.aol.com/", - "guidelines": "https://styleguide.aol.com/" + "source": "https://www.aol.com", + "guidelines": "https://styleguide.aol.com" }, { "title": "Apache", @@ -658,7 +886,7 @@ { "title": "Apache CloudStack", "hex": "2AA5DC", - "source": "http://cloudstack.apache.org/trademark-guidelines.html" + "source": "https://cloudstack.apache.org/trademark-guidelines.html" }, { "title": "Apache Cordova", @@ -688,7 +916,7 @@ { "title": "Apache Groovy", "hex": "4298B8", - "source": "https://groovy-lang.org/" + "source": "https://groovy-lang.org" }, { "title": "Apache Hadoop", @@ -730,6 +958,11 @@ "hex": "0E85CD", "source": "https://apache.org/logos" }, + { + "title": "Apache Parquet", + "hex": "50ABF1", + "source": "https://apache.org/logos/" + }, { "title": "Apache Pulsar", "hex": "188FFF", @@ -750,6 +983,12 @@ "hex": "E25A1C", "source": "https://apache.org/logos/" }, + { + "title": "Apache Storm", + "hex": "225593", + "source": "https://apache.org/logos", + "guidelines": "https://www.apache.org/foundation/marks" + }, { "title": "Apache Tomcat", "hex": "F8DC75", @@ -760,6 +999,11 @@ "hex": "ED145B", "source": "https://www.aparat.com/logo" }, + { + "title": "Apifox", + "hex": "F44A53", + "source": "https://apifox.com" + }, { "title": "Apollo GraphQL", "hex": "311C87", @@ -770,11 +1014,6 @@ "hex": "6236FF", "source": "https://github.com/apostrophecms/apostrophe/blob/a7fcc6b13831302e27f79a6fcaaf58e3a40517df/logo.svg" }, - { - "title": "App Annie", - "hex": "0F2346", - "source": "https://www.appannie.com/en/about/press/" - }, { "title": "App Store", "hex": "0D96F6", @@ -801,6 +1040,11 @@ "hex": "FA243C", "source": "https://www.apple.com/itunes/marketing-on-music/identity-guidelines.html#apple-music-icon" }, + { + "title": "Apple News", + "hex": "FD415E", + "source": "https://www.apple.com/apple-news/" + }, { "title": "Apple Pay", "hex": "000000", @@ -819,7 +1063,12 @@ { "title": "AppSignal", "hex": "21375A", - "source": "https://appsignal.com/" + "source": "https://appsignal.com" + }, + { + "title": "Appsmith", + "hex": "2A2F3D", + "source": "https://www.appsmith.com" }, { "title": "AppVeyor", @@ -848,6 +1097,11 @@ "source": "https://www.arangodb.com", "guidelines": "https://www.arangodb.com/resources/logos" }, + { + "title": "ArcGIS", + "hex": "2C7AC3", + "source": "https://www.esri.com/en-us/arcgis/products/arcgis-pro/overview" + }, { "title": "Arch Linux", "hex": "1793D1", @@ -862,22 +1116,33 @@ { "title": "Archive of Our Own", "hex": "990000", - "source": "https://archiveofourown.org/" + "source": "https://archiveofourown.org" }, { "title": "Ardour", "hex": "C61C3E", - "source": "https://github.com/Ardour/ardour/tree/master/tools/misc_resources/" + "source": "https://github.com/Ardour/ardour/tree/d39f064756c88197adfe13fe695b86bd8cb3bb81/tools/misc_resources" }, { "title": "Arduino", - "hex": "00979D", - "source": "https://cdn.arduino.cc/projecthub/img/Arduino-logo.svg" + "hex": "00878F", + "source": "https://www.arduino.cc", + "guidelines": "https://www.arduino.cc/en/trademark" + }, + { + "title": "Argo", + "hex": "EF7B4D", + "source": "https://cncf-branding.netlify.app/projects/argo/" }, { "title": "Argos", "hex": "DA291C", - "source": "https://www.argos.co.uk/" + "source": "https://www.argos.co.uk" + }, + { + "title": "Ariakit", + "hex": "007ACC", + "source": "https://github.com/ariakit/ariakit/blob/a739913ab1c3919c4353f0e0e3573ec6eda99549/logo/icon.svg" }, { "title": "ARK Ecosystem", @@ -887,14 +1152,24 @@ { "title": "Arlo", "hex": "49B48A", - "source": "https://www.arlo.com/" + "source": "https://www.arlo.com" }, { "title": "Arm", "hex": "0091BD", - "source": "https://www.arm.com/", + "source": "https://www.arm.com", "guidelines": "https://www.arm.com/company/policies/trademarks/guidelines-corporate-logo" }, + { + "title": "Arm Keil", + "hex": "394049", + "source": "https://www.keil.arm.com" + }, + { + "title": "Ars Technica", + "hex": "FF4E00", + "source": "https://arstechnica.com" + }, { "title": "Artifact Hub", "hex": "417598", @@ -913,12 +1188,14 @@ { "title": "arXiv", "hex": "B31B1B", - "source": "https://static.arxiv.org/static/base/0.15.2/images/arxiv-logo-web.svg" + "source": "https://arxiv.org", + "guidelines": "https://arxiv.org/about/brand" }, { "title": "Asana", - "hex": "273347", - "source": "https://asana.com/styles" + "hex": "F06A6A", + "source": "https://asana.com/styles", + "guidelines": "https://asana.com/brand" }, { "title": "Asciidoctor", @@ -933,46 +1210,43 @@ { "title": "ASDA", "hex": "68A51C", - "source": "https://www.asda.com/" + "source": "https://www.asda.com" }, { "title": "Aseprite", "hex": "7D929E", - "source": "https://www.aseprite.org/" + "source": "https://www.aseprite.org" }, { "title": "Ask Ubuntu", "hex": "DC461D", - "source": "https://askubuntu.com/", + "source": "https://askubuntu.com", "guidelines": "https://stackoverflow.com/legal/trademark-guidance" }, { "title": "ASKfm", "hex": "DB3552", - "source": "https://ask.fm/" + "source": "https://ask.fm" }, { "title": "AssemblyScript", "hex": "007AAC", - "source": "https://www.assemblyscript.org/" + "source": "https://www.assemblyscript.org" }, { "title": "Aston Martin", "hex": "000000", - "source": "https://www.astonmartin.com/" + "source": "https://www.astonmartin.com" }, { "title": "Astro", - "hex": "FF5D01", - "source": "https://github.com/withastro/astro/blob/09144e8e88fbb79a75a2283aca8bf6eba6dc45f0/assets/brand/logo-white.svg", - "license": { - "type": "MIT" - } + "hex": "BC52EE", + "source": "https://astro.build/press" }, { "title": "ASUS", "hex": "000000", - "source": "https://www.asus.com/" + "source": "https://www.asus.com" }, { "title": "AT&T", @@ -982,7 +1256,7 @@ { "title": "Atari", "hex": "E4202E", - "source": "https://atarivcs.com/" + "source": "https://atarivcs.com" }, { "title": "Atlassian", @@ -997,7 +1271,7 @@ { "title": "Auchan", "hex": "D6180B", - "source": "https://www.auchan.fr/" + "source": "https://www.auchan.fr" }, { "title": "Audacity", @@ -1027,32 +1301,38 @@ { "title": "Audiomack", "hex": "FFA200", - "source": "https://styleguide.audiomack.com/" + "source": "https://styleguide.audiomack.com" }, { "title": "Aurelia", "hex": "ED2B88", - "source": "https://aurelia.io/" + "source": "https://aurelia.io" }, { "title": "Auth0", "hex": "EB5424", "source": "https://styleguide.auth0.com" }, + { + "title": "Authelia", + "hex": "113155", + "source": "https://github.com/authelia/authelia/blob/8316cd4eb7a6f0778c8f480c61ad76a88416fc3a/docs/static/images/branding/logo.svg" + }, { "title": "Authy", "hex": "EC1C24", - "source": "https://authy.com/" + "source": "https://authy.com" }, { "title": "Autodesk", - "hex": "0696D7", - "source": "https://www.autodesk.com" + "hex": "000000", + "source": "https://brand.autodesk.com", + "guidelines": "https://brand.autodesk.com/brand-system/logo/" }, { "title": "AutoHotkey", "hex": "334455", - "source": "https://www.autohotkey.com/" + "source": "https://www.autohotkey.com" }, { "title": "Automattic", @@ -1064,21 +1344,26 @@ "hex": "DD3735", "source": "https://github.com/postcss/autoprefixer/blob/1341747bc8142a147342f55eea5ed4286a3ca318/logo.svg" }, + { + "title": "avajs", + "hex": "4B4B77", + "source": "https://github.com/avajs/ava/blob/6f8e30c94626238a5b26deadac319089fa43d333/media/logo.svg" + }, { "title": "Avast", "hex": "FF7800", - "source": "https://www.avast.com/", + "source": "https://www.avast.com", "guidelines": "https://press.avast.com/media-materials" }, { "title": "Awesome Lists", "hex": "FC60A8", - "source": "https://github.com/sindresorhus/awesome/tree/master/media" + "source": "https://github.com/sindresorhus/awesome/tree/52b6dbacde01c2595f2133a5378cb8d2f89906fa/media" }, { "title": "awesomeWM", "hex": "535D6C", - "source": "https://awesomewm.org/" + "source": "https://awesomewm.org" }, { "title": "AWS Amplify", @@ -1086,12 +1371,23 @@ "source": "https://aws.amazon.com/architecture/icons/", "guidelines": "https://aws.amazon.com/architecture/icons/" }, + { + "title": "AWS Fargate", + "hex": "FF9900", + "source": "https://aws.amazon.com/architecture/icons/", + "guidelines": "https://aws.amazon.com/architecture/icons/" + }, { "title": "AWS Lambda", "hex": "FF9900", "source": "https://aws.amazon.com/architecture/icons/", "guidelines": "https://aws.amazon.com/architecture/icons/" }, + { + "title": "Axios", + "hex": "5A29E4", + "source": "https://github.com/axios/axios-docs/blob/ba35d67160f94419c1b0292831cd1a4b378adb42/assets/logo.svg" + }, { "title": "Azure Artifacts", "hex": "CB2E6D", @@ -1105,7 +1401,7 @@ { "title": "Azure DevOps", "hex": "0078D7", - "source": "http://azure.com/devops" + "source": "https://azure.microsoft.com/products/devops/" }, { "title": "Azure Functions", @@ -1120,13 +1416,24 @@ { "title": "B&R Automation", "hex": "FF8800", - "source": "https://www.br-automation.com/" + "source": "https://www.br-automation.com" }, { "title": "Babel", "hex": "F9DC3E", "source": "https://github.com/babel/website/blob/93330158b6ecca1ab88d3be8dbf661f5c2da6c76/website/static/img/babel-black.svg" }, + { + "title": "Babylon.js", + "hex": "BB464B", + "source": "https://github.com/BabylonJS/Brand-Toolkit/blob/8583d4d9bf252a233fa480fa02ac6f367d5207a1/babylon_logo/monochrome/babylon_logo_monochrome_dark.svg" + }, + { + "title": "Backblaze", + "hex": "E21E29", + "source": "https://www.backblaze.com/company/news.html", + "guidelines": "https://www.backblaze.com/company/news.html" + }, { "title": "Backbone.js", "hex": "0071B5", @@ -1136,10 +1443,21 @@ "url": "https://github.com/jashkenas/backbone/blob/master/LICENSE" } }, + { + "title": "Backendless", + "hex": "FFFFFF", + "source": "https://backendless.com" + }, + { + "title": "Backstage", + "hex": "9BF0E1", + "source": "https://github.com/backstage/backstage/blob/862f2517188849dd7467d059edeb8692e6933c35/microsite/static/logo_assets/svg/Icon_Teal.svg", + "guidelines": "https://backstage.io/logo_assets/Backstage_Identity_Assets_Overview.pdf" + }, { "title": "Badgr", "hex": "282C4C", - "source": "https://info.badgr.com/" + "source": "https://info.badgr.com" }, { "title": "Badoo", @@ -1174,27 +1492,37 @@ { "title": "Bank of America", "hex": "012169", - "source": "https://www.bankofamerica.com/" + "source": "https://www.bankofamerica.com" }, { "title": "Barclays", "hex": "00AEEF", - "source": "https://home.barclays/" + "source": "https://home.barclays" }, { "title": "Baremetrics", "hex": "6078FF", - "source": "https://baremetrics.com/" + "source": "https://baremetrics.com" }, { "title": "Basecamp", "hex": "1D2D35", "source": "https://basecamp.com/about/press" }, + { + "title": "Bastyon", + "hex": "00A4FF", + "source": "https://github.com/pocketnetteam/pocketnet.gui/blob/978201dca0d63bc87c4c66513a67f085f2f51d83/img/logo.svg", + "aliases": { + "aka": [ + "pocketnet" + ] + } + }, { "title": "Bata", "hex": "DD282E", - "source": "https://www.bata.com/" + "source": "https://www.bata.com" }, { "title": "Bath ASU", @@ -1209,18 +1537,18 @@ { "title": "BBC", "hex": "000000", - "source": "https://commons.wikimedia.org/wiki/File:BBC.svg", + "source": "https://www.bbc.co.uk", "guidelines": "https://www.bbc.co.uk/branding/logo-use" }, { "title": "BBC iPlayer", - "hex": "F54997", + "hex": "FF4C98", "source": "https://www.bbc.co.uk/iplayer" }, { "title": "Beatport", "hex": "01FF95", - "source": "https://brand.beatport.com/", + "source": "https://brand.beatport.com", "guidelines": "https://support.beatport.com/hc/en-us/articles/200353255-Beatport-Logos-and-Images" }, { @@ -1231,7 +1559,7 @@ { "title": "Beats by Dre", "hex": "E01F3D", - "source": "https://www.beatsbydre.com/" + "source": "https://www.beatsbydre.com" }, { "title": "Behance", @@ -1246,17 +1574,27 @@ { "title": "BEM", "hex": "000000", - "source": "https://en.bem.info/" + "source": "https://en.bem.info" }, { "title": "Bentley", "hex": "333333", "source": "https://en.wikipedia.org/wiki/File:Bentley_logo_2.svg" }, + { + "title": "Bento", + "hex": "768CFF", + "source": "https://bento.me" + }, + { + "title": "BentoML", + "hex": "000000", + "source": "https://github.com/bentoml/BentoML/blob/2169ebe9bc74e3d89ceba5dda8f8e1b85f08efa5/docs/source/_static/img/logo-light.svg" + }, { "title": "Betfair", "hex": "FFB80B", - "source": "https://partnerships.betfair.com/" + "source": "https://partnerships.betfair.com" }, { "title": "Big Cartel", @@ -1266,7 +1604,7 @@ { "title": "bigbasket", "hex": "A5CD39", - "source": "https://www.bigbasket.com/" + "source": "https://www.bigbasket.com" }, { "title": "BigBlueButton", @@ -1282,17 +1620,32 @@ { "title": "Bilibili", "hex": "00A1D6", - "source": "https://www.bilibili.com/" + "source": "https://www.bilibili.com" + }, + { + "title": "Billboard", + "hex": "000000", + "source": "https://www.billboard.com" + }, + { + "title": "BIM", + "hex": "EB1928", + "source": "https://upload.wikimedia.org/wikipedia/commons/2/2d/Bim_%28company%29_logo.svg" }, { "title": "Binance", "hex": "F0B90B", - "source": "https://binance.com/" + "source": "https://binance.com" }, { "title": "Bio Link", "hex": "000000", - "source": "https://bio.link/" + "source": "https://bio.link" + }, + { + "title": "BisectHosting", + "hex": "0D1129", + "source": "https://www.bisecthosting.com" }, { "title": "Bit", @@ -1317,7 +1670,7 @@ { "title": "Bitcoin SV", "hex": "EAB300", - "source": "https://bitcoinsv.com/" + "source": "https://bitcoinsv.com" }, { "title": "Bitdefender", @@ -1342,17 +1695,17 @@ { "title": "Bitwig", "hex": "FF5A00", - "source": "https://www.bitwig.com/" + "source": "https://www.bitwig.com" }, { "title": "Blackberry", "hex": "000000", - "source": "https://www.blackberry.com/" + "source": "https://www.blackberry.com" }, { "title": "Blazemeter", "hex": "CA2133", - "source": "https://www.blazemeter.com/" + "source": "https://www.blazemeter.com" }, { "title": "Blazor", @@ -1367,7 +1720,7 @@ { "title": "Blockchain.com", "hex": "121D33", - "source": "https://www.blockchain.com/", + "source": "https://www.blockchain.com", "guidelines": "https://www.blockchain.com/en/press" }, { @@ -1393,12 +1746,17 @@ { "title": "BMC Software", "hex": "FE5000", - "source": "https://www.bmc.com/" + "source": "https://www.bmc.com" }, { "title": "BMW", "hex": "0066B1", - "source": "https://www.bmw.de/" + "source": "https://www.bmw.de" + }, + { + "title": "BoardGameGeek", + "hex": "FF5100", + "source": "https://boardgamegeek.com" }, { "title": "Boehringer Ingelheim", @@ -1410,6 +1768,16 @@ "hex": "1D439C", "source": "https://commons.wikimedia.org/wiki/File:Boeing_full_logo.svg" }, + { + "title": "Bombardier", + "hex": "020203", + "source": "https://bombardier.com" + }, + { + "title": "Bookalope", + "hex": "DC2829", + "source": "https://bookalope.net" + }, { "title": "BookBub", "hex": "F44336", @@ -1418,17 +1786,22 @@ { "title": "Bookmeter", "hex": "64BC4B", - "source": "https://bookmeter.com/" + "source": "https://bookmeter.com" + }, + { + "title": "BookMyShow", + "hex": "C4242B", + "source": "https://in.bookmyshow.com" }, { "title": "BookStack", "hex": "0288D1", - "source": "https://www.bookstackapp.com/" + "source": "https://www.bookstackapp.com" }, { "title": "Boost", "hex": "F7901E", - "source": "https://www.boostmobile.com/" + "source": "https://www.boostmobile.com" }, { "title": "Boots", @@ -1438,22 +1811,33 @@ { "title": "Bootstrap", "hex": "7952B3", - "source": "http://getbootstrap.com/about" + "source": "https://getbootstrap.com/about" + }, + { + "title": "BorgBackup", + "hex": "00DD00", + "source": "https://www.borgbackup.org" }, { "title": "Bosch", "hex": "EA0016", - "source": "https://www.bosch.de/" + "source": "https://www.bosch.de" }, { "title": "Bose", "hex": "000000", - "source": "https://developer.bose.com/sites/default/files/Bose%20AR%20Design%20Guidelines%20v1.0.pdf" + "source": "https://www.bose.com", + "guidelines": "https://www.bose.com/legal/terms-of-use" + }, + { + "title": "Botble CMS", + "hex": "205081", + "source": "https://botble.com" }, { "title": "boulanger", "hex": "FD5300", - "source": "https://www.boulanger.com/" + "source": "https://www.boulanger.com" }, { "title": "Bower", @@ -1465,6 +1849,11 @@ "hex": "0061D5", "source": "https://www.box.com/en-gb/about-us/press" }, + { + "title": "Boxy SVG", + "hex": "3584E3", + "source": "https://boxy-svg.com/ideas/7/redesign-the-app-icon#comment-1875" + }, { "title": "Brandfolder", "hex": "40D1F5", @@ -1480,6 +1869,11 @@ "hex": "003DAD", "source": "https://www.breaker.audio/i/brand" }, + { + "title": "Brevo", + "hex": "0B996E", + "source": "https://www.brevo.com" + }, { "title": "British Airways", "hex": "2E5C99", @@ -1487,13 +1881,22 @@ }, { "title": "Broadcom", - "hex": "CC092F", - "source": "https://en.wikipedia.org/wiki/Broadcom_Inc" + "hex": "E31837", + "source": "https://www.broadcom.com/support", + "license": { + "type": "custom", + "url": "https://logorequest.broadcom.com/Home.aspx" + } + }, + { + "title": "bspwm", + "hex": "2E2E2E", + "source": "https://github.com/baskerville/bspwm/blob/8fc2269fe0f29a785885bcd9122812eae7226d7b/artworks/bspwm_logo.svg" }, { "title": "BT", "hex": "6400AA", - "source": "https://www.bt.com/" + "source": "https://www.bt.com" }, { "title": "Buddy", @@ -1518,7 +1921,7 @@ { "title": "Bugatti", "hex": "BE0030", - "source": "https://www.bugatti.com/" + "source": "https://www.bugatti.com" }, { "title": "Bugcrowd", @@ -1546,6 +1949,11 @@ "hex": "00D1B2", "source": "https://github.com/jgthms/bulma/tree/b0ed28b0e63fdfe54ef802ad155c889241fb6ae1" }, + { + "title": "Bun", + "hex": "000000", + "source": "https://bun.sh" + }, { "title": "bunq", "hex": "3394D7", @@ -1554,9 +1962,15 @@ { "title": "Burger King", "hex": "D62300", - "source": "https://www.bk.com/", + "source": "https://www.bk.com", "guidelines": "https://www.bk.com/trademarks" }, + { + "title": "Burton", + "hex": "000000", + "source": "https://brand.burton.com/logo/", + "guidelines": "https://brand.burton.com/logo/" + }, { "title": "Buy Me A Coffee", "hex": "FFDD00", @@ -1567,6 +1981,16 @@ "hex": "EE3322", "source": "https://www.buzzfeed.com/press/assets" }, + { + "title": "BVG", + "hex": "F0D722", + "source": "https://www.bvg.de", + "aliases": { + "aka": [ + "Berliner Verkehrsbetriebe" + ] + } + }, { "title": "Byju's", "hex": "813588", @@ -1580,7 +2004,7 @@ { "title": "ByteDance", "hex": "3C8CFF", - "source": "https://www.bytedance.com/" + "source": "https://www.bytedance.com" }, { "title": "C", @@ -1602,12 +2026,33 @@ "hex": "7ED321", "source": "https://cachethq.io/press" }, + { + "title": "Caddy", + "hex": "1F88C0", + "source": "https://caddyserver.com" + }, + { + "title": "Cadillac", + "hex": "000000", + "source": "https://www.cadillac.com", + "guidelines": "https://www.gm.com/copyright-trademark" + }, + { + "title": "CafePress", + "hex": "58A616", + "source": "https://en.wikipedia.org/wiki/CafePress#/media/File:CafePress_logo.svg" + }, { "title": "Caffeine", "hex": "0000FF", - "source": "https://www.caffeine.tv/", + "source": "https://www.caffeine.tv", "guidelines": "https://www.caffeine.tv/newsroom.html" }, + { + "title": "Cairo Graphics", + "hex": "F39914", + "source": "https://github.com/freedesktop/cairo/blob/44f808fce9f437e14f2b0ef4e1583def8ab578ae/doc/tutorial/slides/cairo-title.svg" + }, { "title": "Cairo Metro", "hex": "C10C0C", @@ -1635,7 +2080,7 @@ { "title": "Canva", "hex": "00C4CC", - "source": "https://www.canva.com/" + "source": "https://www.canva.com" }, { "title": "Capacitor", @@ -1645,7 +2090,12 @@ { "title": "Car Throttle", "hex": "FF9C42", - "source": "https://www.carthrottle.com/" + "source": "https://www.carthrottle.com" + }, + { + "title": "Cardano", + "hex": "0133AD", + "source": "https://cardano.org/brand-assets/" }, { "title": "Carrefour", @@ -1670,12 +2120,12 @@ { "title": "Castorama", "hex": "0078D7", - "source": "https://www.castorama.fr/" + "source": "https://www.castorama.fr" }, { "title": "Castro", "hex": "00B265", - "source": "http://supertop.co/castro/press/" + "source": "https://supertop.co/castro/press/" }, { "title": "Caterpillar", @@ -1685,7 +2135,7 @@ { "title": "CBS", "hex": "033963", - "source": "https://www.cbs.com/" + "source": "https://www.cbs.com" }, { "title": "CD Projekt", @@ -1717,6 +2167,11 @@ "hex": "A30701", "source": "https://github.com/simple-icons/simple-icons/issues/4983#issuecomment-796736373" }, + { + "title": "Chainguard", + "hex": "4445E7", + "source": "https://www.chainguard.dev" + }, { "title": "Chainlink", "hex": "375BD2", @@ -1727,10 +2182,15 @@ "hex": "319795", "source": "https://github.com/chakra-ui/chakra-ui/blob/327e1624d22936abb43068e1f57054e43c9c6819/logo/logomark-colored.svg" }, + { + "title": "Channel 4", + "hex": "AAFF89", + "source": "https://www.channel4.com" + }, { "title": "Chart.js", "hex": "FF6384", - "source": "https://www.chartjs.org/" + "source": "https://www.chartjs.org" }, { "title": "ChartMogul", @@ -1744,8 +2204,14 @@ }, { "title": "ChatBot", - "hex": "FFD000", - "source": "https://chatbot.design/" + "hex": "0066FF", + "source": "https://chatbot.design", + "guidelines": "https://chatbot.design" + }, + { + "title": "Chatwoot", + "hex": "1F93FF", + "source": "https://www.chatwoot.com" }, { "title": "CheckiO", @@ -1757,10 +2223,15 @@ "hex": "54B848", "source": "https://www.checkmarx.com/resources/datasheets/" }, + { + "title": "Checkmk", + "hex": "15D1A0", + "source": "https://checkmk.com" + }, { "title": "Chef", "hex": "F09820", - "source": "https://www.chef.io/" + "source": "https://www.chef.io" }, { "title": "Chemex", @@ -1772,6 +2243,16 @@ "hex": "CD9834", "source": "https://www.chevrolet.com/content/dam/chevrolet/na/us/english/index/shopping-tools/download-catalog/02-pdf/2019-chevrolet-corvette-catalog.pdf" }, + { + "title": "Chia Network", + "hex": "5ECE71", + "source": "https://www.chia.net/branding/", + "guidelines": "https://www.chia.net/wp-content/uploads/2022/08/Guidelines-for-Using-Chia-Network.pdf", + "license": { + "type": "custom", + "url": "https://www.chia.net/wp-content/uploads/2022/08/Chia-Trademark-Policy.pdf" + } + }, { "title": "China Eastern Airlines", "hex": "1A2477", @@ -1787,6 +2268,11 @@ "hex": "80B5E3", "source": "https://chocolatey.org/media-kit" }, + { + "title": "Chromatic", + "hex": "FC521F", + "source": "https://www.chromatic.com" + }, { "title": "Chromecast", "hex": "999999", @@ -1805,7 +2291,7 @@ { "title": "Chupa Chups", "hex": "CF103E", - "source": "https://www.chupachups.co.uk/" + "source": "https://www.chupachups.co.uk" }, { "title": "Cilium", @@ -1820,13 +2306,18 @@ { "title": "Circle", "hex": "8669AE", - "source": "https://www.circle.com/" + "source": "https://www.circle.com" }, { "title": "CircleCI", "hex": "343434", "source": "https://circleci.com/press" }, + { + "title": "CircuitVerse", + "hex": "42B883", + "source": "https://circuitverse.org" + }, { "title": "Cirrus CI", "hex": "4051B5", @@ -1835,12 +2326,12 @@ { "title": "Cisco", "hex": "1BA0D7", - "source": "https://www.cisco.com/" + "source": "https://www.cisco.com" }, { "title": "Citrix", "hex": "452170", - "source": "https://brand.citrix.com/" + "source": "https://brand.citrix.com" }, { "title": "Citroën", @@ -1863,10 +2354,20 @@ "hex": "0287D0", "source": "https://github.com/ckeditor/ckeditor4/blob/7d8305ce4d12683853a563b9d6ea54e0d4686a2f/samples/img/logo.svg" }, + { + "title": "Clarifai", + "hex": "1955FF", + "source": "https://www.clarifai.com" + }, { "title": "Claris", "hex": "000000", - "source": "https://www.claris.com/" + "source": "https://www.claris.com" + }, + { + "title": "Clarivate", + "hex": "FFFFFF", + "source": "https://clarivate.com" }, { "title": "ClickHouse", @@ -1902,38 +2403,46 @@ { "title": "Cloud 66", "hex": "3C72B9", - "source": "https://www.cloud66.com/" + "source": "https://www.cloud66.com" }, { "title": "Cloud Foundry", "hex": "0C9ED5", - "source": "https://www.cloudfoundry.org/", + "source": "https://www.cloudfoundry.org", "guidelines": "https://www.cloudfoundry.org/logo/" }, { "title": "CloudBees", "hex": "1997B5", - "source": "https://www.cloudbees.com/" + "source": "https://www.cloudbees.com" }, { "title": "CloudCannon", "hex": "407AFC", - "source": "https://cloudcannon.com/" + "source": "https://cloudcannon.com" }, { "title": "Cloudera", "hex": "F96702", - "source": "https://www.cloudera.com/" + "source": "https://www.cloudera.com" }, { "title": "Cloudflare", "hex": "F38020", - "source": "https://www.cloudflare.com/logo/" + "source": "https://www.cloudflare.com/logo/", + "guidelines": "https://www.cloudflare.com/trademark/" + }, + { + "title": "Cloudflare Pages", + "hex": "F38020", + "source": "https://pages.cloudflare.com", + "guidelines": "https://www.cloudflare.com/trademark/" }, { "title": "Cloudsmith", - "hex": "187EB6", - "source": "https://cloudsmith.io/branding/" + "hex": "2A6FE1", + "source": "https://cloudsmith.com/company/brand/", + "guidelines": "https://cloudsmith.com/company/brand/" }, { "title": "Cloudways", @@ -1943,13 +2452,13 @@ { "title": "Clubhouse", "hex": "6515DD", - "source": "https://brand.clubhouse.io/", - "guidelines": "https://brand.clubhouse.io/" + "source": "https://brand.clubhouse.io", + "guidelines": "https://brand.clubhouse.io" }, { "title": "Clyp", "hex": "3CBDB1", - "source": "https://clyp.it/" + "source": "https://clyp.it" }, { "title": "CMake", @@ -1959,18 +2468,23 @@ { "title": "CNCF", "hex": "231F20", - "source": "https://github.com/cncf/artwork/blob/master/examples/other.md#cncf-logos", + "source": "https://github.com/cncf/artwork/blob/d2ed716cc0769e6c65d2e58f9a503fca02b60a56/examples/other.md#cncf-logos", "guidelines": "https://www.cncf.io/brand-guidelines/" }, { "title": "CNN", "hex": "CC0000", - "source": "https://edition.cnn.com/" + "source": "https://edition.cnn.com" }, { "title": "Co-op", "hex": "00B1E7", - "source": "http://www.co-operative.coop/corporate/press/logos/" + "source": "https://www.co-operative.coop/media/assets" + }, + { + "title": "Coca Cola", + "hex": "D00013", + "source": "https://upload.wikimedia.org/wikipedia/commons/c/ce/Coca-Cola_logo.svg" }, { "title": "Cockpit", @@ -1980,7 +2494,7 @@ { "title": "Cockroach Labs", "hex": "6933FF", - "source": "https://www.cockroachlabs.com/" + "source": "https://www.cockroachlabs.com" }, { "title": "CocoaPods", @@ -1998,7 +2512,7 @@ { "title": "Coda", "hex": "F46A54", - "source": "https://coda.io/" + "source": "https://coda.io" }, { "title": "Codacy", @@ -2013,7 +2527,7 @@ { "title": "Code Review", "hex": "485A62", - "source": "https://codereview.stackexchange.com/", + "source": "https://codereview.stackexchange.com", "guidelines": "https://stackoverflow.com/legal/trademark-guidance" }, { @@ -2024,7 +2538,7 @@ { "title": "Codecademy", "hex": "1F4056", - "source": "https://www.codecademy.com/" + "source": "https://www.codecademy.com" }, { "title": "CodeceptJS", @@ -2034,22 +2548,22 @@ { "title": "CodeChef", "hex": "5B4638", - "source": "https://www.codechef.com/" + "source": "https://www.codechef.com" }, { "title": "Codecov", "hex": "F01F7A", - "source": "https://codecov.io/" + "source": "https://codecov.io" }, { "title": "CodeFactor", "hex": "F44A6A", - "source": "https://www.codefactor.io/" + "source": "https://www.codefactor.io" }, { "title": "Codeforces", "hex": "1F8ACB", - "source": "http://codeforces.com/" + "source": "https://codeforces.com" }, { "title": "CodeIgniter", @@ -2059,7 +2573,7 @@ { "title": "Codemagic", "hex": "F45E3F", - "source": "https://codemagic.io/" + "source": "https://codemagic.io" }, { "title": "CodeMirror", @@ -2069,7 +2583,7 @@ { "title": "CodeNewbie", "hex": "9013FE", - "source": "https://community.codenewbie.org/" + "source": "https://community.codenewbie.org" }, { "title": "CodePen", @@ -2079,7 +2593,7 @@ { "title": "CodeProject", "hex": "FF9900", - "source": "https://www.codeproject.com/" + "source": "https://www.codeproject.com" }, { "title": "CodersRank", @@ -2093,13 +2607,23 @@ }, { "title": "CodeSandbox", - "hex": "000000", - "source": "https://codesandbox.io" + "hex": "151515", + "source": "https://codesandbox.io/CodeSandbox-Press-Kit.zip" }, { "title": "Codeship", "hex": "004466", - "source": "https://app.codeship.com/" + "source": "https://app.codeship.com" + }, + { + "title": "CodeSignal", + "hex": "1062FB", + "source": "https://codesignal.com" + }, + { + "title": "CodeStream", + "hex": "008C99", + "source": "https://www.codestream.com" }, { "title": "Codewars", @@ -2124,12 +2648,12 @@ { "title": "CoffeeScript", "hex": "2F2625", - "source": "https://coffeescript.org/" + "source": "https://coffeescript.org" }, { "title": "Cognizant", "hex": "1A4CA1", - "source": "https://www.cognizant.com/" + "source": "https://www.cognizant.com" }, { "title": "Coil", @@ -2145,22 +2669,43 @@ { "title": "CoinMarketCap", "hex": "17181B", - "source": "https://www.coinmarketcap.com/" + "source": "https://www.coinmarketcap.com" }, { "title": "Commerzbank", "hex": "FFCC33", "source": "https://commons.wikimedia.org/wiki/Category:Commerzbank_logos" }, + { + "title": "commitlint", + "hex": "000000", + "source": "https://github.com/conventional-changelog/commitlint/blob/0b177635472214faac5a5800ced970bf4d2e6012/docs/assets/icon.svg" + }, + { + "title": "Commodore", + "hex": "1E2A4E", + "source": "https://commodore.inc" + }, { "title": "Common Workflow Language", "hex": "B5314C", "source": "https://github.com/common-workflow-language/logo/blob/54b1624bc88df6730fa7b6c928a05fc9c939e47e/CWL-Logo-nofonts.svg" }, + { + "title": "Compiler Explorer", + "hex": "67C52A", + "source": "https://github.com/compiler-explorer/infra/blob/8d362efe7ddc24e6a625f7db671d0a6e7600e3c9/logo/icon/CompilerExplorer%20Logo%20Icon%20SVG.svg" + }, { "title": "Composer", "hex": "885630", - "source": "https://getcomposer.org/" + "source": "https://getcomposer.org" + }, + { + "title": "CompTIA", + "hex": "C8202F", + "source": "https://www.comptia.org", + "guidelines": "https://www.comptia.org/newsroom/media-library" }, { "title": "Comsol", @@ -2170,12 +2715,12 @@ { "title": "Conan", "hex": "6699CB", - "source": "https://conan.io/" + "source": "https://conan.io" }, { "title": "Concourse", "hex": "3398DC", - "source": "https://concourse-ci.org/" + "source": "https://concourse-ci.org" }, { "title": "Conda-Forge", @@ -2195,8 +2740,8 @@ { "title": "Construct 3", "hex": "00FFDA", - "source": "https://www.construct.net/", - "guidelines": "https://www.construct.net/" + "source": "https://www.construct.net", + "guidelines": "https://www.construct.net" }, { "title": "Consul", @@ -2214,6 +2759,12 @@ "hex": "575757", "source": "https://cncf-branding.netlify.app/projects/containerd/" }, + { + "title": "Contao", + "hex": "F47C00", + "source": "https://contao.org", + "guidelines": "https://contao.org/en/media" + }, { "title": "Contentful", "hex": "2478CC", @@ -2230,7 +2781,7 @@ { "title": "Convertio", "hex": "FF3333", - "source": "https://convertio.co/" + "source": "https://convertio.co" }, { "title": "Cookiecutter", @@ -2240,12 +2791,12 @@ { "title": "Cora", "hex": "E61845", - "source": "https://www.cora.fr/" + "source": "https://www.cora.fr" }, { "title": "Corona Engine", "hex": "F96F29", - "source": "https://coronalabs.com/", + "source": "https://coronalabs.com", "guidelines": "https://coronalabs.com/presskit.pdf" }, { @@ -2262,7 +2813,7 @@ { "title": "Couchbase", "hex": "EA2328", - "source": "https://www.couchbase.com/" + "source": "https://www.couchbase.com" }, { "title": "Counter-Strike", @@ -2282,7 +2833,7 @@ { "title": "Coveralls", "hex": "3F5767", - "source": "https://coveralls.io/" + "source": "https://coveralls.io" }, { "title": "cPanel", @@ -2299,6 +2850,16 @@ "hex": "009DC7", "source": "https://github.com/crate/crate-docs-theme/blob/cbd734b3617489ca937f35e30f37f3f6c1870e1f/src/crate/theme/rtd/crate/static/images/crate-logo.svg" }, + { + "title": "Crayon", + "hex": "FF6A4C", + "source": "https://www.crayon.com" + }, + { + "title": "Creality", + "hex": "000000", + "source": "https://www.creality.com" + }, { "title": "Create React App", "hex": "09D3AC", @@ -2307,7 +2868,12 @@ { "title": "Creative Commons", "hex": "EF9421", - "source": "https://creativecommons.org/" + "source": "https://creativecommons.org" + }, + { + "title": "Creative Technology", + "hex": "000000", + "source": "https://creative.com" }, { "title": "Credly", @@ -2317,7 +2883,12 @@ { "title": "Crehana", "hex": "4B22F4", - "source": "https://www.crehana.com/" + "source": "https://www.crehana.com" + }, + { + "title": "Critical Role", + "hex": "000000", + "source": "https://critrole.com" }, { "title": "Crowdin", @@ -2357,18 +2928,33 @@ { "title": "CSS Wizardry", "hex": "F43059", - "source": "http://csswizardry.com" + "source": "https://csswizardry.com" }, { "title": "CSS3", "hex": "1572B6", - "source": "http://www.w3.org/html/logo/" + "source": "https://www.w3.org/html/logo/" + }, + { + "title": "CTS", + "hex": "E53236", + "source": "https://commons.wikimedia.org/wiki/File:Logo_Compagnie_des_transports_strasbourgeois.svg", + "aliases": { + "aka": [ + "Compagnie des Transports Strasbourgeois" + ] + } }, { "title": "Cucumber", "hex": "23D96C", "source": "https://cucumber.io" }, + { + "title": "Cultura", + "hex": "1D2C54", + "source": "https://www.cultura.com" + }, { "title": "curl", "hex": "073551", @@ -2376,13 +2962,13 @@ }, { "title": "CurseForge", - "hex": "6441A4", - "source": "https://www.curseforge.com/" + "hex": "F16436", + "source": "https://www.curseforge.com" }, { "title": "Cycling '74", "hex": "111111", - "source": "https://cycling74.com/" + "source": "https://cycling74.com" }, { "title": "Cypress", @@ -2394,15 +2980,20 @@ "hex": "F7DF1E", "source": "https://github.com/cytoscape/cytoscape.js/blob/97c27700feefe2f7b79fca248763049e9a0b38c6/documentation/img/cytoscape-logo.svg" }, + { + "title": "D", + "hex": "B03931", + "source": "https://github.com/dlang/dlang.org/blob/6d0e2e5f6a8249031cfd010e389b99ff014cd320/images/dlogo.svg" + }, { "title": "D-EDGE", "hex": "432975", - "source": "https://github.com/d-edge/JoinUs/blob/main/d-edge.svg" + "source": "https://github.com/d-edge/JoinUs/blob/4d8b5cf7145db26649fe9f1587194e44dbbe3565/d-edge.svg" }, { "title": "D-Wave Systems", "hex": "008CD7", - "source": "https://www.dwavesys.com/" + "source": "https://www.dwavesys.com" }, { "title": "D3.js", @@ -2411,8 +3002,8 @@ }, { "title": "Dacia", - "hex": "122AFF", - "source": "https://www.dacia.ro/" + "hex": "646B52", + "source": "https://commons.wikimedia.org/wiki/File:Dacia-Logo-2021.svg" }, { "title": "DAF", @@ -2430,6 +3021,16 @@ "source": "https://designnavigator.daimler.com/Daimler_Corporate_Logotype_Black_DTP", "guidelines": "https://designnavigator.daimler.com/Daimler_Corporate_Logotype" }, + { + "title": "DaisyUI", + "hex": "5A0EF8", + "source": "https://raw.githubusercontent.com/saadeghi/files/main/daisyui/logo-4.svg" + }, + { + "title": "Dapr", + "hex": "0D2192", + "source": "https://raw.githubusercontent.com/dapr/dapr/18575823c74318c811d6cd6f57ffac76d5debe93/img/dapr_logo.svg" + }, { "title": "Dark Reader", "hex": "141E24", @@ -2438,12 +3039,12 @@ { "title": "Dart", "hex": "0175C2", - "source": "https://github.com/dart-lang/site-shared/tree/master/src/_assets/image/dart/logo" + "source": "https://github.com/dart-lang/site-shared/tree/18458ff440afd3d06f04e5cb871c4c5eda29c9d5/src/_assets/image/dart/logo" }, { "title": "Darty", "hex": "EB1B23", - "source": "https://www.darty.com/" + "source": "https://www.darty.com" }, { "title": "Das Erste", @@ -2463,23 +3064,13 @@ }, { "title": "Dask", - "hex": "FDA061", - "source": "https://github.com/dask/dask/blob/fc911b6d481e602f7549eecb180c3f7622260001/docs/source/images/dask_icon.svg" + "hex": "FC6E6B", + "source": "https://github.com/dask/dask/blob/67e648922512615f94f8a90726423e721d0e3eb2/docs/source/images/dask_icon_black.svg" }, { "title": "Dassault Systèmes", "hex": "005386", - "source": "https://www.3ds.com/" - }, - { - "title": "Data Version Control", - "aliases": { - "aka": [ - "DVC" - ] - }, - "hex": "945DD6", - "source": "https://static.iterative.ai/logo/dvc.svg" + "source": "https://www.3ds.com" }, { "title": "data.ai", @@ -2489,13 +3080,13 @@ { "title": "Databricks", "hex": "FF3621", - "source": "https://www.databricks.com/", + "source": "https://www.databricks.com", "guidelines": "https://brand.databricks.com/Styleguide/Guide/" }, { "title": "DataCamp", "hex": "03EF62", - "source": "https://www.datacamp.com/" + "source": "https://www.datacamp.com" }, { "title": "Datadog", @@ -2520,6 +3111,16 @@ "source": "https://www.datastax.com/brand-resources", "guidelines": "https://www.datastax.com/brand-resources" }, + { + "title": "Dataverse", + "hex": "088142", + "source": "https://docs.microsoft.com/en-us/power-platform/guidance/icons", + "guidelines": "https://docs.microsoft.com/en-us/power-platform/guidance/icons", + "license": { + "type": "custom", + "url": "https://docs.microsoft.com/en-us/power-platform/guidance/icons" + } + }, { "title": "DatoCMS", "hex": "FF7751", @@ -2540,7 +3141,7 @@ { "title": "dblp", "hex": "004F9F", - "source": "https://dblp.org/" + "source": "https://dblp.org" }, { "title": "dbt", @@ -2550,12 +3151,12 @@ { "title": "DC Entertainment", "hex": "0078F0", - "source": "https://www.readdc.com/" + "source": "https://www.readdc.com" }, { "title": "De'Longhi", "hex": "072240", - "source": "https://www.delonghi.com/" + "source": "https://www.delonghi.com" }, { "title": "Debian", @@ -2574,18 +3175,19 @@ { "title": "Deepnote", "hex": "3793EF", - "source": "https://deepnote.com/" + "source": "https://deepnote.com" }, { "title": "Deezer", "hex": "FEAA2D", - "source": "https://deezerbrand.com/" + "source": "https://deezerbrand.com", + "guidelines": "https://deezerbrand.com" }, { "title": "del.icio.us", "slug": "delicious", "hex": "0000FF", - "source": "http://del.icio.us/", + "source": "https://del.icio.us", "aliases": { "aka": [ "Delicious" @@ -2595,12 +3197,12 @@ { "title": "Deliveroo", "hex": "00CCBC", - "source": "https://deliveroo.com/" + "source": "https://deliveroo.com" }, { "title": "Dell", "hex": "007DB8", - "source": "https://www.dell.com/", + "source": "https://www.dell.com", "guidelines": "https://brand.delltechnologies.com/logos/" }, { @@ -2621,15 +3223,21 @@ "type": "MIT" } }, + { + "title": "Denon", + "hex": "0B131A", + "source": "https://www.denon.com", + "guidelines": "https://www.denon.com/en-us/support/termsofuse.html" + }, { "title": "Dependabot", "hex": "025E8C", - "source": "https://dependabot.com/" + "source": "https://dependabot.com" }, { "title": "Der Spiegel", "hex": "E64415", - "source": "https://www.spiegel.de/" + "source": "https://www.spiegel.de" }, { "title": "Designer News", @@ -2639,17 +3247,17 @@ { "title": "Deutsche Bahn", "hex": "F01414", - "source": "https://www.bahn.de/" + "source": "https://www.bahn.de" }, { "title": "Deutsche Bank", "hex": "0018A8", - "source": "https://www.db.com/" + "source": "https://www.db.com" }, { "title": "dev.to", "hex": "0A0A0A", - "source": "https://dev.to/" + "source": "https://dev.to" }, { "title": "DevExpress", @@ -2659,7 +3267,7 @@ { "title": "DeviantArt", "hex": "05CC47", - "source": "http://help.deviantart.com/21" + "source": "https://help.deviantart.com/21" }, { "title": "Devpost", @@ -2674,7 +3282,7 @@ { "title": "Dgraph", "hex": "E50695", - "source": "https://dgraph.io/" + "source": "https://dgraph.io" }, { "title": "DHL", @@ -2685,12 +3293,17 @@ { "title": "diagrams.net", "hex": "F08705", - "source": "https://github.com/jgraph/drawio/blob/4743eba8d5eaa497dc003df7bf7295b695c59bea/src/main/webapp/images/drawlogo.svg" + "source": "https://github.com/jgraph/drawio/blob/4743eba8d5eaa497dc003df7bf7295b695c59bea/src/main/webapp/images/drawlogo.svg", + "aliases": { + "aka": [ + "draw.io" + ] + } }, { "title": "Dialogflow", "hex": "FF9800", - "source": "https://dialogflow.cloud.google.com/" + "source": "https://dialogflow.cloud.google.com" }, { "title": "Diaspora", @@ -2700,12 +3313,12 @@ { "title": "Digg", "hex": "000000", - "source": "https://digg.com/" + "source": "https://digg.com" }, { "title": "Digi-Key Electronics", "hex": "CC0000", - "source": "https://www.digikey.com/" + "source": "https://www.digikey.com" }, { "title": "DigitalOcean", @@ -2716,12 +3329,12 @@ { "title": "Dior", "hex": "000000", - "source": "https://www.dior.com/" + "source": "https://www.dior.com" }, { "title": "Directus", "hex": "263238", - "source": "https://directus.io/" + "source": "https://directus.io" }, { "title": "Discogs", @@ -2737,7 +3350,7 @@ { "title": "Discourse", "hex": "000000", - "source": "https://www.discourse.org/" + "source": "https://www.discourse.org" }, { "title": "Discover", @@ -2754,6 +3367,11 @@ "hex": "50162D", "source": "https://disroot.org/en" }, + { + "title": "Distrokid", + "hex": "231F20", + "source": "https://distrokid.com/logo" + }, { "title": "Django", "hex": "092E20", @@ -2772,7 +3390,7 @@ { "title": "dm", "hex": "002878", - "source": "https://www.dm.de/" + "source": "https://www.dm.de" }, { "title": "Docker", @@ -2782,18 +3400,24 @@ { "title": "Docs.rs", "hex": "000000", - "source": "https://docs.rs/" + "source": "https://docs.rs" }, { "title": "DocuSign", "hex": "FFCC22", - "source": "https://github.com/simple-icons/simple-icons/issues/1098" + "source": "https://www.docusign.com/sites/all/themes/custom/docusign/favicons/mstile-310x310.png" }, { "title": "Dogecoin", "hex": "C2A633", "source": "https://cryptologos.cc/dogecoin" }, + { + "title": "DOI", + "hex": "FAB70C", + "source": "https://www.doi.org/images/logos/header_logo_cropped.svg", + "guidelines": "https://www.doi.org/resources/130718-trademark-policy.pdf" + }, { "title": "Dolby", "hex": "000000", @@ -2806,8 +3430,8 @@ }, { "title": "Douban", - "hex": "007722", - "source": "https://zh.wikipedia.org/wiki/Douban", + "hex": "2D963D", + "source": "https://www.douban.com/about", "license": { "type": "custom", "url": "https://www.douban.com/about/legal#info_data" @@ -2822,15 +3446,20 @@ "url": "https://www.douban.com/about/legal#info_data" } }, + { + "title": "Dovecot", + "hex": "54BCAB", + "source": "https://commons.wikimedia.org/wiki/File:Dovecot_logo.svg" + }, { "title": "DPD", "hex": "DC0032", - "source": "https://www.dpd.com/" + "source": "https://www.dpd.com" }, { "title": "Dragonframe", "hex": "D4911E", - "source": "https://dragonframe.com/" + "source": "https://dragonframe.com" }, { "title": "Draugiem.lv", @@ -2867,15 +3496,31 @@ "hex": "1D1717", "source": "https://www.stellantis.com/en/brands/ds" }, + { + "title": "DTS", + "hex": "F98B2B", + "source": "https://xperi.com/brands/dts/", + "guidelines": "https://xperi.com/terms-conditions/" + }, { "title": "DTube", "hex": "F01A30", "source": "https://about.d.tube/mediakit.html" }, + { + "title": "Ducati", + "hex": "CC0000", + "source": "https://brandlogos.net/ducati-logo-vector-svg-92931.html" + }, + { + "title": "DuckDB", + "hex": "FFF000", + "source": "https://duckdb.org" + }, { "title": "DuckDuckGo", "hex": "DE5833", - "source": "https://duckduckgo.com/" + "source": "https://duckduckgo.com" }, { "title": "Dungeons & Dragons", @@ -2891,15 +3536,20 @@ { "title": "Dunked", "hex": "2DA9D7", - "source": "https://dunked.com/" + "source": "https://dunked.com" }, { "title": "Duolingo", "hex": "58CC02", - "source": "https://www.duolingo.com/" + "source": "https://www.duolingo.com" }, { "title": "DVC", + "aliases": { + "aka": [ + "Data Version Control" + ] + }, "hex": "13ADC7", "source": "https://iterative.ai/brand/", "guidelines": "https://iterative.ai/brand/" @@ -2911,8 +3561,13 @@ }, { "title": "Dynamics 365", - "hex": "002050", - "source": "http://thepartnerchannel.com/wp-content/uploads/Dynamics365_styleguide_092816.pdf" + "hex": "0B53CE", + "source": "https://docs.microsoft.com/en-us/dynamics365/get-started/icons", + "guidelines": "https://docs.microsoft.com/en-us/dynamics365/get-started/icons", + "license": { + "type": "custom", + "url": "https://docs.microsoft.com/en-us/dynamics365/get-started/icons" + } }, { "title": "Dynatrace", @@ -2924,6 +3579,16 @@ "hex": "0066CC", "source": "https://www.e.leclerc/assets/images/sue-logo.svg" }, + { + "title": "E3", + "hex": "E73D2F", + "source": "https://commons.wikimedia.org/wiki/File:E3_Logo.svg", + "aliases": { + "aka": [ + "Electronic Entertainment Expo" + ] + } + }, { "title": "EA", "hex": "000000", @@ -2932,7 +3597,12 @@ { "title": "Eagle", "hex": "0072EF", - "source": "https://en.eagle.cool/" + "source": "https://en.eagle.cool" + }, + { + "title": "EasyEDA", + "hex": "1765F6", + "source": "https://easyeda.com" }, { "title": "easyJet", @@ -2944,6 +3614,17 @@ "hex": "E53238", "source": "https://go.developer.ebay.com/logos" }, + { + "title": "EBOX", + "hex": "BE2323", + "source": "https://www.ebox.ca" + }, + { + "title": "Eclipse Adoptium", + "hex": "FF1464", + "source": "https://www.eclipse.org/org/artwork/", + "guidelines": "https://www.eclipse.org/legal/logo_guidelines.php" + }, { "title": "Eclipse Che", "hex": "525C86", @@ -2972,7 +3653,7 @@ { "title": "EDEKA", "hex": "1B66B3", - "source": "https://www.edeka.de/" + "source": "https://www.edeka.de" }, { "title": "EditorConfig", @@ -2982,12 +3663,12 @@ { "title": "edX", "hex": "02262B", - "source": "https://www.edx.org/" + "source": "https://www.edx.org" }, { "title": "egghead", "hex": "FCFBFA", - "source": "https://egghead.io/" + "source": "https://egghead.io" }, { "title": "Egnyte", @@ -3024,30 +3705,56 @@ "hex": "005571", "source": "https://www.elastic.co/brand" }, + { + "title": "Elavon", + "hex": "0C2074", + "source": "https://www.elavon.com" + }, { "title": "Electron", "hex": "47848F", - "source": "https://www.electronjs.org/" + "source": "https://www.electronjs.org" + }, + { + "title": "Electron Fiddle", + "hex": "E79537", + "source": "https://github.com/electron/fiddle/blob/19360ade76354240630e5660469b082128e1e57e/assets/icons/fiddle.svg" + }, + { + "title": "electron-builder", + "hex": "FFFFFF", + "source": "https://www.electron.build" }, { "title": "Element", "hex": "0DBD8B", - "source": "https://element.io/" + "source": "https://element.io" }, { "title": "elementary", "hex": "64BAFF", "source": "https://elementary.io/brand" }, + { + "title": "Elementor", + "hex": "92003B", + "source": "https://elementor.com/logos/", + "guidelines": "https://elementor.com/logos/" + }, { "title": "Eleventy", "hex": "000000", "source": "https://www.11ty.io" }, + { + "title": "Elgato", + "hex": "101010", + "source": "https://www.elgato.com/en/media-room" + }, { "title": "Elixir", "hex": "4B275F", - "source": "https://github.com/elixir-lang/elixir-lang.github.com/tree/master/images/logo" + "source": "https://github.com/elixir-lang/elixir-lang.github.com/tree/031746384ee23b9be19298c92a9699c56cc05845/images/logo" }, { "title": "Ello", @@ -3078,7 +3785,7 @@ { "title": "Emby", "hex": "52B54B", - "source": "https://emby.media/" + "source": "https://emby.media" }, { "title": "Emirates", @@ -3093,17 +3800,33 @@ { "title": "Empire Kred", "hex": "72BE50", - "source": "http://www.empire.kred" + "source": "https://www.empire.kred" + }, + { + "title": "Engadget", + "hex": "000000", + "source": "https://www.engadget.com", + "guidelines": "https://o.aolcdn.com/engadget/brand-kit/eng-logo-guidelines.pdf" }, { "title": "Enpass", "hex": "0D47A1", "source": "https://www.enpass.io/press/" }, + { + "title": "EnterpriseDB", + "hex": "FF3E00", + "source": "https://www.enterprisedb.com" + }, { "title": "Envato", "hex": "81B441", - "source": "https://envato.com/" + "source": "https://envato.com" + }, + { + "title": "Envoy Proxy", + "hex": "AC6199", + "source": "https://d33wubrfki0l68.cloudfront.net/6f16455dae972425b77c7e31642269b375ec250e/3bd11/img/envoy-logo.svg" }, { "title": "EPEL", @@ -3124,7 +3847,7 @@ { "title": "Equinix Metal", "hex": "ED2224", - "source": "https://metal.equinix.com/" + "source": "https://metal.equinix.com" }, { "title": "Erlang", @@ -3139,18 +3862,18 @@ { "title": "ESEA", "hex": "0E9648", - "source": "https://play.esea.net/" + "source": "https://play.esea.net" }, { "title": "ESLGaming", "hex": "FFFF09", - "source": "https://brand.eslgaming.com/", - "guidelines": "https://brand.eslgaming.com/" + "source": "https://brand.eslgaming.com", + "guidelines": "https://brand.eslgaming.com" }, { "title": "ESLint", "hex": "4B32C3", - "source": "https://eslint.org/" + "source": "https://eslint.org" }, { "title": "ESPHome", @@ -3160,7 +3883,12 @@ { "title": "Espressif", "hex": "E7352C", - "source": "https://www.espressif.com/" + "source": "https://www.espressif.com" + }, + { + "title": "ESRI", + "hex": "000000", + "source": "https://www.esri.com/en-us/arcgis/products/arcgis-pro/overview" }, { "title": "etcd", @@ -3214,7 +3942,7 @@ { "title": "Exordo", "hex": "DAA449", - "source": "https://www.exordo.com/" + "source": "https://www.exordo.com" }, { "title": "Exoscale", @@ -3231,12 +3959,12 @@ { "title": "Experts Exchange", "hex": "00AAE7", - "source": "https://www.experts-exchange.com/" + "source": "https://www.experts-exchange.com" }, { "title": "Expo", "hex": "000020", - "source": "http://expo.io/brand/" + "source": "https://expo.io/brand/" }, { "title": "Express", @@ -3252,22 +3980,44 @@ { "title": "EyeEm", "hex": "000000", - "source": "https://www.eyeem.com/" + "source": "https://www.eyeem.com" }, { "title": "F-Droid", "hex": "1976D2", - "source": "https://f-droid.org/" + "source": "https://f-droid.org" }, { "title": "F-Secure", "hex": "00BAFF", "source": "https://vip.f-secure.com/en/marketing/logos" }, + { + "title": "F#", + "hex": "378BBA", + "slug": "fsharp", + "source": "https://foundation.fsharp.org/logo", + "guidelines": "https://foundation.fsharp.org/logo", + "aliases": { + "aka": [ + "F sharp" + ] + } + }, + { + "title": "F1", + "hex": "E10600", + "source": "https://www.formula1.com" + }, + { + "title": "F5", + "hex": "E4002B", + "source": "https://www.f5.com/company/news/press-kit" + }, { "title": "Facebook", "hex": "1877F2", - "source": "https://en.facebookbrand.com/" + "source": "https://en.facebookbrand.com" }, { "title": "Facebook Gaming", @@ -3277,7 +4027,7 @@ { "title": "Facebook Live", "hex": "ED4242", - "source": "https://en.facebookbrand.com/" + "source": "https://en.facebookbrand.com" }, { "title": "FACEIT", @@ -3287,12 +4037,12 @@ { "title": "Facepunch", "hex": "EC1C24", - "source": "https://facepunch.com/img/brand/default-light.svg" + "source": "https://sbox.facepunch.com/news" }, { "title": "Falcon", "hex": "F0AD4E", - "source": "https://falconframework.org/" + "source": "https://falconframework.org" }, { "title": "FamPay", @@ -3307,12 +4057,28 @@ { "title": "Fandom", "hex": "FA005A", - "source": "https://fandomdesignsystem.com/" + "source": "https://fandomdesignsystem.com" + }, + { + "title": "Fanfou", + "hex": "00CCFF", + "source": "https://fanfou.com" + }, + { + "title": "Fantom", + "hex": "0928FF", + "source": "https://fantom.foundation" + }, + { + "title": "FareHarbor", + "hex": "0A6ECE", + "source": "https://help.fareharbor.com/about/logo", + "guidelines": "https://help.fareharbor.com/about/logo" }, { "title": "FARFETCH", "hex": "000000", - "source": "https://www.farfetch.com/" + "source": "https://www.farfetch.com" }, { "title": "FastAPI", @@ -3339,6 +4105,11 @@ "hex": "9187FF", "source": "https://usefathom.com/brand" }, + { + "title": "Fauna", + "hex": "3A1AB6", + "source": "https://fauna.com" + }, { "title": "Favro", "hex": "512DA8", @@ -3347,12 +4118,12 @@ { "title": "FeatHub", "hex": "9B9B9B", - "source": "http://feathub.com/" + "source": "https://feathub.com" }, { "title": "FedEx", "hex": "4D148C", - "source": "https://newsroom.fedex.com/" + "source": "https://newsroom.fedex.com" }, { "title": "Fedora", @@ -3367,28 +4138,44 @@ { "title": "Feedly", "hex": "2BB24C", - "source": "https://blog.feedly.com/" + "source": "https://blog.feedly.com" }, { "title": "Ferrari", "hex": "D40000", - "source": "https://www.ferrari.com/" + "source": "https://www.ferrari.com" }, { "title": "Ferrari N.V.", "slug": "ferrarinv", "hex": "EB2E2C", - "source": "https://corporate.ferrari.com/" + "source": "https://corporate.ferrari.com" + }, + { + "title": "FerretDB", + "hex": "042133", + "source": "https://github.com/FerretDB/FerretDB/blob/1176606075dfe52225ce0cd1bbd0cd06128f8599/website/static/img/logo.svg" }, { "title": "FFmpeg", "hex": "007808", "source": "https://commons.wikimedia.org/wiki/File:FFmpeg_Logo_new.svg" }, + { + "title": "Fi", + "hex": "00B899", + "source": "https://fi.money", + "aliases": { + "aka": [ + "Fi.Money", + "epiFi" + ] + } + }, { "title": "Fiat", "hex": "941711", - "source": "http://www.fcaci.com/x/FIATv15" + "source": "https://www.fcaci.com/x/FIATv15" }, { "title": "Fido Alliance", @@ -3401,10 +4188,16 @@ "hex": "326295", "source": "https://en.wikipedia.org/wiki/FIFA" }, + { + "title": "Fig", + "hex": "000000", + "source": "https://fig.io/icons/fig.svg" + }, { "title": "Figma", "hex": "F24E1E", - "source": "https://brand.figma.com/icon.html" + "source": "https://www.figma.com/using-the-figma-brand/", + "guidelines": "https://www.figma.com/using-the-figma-brand/" }, { "title": "figshare", @@ -3419,7 +4212,7 @@ { "title": "Files", "hex": "4285F4", - "source": "https://files.google.com/" + "source": "https://files.google.com" }, { "title": "FileZilla", @@ -3429,7 +4222,7 @@ { "title": "Fing", "hex": "009AEE", - "source": "https://www.fing.com/" + "source": "https://www.fing.com" }, { "title": "Firebase", @@ -3437,6 +4230,11 @@ "source": "https://firebase.google.com/brand-guidelines/", "guidelines": "https://firebase.google.com/brand-guidelines/" }, + { + "title": "Firefly III", + "hex": "CD5029", + "source": "https://docs.firefly-iii.org/firefly-iii/more-information/logo" + }, { "title": "Firefox", "hex": "FF7139", @@ -3448,25 +4246,36 @@ "hex": "FF7139", "source": "https://mozilla.design/firefox/logos-usage/" }, + { + "title": "Fireship", + "hex": "EB844E", + "source": "https://github.com/fireship-io/fireship.io/blob/987da97305a5968b99347aa748f928a4667336f8/hugo/layouts/partials/svg/logo.svg" + }, + { + "title": "Firewalla", + "hex": "C8332D", + "source": "https://github.com/firewalla/firewalla/blob/97f7463fe07b85b979a8f0738fdf14c1af0249a8/extension/diag/static/firewalla.svg" + }, { "title": "FIRST", "hex": "0066B3", - "source": "https://www.firstinspires.org/brand" + "source": "https://www.firstinspires.org/brand", + "guidelines": "https://www.firstinspires.org/brand" }, { "title": "Fitbit", "hex": "00B0B9", - "source": "http://www.fitbit.com/uk/home" + "source": "https://www.fitbit.com/uk/home" }, { "title": "FITE", "hex": "CA0404", - "source": "https://www.fite.tv/" + "source": "https://www.fite.tv" }, { "title": "FiveM", "hex": "F40552", - "source": "https://fivem.net/" + "source": "https://fivem.net" }, { "title": "Fiverr", @@ -3489,18 +4298,24 @@ }, { "title": "Flathub", - "hex": "4A86CF", - "source": "https://flathub.org/" + "hex": "000000", + "source": "https://flathub.org" + }, + { + "title": "Flatpak", + "hex": "4A90D9", + "source": "https://flatpak.org/press", + "guidelines": "https://flatpak.org/press" }, { "title": "Flattr", "hex": "000000", - "source": "https://flattr.com/" + "source": "https://flattr.com" }, { "title": "Flickr", "hex": "0063DC", - "source": "https://www.flickr.com/" + "source": "https://www.flickr.com" }, { "title": "Flipboard", @@ -3510,17 +4325,17 @@ { "title": "Flipkart", "hex": "2874F0", - "source": "https://www.flipkart.com/" + "source": "https://www.flipkart.com" }, { "title": "Floatplane", "hex": "00AEEF", - "source": "https://www.floatplane.com/" + "source": "https://www.floatplane.com" }, { "title": "Flood", "hex": "4285F4", - "source": "https://flood.io/" + "source": "https://flood.io" }, { "title": "Fluent Bit", @@ -3541,6 +4356,11 @@ "source": "https://flutter.dev/brand", "guidelines": "https://flutter.dev/brand" }, + { + "title": "Fluxus", + "hex": "FFFFFF", + "source": "https://github.com/YieldingFluxus/fluxuswebsite/blob/651d798b8753786dcc51644c3b048a4f399db166/public/icon-svg.svg" + }, { "title": "Flyway", "hex": "CC0200", @@ -3555,7 +4375,7 @@ { "title": "Fnac", "hex": "E1A925", - "source": "http://www.fnac.com/" + "source": "https://www.fnac.com" }, { "title": "Folium", @@ -3565,7 +4385,7 @@ { "title": "Fonoma", "hex": "02B78F", - "source": "https://en.fonoma.com/" + "source": "https://en.fonoma.com" }, { "title": "Font Awesome", @@ -3575,7 +4395,12 @@ { "title": "FontBase", "hex": "3D03A7", - "source": "https://fontba.se/" + "source": "https://fontba.se" + }, + { + "title": "FontForge", + "hex": "F2712B", + "source": "https://fontforge.org" }, { "title": "foodpanda", @@ -3590,7 +4415,17 @@ { "title": "Forestry", "hex": "343A40", - "source": "https://forestry.io/" + "source": "https://forestry.io" + }, + { + "title": "Forgejo", + "hex": "FB923C", + "source": "https://codeberg.org/forgejo/meta/raw/branch/readme/branding/logo/forgejo-monochrome.svg", + "guidelines": "https://codeberg.org/forgejo/meta/src/branch/readme/branding/README.md#logo", + "license": { + "type": "CC-BY-SA-4.0", + "url": "https://codeberg.org/forgejo/meta/src/branch/readme/branding/logo/forgejo-logo-license-exemption.txt" + } }, { "title": "Formstack", @@ -3600,7 +4435,7 @@ { "title": "Fortinet", "hex": "EE3124", - "source": "http://www.fortinet.com/" + "source": "https://www.fortinet.com" }, { "title": "Fortran", @@ -3615,7 +4450,7 @@ { "title": "Fossil SCM", "hex": "548294", - "source": "https://fossil-scm.org/" + "source": "https://fossil-scm.org" }, { "title": "Foursquare", @@ -3628,10 +4463,15 @@ "hex": "F94877", "source": "https://foursquare.com/about/logos" }, + { + "title": "FOX", + "hex": "000000", + "source": "https://www.fox.com" + }, { "title": "Foxtel", "hex": "EB5205", - "source": "https://www.foxtel.com.au/" + "source": "https://www.foxtel.com.au" }, { "title": "Fozzy", @@ -3651,12 +4491,12 @@ { "title": "Franprix", "hex": "EC6237", - "source": "https://www.franprix.fr/" + "source": "https://www.franprix.fr" }, { "title": "Fraunhofer-Gesellschaft", "hex": "179C7D", - "source": "https://www.fraunhofer.de/" + "source": "https://www.fraunhofer.de" }, { "title": "FreeBSD", @@ -3666,8 +4506,8 @@ { "title": "freeCodeCamp", "hex": "0A0A23", - "source": "https://design-style-guide.freecodecamp.org/", - "guidelines": "https://design-style-guide.freecodecamp.org/", + "source": "https://design-style-guide.freecodecamp.org", + "guidelines": "https://design-style-guide.freecodecamp.org", "license": { "type": "CC-BY-SA-4.0", "url": "https://github.com/freeCodeCamp/design-style-guide/blob/cc950c311c61574b6ecbd9e724b6631026e14bfa/LICENSE" @@ -3681,22 +4521,39 @@ { "title": "Freelancer", "hex": "29B2FE", - "source": "https://www.freelancer.com/" + "source": "https://www.freelancer.com" }, { "title": "FreeNAS", "hex": "343434", "source": "https://github.com/freenas/webui/blob/fd668f4c5920fe864fd98fa98e20fd333336c609/src/assets/images/logo.svg" }, + { + "title": "Freepik", + "hex": "1273EB", + "source": "https://commons.wikimedia.org/wiki/File:Freepik.svg" + }, { "title": "Frontend Mentor", "hex": "3F54A3", "source": "https://www.frontendmentor.io" }, + { + "title": "Frontify", + "hex": "2D3232", + "source": "https://brand.frontify.com/d/7WQZazaZFkMz/brand-guidelines-1#/visual/logo" + }, + { + "title": "Fuga Cloud", + "hex": "242F4B", + "source": "https://fuga.cloud", + "guidelines": "https://fuga.cloud/media/" + }, { "title": "Fujifilm", - "hex": "ED1A3A", - "source": "https://upload.wikimedia.org/wikipedia/commons/a/a1/Fujifilm_logo.svg" + "hex": "FB0020", + "source": "https://www.fujifilm.com", + "guidelines": "https://www.fujifilm.com/us/en/terms" }, { "title": "Fujitsu", @@ -3706,13 +4563,13 @@ { "title": "Funimation", "hex": "5B0BB5", - "source": "https://www.funimation.com/", + "source": "https://www.funimation.com", "guidelines": "https://brandpad.io/funimationstyleguide" }, { "title": "Fur Affinity", "hex": "36566F", - "source": "https://www.furaffinity.net/" + "source": "https://www.furaffinity.net" }, { "title": "Furry Network", @@ -3722,7 +4579,7 @@ { "title": "FutureLearn", "hex": "DE00A5", - "source": "https://www.futurelearn.com/" + "source": "https://www.futurelearn.com" }, { "title": "G2", @@ -3741,12 +4598,28 @@ "hex": "000000", "source": "https://upload.wikimedia.org/wikipedia/commons/4/41/Game_and_watch_logo.svg" }, + { + "title": "Game Developer", + "hex": "E60012", + "source": "https://www.gamedeveloper.com", + "aliases": { + "aka": [ + "Gamasutra" + ] + } + }, { "title": "Game Jolt", "hex": "CCFF00", "source": "https://gamejolt.com/about", "guidelines": "https://gamejolt.com/about" }, + { + "title": "Gamemaker", + "hex": "000000", + "source": "https://gamemaker.io/en/legal/brand", + "guidelines": "https://gamemaker.io/en/legal/brand" + }, { "title": "Garmin", "hex": "000000", @@ -3756,7 +4629,7 @@ { "title": "Gatling", "hex": "FF9E2A", - "source": "https://gatling.io/" + "source": "https://gatling.io" }, { "title": "Gatsby", @@ -3764,15 +4637,20 @@ "source": "https://www.gatsbyjs.com/guidelines/logo", "guidelines": "https://www.gatsbyjs.com/guidelines/logo" }, + { + "title": "GDAL", + "hex": "5CAE58", + "source": "https://www.osgeo.org/projects/gdal/" + }, { "title": "Géant", "hex": "DD1F26", - "source": "https://www.geantcasino.fr/" + "source": "https://www.geantcasino.fr" }, { "title": "GeeksforGeeks", "hex": "2F8D46", - "source": "https://www.geeksforgeeks.org/" + "source": "https://www.geeksforgeeks.org" }, { "title": "General Electric", @@ -3818,7 +4696,7 @@ { "title": "Ghostery", "hex": "00AEF0", - "source": "https://www.ghostery.com/", + "source": "https://www.ghostery.com", "guidelines": "https://www.ghostery.com/press/" }, { @@ -3838,7 +4716,7 @@ { "title": "Git", "hex": "F05032", - "source": "http://git-scm.com/downloads/logos", + "source": "https://git-scm.com/downloads/logos", "license": { "type": "CC-BY-3.0" } @@ -3851,7 +4729,7 @@ { "title": "Git LFS", "hex": "F64935", - "source": "https://git-lfs.github.com/" + "source": "https://git-lfs.github.com" }, { "title": "GitBook", @@ -3882,7 +4760,7 @@ { "title": "GitHub Pages", "hex": "222222", - "source": "https://pages.github.com/" + "source": "https://pages.github.com" }, { "title": "GitHub Sponsors", @@ -3897,7 +4775,7 @@ { "title": "GitKraken", "hex": "179287", - "source": "https://www.gitkraken.com/" + "source": "https://www.gitkraken.com" }, { "title": "GitLab", @@ -3908,12 +4786,12 @@ { "title": "Gitpod", "hex": "FFAE33", - "source": "https://www.gitpod.io/" + "source": "https://www.gitpod.io" }, { "title": "Gitter", "hex": "ED1965", - "source": "https://gitter.im/" + "source": "https://gitter.im" }, { "title": "Glassdoor", @@ -3929,7 +4807,7 @@ { "title": "Globus", "hex": "CA6201", - "source": "https://www.globus.de/" + "source": "https://www.globus.de" }, { "title": "Gmail", @@ -4003,8 +4881,8 @@ { "title": "GoCD", "hex": "94399E", - "source": "https://www.gocd.org/", - "guidelines": "https://www.gocd.org/" + "source": "https://www.gocd.org", + "guidelines": "https://www.gocd.org" }, { "title": "GoDaddy", @@ -4024,7 +4902,7 @@ { "title": "GoFundMe", "hex": "00B964", - "source": "https://www.gofundme.com/" + "source": "https://www.gofundme.com" }, { "title": "GOG.com", @@ -4040,7 +4918,7 @@ { "title": "GoldenLine", "hex": "FFE005", - "source": "http://www.goldenline.pl" + "source": "https://www.goldenline.pl" }, { "title": "Goodreads", @@ -4050,7 +4928,7 @@ { "title": "Google", "hex": "4285F4", - "source": "https://partnermarketinghub.withgoogle.com/", + "source": "https://partnermarketinghub.withgoogle.com", "guidelines": "https://about.google/brand-resource-center/brand-elements/" }, { @@ -4073,10 +4951,20 @@ "hex": "E37400", "source": "https://marketingplatform.google.com/intl/en_uk/about/analytics/" }, + { + "title": "Google Apps Script", + "hex": "4285F4", + "source": "https://github.com/simple-icons/simple-icons/issues/3556#issuecomment-800482267" + }, { "title": "Google Assistant", "hex": "4285F4", - "source": "https://assistant.google.com/" + "source": "https://assistant.google.com" + }, + { + "title": "Google Bard", + "hex": "886FBF", + "source": "https://bard.google.com" }, { "title": "Google Calendar", @@ -4091,7 +4979,7 @@ { "title": "Google Chat", "hex": "00AC47", - "source": "https://chat.google.com/" + "source": "https://chat.google.com" }, { "title": "Google Chrome", @@ -4101,22 +4989,33 @@ { "title": "Google Classroom", "hex": "0F9D58", - "source": "https://classroom.google.com/" + "source": "https://classroom.google.com" }, { "title": "Google Cloud", "hex": "4285F4", - "source": "https://cloud.google.com/" + "source": "https://cloud.google.com" }, { "title": "Google Colab", "hex": "F9AB00", "source": "https://colab.research.google.com" }, + { + "title": "Google Container Optimized OS", + "hex": "4285F4", + "source": "https://cloud.google.com/icons", + "guidelines": "https://cloud.google.com/terms/" + }, + { + "title": "Google Docs", + "hex": "4285F4", + "source": "https://www.google.com/docs/about" + }, { "title": "Google Domains", "hex": "4285F4", - "source": "https://domains.google/" + "source": "https://domains.google" }, { "title": "Google Drive", @@ -4136,13 +5035,23 @@ { "title": "Google Fonts", "hex": "4285F4", - "source": "https://fonts.google.com/" + "source": "https://fonts.google.com" + }, + { + "title": "Google Forms", + "hex": "7248B9", + "source": "https://about.google/products/#all-products" }, { "title": "Google Hangouts", "hex": "0C9D58", "source": "https://upload.wikimedia.org/wikipedia/commons/e/ee/Hangouts_icon.svg" }, + { + "title": "Google Home", + "hex": "4285F4", + "source": "https://home.google.com/welcome/" + }, { "title": "Google Keep", "hex": "FFBB00", @@ -4151,7 +5060,7 @@ { "title": "Google Lens", "hex": "4285F4", - "source": "https://lens.google.com/" + "source": "https://lens.google.com" }, { "title": "Google Maps", @@ -4171,12 +5080,12 @@ { "title": "Google Messages", "hex": "1A73E8", - "source": "https://messages.google.com/" + "source": "https://messages.google.com" }, { "title": "Google My Business", "hex": "4285F4", - "source": "https://business.google.com/" + "source": "https://business.google.com" }, { "title": "Google Nearby", @@ -4229,7 +5138,7 @@ { "title": "Google Sheets", "hex": "34A853", - "source": "http://sheets.google.com/" + "source": "https://sheets.google.com" }, { "title": "Google Street View", @@ -4250,7 +5159,7 @@ { "title": "GoToMeeting", "hex": "F68D2E", - "source": "https://www.gotomeeting.com/", + "source": "https://www.gotomeeting.com", "aliases": { "dup": [ { @@ -4275,7 +5184,7 @@ { "title": "Grafana", "hex": "F46800", - "source": "https://grafana.com/" + "source": "https://grafana.com" }, { "title": "Grammarly", @@ -4285,7 +5194,7 @@ { "title": "Grand Frais", "hex": "ED2D2F", - "source": "https://www.grandfrais.com/" + "source": "https://www.grandfrais.com" }, { "title": "GraphQL", @@ -4296,7 +5205,7 @@ { "title": "Grav", "hex": "221E1F", - "source": "http://getgrav.org/media" + "source": "https://getgrav.org/media" }, { "title": "Gravatar", @@ -4308,10 +5217,16 @@ "hex": "FF3633", "source": "https://www.graylog.org" }, + { + "title": "Greenhouse", + "hex": "24A47F", + "source": "https://brand.greenhouse.io/brand-portal/p/6", + "guidelines": "https://brand.greenhouse.io/brand-portal/p/5" + }, { "title": "GreenSock", "hex": "88CE02", - "source": "https://greensock.com/" + "source": "https://greensock.com" }, { "title": "Grid.ai", @@ -4337,7 +5252,7 @@ { "title": "Grubhub", "hex": "F63440", - "source": "https://www.grubhub.com/" + "source": "https://www.grubhub.com" }, { "title": "Grunt", @@ -4345,6 +5260,21 @@ "source": "https://github.com/gruntjs/gruntjs.com/blob/70f43898d9ce8e6cc862ad72bf8a7aee5ca199a9/src/media/grunt-logo-no-wordmark.svg", "guidelines": "https://github.com/gruntjs/grunt-docs/blob/main/Grunt-Brand-Guide.md" }, + { + "title": "GSK", + "hex": "F36633", + "source": "https://www.gskbrandhub.com", + "aliases": { + "aka": [ + "GlaxoSmithKline" + ] + } + }, + { + "title": "GStreamer", + "hex": "FF3131", + "source": "https://gstreamer.freedesktop.org/artwork" + }, { "title": "GTK", "hex": "7FE719", @@ -4373,8 +5303,8 @@ }, { "title": "Gumroad", - "hex": "36A9AE", - "source": "https://gumroad.com/press" + "hex": "FF90E8", + "source": "https://gumroad.com" }, { "title": "Gumtree", @@ -4394,12 +5324,17 @@ { "title": "Gutenberg", "hex": "000000", - "source": "https://github.com/WordPress/gutenberg/blob/master/docs/final-g-wapuu-black.svg" + "source": "https://github.com/WordPress/gutenberg/blob/7829913ae117dfb561d14c600eea7b281afd6556/docs/final-g-wapuu-black.svg" + }, + { + "title": "H3", + "hex": "1E54B7", + "source": "https://github.com/uber/h3/blob/71e09dc002b211887c6db525609a449058233a71/website/static/images/h3Logo-color.svg" }, { "title": "Habr", "hex": "65A3BE", - "source": "https://kiosk.habr.com/" + "source": "https://kiosk.habr.com" }, { "title": "Hack Club", @@ -4415,7 +5350,7 @@ { "title": "Hackaday", "hex": "1A1A1A", - "source": "https://hackaday.com/" + "source": "https://hackaday.com" }, { "title": "Hacker Noon", @@ -4458,7 +5393,7 @@ "title": "Handshake", "slug": "handshake_protocol", "hex": "000000", - "source": "https://handshake.org/" + "source": "https://handshake.org" }, { "title": "HappyCow", @@ -4470,6 +5405,22 @@ "hex": "60B932", "source": "https://branding.cncf.io/projects/harbor/" }, + { + "title": "HarmonyOS", + "hex": "000000", + "source": "https://www.harmonyos.com", + "aliases": { + "aka": [ + "HMOS" + ] + } + }, + { + "title": "HashiCorp", + "hex": "000000", + "source": "https://www.hashicorp.com", + "guidelines": "https://www.hashicorp.com/brand" + }, { "title": "Hashnode", "hex": "2962FF", @@ -4488,12 +5439,12 @@ { "title": "Hatena Bookmark", "hex": "00A4DE", - "source": "http://hatenacorp.jp/press/resource" + "source": "https://hatenacorp.jp/press/resource" }, { "title": "haveibeenpwned", "hex": "2A6379", - "source": "https://haveibeenpwned.com/" + "source": "https://haveibeenpwned.com" }, { "title": "Haxe", @@ -4504,7 +5455,7 @@ { "title": "HBO", "hex": "000000", - "source": "https://www.hbo.com/" + "source": "https://www.hbo.com" }, { "title": "HCL", @@ -4515,13 +5466,24 @@ { "title": "Headless UI", "hex": "66E3FF", - "source": "https://headlessui.dev/" + "source": "https://headlessui.dev" }, { "title": "Headspace", "hex": "F47D31", "source": "https://www.headspace.com/press-and-media" }, + { + "title": "hearthis.at", + "hex": "000000", + "source": "https://hearthis.at" + }, + { + "title": "Hedera", + "hex": "222222", + "source": "https://hederabrandcentral.frontify.com/d/Tmocz52AXpLj/brand-assets#/brand-assets/brand-identity/our-hbar-logomark", + "guidelines": "https://hederabrandcentral.frontify.com/d/Tmocz52AXpLj/brand-assets#/brand-assets/brand-identity" + }, { "title": "HelloFresh", "hex": "99CC33", @@ -4530,7 +5492,7 @@ { "title": "Helly Hansen", "hex": "DA2128", - "source": "https://www.hellyhansen.com/" + "source": "https://www.hellyhansen.com" }, { "title": "Helm", @@ -4544,9 +5506,9 @@ }, { "title": "HelpDesk", - "hex": "FFD000", - "source": "https://helpdesk.design/", - "guidelines": "https://helpdesk.design/" + "hex": "2FC774", + "source": "https://helpdesk.design", + "guidelines": "https://helpdesk.design" }, { "title": "HERE", @@ -4556,28 +5518,38 @@ { "title": "Heroku", "hex": "430098", - "source": "https://brand.heroku.com/", - "guidelines": "https://brand.heroku.com/" + "source": "https://brand.heroku.com", + "guidelines": "https://brand.heroku.com" }, { "title": "Hetzner", "hex": "D50C2D", - "source": "https://www.hetzner.com/" + "source": "https://www.hetzner.com" }, { "title": "Hexo", "hex": "0E83CD", - "source": "https://hexo.io/" + "source": "https://hexo.io" }, { "title": "HEY", "hex": "5522FA", - "source": "https://hey.com/" + "source": "https://hey.com" + }, + { + "title": "Hi Bob", + "hex": "E42C51", + "source": "https://www.hibob.com", + "aliases": { + "aka": [ + "Bob" + ] + } }, { "title": "Hibernate", "hex": "59666C", - "source": "https://hibernate.org/" + "source": "https://hibernate.org" }, { "title": "Hilton", @@ -4592,7 +5564,7 @@ { "title": "Hive", "hex": "FF7A00", - "source": "https://www.hivehome.com/" + "source": "https://www.hivehome.com" }, { "title": "Hive", @@ -4611,12 +5583,12 @@ { "title": "Home Assistant Community Store", "hex": "41BDF5", - "source": "https://hacs.xyz/" + "source": "https://hacs.xyz" }, { "title": "HomeAdvisor", "hex": "F68315", - "source": "https://www.homeadvisor.com/" + "source": "https://www.homeadvisor.com" }, { "title": "Homebrew", @@ -4636,7 +5608,12 @@ { "title": "Honda", "hex": "E40521", - "source": "https://www.honda.ie/" + "source": "https://www.honda.ie" + }, + { + "title": "Honey", + "hex": "FF6801", + "source": "https://www.joinhoney.com" }, { "title": "Hootsuite", @@ -4657,7 +5634,12 @@ { "title": "Hotjar", "hex": "FD3A5C", - "source": "https://www.hotjar.com/" + "source": "https://www.hotjar.com" + }, + { + "title": "Hotwire", + "hex": "FFE801", + "source": "https://hotwired.dev" }, { "title": "Houdini", @@ -4675,15 +5657,26 @@ "hex": "0096D6", "source": "https://brandcentral.ext.hp.com/login" }, + { + "title": "HSBC", + "hex": "DB0011", + "source": "https://www.hsbc.com", + "guidelines": "https://www.hsbc.com/terms-and-conditions" + }, { "title": "HTML Academy", "hex": "302683", - "source": "https://htmlacademy.ru/" + "source": "https://htmlacademy.ru" }, { "title": "HTML5", "hex": "E34F26", - "source": "http://www.w3.org/html/logo/" + "source": "https://www.w3.org/html/logo/" + }, + { + "title": "htop", + "hex": "009020", + "source": "https://github.com/htop-dev/htop/blob/03d5e4746f53bd07daf68638d714a7fec336297b/htop.svg" }, { "title": "HTTPie", @@ -4705,13 +5698,13 @@ { "title": "Hugo", "hex": "FF4088", - "source": "https://gohugo.io/" + "source": "https://gohugo.io" }, { "title": "Hulu", "hex": "1CE783", - "source": "https://thisis.hulu.com/", - "guidelines": "https://thisis.hulu.com/" + "source": "https://thisis.hulu.com", + "guidelines": "https://thisis.hulu.com" }, { "title": "Humble Bundle", @@ -4721,7 +5714,7 @@ { "title": "Hungry Jack's", "hex": "D0021B", - "source": "https://www.hungryjacks.com.au/" + "source": "https://www.hungryjacks.com.au" }, { "title": "Hurriyetemlak", @@ -4736,12 +5729,12 @@ { "title": "Hyper", "hex": "000000", - "source": "https://hyper.is/" + "source": "https://hyper.is" }, { "title": "Hyperledger", "hex": "2F3134", - "source": "https://www.hyperledger.org/" + "source": "https://www.hyperledger.org" }, { "title": "Hypothesis", @@ -4785,10 +5778,15 @@ "hex": "BE95FF", "source": "https://www.ibm.com/brand/systems/watson/brand/" }, + { + "title": "Iced", + "hex": "3645FF", + "source": "https://iced.rs" + }, { "title": "Iceland", "hex": "CC092F", - "source": "https://www.iceland.co.uk/" + "source": "https://www.iceland.co.uk" }, { "title": "Icinga", @@ -4803,7 +5801,7 @@ { "title": "IcoMoon", "hex": "825794", - "source": "https://icomoon.io/" + "source": "https://icomoon.io" }, { "title": "ICON", @@ -4818,17 +5816,17 @@ { "title": "Iconify", "hex": "1769AA", - "source": "https://iconify.design/" + "source": "https://iconify.design" }, { "title": "IconJar", "hex": "16A5F3", - "source": "https://geticonjar.com/" + "source": "https://geticonjar.com" }, { "title": "Icons8", "hex": "1FB141", - "source": "https://icons8.com/" + "source": "https://icons8.com" }, { "title": "ICQ", @@ -4844,13 +5842,13 @@ { "title": "iFixit", "hex": "0071CE", - "source": "https://www.ifixit.com/", + "source": "https://www.ifixit.com", "guidelines": "https://www.ifixit.com/Info/Media" }, { "title": "iFood", "hex": "EA1D2C", - "source": "https://ifood.com.br/" + "source": "https://ifood.com.br" }, { "title": "IFTTT", @@ -4867,7 +5865,12 @@ { "title": "IKEA", "hex": "0058A3", - "source": "https://www.ikea.com/" + "source": "https://www.ikea.com" + }, + { + "title": "Île-de-France Mobilités", + "hex": "67B4E7", + "source": "https://www.iledefrance-mobilites.fr" }, { "title": "ImageJ", @@ -4891,16 +5894,31 @@ "hex": "00E7C3", "source": "https://github.com/immerjs/immer/blob/7a5382899bc8b0bf5e21972a1c7db63f53e1d697/website/static/img/immer-logo.svg" }, + { + "title": "Immich", + "hex": "4250AF", + "source": "https://github.com/immich-app/immich/blob/bba4c4418279b7dc87e0f4a0b346a4e81057a631/design/immich-logo.svg" + }, { "title": "Imou", "hex": "E89313", "source": "https://www.imoulife.com/support/download/userManual" }, + { + "title": "ImprovMX", + "hex": "2FBEFF", + "source": "https://improvmx.com" + }, { "title": "Indeed", "hex": "003A9B", "source": "https://indeed.design/resources" }, + { + "title": "Inertia", + "hex": "9553E9", + "source": "https://inertiajs.com" + }, { "title": "Infiniti", "hex": "000000", @@ -4912,21 +5930,36 @@ "source": "https://influxdata.github.io/branding/logo/downloads/", "guidelines": "https://influxdata.github.io/branding/logo/usage/" }, + { + "title": "InfoQ", + "hex": "2C6CAF", + "source": "https://www.infoq.com" + }, { "title": "Informatica", "hex": "FF4D00", - "source": "https://www.informatica.com/" + "source": "https://www.informatica.com" }, { "title": "Infosys", "hex": "007CC3", "source": "https://www.infosys.com/newsroom/journalist-resources/infosyslogo.html" }, + { + "title": "Infracost", + "hex": "DB44B8", + "source": "https://www.infracost.io/img/logo.svg" + }, { "title": "Ingress", "hex": "783CBD", "source": "https://ingress.com/assets/fonts/ingress_icons.woff" }, + { + "title": "Inkdrop", + "hex": "7A78D7", + "source": "https://site-cdn.inkdrop.app/site/icons/inkdrop-icon.svg" + }, { "title": "Inkscape", "hex": "000000", @@ -4938,7 +5971,7 @@ { "title": "Insomnia", "hex": "4000BF", - "source": "https://insomnia.rest/" + "source": "https://insomnia.rest" }, { "title": "Instacart", @@ -4954,18 +5987,24 @@ { "title": "Instapaper", "hex": "1F1F1F", - "source": "https://www.instapaper.com/" + "source": "https://www.instapaper.com" }, { "title": "Instatus", "hex": "4EE3C2", - "source": "https://www.instatus.com/" + "source": "https://www.instatus.com" }, { "title": "Instructables", "hex": "FABF15", "source": "https://www.instructables.com/community/Official-Instructables-Logos-1/" }, + { + "title": "Instructure", + "hex": "2A7BA0", + "source": "https://www.instructure.com/about/brand-guide/download-logos", + "guidelines": "https://www.instructure.com/canvas/resources/noram-guides/instructure-brand-guide-2022" + }, { "title": "Integromat", "hex": "2F8CBB", @@ -4982,6 +6021,11 @@ "source": "https://www.jetbrains.com/idea/", "guidelines": "https://www.jetbrains.com/company/brand/" }, + { + "title": "Interaction Design Foundation", + "hex": "2B2B2B", + "source": "https://www.interaction-design.org" + }, { "title": "InteractJS", "hex": "2599ED", @@ -4996,12 +6040,12 @@ { "title": "Intermarche", "hex": "E2001A", - "source": "https://www.intermarche.com/" + "source": "https://www.intermarche.com" }, { "title": "Internet Archive", "hex": "666666", - "source": "https://archive.org/" + "source": "https://archive.org" }, { "title": "Internet Explorer", @@ -5011,7 +6055,13 @@ { "title": "Intigriti", "hex": "161A36", - "source": "https://www.intigriti.com/" + "source": "https://www.intigriti.com" + }, + { + "title": "Intuit", + "hex": "236CFF", + "source": "https://www.intuit.com", + "guidelines": "https://www.intuit.com/company/press-room/logos" }, { "title": "InVision", @@ -5061,6 +6111,11 @@ "type": "CC-BY-SA-3.0" } }, + { + "title": "IRIS", + "hex": "25313C", + "source": "https://www.iris.co.uk" + }, { "title": "Issuu", "hex": "F36D5D", @@ -5088,6 +6143,11 @@ "hex": "FB5BC5", "source": "https://upload.wikimedia.org/wikipedia/commons/d/df/ITunes_logo.svg" }, + { + "title": "ITVx", + "hex": "DEEB52", + "source": "https://www.itvmedia.co.uk" + }, { "title": "IVECO", "hex": "004994", @@ -5097,7 +6157,7 @@ "title": "Jabber", "hex": "CC0000", "source": "https://commons.wikimedia.org/wiki/File:Jabber-bulb.svg", - "guidelines": "http://www.jabber.org/faq.html#logo", + "guidelines": "https://www.jabber.org/faq.html#logo", "license": { "type": "CC-BY-2.5" } @@ -5116,24 +6176,18 @@ { "title": "Jameson", "hex": "004027", - "source": "https://www.jamesonwhiskey.com/" + "source": "https://www.jamesonwhiskey.com" }, { "title": "Jamstack", "hex": "F0047F", - "source": "https://github.com/jamstack/jamstack.org/tree/main/src/site/img/logo" + "source": "https://github.com/jamstack/jamstack.org/tree/9e761f6b77ad11e8dc6d3a953e61e53f1d99a1e6/src/site/img/logo" }, { "title": "Jasmine", "hex": "8A4182", "source": "https://github.com/jasmine/jasmine/blob/8991b1bba39b5b7e89fc5eeb07ae271a684cb1a4/images/jasmine-horizontal.svg" }, - { - "title": "Java", - "hex": "007396", - "source": "https://www.oracle.com/legal/logos.html", - "guidelines": "https://www.oracle.com/legal/logos.html" - }, { "title": "JavaScript", "hex": "F7DF1E", @@ -5145,7 +6199,7 @@ { "title": "JBL", "hex": "FF3300", - "source": "https://www.jbl.com/" + "source": "https://www.jbl.com" }, { "title": "JCB", @@ -5155,8 +6209,8 @@ { "title": "Jeep", "hex": "000000", - "source": "http://www.fcaci.com/x/JEEPv15", - "guidelines": "http://www.fcaci.com/x/JEEPv15" + "source": "https://www.fcaci.com/x/JEEPv15", + "guidelines": "https://www.fcaci.com/x/JEEPv15" }, { "title": "Jekyll", @@ -5190,13 +6244,18 @@ { "title": "Jest", "hex": "C21325", - "source": "https://jestjs.io/" + "source": "https://jestjs.io" }, { "title": "JET", "hex": "FBBA00", "source": "https://de.wikipedia.org/wiki/Datei:JET.svg" }, + { + "title": "JetBlue", + "hex": "001E59", + "source": "https://www.jetblue.com" + }, { "title": "JetBrains", "hex": "000000", @@ -5217,7 +6276,13 @@ { "title": "JFrog Bintray", "hex": "43A047", - "source": "https://bintray.com/" + "source": "https://bintray.com" + }, + { + "title": "JFrog Pipelines", + "hex": "40BE46", + "source": "https://jfrog.com/pipelines/", + "guidelines": "https://jfrog.com/brand-guidelines/" }, { "title": "Jinja", @@ -5263,6 +6328,11 @@ "hex": "000000", "source": "https://www.nike.com/jordan" }, + { + "title": "Jovian", + "hex": "0D61FF", + "source": "https://jovian.com" + }, { "title": "JPEG", "hex": "8A8A8A", @@ -5280,7 +6350,7 @@ { "title": "JR Group", "hex": "000000", - "source": "https://www.jrhokkaido.co.jp/" + "source": "https://www.jrhokkaido.co.jp" }, { "title": "jsDelivr", @@ -5290,7 +6360,7 @@ { "title": "JSFiddle", "hex": "0084FF", - "source": "https://jsfiddle.net/" + "source": "https://jsfiddle.net" }, { "title": "JSON", @@ -5300,12 +6370,27 @@ { "title": "JSON Web Tokens", "hex": "000000", - "source": "https://jwt.io/" + "source": "https://jwt.io" }, { "title": "JSS", "hex": "F7DF1E", - "source": "https://cssinjs.org/" + "source": "https://cssinjs.org" + }, + { + "title": "JUCE", + "hex": "8DC63F", + "source": "https://juce.com" + }, + { + "title": "Juejin", + "hex": "007FFF", + "source": "https://juejin.cn" + }, + { + "title": "JUKE", + "hex": "6CD74A", + "source": "https://juke.nl" }, { "title": "Julia", @@ -5342,7 +6427,17 @@ { "title": "K3s", "hex": "FFC61C", - "source": "https://k3s.io/" + "source": "https://k3s.io" + }, + { + "title": "k6", + "hex": "7D64FF", + "source": "https://commons.wikimedia.org/wiki/File:K6-logo.svg", + "aliases": { + "aka": [ + "Grafana k6" + ] + } }, { "title": "Kaggle", @@ -5377,6 +6472,11 @@ "source": "https://www.kali.org/docs/policy/trademark/", "guidelines": "https://www.kali.org/docs/policy/trademark/" }, + { + "title": "Kamailio", + "hex": "506365", + "source": "https://www.kamailio.org/pub/kamailio-logos/current" + }, { "title": "Kaniko", "hex": "FFA600", @@ -5395,7 +6495,7 @@ { "title": "KashFlow", "hex": "E5426E", - "source": "https://www.kashflow.com/" + "source": "https://www.kashflow.com" }, { "title": "Kaspersky", @@ -5428,6 +6528,11 @@ "source": "https://kdenlive.org/en/logo/", "guidelines": "https://kdenlive.org/en/logo/" }, + { + "title": "Keep a Changelog", + "hex": "E05735", + "source": "https://keepachangelog.com" + }, { "title": "KeePassXC", "hex": "6CAC4D", @@ -5441,7 +6546,7 @@ { "title": "Keras", "hex": "D00000", - "source": "https://keras.io/" + "source": "https://keras.io" }, { "title": "Keybase", @@ -5453,6 +6558,11 @@ "hex": "047AED", "source": "https://www.keycdn.com/logos" }, + { + "title": "Keystone", + "hex": "166BFF", + "source": "https://keystonejs.com" + }, { "title": "KFC", "hex": "F40027", @@ -5485,6 +6595,14 @@ "hex": "005571", "source": "https://www.elastic.co/brand" }, + { + "title": "KiCad", + "hex": "314CB0", + "source": "https://www.kicad.org/about/kicad/", + "license": { + "type": "GPL-3.0-or-later" + } + }, { "title": "Kickstarter", "hex": "05CE78", @@ -5503,32 +6621,42 @@ ] }, "hex": "000000", - "source": "https://www.kingston.com/" + "source": "https://www.kingston.com" }, { "title": "KinoPoisk", "hex": "FF6600", - "source": "https://www.kinopoisk.ru/", + "source": "https://www.kinopoisk.ru", "aliases": { "loc": { "ru-RU": "КиноПоиск" } } }, + { + "title": "Kinsta", + "hex": "5333ED", + "source": "https://kinsta.com/press" + }, { "title": "Kirby", "hex": "000000", "source": "https://getkirby.com/press" }, + { + "title": "Kit", + "hex": "000000", + "source": "https://kit.co" + }, { "title": "Kitsu", "hex": "FD755C", - "source": "https://kitsu.io/" + "source": "https://kitsu.io" }, { "title": "Klarna", "hex": "FFB3C7", - "source": "https://klarna.design/" + "source": "https://klarna.design" }, { "title": "KLM", @@ -5548,9 +6676,9 @@ }, { "title": "KnowledgeBase", - "hex": "FFD000", - "source": "https://www.knowledgebase.ai/design", - "guidelines": "https://www.knowledgebase.ai/design" + "hex": "9146FF", + "source": "https://www.knowledgebase.com/design", + "guidelines": "https://www.knowledgebase.com/design" }, { "title": "Known", @@ -5566,28 +6694,34 @@ { "title": "Koa", "hex": "33333D", - "source": "https://koajs.com/" + "source": "https://koajs.com" }, { "title": "Koc", "hex": "F9423A", "source": "https://www.koc.com.tr/en" }, + { + "title": "Kodak", + "hex": "ED0000", + "source": "https://www.kodak.com", + "guidelines": "https://www.kodak.com/en/company/page/site-terms" + }, { "title": "Kodi", "hex": "17B2E7", - "source": "https://kodi.tv/" + "source": "https://kodi.tv" }, { "title": "Kofax", "hex": "00558C", - "source": "https://www.kofax.com/" + "source": "https://www.kofax.com" }, { "title": "Komoot", "hex": "6AA127", - "source": "http://newsroom.komoot.com/media_kits/219423/", - "guidelines": "http://newsroom.komoot.com/media_kits/219423/" + "source": "https://newsroom.komoot.com/media_kits/219423/", + "guidelines": "https://newsroom.komoot.com/media_kits/219423/" }, { "title": "Konami", @@ -5616,6 +6750,11 @@ "source": "https://www.jetbrains.com/company/brand/logos/", "guidelines": "https://www.jetbrains.com/company/brand/" }, + { + "title": "Koyeb", + "hex": "121212", + "source": "https://www.koyeb.com" + }, { "title": "Krita", "hex": "3BABFF", @@ -5635,7 +6774,7 @@ { "title": "Kubernetes", "hex": "326CE5", - "source": "https://github.com/kubernetes/kubernetes/tree/master/logo" + "source": "https://github.com/kubernetes/kubernetes/tree/cac53883f4714452f3084a22e4be20d042a9df33/logo" }, { "title": "Kubuntu", @@ -5647,10 +6786,15 @@ "hex": "290B53", "source": "https://cncf-branding.netlify.app/projects/kuma/" }, + { + "title": "Kuula", + "hex": "4092B4", + "source": "https://kuula.co" + }, { "title": "Kyocera", "hex": "DF0522", - "source": "https://uk.kyocera.com/" + "source": "https://uk.kyocera.com" }, { "title": "LabVIEW", @@ -5673,10 +6817,15 @@ "hex": "005A2B", "source": "https://media.landrover.com/en/press-kit" }, + { + "title": "Lapce", + "hex": "3B82F6", + "source": "https://github.com/lapce/lapce/blob/95c4cf2d87083e348c0b621d0be0ea17f79ed703/extra/images/logo.svg" + }, { "title": "Laragon", "hex": "0E83CD", - "source": "https://laragon.org/" + "source": "https://laragon.org" }, { "title": "Laravel", @@ -5691,7 +6840,7 @@ { "title": "Laravel Nova", "hex": "252D37", - "source": "https://nova.laravel.com/" + "source": "https://nova.laravel.com" }, { "title": "Last.fm", @@ -5750,6 +6899,17 @@ "hex": "FFA116", "source": "https://leetcode.com/store" }, + { + "title": "Legacy Games", + "hex": "144B9E", + "source": "https://legacygames.com" + }, + { + "title": "Leica", + "hex": "E20612", + "source": "https://leica-camera.com", + "guidelines": "https://leica-camera.com/en-US/legal-notices" + }, { "title": "Lemmy", "hex": "FFFFFF", @@ -5765,15 +6925,20 @@ "hex": "3D90CE", "source": "https://github.com/lensapp/lens/blob/3cc12d9599b655a366e7a34c356d2a84654b2466/docs/img/lens-logo-icon.svg" }, + { + "title": "Leptos", + "hex": "EF3939", + "source": "https://github.com/leptos-rs/leptos/blob/6fac92cb6298f1bfa72464de47e33e47b5e5857d/logos/Simple_Icon.svg" + }, { "title": "Lerna", - "hex": "2F0268", + "hex": "9333EA", "source": "https://github.com/lerna/logo/blob/fb18db535d71aacc6ffb0f6b75a0c3bd9e353543/lerna.svg" }, { "title": "Leroy Merlin", "hex": "78BE20", - "source": "https://www.leroymerlin.fr/" + "source": "https://www.leroymerlin.fr" }, { "title": "Less", @@ -5791,8 +6956,9 @@ }, { "title": "Letterboxd", - "hex": "00D735", - "source": "https://letterboxd.com/about/logos/" + "hex": "202830", + "source": "https://letterboxd.com/about/brand/", + "guidelines": "https://letterboxd.com/about/brand/" }, { "title": "levels.fyi", @@ -5808,7 +6974,12 @@ { "title": "LGTM", "hex": "FFFFFF", - "source": "https://lgtm.com/" + "source": "https://lgtm.com" + }, + { + "title": "Libera.Chat", + "hex": "FF55DD", + "source": "https://libera.chat" }, { "title": "Liberapay", @@ -5848,7 +7019,7 @@ { "title": "Lidl", "hex": "0050AA", - "source": "https://www.lidl.de/" + "source": "https://www.lidl.de" }, { "title": "LIFX", @@ -5861,18 +7032,28 @@ "hex": "F44B21", "source": "https://github.com/GoogleChrome/lighthouse/blob/80d2e6c1948f232ec4f1bdeabc8bc632fc5d0bfd/assets/lh_favicon.svg" }, + { + "title": "Lightning", + "hex": "792EE5", + "source": "https://github.com/Lightning-AI/lightning/blob/a584196abf820179adb0758ef67ddae91c44e7bc/docs/source/_static/images/icon.svg" + }, { "title": "LINE", "hex": "00C300", - "source": "http://line.me/en/logo", - "guidelines": "http://line.me/en/logo" + "source": "https://line.me/en/logo", + "guidelines": "https://line.me/en/logo" }, { "title": "LineageOS", "hex": "167C80", - "source": "https://www.lineageos.org/", + "source": "https://www.lineageos.org", "guidelines": "https://docs.google.com/presentation/d/1VmxFrVqkjtNMjZbAcrC4egp8C_So7gjJR3KuxdJfJDo/edit?usp=sharing" }, + { + "title": "Linear", + "hex": "5E6AD2", + "source": "https://linear.app" + }, { "title": "LinkedIn", "hex": "0A66C2", @@ -5887,17 +7068,12 @@ { "title": "Linkfire", "hex": "FF3850", - "source": "https://www.linkfire.com/" + "source": "https://www.linkfire.com" }, { "title": "Linktree", - "hex": "39E09B", - "source": "https://linktr.ee/" - }, - { - "title": "Linode", - "hex": "00A95C", - "source": "https://www.linode.com/company/press/" + "hex": "43E55E", + "source": "https://linktr.ee" }, { "title": "Linux", @@ -5942,21 +7118,26 @@ "source": "https://litecoin-foundation.org/litecoin-branding-guidelines/", "guidelines": "https://litecoin-foundation.org/litecoin-branding-guidelines/" }, + { + "title": "LITIENGINE", + "hex": "00A5BC", + "source": "https://litiengine.com" + }, { "title": "LiveChat", - "hex": "FFD000", - "source": "https://livechat.design/", - "guidelines": "https://livechat.design/" + "hex": "FF5100", + "source": "https://livechat.design", + "guidelines": "https://livechat.design" }, { "title": "LiveJournal", "hex": "00B0EA", - "source": "http://www.livejournal.com" + "source": "https://www.livejournal.com" }, { "title": "Livewire", "hex": "4E56A6", - "source": "https://laravel-livewire.com/" + "source": "https://laravel-livewire.com" }, { "title": "LLVM", @@ -5984,6 +7165,11 @@ "source": "https://www.logmein.com/legal/trademark", "guidelines": "https://www.logmein.com/legal/trademark" }, + { + "title": "Logseq", + "hex": "85C8C8", + "source": "https://github.com/logseq/logseq/blob/c4d15ec8487c9fb6b6f41780fc1abddab89491e4/resources/icon.png" + }, { "title": "Logstash", "hex": "005571", @@ -5993,7 +7179,7 @@ { "title": "Looker", "hex": "4285F4", - "source": "https://looker.com/" + "source": "https://looker.com" }, { "title": "Loom", @@ -6003,7 +7189,12 @@ { "title": "Loop", "hex": "F29400", - "source": "https://loop.frontiersin.org/" + "source": "https://loop.frontiersin.org" + }, + { + "title": "LoopBack", + "hex": "3F5DFF", + "source": "https://loopback.io/resources" }, { "title": "Lospec", @@ -6016,6 +7207,12 @@ "hex": "11397E", "source": "https://www.lot.com/us/en/kaleidoscope-inflight-magazine" }, + { + "title": "LTspice", + "hex": "900028", + "source": "https://www.analog.com/media/en/news-marketing-collateral/solutions-bulletins-brochures/ltspice-keyboard-shortcuts.pdf", + "guidelines": "https://www.analog.com/en/about-adi/legal-and-risk-oversight/intellectual-property/trademark-notice.html" + }, { "title": "Lua", "hex": "2C2D72", @@ -6025,17 +7222,22 @@ { "title": "Lubuntu", "hex": "0068C8", - "source": "https://lubuntu.net/" + "source": "https://lubuntu.net" + }, + { + "title": "Ludwig", + "hex": "FFFFFF", + "source": "https://github.com/ludwig-ai/ludwig-docs/blob/8d8abb2117a93af2622a6545943c773b27153e1b/docs/images/ludwig_icon.svg" }, { "title": "Lufthansa", "hex": "05164D", - "source": "https://www.lufthansa.com/" + "source": "https://www.lufthansa.com" }, { "title": "Lumen", "hex": "E74430", - "source": "https://lumen.laravel.com/" + "source": "https://lumen.laravel.com" }, { "title": "Lunacy", @@ -6066,6 +7268,11 @@ "hex": "000000", "source": "https://commons.wikimedia.org/wiki/File:MacOS_wordmark_(2017).svg" }, + { + "title": "MacPaw", + "hex": "000000", + "source": "https://macpaw.com" + }, { "title": "Macy's", "hex": "E21A2C", @@ -6079,12 +7286,18 @@ { "title": "Magento", "hex": "EE672F", - "source": "http://magento.com" + "source": "https://magento.com" }, { "title": "Magisk", "hex": "00AF9C", - "source": "https://github.com/topjohnwu/Magisk/blob/master/app/src/main/res/drawable/ic_magisk.xml" + "source": "https://github.com/topjohnwu/Magisk/blob/23ad611566b557f26d268920692b25aa89fc0070/app/src/main/res/drawable/ic_magisk.xml" + }, + { + "title": "mail.com", + "hex": "004788", + "source": "https://www.mail.com", + "guidelines": "https://www.mail.com/company/terms/" }, { "title": "Mail.Ru", @@ -6094,8 +7307,8 @@ { "title": "MailChimp", "hex": "FFE01B", - "source": "http://mailchimp.com/about/brand-assets", - "guidelines": "http://mailchimp.com/about/brand-assets" + "source": "https://mailchimp.com/about/brand-assets", + "guidelines": "https://mailchimp.com/about/brand-assets" }, { "title": "Mailgun", @@ -6111,7 +7324,12 @@ { "title": "MakerBot", "hex": "FF1E0D", - "source": "http://www.makerbot.com/makerbot-press-assets" + "source": "https://www.makerbot.com/makerbot-press-assets" + }, + { + "title": "Mamba UI", + "hex": "6D28D9", + "source": "https://github.com/Microwawe/mamba-ui/blob/b4ca2eba570c451886e5822d7ba12a8d78015bba/src/assets/svg/logo.svg" }, { "title": "MAMP", @@ -6121,7 +7339,7 @@ { "title": "MAN", "hex": "E40045", - "source": "https://www.corporate.man.eu/" + "source": "https://www.corporate.man.eu" }, { "title": "ManageIQ", @@ -6131,7 +7349,7 @@ { "title": "Manjaro", "hex": "35BF5C", - "source": "https://manjaro.org/" + "source": "https://manjaro.org" }, { "title": "Mapbox", @@ -6139,6 +7357,11 @@ "source": "https://www.mapbox.com/about/press/brand-guidelines", "guidelines": "https://www.mapbox.com/about/press/brand-guidelines" }, + { + "title": "MapLibre", + "hex": "396CB2", + "source": "https://github.com/maplibre/maplibre-gl-js-docs/blob/e916a4cdd671890126f88b26b2b16c04220dc4b0/docs/pages/assets/favicon/maplibregl-favicon.svg" + }, { "title": "MariaDB", "hex": "003545", @@ -6148,7 +7371,7 @@ { "title": "MariaDB Foundation", "hex": "1F305F", - "source": "https://mariadb.org/" + "source": "https://mariadb.org" }, { "title": "Markdown", @@ -6162,7 +7385,7 @@ { "title": "Marketo", "hex": "5C4C9F", - "source": "https://www.marketo.com/" + "source": "https://www.marketo.com" }, { "title": "Marko", @@ -6172,7 +7395,7 @@ { "title": "Marriott", "hex": "A70023", - "source": "https://marriott-hotels.marriott.com/" + "source": "https://marriott-hotels.marriott.com" }, { "title": "Maserati", @@ -6192,8 +7415,8 @@ }, { "title": "Mastodon", - "hex": "3088D4", - "source": "https://joinmastodon.org/" + "hex": "6364FF", + "source": "https://github.com/mastodon/mastodon/blob/7ccf7a73f1c47a8c03712c39f7c591e837cf6d08/app/javascript/images/logo-symbol-icon.svg" }, { "title": "Material Design", @@ -6232,12 +7455,17 @@ { "title": "Matternet", "hex": "261C29", - "source": "http://mttr.net" + "source": "https://mttr.net" + }, + { + "title": "Mautic", + "hex": "4E5E9E", + "source": "https://www.mautic.org/about/logos-and-graphics" }, { "title": "Max", "hex": "525252", - "source": "https://cycling74.com/" + "source": "https://cycling74.com" }, { "title": "Max-Planck-Gesellschaft", @@ -6267,7 +7495,12 @@ { "title": "McLaren", "hex": "FF0000", - "source": "https://cars.mclaren.com/" + "source": "https://cars.mclaren.com" + }, + { + "title": "mdBook", + "hex": "000000", + "source": "https://github.com/rust-lang/mdBook/blob/cdfa5ad9909e2cba8390688f3f0686fb70cb4bef/src/theme/favicon.svg" }, { "title": "MDN Web Docs", @@ -6288,7 +7521,7 @@ { "title": "MediaMarkt", "hex": "DF0000", - "source": "https://www.mediamarkt.de/" + "source": "https://www.mediamarkt.de" }, { "title": "MediaTek", @@ -6298,7 +7531,12 @@ { "title": "MediaTemple", "hex": "000000", - "source": "https://mediatemple.net/" + "source": "https://mediatemple.net" + }, + { + "title": "MediBang Paint", + "hex": "00DBDE", + "source": "https://medibangpaint.com" }, { "title": "Medium", @@ -6319,17 +7557,22 @@ { "title": "Mendeley", "hex": "9D1620", - "source": "https://www.mendeley.com/" + "source": "https://www.mendeley.com" + }, + { + "title": "Mercado Pago", + "hex": "00B1EA", + "source": "https://www.mercadopago.com" }, { "title": "Mercedes", "hex": "242424", - "source": "https://www.mercedes-benz.com/" + "source": "https://www.mercedes-benz.com" }, { "title": "Merck", "hex": "007A73", - "source": "https://www.merck.com/" + "source": "https://www.merck.com" }, { "title": "Mercurial", @@ -6355,7 +7598,7 @@ { "title": "Metabase", "hex": "509EE3", - "source": "https://www.metabase.com/" + "source": "https://www.metabase.com" }, { "title": "MetaFilter", @@ -6365,7 +7608,7 @@ { "title": "Meteor", "hex": "DE4F4F", - "source": "http://logo.meteorapp.com/" + "source": "https://logo.meteorapp.com" }, { "title": "Metro", @@ -6385,27 +7628,43 @@ { "title": "Métro de Paris", "hex": "003E95", - "source": "https://www.ratp.fr/" + "source": "https://www.ratp.fr" }, { "title": "MeWe", "hex": "17377F", "source": "https://mewe.com" }, + { + "title": "MG", + "aliases": { + "aka": [ + "Morris Garages" + ] + }, + "hex": "FF0000", + "source": "https://www.mg.co.uk/themes/custom/mg/assets/images/svg/mg-logo-desktop.svg", + "guidelines": "https://www.mg.co.uk/terms-and-conditions" + }, + { + "title": "Micro Editor", + "hex": "2E3192", + "source": "https://github.com/zyedidia/micro/blob/48645907ec55798b75723019dad75dba51bd97d7/assets/micro-logo-mark.svg" + }, { "title": "micro:bit", "hex": "00ED00", - "source": "https://microbit.org/" + "source": "https://microbit.org" }, { "title": "Micro.blog", "hex": "FF8800", - "source": "https://help.micro.blog/" + "source": "https://help.micro.blog" }, { "title": "Microgenetics", "hex": "FF0000", - "source": "http://microgenetics.co.uk/" + "source": "https://microgenetics.co.uk" }, { "title": "MicroPython", @@ -6420,12 +7679,17 @@ { "title": "Microsoft Academic", "hex": "2D9FD9", - "source": "https://academic.microsoft.com/" + "source": "https://academic.microsoft.com" }, { "title": "Microsoft Access", "hex": "A4373A", - "source": "https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products" + "source": "https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products", + "guidelines": "https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks", + "license": { + "type": "custom", + "url": "https://aka.ms/fluentui-assets-license" + } }, { "title": "Microsoft Azure", @@ -6445,12 +7709,22 @@ { "title": "Microsoft Excel", "hex": "217346", - "source": "https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products" + "source": "https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products", + "guidelines": "https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks", + "license": { + "type": "custom", + "url": "https://aka.ms/fluentui-assets-license" + } }, { "title": "Microsoft Exchange", "hex": "0078D4", - "source": "https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products" + "source": "https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products", + "guidelines": "https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks", + "license": { + "type": "custom", + "url": "https://aka.ms/fluentui-assets-license" + } }, { "title": "Microsoft Office", @@ -6460,12 +7734,22 @@ { "title": "Microsoft OneDrive", "hex": "0078D4", - "source": "https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products" + "source": "https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products", + "guidelines": "https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks", + "license": { + "type": "custom", + "url": "https://aka.ms/fluentui-assets-license" + } }, { "title": "Microsoft OneNote", "hex": "7719AA", - "source": "https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products" + "source": "https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products", + "guidelines": "https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks", + "license": { + "type": "custom", + "url": "https://aka.ms/fluentui-assets-license" + } }, { "title": "Microsoft Outlook", @@ -6475,12 +7759,22 @@ { "title": "Microsoft PowerPoint", "hex": "B7472A", - "source": "https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products" + "source": "https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products", + "guidelines": "https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks", + "license": { + "type": "custom", + "url": "https://aka.ms/fluentui-assets-license" + } }, { "title": "Microsoft SharePoint", "hex": "0078D4", - "source": "https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products" + "source": "https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products", + "guidelines": "https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks", + "license": { + "type": "custom", + "url": "https://aka.ms/fluentui-assets-license" + } }, { "title": "Microsoft SQL Server", @@ -6490,7 +7784,12 @@ { "title": "Microsoft Teams", "hex": "6264A7", - "source": "https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products" + "source": "https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products", + "guidelines": "https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks", + "license": { + "type": "custom", + "url": "https://aka.ms/fluentui-assets-license" + } }, { "title": "Microsoft Translator", @@ -6500,12 +7799,27 @@ { "title": "Microsoft Visio", "hex": "3955A3", - "source": "https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products" + "source": "https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products", + "guidelines": "https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks", + "license": { + "type": "custom", + "url": "https://aka.ms/fluentui-assets-license" + } }, { "title": "Microsoft Word", "hex": "2B579A", - "source": "https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products" + "source": "https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products", + "guidelines": "https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks", + "license": { + "type": "custom", + "url": "https://aka.ms/fluentui-assets-license" + } + }, + { + "title": "Microstation", + "hex": "62BB47", + "source": "https://www.bentley.com/software/microstation" }, { "title": "MicroStrategy", @@ -6518,6 +7832,11 @@ "hex": "000000", "source": "https://en.wikipedia.org/wiki/MIDI" }, + { + "title": "Mikrotik", + "hex": "293239", + "source": "https://mikrotik.com/aboutus" + }, { "title": "Minds", "hex": "FED12F", @@ -6534,27 +7853,46 @@ { "title": "Minetest", "hex": "53AC56", - "source": "https://www.minetest.net/" + "source": "https://www.minetest.net" }, { "title": "Mini", "hex": "000000", "source": "https://mini.co.uk" }, + { + "title": "MinIO", + "hex": "C72E49", + "source": "https://min.io", + "guidelines": "https://min.io/logo" + }, { "title": "Minutemailer", "hex": "30B980", "source": "https://minutemailer.com" }, + { + "title": "Miraheze", + "hex": "FFFC00", + "source": "https://miraheze.org" + }, { "title": "Miro", "hex": "050038", - "source": "https://miro.com/" + "source": "https://miro.com" + }, + { + "title": "Misskey", + "hex": "A1CA03", + "source": "https://misskey-hub.net/appendix/assets.html", + "license": { + "type": "CC-BY-NC-SA-4.0" + } }, { "title": "Mitsubishi", "hex": "E60012", - "source": "https://www.mitsubishi.com/" + "source": "https://www.mitsubishi.com" }, { "title": "Mix", @@ -6570,13 +7908,18 @@ { "title": "MLB", "hex": "041E42", - "source": "https://www.mlb.com/", + "source": "https://www.mlb.com", "aliases": { "aka": [ "Major League Baseball" ] } }, + { + "title": "MLflow", + "hex": "0194E2", + "source": "https://github.com/mlflow/mlflow/blob/855881f93703b15ffe643003fb4d7c84f0ec2502/assets/icon.svg" + }, { "title": "MobX", "hex": "FF9955", @@ -6590,12 +7933,22 @@ { "title": "Mocha", "hex": "8D6748", - "source": "https://mochajs.org/" + "source": "https://mochajs.org" + }, + { + "title": "Modin", + "hex": "001729", + "source": "https://modin.org" + }, + { + "title": "Modrinth", + "hex": "00AF5C", + "source": "https://github.com/modrinth/art/blob/d5ab4f965b0b4cea7201967483885ecd8d04a562/Branding/Favicon/favicon.svg" }, { "title": "MODX", "hex": "102C53", - "source": "https://docs.modx.com/" + "source": "https://docs.modx.com" }, { "title": "Mojang Studios", @@ -6605,7 +7958,7 @@ { "title": "Moleculer", "hex": "3CAFCE", - "source": "https://moleculer.services/" + "source": "https://moleculer.services" }, { "title": "Momenteo", @@ -6627,15 +7980,45 @@ "hex": "47A248", "source": "https://www.mongodb.com/pressroom" }, + { + "title": "Mongoose", + "hex": "880000", + "source": "https://github.com/Automattic/mongoose/blob/7971a4dbd55888f0b005e65b06024109af8352f7/docs/images/mongoose.svg" + }, + { + "title": "Mongoose", + "hex": "F04D35", + "slug": "mongoosedotws", + "source": "https://mongoose.ws" + }, + { + "title": "Monica", + "hex": "2C2B29", + "source": "https://github.com/monicahq/monica/blob/d7886cc6fd11388a95b7504e1a5363ecc7ad9a59/public/img/monica.svg" + }, { "title": "monkey tie", "hex": "1A52C2", "source": "https://www.monkey-tie.com" }, + { + "title": "Monkeytype", + "hex": "E2B714", + "source": "https://github.com/monkeytypegame/monkeytype/blob/20a08d27ead851bbfd5ac557b4ea444ea8bddd79/frontend/static/html/top.html", + "license": { + "type": "GPL-3.0-only", + "url": "https://github.com/monkeytypegame/monkeytype/blob/20a08d27ead851bbfd5ac557b4ea444ea8bddd79/LICENSE" + } + }, + { + "title": "MonoGame", + "hex": "E73C00", + "source": "https://www.monogame.net" + }, { "title": "Monoprix", "hex": "FB1911", - "source": "https://www.monoprix.fr/" + "source": "https://www.monoprix.fr" }, { "title": "Monster", @@ -6652,6 +8035,11 @@ "hex": "00945E", "source": "https://www.moo.com/uk/about/press" }, + { + "title": "Moonrepo", + "hex": "6F53F3", + "source": "https://moonrepo.dev" + }, { "title": "Morrisons", "hex": "007531", @@ -6660,12 +8048,12 @@ { "title": "Moscow Metro", "hex": "D9232E", - "source": "https://mosmetro.ru/" + "source": "https://mosmetro.ru" }, { "title": "Motorola", "hex": "E1140A", - "source": "https://motorola-global-portal-de.custhelp.com/" + "source": "https://motorola-global-portal-de.custhelp.com" }, { "title": "Mozilla", @@ -6673,6 +8061,11 @@ "source": "https://mozilla.design/mozilla/", "guidelines": "https://mozilla.design/mozilla/" }, + { + "title": "MQTT", + "hex": "660066", + "source": "https://mqtt.org" + }, { "title": "MSI", "aliases": { @@ -6683,16 +8076,26 @@ "hex": "FF0000", "source": "https://www.msi.com/page/brochure" }, + { + "title": "MSI Business", + "hex": "9A8555", + "source": "https://www.msi.com/Business-Productivity" + }, { "title": "MTA", "hex": "0039A6", - "source": "https://mta.info/" + "source": "https://mta.info" }, { "title": "MTR", "hex": "AC2E45", "source": "https://commons.wikimedia.org/wiki/File:MTR_(logo_with_text).svg" }, + { + "title": "MUBI", + "hex": "000000", + "source": "https://mubi.com" + }, { "title": "MUI", "aliases": { @@ -6712,7 +8115,13 @@ { "title": "Müller", "hex": "F46519", - "source": "https://www.mueller.de/" + "source": "https://www.mueller.de" + }, + { + "title": "Multisim", + "hex": "57B685", + "source": "https://www.multisim.com", + "guidelines": "https://www.ni.com/en-us/about-ni/legal.html" }, { "title": "Mumble", @@ -6751,7 +8160,7 @@ { "title": "Myspace", "hex": "030303", - "source": "https://myspace.com/" + "source": "https://myspace.com" }, { "title": "MySQL", @@ -6762,17 +8171,17 @@ { "title": "N26", "hex": "48AC98", - "source": "https://n26.com/" + "source": "https://n26.com" }, { "title": "Namebase", "hex": "0068FF", - "source": "https://www.namebase.io/" + "source": "https://www.namebase.io" }, { "title": "Namecheap", "hex": "DE3723", - "source": "https://www.namecheap.com/" + "source": "https://www.namecheap.com" }, { "title": "Nano", @@ -6789,32 +8198,44 @@ { "title": "National Grid", "hex": "00148C", - "source": "https://www.nationalgrid.com/" + "source": "https://www.nationalgrid.com" }, { "title": "NativeScript", - "hex": "3655FF", - "source": "https://docs.nativescript.org/" + "hex": "65ADF1", + "source": "https://docs.nativescript.org" }, { "title": "Naver", "hex": "03C75A", - "source": "https://www.navercorp.com/investment/annualReport" + "source": "https://developers.naver.com/docs/login/bi/bi.md", + "guidelines": "https://developers.naver.com/docs/login/bi/bi.md", + "aliases": { + "loc": { + "ko-KR": "네이버", + "ja-JP": "ネイバー" + } + } }, { "title": "NBA", "hex": "253B73", - "source": "https://nba.com/" + "source": "https://nba.com" }, { "title": "NBB", "hex": "FF7100", "source": "https://presse.notebooksbilliger.de/presskits/style-guide" }, + { + "title": "NBC", + "hex": "222222", + "source": "https://www.nbcnews.com" + }, { "title": "NDR", "hex": "0C1754", - "source": "https://www.ndr.de/" + "source": "https://www.ndr.de" }, { "title": "NEC", @@ -6823,14 +8244,14 @@ }, { "title": "Neo4j", - "hex": "008CC1", - "source": "https://neo4j.com/style-guide/", - "guidelines": "https://neo4j.com/style-guide/" + "hex": "4581C3", + "source": "https://neo4j.com/brand/#logo", + "guidelines": "https://neo4j.com/brand/#logo" }, { "title": "Neovim", "hex": "57A143", - "source": "https://neovim.io/", + "source": "https://neovim.io", "license": { "type": "CC-BY-SA-3.0" } @@ -6838,12 +8259,12 @@ { "title": "NestJS", "hex": "E0234E", - "source": "https://nestjs.com/" + "source": "https://nestjs.com" }, { "title": "NetApp", "hex": "0067C5", - "source": "http://www.netapp.com/", + "source": "https://www.netapp.com", "guidelines": "https://www.netapp.com/company/legal/trademark-guidelines/" }, { @@ -6868,7 +8289,7 @@ { "title": "Netlify CMS", "hex": "C9FA4B", - "source": "https://www.netlifycms.org/" + "source": "https://www.netlifycms.org" } ] } @@ -6884,6 +8305,11 @@ "hex": "FFE500", "source": "https://www.netto-online.de/INTERSHOP/static/WFS/Plus-NettoDE-Site/-/-/de_DE/css/images/netto-logo.svg" }, + { + "title": "Neutralinojs", + "hex": "F89901", + "source": "https://github.com/neutralinojs/design-guide/blob/52a7232598ff22cddd810a3079e09a2cc2892609/logo/neutralinojs_logo_vector.svg" + }, { "title": "New Balance", "hex": "CF0A2C", @@ -6901,7 +8327,7 @@ { "title": "NJPW World", "hex": "B79C65", - "source": "https://njpwworld.com/" + "source": "https://njpwworld.com" } ], "loc": { @@ -6911,19 +8337,29 @@ }, { "title": "New Relic", - "hex": "008C99", + "hex": "1CE783", "source": "https://newrelic.com/about/media-assets", "guidelines": "https://newrelic.com/about/media-assets#guidelines" }, { "title": "New York Times", "hex": "000000", - "source": "https://www.nytimes.com/" + "source": "https://www.nytimes.com" + }, + { + "title": "Newegg", + "hex": "E05E00", + "source": "https://www.newegg.com" }, { "title": "Next.js", "hex": "000000", - "source": "https://nextjs.org/" + "source": "https://nextjs.org" + }, + { + "title": "NextBillion.ai", + "hex": "8D5A9E", + "source": "https://nextbillion.ai" }, { "title": "Nextcloud", @@ -6936,6 +8372,12 @@ "hex": "8ED500", "source": "https://about.nextdoor.com/us-media/" }, + { + "title": "Nextra", + "hex": "000000", + "source": "https://nextra.site", + "guidelines": "https://nextra.site/about#design-assets" + }, { "title": "NFC", "hex": "002E5F", @@ -6948,20 +8390,39 @@ "source": "https://www.nginx.com/press/", "guidelines": "https://www.nginx.com/press/" }, + { + "title": "Nginx Proxy Manager", + "hex": "F15833", + "source": "https://github.com/NginxProxyManager/nginx-proxy-manager/blob/2a06384a4aa597777931d38cef49cf89540392e6/docs/.vuepress/public/logo.svg" + }, { "title": "ngrok", "hex": "1F1E37", - "source": "https://ngrok.com/" + "source": "https://ngrok.com" + }, + { + "title": "NgRx", + "hex": "BA2BD2", + "source": "https://ngrx.io", + "license": { + "type": "CC-BY-4.0" + } }, { "title": "niconico", "hex": "231815", - "source": "https://www.nicovideo.jp/" + "source": "https://www.nicovideo.jp" }, { "title": "Nike", "hex": "111111", - "source": "https://www.nike.com/" + "source": "https://www.nike.com" + }, + { + "title": "Nikon", + "hex": "FFE100", + "source": "https://www.nikon.com", + "guidelines": "https://www.nikon.com/usage/group-info" }, { "title": "Nim", @@ -6976,7 +8437,7 @@ { "title": "Nintendo 3DS", "hex": "D12228", - "source": "https://www.nintendo.de/" + "source": "https://www.nintendo.de" }, { "title": "Nintendo GameCube", @@ -6996,12 +8457,12 @@ { "title": "Nissan", "hex": "C3002F", - "source": "https://www.nissan.ie/" + "source": "https://www.nissan.ie" }, { "title": "NixOS", "hex": "5277C3", - "source": "https://github.com/NixOS/nixos-homepage/tree/master/logo" + "source": "https://github.com/NixOS/nixos-homepage/tree/58cfdb770aba28b73446a1b3ee65a5cec4f0d44f/logo" }, { "title": "Node-RED", @@ -7017,17 +8478,17 @@ { "title": "Nodemon", "hex": "76D04B", - "source": "https://nodemon.io/" + "source": "https://nodemon.io" }, { "title": "Nokia", - "hex": "124191", - "source": "https://www.nokia.com/" + "hex": "005AFF", + "source": "https://www.nokia.com" }, { "title": "Norco", "hex": "00FF00", - "source": "https://www.norco.com/" + "source": "https://www.norco.com" }, { "title": "NordVPN", @@ -7035,6 +8496,11 @@ "source": "https://nordvpn.com/press-area/", "guidelines": "https://nordvpn.com/press-area/" }, + { + "title": "Normalize.css", + "hex": "E3695F", + "source": "https://github.com/necolas/normalize.css/blob/3a60304f90870c6087d226f53e02a7523c907a35/logo.svg" + }, { "title": "Norwegian", "hex": "D81939", @@ -7048,28 +8514,33 @@ { "title": "Notion", "hex": "000000", - "source": "https://www.notion.so/" + "source": "https://www.notion.so" }, { "title": "Notist", "hex": "333333", - "source": "https://noti.st/" + "source": "https://noti.st" }, { "title": "Noun Project", "hex": "000000", "source": "https://www.lingoapp.com/6/s/oJkq3W/?v=3" }, + { + "title": "Novu", + "hex": "000000", + "source": "https://handbook.novu.co/logos-assets" + }, { "title": "NOW", "hex": "001211", - "source": "https://www.nowtv.com/" + "source": "https://www.nowtv.com" }, { "title": "npm", "hex": "CB3837", - "source": "https://www.npmjs.com/", - "guidelines": "https://www.npmjs.com/policies/trademark" + "source": "https://www.npmjs.com", + "guidelines": "https://docs.npmjs.com/policies/logos-and-usage" }, { "title": "Nrwl", @@ -7084,7 +8555,7 @@ { "title": "Nucleo", "hex": "252B2D", - "source": "https://nucleoapp.com/" + "source": "https://nucleoapp.com" }, { "title": "NuGet", @@ -7107,6 +8578,11 @@ "source": "https://numpy.org/press-kit/", "guidelines": "https://github.com/numpy/numpy/blob/main/branding/logo/logoguidelines.md" }, + { + "title": "Nunjucks", + "hex": "1C4913", + "source": "https://github.com/mozilla/nunjucks/blob/fd500902d7c88672470c87170796de52fc0f791a/docs/img/favicon.png" + }, { "title": "Nutanix", "hex": "024DA1", @@ -7115,8 +8591,8 @@ { "title": "Nuxt.js", "hex": "00DC82", - "source": "https://nuxtjs.org/design", - "guidelines": "https://nuxtjs.org/design" + "source": "https://nuxt.com/design-kit", + "guidelines": "https://nuxt.com/design-kit" }, { "title": "NVIDIA", @@ -7126,12 +8602,18 @@ { "title": "Nx", "hex": "143055", - "source": "https://nx.dev/" + "source": "https://nx.dev" + }, + { + "title": "NXP", + "hex": "000000", + "source": "https://www.nxp.com/company/about-nxp/newsroom:NEWSROOM", + "guidelines": "https://www.nxp.com/company/about-nxp/newsroom:NEWSROOM" }, { "title": "NZXT", "hex": "000000", - "source": "https://nzxt.com/", + "source": "https://nzxt.com", "guidelines": "https://nzxt.com/about/brand-guidelines" }, { @@ -7148,17 +8630,17 @@ { "title": "Observable", "hex": "353E58", - "source": "https://observablehq.com/" + "source": "https://observablehq.com" }, { "title": "Obsidian", - "hex": "483699", - "source": "https://obsidian.md/" + "hex": "7C3AED", + "source": "https://obsidian.md" }, { "title": "OCaml", "hex": "EC6813", - "source": "http://ocaml.org/img/OCaml_Sticker.svg", + "source": "https://ocaml.org/img/OCaml_Sticker.svg", "guidelines": "https://ocaml.org/docs/logos.html", "license": { "type": "Unlicense" @@ -7179,6 +8661,11 @@ "hex": "0790C0", "source": "https://www.gnu.org/software/octave/" }, + { + "title": "OctoPrint", + "hex": "13C100", + "source": "https://github.com/OctoPrint/OctoPrint/blob/53b9b6185781c07e8c4744a6e28462e96448f249/src/octoprint/static/img/mask.svg" + }, { "title": "Octopus Deploy", "hex": "2F93E0", @@ -7241,7 +8728,7 @@ { "title": "OnStar", "hex": "003D7D", - "source": "https://www.onstar.com/" + "source": "https://www.onstar.com" }, { "title": "Opel", @@ -7256,12 +8743,12 @@ { "title": "Open Badges", "hex": "073B5A", - "source": "https://backpack.openbadges.org/" + "source": "https://backpack.openbadges.org" }, { "title": "Open Bug Bounty", "hex": "F67909", - "source": "https://www.openbugbounty.org/" + "source": "https://www.openbugbounty.org" }, { "title": "Open Collective", @@ -7271,7 +8758,21 @@ { "title": "Open Containers Initiative", "hex": "262261", - "source": "https://github.com/opencontainers/artwork/tree/master/oci/icon" + "source": "https://github.com/opencontainers/artwork/tree/d8ccfe94471a0236b1d4a3f0f90862c4fe5486ce/oci/icon" + }, + { + "title": "Open Source Hardware", + "hex": "0099B0", + "source": "https://www.oshwa.org/open-source-hardware-logo", + "guidelines": "https://www.oshwa.org/open-source-hardware-logo", + "license": { + "type": "CC-BY-SA-4.0" + }, + "aliases": { + "aka": [ + "OSHWA" + ] + } }, { "title": "Open Source Initiative", @@ -7282,12 +8783,12 @@ { "title": "OpenAI", "hex": "412991", - "source": "https://openai.com/" + "source": "https://openai.com" }, { "title": "OpenAI Gym", "hex": "0081A5", - "source": "https://gym.openai.com/" + "source": "https://gym.openai.com" }, { "title": "OpenAPI Initiative", @@ -7309,7 +8810,7 @@ { "title": "OpenFaaS", "hex": "3B5EE9", - "source": "https://docs.openfaas.com/" + "source": "https://docs.openfaas.com" }, { "title": "OpenGL", @@ -7334,14 +8835,24 @@ { "title": "OpenMined", "hex": "ED986C", - "source": "https://www.openmined.org/", - "guidelines": "https://www.openmined.org/" + "source": "https://www.openmined.org", + "guidelines": "https://www.openmined.org" }, { "title": "OpenNebula", "hex": "0097C2", "source": "https://opennebula.io/docs/" }, + { + "title": "OpenProject", + "hex": "0770B8", + "source": "https://www.openproject.org/press/" + }, + { + "title": "OpenSCAD", + "hex": "F9D72C", + "source": "https://commons.wikimedia.org/wiki/File:Openscad.svg" + }, { "title": "OpenSea", "hex": "2081E2", @@ -7356,7 +8867,7 @@ { "title": "OpenSSL", "hex": "721412", - "source": "https://www.openssl.org/" + "source": "https://www.openssl.org" }, { "title": "OpenStack", @@ -7391,6 +8902,12 @@ ] } }, + { + "title": "Openverse", + "hex": "FFE033", + "source": "https://github.com/WordPress/openverse/blob/5db2545d6b73ec4aa5e908822683ee9d18af301d/brand/icon.svg", + "guidelines": "https://www.figma.com/file/GIIQ4sDbaToCfFQyKMvzr8/Openverse-Design-Library?node-id=312%3A487" + }, { "title": "OpenVPN", "hex": "EA7E20", @@ -7403,6 +8920,11 @@ "source": "https://openwrt.org/docs/guide-graphic-designer/openwrt-logo", "guidelines": "https://openwrt.org/docs/guide-graphic-designer/openwrt-logo" }, + { + "title": "OpenZeppelin", + "hex": "4E5EE4", + "source": "https://openzeppelin.com" + }, { "title": "OpenZFS", "hex": "2A667F", @@ -7412,7 +8934,13 @@ "title": "Opera", "hex": "FF1B2D", "source": "https://brand.opera.com/1472-2/opera-logos/", - "guidelines": "https://brand.opera.com/" + "guidelines": "https://brand.opera.com" + }, + { + "title": "Opera GX", + "hex": "EE2950", + "source": "https://brand.opera.com/1472-2/opera-logos/", + "guidelines": "https://brand.opera.com" }, { "title": "OPNSense", @@ -7428,7 +8956,7 @@ { "title": "OpsLevel", "hex": "1890FF", - "source": "https://www.opslevel.com/" + "source": "https://www.opslevel.com" }, { "title": "Oracle", @@ -7457,6 +8985,11 @@ "hex": "7764FA", "source": "https://www.osano.com/company/assets" }, + { + "title": "OSGeo", + "hex": "5CAE58", + "source": "https://www.osgeo.org" + }, { "title": "Oshkosh", "hex": "E6830F", @@ -7468,7 +9001,7 @@ { "title": "OSMC", "hex": "17394A", - "source": "https://github.com/osmc/osmc/tree/master/assets" + "source": "https://github.com/osmc/website/tree/e7d0d8002660c979ae5119e28d1c69c893ac9f76/content/themes/osmc/assets/img/logo" }, { "title": "osu!", @@ -7501,16 +9034,21 @@ "hex": "000000", "source": "https://github.com/OWASP/www-event-2020-07-virtual/blob/eefbef6c1afdd1dee2af11e7f44ad005b25ad48c/assets/images/logo.svg" }, + { + "title": "ownCloud", + "hex": "041E42", + "source": "https://owncloud.com" + }, { "title": "Oxygen", "hex": "3A209E", - "source": "https://oxygenbuilder.com/", + "source": "https://oxygenbuilder.com", "guidelines": "https://oxygenbuilder.com/trademark-policy/" }, { "title": "OYO", "hex": "EE2E24", - "source": "https://www.oyorooms.com/" + "source": "https://www.oyorooms.com" }, { "title": "p5.js", @@ -7520,7 +9058,7 @@ { "title": "Packagist", "hex": "F28D1A", - "source": "https://github.com/composer/packagist/issues/1147", + "source": "https://github.com/composer/packagist/issues/1147#issuecomment-747951608", "license": { "type": "MIT" } @@ -7531,10 +9069,15 @@ "source": "https://www.hashicorp.com/brand", "guidelines": "https://www.hashicorp.com/brand" }, + { + "title": "PaddlePaddle", + "hex": "0062B0", + "source": "https://www.paddlepaddle.org.cn/en" + }, { "title": "Paddy Power", "hex": "004833", - "source": "https://www.paddypower.com/" + "source": "https://www.paddypower.com" }, { "title": "Pagekit", @@ -7556,12 +9099,18 @@ { "title": "PagSeguro", "hex": "FFC801", - "source": "https://pagseguro.uol.com.br/" + "source": "https://pagseguro.uol.com.br" }, { "title": "Palantir", "hex": "101113", - "source": "https://github.com/palantir/conjure/blob/master/docs/media/palantir-logo.svg" + "source": "https://github.com/palantir/conjure/blob/1b0d450dc52c4822b4c9d1da8c61ad7f78855fe5/docs/media/palantir-logo.svg" + }, + { + "title": "Palo Alto Networks", + "hex": "F04E23", + "source": "https://www.paloaltonetworks.com", + "guidelines": "https://www.paloaltonetworks.com/company/brand" }, { "title": "Palo Alto Software", @@ -7577,7 +9126,7 @@ { "title": "Pandora", "hex": "224099", - "source": "https://www.pandoraforbrands.com/" + "source": "https://www.pandoraforbrands.com" }, { "title": "Pantheon", @@ -7593,7 +9142,7 @@ { "title": "Parity Substrate", "hex": "282828", - "source": "http://substrate.dev/" + "source": "https://substrate.dev" }, { "title": "Parse.ly", @@ -7604,12 +9153,12 @@ { "title": "Passport", "hex": "34E27A", - "source": "http://www.passportjs.org/" + "source": "https://www.passportjs.org" }, { "title": "Pastebin", "hex": "02456C", - "source": "https://pastebin.com/" + "source": "https://pastebin.com" }, { "title": "Patreon", @@ -7617,20 +9166,30 @@ "source": "https://www.patreon.com/brand/downloads", "guidelines": "https://www.patreon.com/brand/downloads" }, + { + "title": "Paychex", + "hex": "004B8D", + "source": "https://www.paychex.com" + }, + { + "title": "Payload CMS", + "hex": "000000", + "source": "https://payloadcms.com" + }, { "title": "Payoneer", "hex": "FF4800", - "source": "https://www.payoneer.com/" + "source": "https://www.payoneer.com" }, { "title": "PayPal", "hex": "00457C", - "source": "https://www.paypal.com/" + "source": "https://www.paypal.com" }, { "title": "Paytm", "hex": "20336B", - "source": "https://paytm.com/" + "source": "https://paytm.com" }, { "title": "PCGamingWiki", @@ -7640,12 +9199,25 @@ { "title": "Peak Design", "hex": "1C1B1C", - "source": "https://www.peakdesign.com/" + "source": "https://www.peakdesign.com" + }, + { + "title": "Pearson", + "hex": "000000", + "source": "https://www.pearson.com", + "aliases": { + "dup": [ + { + "title": "Pearson VUE", + "hex": "008FB4" + } + ] + } }, { "title": "PeerTube", "hex": "F1680D", - "source": "https://joinpeertube.org/" + "source": "https://joinpeertube.org" }, { "title": "Pegasus Airlines", @@ -7668,18 +9240,23 @@ { "title": "Penny", "hex": "CD1414", - "source": "https://www.penny.de/" + "source": "https://www.penny.de" + }, + { + "title": "Penpot", + "hex": "000000", + "source": "https://penpot.app" }, { "title": "Pepsi", "hex": "2151A1", - "source": "http://gillettepepsicola.com/promotions-media/media-kit/", - "guidelines": "http://gillettepepsicola.com/promotions-media/media-kit/" + "source": "https://gillettepepsicola.com/promotions-media/media-kit/", + "guidelines": "https://gillettepepsicola.com/promotions-media/media-kit/" }, { "title": "Percy", "hex": "9E66BF", - "source": "https://percy.io/" + "source": "https://percy.io" }, { "title": "Perforce", @@ -7691,10 +9268,16 @@ "hex": "39457E", "source": "https://github.com/tpf/marketing-materials/blob/6765c6fd71bc5b123d6c1a77b86e08cdd6376078/images/onion-logo/tpf-logo-onion.svg" }, + { + "title": "Persistent", + "hex": "FD5F07", + "source": "https://www.persistent.com/company-overview/branding-guidelines/#nav-persistent-logo", + "guidelines": "https://www.persistent.com/company-overview/branding-guidelines/#nav-persistent-logo" + }, { "title": "Personio", "hex": "FFFFFF", - "source": "https://www.personio.com/" + "source": "https://www.personio.com" }, { "title": "Pets at Home", @@ -7704,17 +9287,17 @@ { "title": "Peugeot", "hex": "000000", - "source": "https://www.peugeot.co.uk/" + "source": "https://www.peugeot.co.uk" }, { "title": "Pexels", "hex": "05A081", - "source": "https://www.pexels.com/" + "source": "https://www.pexels.com" }, { "title": "pfSense", "hex": "212121", - "source": "https://www.pfsense.org/" + "source": "https://www.pfsense.org" }, { "title": "Phabricator", @@ -7727,6 +9310,11 @@ "hex": "0065D3", "source": "https://www.philips-hue.com/en-us/support/faq" }, + { + "title": "Phoenix Framework", + "hex": "FD4F00", + "source": "https://github.com/phoenixframework/phoenix/blob/e9f1975d5aa15bee22bab6a4acae8f543886b17a/installer/templates/phx_assets/logo.svg" + }, { "title": "PhonePe", "hex": "5F259F", @@ -7735,12 +9323,12 @@ { "title": "Photobucket", "hex": "0672CB", - "source": "https://photobucket.com/" + "source": "https://photobucket.com" }, { "title": "Photocrowd", "hex": "3DAD4B", - "source": "https://www.photocrowd.com/" + "source": "https://www.photocrowd.com" }, { "title": "Photopea", @@ -7750,7 +9338,7 @@ { "title": "PHP", "hex": "777BB4", - "source": "http://php.net/download-logos.php", + "source": "https://php.net/download-logos.php", "license": { "type": "CC-BY-SA-4.0" } @@ -7775,7 +9363,7 @@ { "title": "Picard Surgelés", "hex": "2D4999", - "source": "https://www.picard.fr/" + "source": "https://www.picard.fr" }, { "title": "Picarto.TV", @@ -7818,7 +9406,7 @@ { "title": "Pioneer DJ", "hex": "1A1928", - "source": "https://www.pioneerdj.com/" + "source": "https://www.pioneerdj.com" }, { "title": "Pivotal Tracker", @@ -7851,17 +9439,22 @@ { "title": "pkgsrc", "hex": "FF6600", - "source": "https://pkgsrc.org/" + "source": "https://pkgsrc.org" }, { "title": "Planet", "hex": "009DB1", "source": "https://www.planet.com/explorer/" }, + { + "title": "PlanetScale", + "hex": "000000", + "source": "https://planetscale.com" + }, { "title": "PlanGrid", "hex": "0085DE", - "source": "https://app.plangrid.com/" + "source": "https://app.plangrid.com" }, { "title": "Platform.sh", @@ -7881,12 +9474,12 @@ { "title": "PlayCanvas", "hex": "E05F2C", - "source": "https://playcanvas.com/" + "source": "https://playcanvas.com" }, { "title": "Player FM", "hex": "C8122A", - "source": "https://player.fm/" + "source": "https://player.fm" }, { "title": "Player.me", @@ -7923,10 +9516,15 @@ "hex": "003791", "source": "https://commons.wikimedia.org/wiki/File:PlayStation_Vita_logo.svg" }, + { + "title": "Playwright", + "hex": "2EAD33", + "source": "https://github.com/microsoft/playwright.dev/blob/768c59464e5b3270db26fa6a839d022a7e0dd064/static/img/playwright-logo.svg" + }, { "title": "Pleroma", "hex": "FBA457", - "source": "https://pleroma.social/" + "source": "https://pleroma.social" }, { "title": "Plesk", @@ -7936,14 +9534,14 @@ }, { "title": "Plex", - "hex": "E5A00D", - "source": "https://brand.plex.tv/", - "guidelines": "https://brand.plex.tv/" + "hex": "EBAF00", + "source": "https://brand.plex.tv", + "guidelines": "https://brand.plex.tv" }, { "title": "Plotly", "hex": "3F4F75", - "source": "https://plotly.com/" + "source": "https://plotly.com" }, { "title": "Pluralsight", @@ -7964,7 +9562,7 @@ { "title": "PM2", "hex": "2B037A", - "source": "https://pm2.keymetrics.io/" + "source": "https://pm2.keymetrics.io" }, { "title": "pnpm", @@ -7981,20 +9579,35 @@ "hex": "F43E37", "source": "https://blog.pocketcasts.com/press/" }, + { + "title": "PocketBase", + "hex": "B8DBE4", + "source": "https://github.com/pocketbase/pocketbase/blob/4b64e0910b7dc527ff3de8cdacec074e40449e2e/ui/dist/images/logo.svg" + }, { "title": "Podcast Addict", "hex": "F4842D", "source": "https://podcastaddict.com" }, + { + "title": "Podcast Index", + "hex": "F90000", + "source": "https://podcastindex.org" + }, { "title": "Podman", "hex": "892CA0", - "source": "https://podman.io/" + "source": "https://podman.io" + }, + { + "title": "Poe", + "hex": "5D5CDE", + "source": "https://poe.com" }, { "title": "Poetry", "hex": "60A5FA", - "source": "https://python-poetry.org/" + "source": "https://python-poetry.org" }, { "title": "Pointy", @@ -8006,6 +9619,11 @@ "hex": "FFCB05", "source": "https://commons.wikimedia.org/wiki/File:International_Pok%C3%A9mon_logo.svg" }, + { + "title": "Polars", + "hex": "CD792C", + "source": "https://pola.rs" + }, { "title": "Polkadot", "hex": "E6007A", @@ -8015,7 +9633,7 @@ { "title": "Poly", "hex": "EB3C00", - "source": "https://www.poly.com/" + "source": "https://www.poly.com" }, { "title": "Polymer Project", @@ -8025,27 +9643,27 @@ { "title": "Polywork", "hex": "543DE0", - "source": "https://www.polywork.com/" + "source": "https://www.polywork.com" }, { "title": "Pop!_OS", "hex": "48B9C7", - "source": "https://pop.system76.com/" + "source": "https://pop.system76.com" }, { "title": "Porsche", "hex": "B12B28", - "source": "https://www.porsche.com/" + "source": "https://www.porsche.com" }, { "title": "Portainer", "hex": "13BEF9", - "source": "https://www.portainer.io/" + "source": "https://www.portainer.io" }, { "title": "PostCSS", "hex": "DD3A0A", - "source": "https://postcss.org/" + "source": "https://postcss.org" }, { "title": "PostgreSQL", @@ -8053,6 +9671,12 @@ "source": "https://wiki.postgresql.org/wiki/Logo", "guidelines": "https://www.postgresql.org/about/policies/trademarks/" }, + { + "title": "PostHog", + "hex": "000000", + "source": "https://posthog.com/handbook/company/brand-assets", + "guidelines": "https://posthog.com/handbook/company/brand-assets" + }, { "title": "Postman", "hex": "FF6C37", @@ -8066,27 +9690,77 @@ { "title": "Power Apps", "hex": "742774", - "source": "https://powerapps.microsoft.com/en-us/" + "source": "https://docs.microsoft.com/en-us/power-platform/guidance/icons", + "guidelines": "https://docs.microsoft.com/en-us/power-platform/guidance/icons", + "license": { + "type": "custom", + "url": "https://docs.microsoft.com/en-us/power-platform/guidance/icons" + } }, { "title": "Power Automate", "hex": "0066FF", - "source": "https://flow.microsoft.com/en-us/" + "source": "https://docs.microsoft.com/en-us/power-platform/guidance/icons", + "guidelines": "https://docs.microsoft.com/en-us/power-platform/guidance/icons", + "aliases": { + "aka": [ + "Microsoft Flow" + ] + }, + "license": { + "type": "custom", + "url": "https://docs.microsoft.com/en-us/power-platform/guidance/icons" + } }, { "title": "Power BI", "hex": "F2C811", - "source": "https://powerbi.microsoft.com/en-us/" + "source": "https://docs.microsoft.com/en-us/power-platform/guidance/icons", + "guidelines": "https://docs.microsoft.com/en-us/power-platform/guidance/icons", + "license": { + "type": "custom", + "url": "https://docs.microsoft.com/en-us/power-platform/guidance/icons" + } + }, + { + "title": "Power Fx", + "hex": "7F2157", + "source": "https://docs.microsoft.com/en-us/power-platform/guidance/icons", + "guidelines": "https://docs.microsoft.com/en-us/power-platform/guidance/icons", + "license": { + "type": "custom", + "url": "https://docs.microsoft.com/en-us/power-platform/guidance/icons" + } + }, + { + "title": "Power Pages", + "hex": "A493E7", + "source": "https://docs.microsoft.com/en-us/power-platform/guidance/icons", + "guidelines": "https://docs.microsoft.com/en-us/power-platform/guidance/icons", + "aliases": { + "aka": [ + "Power Apps Portals" + ] + }, + "license": { + "type": "custom", + "url": "https://docs.microsoft.com/en-us/power-platform/guidance/icons" + } }, { "title": "Power Virtual Agents", "hex": "0B556A", - "source": "https://powervirtualagents.microsoft.com/en-us/" + "source": "https://docs.microsoft.com/en-us/power-platform/guidance/icons", + "guidelines": "https://docs.microsoft.com/en-us/power-platform/guidance/icons", + "license": { + "type": "custom", + "url": "https://docs.microsoft.com/en-us/power-platform/guidance/icons" + } }, { "title": "POWERS", "hex": "E74536", - "source": "https://www.powerswhiskey.com/" + "source": "https://www.powerswhiskey.com" }, { "title": "PowerShell", @@ -8108,6 +9782,11 @@ "hex": "673AB8", "source": "https://preactjs.com" }, + { + "title": "Prefect", + "hex": "024DFD", + "source": "https://www.prefect.io/newsroom/logos/" + }, { "title": "Premier League", "hex": "360D3A", @@ -8128,6 +9807,16 @@ "hex": "F7B93E", "source": "https://github.com/prettier/prettier-logo/blob/06997b307e0608ebee2044dafa0b9429d6b5a103/images/prettier-icon-clean-centred.svg" }, + { + "title": "Pretzel", + "hex": "1BB3A4", + "source": "https://www.pretzel.rocks" + }, + { + "title": "Prevention", + "hex": "44C1C5", + "source": "https://prevention.com" + }, { "title": "Prezi", "hex": "3181FF", @@ -8145,6 +9834,11 @@ "source": "https://videodirect.amazon.com/home/help?topicId=GT7W7GJBTDJW6Z8W#G8T2JFQZXPMHJLRZ", "guidelines": "https://videodirect.amazon.com/home/help?topicId=GT7W7GJBTDJW6Z8W#G8T2JFQZXPMHJLRZ" }, + { + "title": "Printables", + "hex": "FA6831", + "source": "https://printables.com" + }, { "title": "Prisma", "hex": "2D3748", @@ -8153,7 +9847,7 @@ { "title": "Prismic", "hex": "5163BA", - "source": "https://prismic.io/" + "source": "https://prismic.io" }, { "title": "Private Internet Access", @@ -8173,12 +9867,12 @@ { "title": "Processing Foundation", "hex": "006699", - "source": "https://processingfoundation.org/" + "source": "https://processingfoundation.org" }, { "title": "ProcessWire", "hex": "2480E6", - "source": "https://processwire.com/" + "source": "https://processwire.com" }, { "title": "Product Hunt", @@ -8194,18 +9888,18 @@ { "title": "Progress", "hex": "5CE500", - "source": "https://www.progress.com/", + "source": "https://www.progress.com", "guidelines": "https://www.progress.com/legal/trademarks/trademarks-use-policy" }, { "title": "Prometheus", "hex": "E6522C", - "source": "https://prometheus.io/" + "source": "https://prometheus.io" }, { "title": "ProSieben", "hex": "E6000F", - "source": "https://www.prosieben.de/" + "source": "https://www.prosieben.de" }, { "title": "Proto.io", @@ -8218,20 +9912,35 @@ "source": "https://www.protocols.io/brand", "guidelines": "https://www.protocols.io/brand" }, + { + "title": "Proton", + "hex": "6D4AFF", + "source": "https://proton.me/media/kit" + }, + { + "title": "Proton Calendar", + "hex": "50B0E9", + "source": "https://proton.me/media/kit" + }, + { + "title": "Proton Drive", + "hex": "EB508D", + "source": "https://proton.me/media/kit" + }, { "title": "ProtonDB", "hex": "F50057", - "source": "https://www.protondb.com/" + "source": "https://www.protondb.com" }, { "title": "ProtonMail", - "hex": "8B89CC", - "source": "https://protonmail.com/media-kit" + "hex": "6D4AFF", + "source": "https://proton.me/media/kit" }, { "title": "ProtonVPN", - "hex": "56B366", - "source": "https://protonvpn.com/press" + "hex": "66DEB1", + "source": "https://proton.me/media/kit" }, { "title": "Protractor", @@ -8244,6 +9953,11 @@ "source": "https://www.proxmox.com/en/news/media-kit", "guidelines": "https://www.proxmox.com/en/news/media-kit" }, + { + "title": "Pterodactyl", + "hex": "10539F", + "source": "https://github.com/pterodactyl/panel/blob/eaf46429f2a001469fb5f18f7891ce8e5be7f049/public/favicons/favicon-96x96.png" + }, { "title": "PUBG", "hex": "FEAB02", @@ -8258,7 +9972,7 @@ { "title": "PubMed", "hex": "326599", - "source": "https://pubmed.ncbi.nlm.nih.gov/" + "source": "https://pubmed.ncbi.nlm.nih.gov" }, { "title": "Pug", @@ -8268,13 +9982,13 @@ { "title": "Pulumi", "hex": "8A3391", - "source": "https://www.pulumi.com/", + "source": "https://www.pulumi.com", "guidelines": "https://www.pulumi.com/brand/" }, { "title": "Puma", "hex": "242B2F", - "source": "https://us.puma.com/" + "source": "https://us.puma.com" }, { "title": "Puppet", @@ -8284,7 +9998,7 @@ { "title": "Puppeteer", "hex": "40B5A4", - "source": "https://pptr.dev/" + "source": "https://pptr.dev" }, { "title": "PureScript", @@ -8307,7 +10021,7 @@ { "title": "Pusher", "hex": "300D4F", - "source": "https://pusher.com/" + "source": "https://pusher.com" }, { "title": "PWA", @@ -8326,10 +10040,25 @@ "source": "https://www.jetbrains.com/company/brand/logos/", "guidelines": "https://www.jetbrains.com/company/brand/" }, + { + "title": "Pydantic", + "hex": "E92063", + "source": "https://github.com/pydantic/pydantic/blob/94c748001a32992a587694b999fb1f3d2f1fc1fe/docs/logo-white.svg" + }, + { + "title": "PyG", + "hex": "3C2179", + "source": "https://github.com/pyg-team/pyg_sphinx_theme/blob/4f696513b4b4adf2ba3874574a10a8e8718672fe/pyg_sphinx_theme/static/img/pyg_logo.svg", + "aliases": { + "aka": [ + "PyTorch Geometric" + ] + } + }, { "title": "PyPI", "hex": "3775A9", - "source": "https://pypi.org/" + "source": "https://pypi.org" }, { "title": "PyPy", @@ -8341,6 +10070,11 @@ "hex": "005CA0", "source": "https://github.com/pyscaffold/pyscaffold/blob/3f72bf7894fc73b34af06a90bb5d43aae410ce5d/docs/gfx/logo.svg" }, + { + "title": "PySyft", + "hex": "F1BF7A", + "source": "https://github.com/OpenMined/openmined-website/blob/db5c223657c8c49ab1ee8db2841fe802f73af31c/src/containers/app/components/repo-icon/assets/syft.svg" + }, { "title": "Pytest", "hex": "0A9EDC", @@ -8352,26 +10086,26 @@ "source": "https://www.python.org/community/logos/", "guidelines": "https://www.python.org/community/logos/" }, + { + "title": "PythonAnywhere", + "hex": "1D9FD7", + "source": "https://www.pythonanywhere.com" + }, { "title": "PyTorch", "hex": "EE4C2C", "source": "https://github.com/pytorch/pytorch.github.io/blob/8f083bd12192ca12d5e1c1f3d236f4831d823d8f/assets/images/logo.svg", "guidelines": "https://github.com/pytorch/pytorch.github.io/blob/381117ec296f002b2de475402ef29cca6c55e209/assets/brand-guidelines/PyTorch-Brand-Guidelines.pdf" }, - { - "title": "PyTorch Lightning", - "hex": "792EE5", - "source": "https://github.com/PyTorchLightning/pytorch-lightning/blob/a584196abf820179adb0758ef67ddae91c44e7bc/docs/source/_static/images/icon.svg" - }, { "title": "PyUp", "hex": "9F55FF", - "source": "https://pyup.io/" + "source": "https://pyup.io" }, { "title": "Qantas", "hex": "E40000", - "source": "https://freight.qantas.com/" + "source": "https://freight.qantas.com" }, { "title": "Qatar Airways", @@ -8409,7 +10143,18 @@ { "title": "QIWI", "hex": "FF8C00", - "source": "https://qiwi.com/" + "source": "https://qiwi.com" + }, + { + "title": "Qlik", + "hex": "009848", + "source": "https://www.qlik.com", + "guidelines": "https://www.qlik.com/us/legal/trademarks" + }, + { + "title": "QMK", + "hex": "333333", + "source": "https://github.com/qmk/qmk.fm/blob/d6f7b646aa03f2941bb3977ba13a07ca351f20ae/assets/images/badge-dark.svg" }, { "title": "Qt", @@ -8431,13 +10176,13 @@ { "title": "Qualys", "hex": "ED2E26", - "source": "https://www.qualys.com/", + "source": "https://www.qualys.com", "guidelines": "https://www.qualys.com/docs/qualys-logo-guidelines.pdf" }, { "title": "Quantcast", "hex": "000000", - "source": "https://www.quantcast.com/" + "source": "https://www.quantcast.com" }, { "title": "QuantConnect", @@ -8465,8 +10210,8 @@ { "title": "Quest", "hex": "FB4F14", - "source": "https://brand.quest.com/", - "guidelines": "https://brand.quest.com/" + "source": "https://brand.quest.com", + "guidelines": "https://brand.quest.com" }, { "title": "QuickBooks", @@ -8487,13 +10232,18 @@ { "title": "Quip", "hex": "F27557", - "source": "https://quip.com/" + "source": "https://quip.com" }, { "title": "Quora", "hex": "B92B27", "source": "https://www.quora.com" }, + { + "title": "Qwant", + "hex": "5C97FF", + "source": "https://about.qwant.com" + }, { "title": "Qwiklabs", "hex": "F5CD0E", @@ -8502,7 +10252,7 @@ { "title": "Qzone", "hex": "FECE00", - "source": "https://qzone.qq.com/" + "source": "https://qzone.qq.com" }, { "title": "R", @@ -8515,34 +10265,39 @@ { "title": "R3", "hex": "EC1D24", - "source": "https://www.r3.com/", + "source": "https://www.r3.com", "guidelines": "https://www.r3.com/contact-press-media/" }, { "title": "RabbitMQ", "hex": "FF6600", - "source": "https://www.rabbitmq.com/", + "source": "https://www.rabbitmq.com", "guidelines": "https://www.rabbitmq.com/trademark-guidelines.html" }, { "title": "Racket", "hex": "9F1D20", - "source": "https://racket-lang.org/" + "source": "https://racket-lang.org" }, { "title": "Radar", "hex": "007AFF", - "source": "https://radar.io/" + "source": "https://radar.io" }, { "title": "RadioPublic", "hex": "CE262F", "source": "https://help.radiopublic.com/hc/en-us/articles/360002546754-RadioPublic-logos" }, + { + "title": "Radix UI", + "hex": "161618", + "source": "https://www.radix-ui.com" + }, { "title": "Railway", "hex": "0B0D0E", - "source": "https://railway.app/" + "source": "https://railway.app" }, { "title": "Rainmeter", @@ -8558,8 +10313,8 @@ { "title": "Ram", "hex": "000000", - "source": "http://www.fcaci.com/x/RAMv15", - "guidelines": "http://www.fcaci.com/x/RAMv15" + "source": "https://www.fcaci.com/x/RAMv15", + "guidelines": "https://www.fcaci.com/x/RAMv15" }, { "title": "Rancher", @@ -8570,7 +10325,12 @@ { "title": "Rarible", "hex": "FEDA03", - "source": "https://rarible.com/" + "source": "https://rarible.com" + }, + { + "title": "Rasa", + "hex": "5A17EE", + "source": "https://rasa.com" }, { "title": "Raspberry Pi", @@ -8578,6 +10338,12 @@ "source": "https://www.raspberrypi.org/trademark-rules", "guidelines": "https://www.raspberrypi.org/trademark-rules" }, + { + "title": "Ravelry", + "hex": "EE6E62", + "source": "https://www.ravelry.com/help/logos", + "guidelines": "https://www.ravelry.com/help/logos" + }, { "title": "Ray", "hex": "028CF0", @@ -8586,7 +10352,7 @@ { "title": "Razer", "hex": "00FF00", - "source": "https://press.razer.com/" + "source": "https://press.razer.com" }, { "title": "Razorpay", @@ -8602,11 +10368,16 @@ "dup": [ { "title": "React Native", - "source": "https://reactnative.dev/" + "source": "https://reactnative.dev" } ] } }, + { + "title": "React Hook Form", + "hex": "EC5990", + "source": "https://github.com/react-hook-form/documentation/blob/d049ffe923336ce7a5bf58990c54c07f39ab2429/src/images/Logo.svg" + }, { "title": "React Query", "hex": "FF4154", @@ -8645,10 +10416,20 @@ "hex": "8CA1AF", "source": "https://github.com/readthedocs/readthedocs.org/blob/2dc9706c4fe7fa6d4410ed0e5aedca8d4796fe0f/media/readthedocsbranding.ai" }, + { + "title": "read.cv", + "hex": "111111", + "source": "https://read.cv/support/vcY96F2GqbvLOdKkWl0I" + }, + { + "title": "ReadMe", + "hex": "018EF5", + "source": "https://readme.com" + }, { "title": "Realm", "hex": "39477F", - "source": "https://realm.io/" + "source": "https://realm.io" }, { "title": "Reason", @@ -8661,6 +10442,16 @@ "source": "https://www.reasonstudios.com/press", "guidelines": "https://www.reasonstudios.com/press" }, + { + "title": "Recoil", + "hex": "3578E5", + "source": "https://recoiljs.org" + }, + { + "title": "Red", + "hex": "B32629", + "source": "https://www.red-lang.org" + }, { "title": "Red Hat", "hex": "EE0000", @@ -8669,7 +10460,7 @@ { "title": "Red Hat Open Shift", "hex": "EE0000", - "source": "https://www.openshift.com/" + "source": "https://www.openshift.com" }, { "title": "Redbubble", @@ -8697,10 +10488,15 @@ "url": "https://github.com/edavis10/redmine_logo/blob/2afe855c4e9cd955b648972d09cc20d76dabbf4c/COPYRIGHT" } }, + { + "title": "Redox", + "hex": "000000", + "source": "https://github.com/redox-os/assets/blob/4935a777cd7aa44323d3c263b1e0bb4ae864a027/logos/redox/vectorized_logo.svg" + }, { "title": "Redux", "hex": "764ABC", - "source": "https://github.com/reactjs/redux/tree/master/logo" + "source": "https://github.com/reduxjs/redux/tree/8ad084251a5b3e4617157fc52795b6284e68bc1e/logo" }, { "title": "Redux-Saga", @@ -8718,11 +10514,21 @@ "hex": "E41D1B", "source": "https://www.reebok.com/us" }, + { + "title": "Relay", + "hex": "F26B00", + "source": "https://relay.dev" + }, { "title": "Reliance Industries Limited", "hex": "D1AB66", "source": "https://www.ril.com/getattachment/7c210e67-5b0e-4965-b1a2-2ee83e19cee9/Morgan-Stanley-Eighteenth-Annual-India-Summit,-31.aspx" }, + { + "title": "remark", + "hex": "000000", + "source": "https://github.com/remarkjs/remark/blob/26dc58a675ac7267c105f0fdb76a82db77f8402a/logo.svg" + }, { "title": "Remix", "hex": "000000", @@ -8738,6 +10544,11 @@ "hex": "FFCC33", "source": "https://en.media.groupe.renault.com/news/renault-news-march-2021-5f28-989c5.html" }, + { + "title": "Render", + "hex": "46E3B7", + "source": "https://render.com" + }, { "title": "RenovateBot", "hex": "1A1F6C", @@ -8750,8 +10561,8 @@ }, { "title": "Replit", - "hex": "667881", - "source": "https://repl.it/" + "hex": "F26207", + "source": "https://repl.it" }, { "title": "Republic of Gamers", @@ -8779,10 +10590,16 @@ "hex": "00CCBB", "source": "https://c5.rgstatic.net/m/428059296771819/images/favicon/favicon.svg" }, + { + "title": "ReSharper", + "hex": "000000", + "source": "https://www.jetbrains.com/company/brand/logos/", + "guidelines": "https://www.jetbrains.com/company/brand/" + }, { "title": "Resurrection Remix OS", "hex": "000000", - "source": "https://github.com/ResurrectionRemix" + "source": "https://avatars.githubusercontent.com/u/4931972" }, { "title": "RetroArch", @@ -8794,35 +10611,50 @@ "hex": "CC0000", "source": "https://github.com/RetroPie/RetroPie-Docs/blob/c4e882bd2c9d740c591ff346e07a4a4cb536ca93/images/logo.svg" }, + { + "title": "ReVanced", + "hex": "9ED5FF", + "source": "https://revanced.app" + }, { "title": "reveal.js", "hex": "F2E142", - "source": "https://revealjs.com/" + "source": "https://revealjs.com" }, { "title": "ReverbNation", "hex": "E43526", "source": "https://www.reverbnation.com" }, + { + "title": "Revolt.chat", + "hex": "FF4655", + "source": "https://app.revolt.chat/assets/badges/revolt_r.svg", + "aliases": { + "aka": [ + "revolt" + ] + } + }, { "title": "Revolut", "hex": "0075EB", - "source": "https://www.revolut.com/" + "source": "https://www.revolut.com" }, { "title": "Revue", "hex": "E15718", - "source": "https://www.getrevue.co/" + "source": "https://www.getrevue.co" }, { "title": "REWE", "hex": "CC071E", - "source": "https://www.rewe.de/" + "source": "https://www.rewe.de" }, { "title": "Rezgo", "hex": "F76C00", - "source": "https://www.rezgo.com/" + "source": "https://www.rezgo.com" }, { "title": "Rhinoceros", @@ -8857,11 +10689,22 @@ "source": "https://www.ripple.com/media-kit/", "guidelines": "https://brand.ripple.com/article/brand-policy" }, + { + "title": "RISC-V", + "hex": "283272", + "source": "https://riscv.org/risc-v-logo/", + "guidelines": "https://riscv.org/about/risc-v-branding-guidelines/" + }, { "title": "Riseup", "hex": "FF0000", "source": "https://riseup.net/en/about-us/images" }, + { + "title": "roadmap.sh", + "hex": "000000", + "source": "https://roadmap.sh" + }, { "title": "Roam Research", "hex": "343A40", @@ -8870,8 +10713,13 @@ { "title": "Roblox", "hex": "000000", - "source": "https://corp.roblox.com/press-kit/", - "guidelines": "https://corp.roblox.com/wp-content/uploads/2021/03/Logo_Roblox.zip" + "source": "https://blog.roblox.com/wp-content/themes/roblox/img/Roblox_Logo_White.svg", + "guidelines": "https://en.help.roblox.com/hc/en-us/articles/115001708126-Roblox-Name-and-Logo-Community-Usage-Guidelines" + }, + { + "title": "Roblox Studio", + "hex": "00A2FF", + "source": "https://create.roblox.com/assets/common/studio_white.svg" }, { "title": "Robot Framework", @@ -8907,18 +10755,18 @@ { "title": "Roku", "hex": "662D91", - "source": "https://www.roku.com/", + "source": "https://www.roku.com", "guidelines": "https://docs.roku.com/published/trademarkguidelines/en/ca" }, { "title": "Rolls-Royce", "hex": "281432", - "source": "https://www.rolls-roycemotorcars.com/" + "source": "https://www.rolls-roycemotorcars.com" }, { "title": "rollup.js", "hex": "EC4A3F", - "source": "https://rollupjs.org/" + "source": "https://rollupjs.org" }, { "title": "Rome", @@ -8960,7 +10808,7 @@ "title": "Rotary International", "hex": "F7A81B", "source": "https://www.rotary.org/en", - "guidelines": "https://my-cms.rotary.org/en/document/tell-rotarys-story-voice-and-visual-identity-guidelines-rotarians" + "guidelines": "https://my.rotary.org/en/rotary-identity-guidelines" }, { "title": "Rotten Tomatoes", @@ -8970,7 +10818,12 @@ { "title": "Roundcube", "hex": "37BEFF", - "source": "https://roundcube.net/" + "source": "https://roundcube.net" + }, + { + "title": "RSocket", + "hex": "EF0092", + "source": "https://rsocket.io/img/r-socket-pink.svg" }, { "title": "RSS", @@ -8996,7 +10849,7 @@ { "title": "RTLZWEI", "hex": "00BCF6", - "source": "https://www.rtl2.de/" + "source": "https://www.rtl2.de" }, { "title": "RuboCop", @@ -9017,19 +10870,29 @@ { "title": "Ruby on Rails", "hex": "CC0000", - "source": "http://rubyonrails.org/", + "source": "https://rubyonrails.org", "guidelines": "https://rubyonrails.org/trademarks/" }, { "title": "Ruby Sinatra", "hex": "000000", - "source": "https://github.com/sinatra/resources/tree/master/logo" + "source": "https://github.com/sinatra/resources/tree/64c22f9b4bf2e52b5c0c875ba16671f295689efb/logo" }, { "title": "RubyGems", "hex": "E9573F", "source": "https://rubygems.org/pages/about" }, + { + "title": "Ruff", + "hex": "FCC21B", + "source": "https://github.com/charliermarsh/ruff/blob/e04ef423344837c916e75a7b09ea674711a104e0/assets/badge/v1.json" + }, + { + "title": "Rundeck", + "hex": "F73F39", + "source": "https://github.com/rundeck/docs/blob/a1c98b682eb6e82b60de0daa876133f390630821/docs/.vuepress/public/images/rundeck-logo.svg" + }, { "title": "Runkeeper", "hex": "001E62", @@ -9044,7 +10907,7 @@ { "title": "Rust", "hex": "000000", - "source": "https://www.rust-lang.org/", + "source": "https://www.rust-lang.org", "guidelines": "https://www.rust-lang.org/policies/media-guide", "license": { "type": "CC-BY-SA-4.0" @@ -9076,6 +10939,11 @@ "hex": "000000", "source": "https://images.techhive.com/images/article/2014/11/safari-favorites-100530680-large.jpg" }, + { + "title": "Sage", + "hex": "00D639", + "source": "https://www.sage.com" + }, { "title": "Sahibinden", "hex": "FFE800", @@ -9095,7 +10963,7 @@ { "title": "Salt Project", "hex": "57BCAD", - "source": "https://saltproject.io/", + "source": "https://saltproject.io", "guidelines": "https://gitlab.com/saltstack/open/salt-branding-guide/-/blob/37bbc3a8577be2f44895310c092439472491a8f4/README.md", "license": { "type": "Apache-2.0" @@ -9116,12 +10984,21 @@ { "title": "San Francisco Municipal Railway", "hex": "BA0C2F", - "source": "http://www.actransit.org/wp-content/uploads/HSP_CC-sched.pdf" + "source": "https://www.actransit.org/wp-content/uploads/HSP_CC-sched.pdf" }, { "title": "SanDisk", "hex": "ED1C24", - "source": "https://kb.sandisk.com/" + "source": "https://kb.sandisk.com" + }, + { + "title": "Sanity", + "hex": "F03E2F", + "source": "https://github.com/sanity-io/logos/blob/6934d28ae0b5f63b0386810997b8be61ec7009b5/src/sanityMonogram.tsx", + "license": { + "type": "MIT", + "url": "https://github.com/sanity-io/logos/blob/6934d28ae0b5f63b0386810997b8be61ec7009b5/LICENSE" + } }, { "title": "São Paulo Metro", @@ -9131,13 +11008,13 @@ { "title": "SAP", "hex": "0FAAFF", - "source": "https://www.sap.com/" + "source": "https://www.sap.com" }, { "title": "Sass", "hex": "CC6699", - "source": "http://sass-lang.com/styleguide/brand", - "guidelines": "http://sass-lang.com/styleguide/brand", + "source": "https://sass-lang.com/styleguide/brand", + "guidelines": "https://sass-lang.com/styleguide/brand", "license": { "type": "CC-BY-NC-SA-3.0" } @@ -9151,17 +11028,17 @@ { "title": "Saturn", "hex": "EB680B", - "source": "https://www.saturn.de/" + "source": "https://www.saturn.de" }, { "title": "Sauce Labs", - "hex": "E2231A", - "source": "https://saucelabs.com/" + "hex": "3DDC91", + "source": "https://saucelabs.com" }, { "title": "Scala", "hex": "DC322F", - "source": "https://www.scala-lang.org/" + "source": "https://www.scala-lang.org" }, { "title": "Scaleway", @@ -9193,12 +11070,12 @@ { "title": "Scopus", "hex": "E9711C", - "source": "https://www.scopus.com/" + "source": "https://www.scopus.com" }, { "title": "SCP Foundation", "hex": "FFFFFF", - "source": "https://scp-wiki.wikidot.com/" + "source": "https://scp-wiki.wikidot.com" }, { "title": "Scratch", @@ -9208,23 +11085,23 @@ { "title": "Screencastify", "hex": "FF8282", - "source": "https://www.screencastify.com/" + "source": "https://www.screencastify.com" }, { "title": "Scribd", "hex": "1E7B85", - "source": "https://scribdbrand.frontify.com/d/eqGJ2WET8x3A/scribd-brand-style-guide#/other/media-press-kit/download-horizontal-vertical-logos-for-small-applications", - "guidelines": "https://scribdbrand.frontify.com/d/eqGJ2WET8x3A/scribd-brand-style-guide#/basics/logo-usage-guidelines-1576192924" + "source": "https://brand.scribd.com/d/oFZcsq7FVpSh/about-scribd#/media-press-kit/downloads", + "guidelines": "https://brand.scribd.com/d/oFZcsq7FVpSh/about-scribd#/marketing-visual-guidelines/our-logo/our-logomark" }, { "title": "Scrimba", "hex": "2B283A", - "source": "https://scrimba.com/" + "source": "https://scrimba.com" }, { "title": "ScrollReveal", "hex": "FFCB36", - "source": "https://scrollrevealjs.org/" + "source": "https://scrollrevealjs.org" }, { "title": "Scrum Alliance", @@ -9245,7 +11122,12 @@ { "title": "SEAT", "hex": "33302E", - "source": "https://www.seat.es/" + "source": "https://www.seat.es" + }, + { + "title": "SecurityScorecard", + "hex": "7033FD", + "source": "https://securityscorecard.com" }, { "title": "Sefaria", @@ -9267,6 +11149,11 @@ "hex": "21B352", "source": "https://sellfy.com/about/" }, + { + "title": "Semantic Scholar", + "hex": "1857B6", + "source": "https://www.semanticscholar.org/about" + }, { "title": "Semantic UI React", "hex": "35BDB2", @@ -9285,7 +11172,12 @@ { "title": "Semaphore CI", "hex": "19A974", - "source": "https://semaphoreci.com/" + "source": "https://semaphoreci.com" + }, + { + "title": "Semrush", + "hex": "FF642D", + "source": "https://www.semrush.com" }, { "title": "SemVer", @@ -9295,8 +11187,13 @@ { "title": "Sencha", "hex": "86BC40", - "source": "http://design.sencha.com/", - "guidelines": "http://design.sencha.com/productlogo.html" + "source": "https://design.sencha.com", + "guidelines": "https://design.sencha.com/productlogo.html" + }, + { + "title": "Sendinblue", + "hex": "0092FF", + "source": "https://get.sendinblue.com/assets/logos/" }, { "title": "Sennheiser", @@ -9306,7 +11203,7 @@ { "title": "Sensu", "hex": "89C967", - "source": "https://github.com/sensu/sensu-go/blob/master/dashboard/src/assets/logo/graphic/green.svg" + "source": "https://github.com/sensu/web/blob/c823738c11e576d6b2e5d4ca2d216dbd472c0b11/src/assets/logo/graphic/green.svg" }, { "title": "Sentry", @@ -9322,18 +11219,28 @@ { "title": "Sequelize", "hex": "52B0E7", - "source": "https://github.com/sequelize/sequelize/pull/12871" + "source": "https://github.com/sequelize/website/blob/e6a482fa58a839b15ace80e3c8901ed2887be45e/static/img/logo-simple.svg" }, { "title": "Server Fault", "hex": "E7282D", - "source": "http://stackoverflow.com/company/logos", + "source": "https://stackoverflow.com/company/logos", "guidelines": "https://stackoverflow.com/legal/trademark-guidance" }, { - "title": "Serverless", - "hex": "FD5750", - "source": "https://serverless.com/" + "title": "Serverless", + "hex": "FD5750", + "source": "https://serverless.com" + }, + { + "title": "Sessionize", + "hex": "1AB394", + "source": "https://sessionize.com/brand" + }, + { + "title": "Setapp", + "hex": "E6C3A5", + "source": "https://setapp.com" }, { "title": "SFML", @@ -9343,13 +11250,18 @@ { "title": "Shadow", "hex": "0A0C0D", - "source": "https://shadow.tech/" + "source": "https://shadow.tech" }, { "title": "Shanghai Metro", "hex": "EC1C24", "source": "https://en.wikipedia.org/wiki/File:Shanghai_Metro_Full_Logo.svg" }, + { + "title": "ShareX", + "hex": "2885F1", + "source": "https://getsharex.com/brand-assets" + }, { "title": "sharp", "hex": "99CC00", @@ -9358,7 +11270,7 @@ { "title": "Shazam", "hex": "0088FF", - "source": "https://www.shazam.com/" + "source": "https://www.shazam.com" }, { "title": "Shell", @@ -9368,7 +11280,7 @@ { "title": "Shelly", "hex": "4495D1", - "source": "https://shelly.cloud/" + "source": "https://shelly.cloud" }, { "title": "Shenzhen Metro", @@ -9385,6 +11297,11 @@ "hex": "343434", "source": "https://shikimori.one" }, + { + "title": "Shopee", + "hex": "EE4D2D", + "source": "https://shopee.com" + }, { "title": "Shopify", "hex": "7AB55C", @@ -9404,7 +11321,7 @@ { "title": "Showpad", "hex": "2D2E83", - "source": "https://www.showpad.com/" + "source": "https://www.showpad.com" }, { "title": "Showtime", @@ -9420,13 +11337,18 @@ { "title": "Siemens", "hex": "009999", - "source": "https://siemens.com/" + "source": "https://siemens.com" }, { "title": "Signal", "hex": "3A76F0", "source": "https://github.com/signalapp/Signal-Desktop/blob/9db8765b6cf270195e45a7f251374d4e53d54c95/images/signal-logo.svg" }, + { + "title": "Similarweb", + "hex": "092540", + "source": "https://www.similarweb.com" + }, { "title": "Simkl", "hex": "000000", @@ -9435,13 +11357,13 @@ { "title": "Simple Analytics", "hex": "FF4F64", - "source": "https://simpleanalytics.com/", + "source": "https://simpleanalytics.com", "guidelines": "https://simpleanalytics.com/press" }, { "title": "Simple Icons", "hex": "111111", - "source": "https://simpleicons.org/", + "source": "https://simpleicons.org", "license": { "type": "CC0-1.0" } @@ -9461,10 +11383,15 @@ "hex": "AA00FF", "source": "https://www.singlestore.com/brand/" }, + { + "title": "Sitecore", + "hex": "EB1F1F", + "source": "https://www.sitecore.com" + }, { "title": "SitePoint", "hex": "258AAF", - "source": "http://www.sitepoint.com" + "source": "https://www.sitepoint.com" }, { "title": "Sketch", @@ -9495,7 +11422,7 @@ { "title": "Sky", "hex": "0072C9", - "source": "https://www.skysports.com/" + "source": "https://www.skysports.com" }, { "title": "Skynet", @@ -9511,13 +11438,18 @@ { "title": "Skype", "hex": "00AFF0", - "source": "http://blogs.skype.com/?attachment_id=56273" + "source": "https://blogs.skype.com/?attachment_id=56273" }, { "title": "Skype for Business", "hex": "00AFF0", "source": "https://en.wikipedia.org/wiki/Skype_for_Business_Server" }, + { + "title": "Skyrock", + "hex": "009AFF", + "source": "https://www.svgrepo.com/svg/54507/skyrock-logo" + }, { "title": "Slack", "hex": "4A154B", @@ -9537,7 +11469,7 @@ { "title": "SlickPic", "hex": "FF880F", - "source": "https://www.slickpic.com/" + "source": "https://www.slickpic.com" }, { "title": "Slides", @@ -9569,7 +11501,7 @@ { "title": "Smashing Magazine", "hex": "E85C33", - "source": "https://www.smashingmagazine.com/" + "source": "https://www.smashingmagazine.com" }, { "title": "SMRT", @@ -9579,7 +11511,7 @@ { "title": "SmugMug", "hex": "6DB944", - "source": "https://help.smugmug.com/using-smugmug's-logo-HJulJePkEBf" + "source": "https://www.smugmughelp.com/articles/409-smugmug-s-logo-and-usage" }, { "title": "Snapchat", @@ -9595,6 +11527,12 @@ "type": "CC-BY-ND-2.0" } }, + { + "title": "SNCF", + "hex": "CA0939", + "source": "https://www.sncf.com", + "guidelines": "https://www.sncf.com/fr/groupe/marques/sncf/identite" + }, { "title": "Snowflake", "hex": "29B5E8", @@ -9604,7 +11542,7 @@ { "title": "Snowpack", "hex": "2E5E82", - "source": "https://www.snowpack.dev/" + "source": "https://www.snowpack.dev" }, { "title": "Snyk", @@ -9629,7 +11567,7 @@ { "title": "Sogou", "hex": "FB6022", - "source": "https://www.sogou.com/" + "source": "https://www.sogou.com" }, { "title": "Solid", @@ -9648,7 +11586,7 @@ { "title": "Sololearn", "hex": "149EF2", - "source": "https://www.sololearn.com/", + "source": "https://www.sololearn.com", "aliases": { "aka": [ "SoloLearn" @@ -9660,6 +11598,11 @@ "hex": "5294E2", "source": "https://getsol.us/branding/" }, + { + "title": "Sonar", + "hex": "FD3456", + "source": "https://www.sonarsource.com" + }, { "title": "SonarCloud", "hex": "F3702A", @@ -9728,13 +11671,23 @@ { "title": "SourceForge", "hex": "FF6600", - "source": "https://sourceforge.net/" + "source": "https://sourceforge.net" }, { "title": "Sourcegraph", - "hex": "00CBEC", - "source": "https://about.sourcegraph.com/handbook/marketing/brand/brand_guidelines", - "guidelines": "https://about.sourcegraph.com/handbook/marketing/brand/brand_guidelines" + "hex": "000000", + "source": "https://handbook.sourcegraph.com/departments/engineering/design/brand_guidelines/logo/", + "guidelines": "https://handbook.sourcegraph.com/departments/engineering/design/brand_guidelines/logo/" + }, + { + "title": "SourceHut", + "hex": "000000", + "source": "https://sourcehut.org/logo/", + "guidelines": "https://sourcehut.org/logo/", + "license": { + "type": "CC0-1.0", + "url": "https://sourcehut.org/logo/" + } }, { "title": "Sourcetree", @@ -9745,12 +11698,12 @@ { "title": "Southwest Airlines", "hex": "304CB2", - "source": "https://www.southwest.com/" + "source": "https://www.southwest.com" }, { "title": "Spacemacs", "hex": "9266CC", - "source": "http://spacemacs.org/", + "source": "https://spacemacs.org", "license": { "type": "CC-BY-SA-4.0" } @@ -9758,7 +11711,7 @@ { "title": "SpaceX", "hex": "000000", - "source": "https://www.spacex.com/" + "source": "https://www.spacex.com" }, { "title": "spaCy", @@ -9768,12 +11721,12 @@ { "title": "Spark AR", "hex": "FF5C83", - "source": "https://sparkar.facebook.com/" + "source": "https://sparkar.facebook.com" }, { "title": "Sparkasse", "hex": "FF0000", - "source": "https://www.sparkasse.de/", + "source": "https://www.sparkasse.de", "guidelines": "https://www.sparkasse.de/nutzungshinweise.html" }, { @@ -9796,7 +11749,7 @@ { "title": "Speaker Deck", "hex": "009287", - "source": "https://speakerdeck.com/" + "source": "https://speakerdeck.com" }, { "title": "Spectrum", @@ -9806,12 +11759,28 @@ { "title": "Speedtest", "hex": "141526", - "source": "https://www.speedtest.net/" + "source": "https://www.speedtest.net" + }, + { + "title": "SpeedyPage", + "hex": "1C71F9", + "source": "https://speedypage.com" + }, + { + "title": "Sphere Online Judge", + "slug": "spoj", + "aliases": { + "aka": [ + "SPOJ" + ] + }, + "hex": "337AB7", + "source": "https://www.spoj.com" }, { "title": "Spinnaker", "hex": "139BB4", - "source": "https://github.com/spinnaker/spinnaker.github.io/tree/master/assets/images" + "source": "https://github.com/spinnaker/spinnaker.github.io/tree/0cdd37af7541293a810494a1bb4d7df9ef553d60/assets/images" }, { "title": "Spinrilla", @@ -9821,12 +11790,12 @@ { "title": "Splunk", "hex": "000000", - "source": "https://www.splunk.com/" + "source": "https://www.splunk.com" }, { "title": "Spond", "hex": "EE4353", - "source": "https://spond.com/" + "source": "https://spond.com" }, { "title": "Spotify", @@ -9837,18 +11806,18 @@ { "title": "Spotlight", "hex": "352A71", - "source": "https://www.spotlight.com/" + "source": "https://www.spotlight.com" }, { "title": "Spreadshirt", "hex": "00B2A5", - "source": "https://www.spreadshirt.ie/", + "source": "https://www.spreadshirt.ie", "aliases": { "dup": [ { "title": "Spreadshop", "hex": "FF9343", - "source": "https://www.spreadshop.com/" + "source": "https://www.spreadshop.com" } ] } @@ -9856,7 +11825,7 @@ { "title": "Spreaker", "hex": "F5C300", - "source": "https://www.spreaker.com/" + "source": "https://www.spreaker.com" }, { "title": "Spring", @@ -9867,7 +11836,7 @@ "title": "Spring", "slug": "spring_creators", "hex": "000000", - "source": "https://www.spri.ng/" + "source": "https://www.spri.ng" }, { "title": "Spring Boot", @@ -9882,7 +11851,7 @@ { "title": "Spyder IDE", "hex": "FF0000", - "source": "https://www.spyder-ide.org/" + "source": "https://www.spyder-ide.org" }, { "title": "SQLite", @@ -9892,28 +11861,34 @@ { "title": "Square", "hex": "3E4348", - "source": "https://squareup.com/" + "source": "https://squareup.com" }, { "title": "Square Enix", "hex": "ED1C24", - "source": "https://www.square-enix.com/" + "source": "https://www.square-enix.com" }, { "title": "Squarespace", "hex": "000000", "source": "https://www.squarespace.com/logo-guidelines", - "guidelines": "http://www.squarespace.com/brand-guidelines" + "guidelines": "https://www.squarespace.com/brand-guidelines" }, { "title": "SSRN", "hex": "154881", "source": "https://www.ssrn.com" }, + { + "title": "SST", + "hex": "E27152", + "source": "https://sst.dev", + "guidelines": "https://github.com/serverless-stack/identity" + }, { "title": "Stack Exchange", "hex": "1E5397", - "source": "http://stackoverflow.com/company/logos", + "source": "https://stackoverflow.com/company/logos", "guidelines": "https://stackoverflow.com/legal/trademark-guidance" }, { @@ -9928,11 +11903,21 @@ "source": "https://www.stackbit.com/branding-guidelines/", "guidelines": "https://www.stackbit.com/branding-guidelines/" }, + { + "title": "StackBlitz", + "hex": "1269D3", + "source": "https://stackblitz.com" + }, { "title": "StackEdit", "hex": "606060", "source": "https://github.com/benweet/stackedit/blob/46383b5b6a54b65b8720d786ed0a0518b9ad652d/src/assets/iconStackedit.svg" }, + { + "title": "StackHawk", + "hex": "00CBC6", + "source": "https://www.stackhawk.com/press/" + }, { "title": "StackPath", "hex": "000000", @@ -9954,16 +11939,26 @@ "hex": "00A4FD", "source": "https://staffbase.com/en/about/press-assets/" }, + { + "title": "Standard Resume", + "hex": "2A3FFB", + "source": "https://standardresume.co/press" + }, + { + "title": "StandardJS", + "hex": "F3DF49", + "source": "https://github.com/standard/standard/blob/6516bf87f127b7968c34cac0100d48d6c455a891/sticker.svg" + }, { "title": "Star Trek", "hex": "FFE200", - "source": "https://intl.startrek.com/" + "source": "https://intl.startrek.com" }, { "title": "Starbucks", "hex": "006241", - "source": "https://starbucks.com/", - "guidelines": "https://creative.starbucks.com/" + "source": "https://starbucks.com", + "guidelines": "https://creative.starbucks.com" }, { "title": "Stardock", @@ -9979,7 +11974,7 @@ { "title": "Starship", "hex": "DD0B78", - "source": "https://starship.rs/" + "source": "https://starship.rs" }, { "title": "STARZ", @@ -10000,7 +11995,7 @@ { "title": "Statuspal", "hex": "4934BF", - "source": "https://statuspal.io/" + "source": "https://statuspal.io" }, { "title": "Steam", @@ -10008,15 +12003,21 @@ "source": "https://partner.steamgames.com/doc/marketing/branding", "guidelines": "https://partner.steamgames.com/doc/marketing/branding" }, + { + "title": "Steam Deck", + "hex": "1A9FFF", + "source": "https://partner.steamgames.com/doc/marketing/branding", + "guidelines": "https://partner.steamgames.com/doc/marketing/branding" + }, { "title": "SteamDB", "hex": "000000", - "source": "https://steamdb.info/" + "source": "https://steamdb.info" }, { "title": "Steamworks", "hex": "1E1E1E", - "source": "https://partner.steamgames.com/" + "source": "https://partner.steamgames.com" }, { "title": "Steelseries", @@ -10031,7 +12032,7 @@ { "title": "Steemit", "hex": "06D6A9", - "source": "https://steemit.com/" + "source": "https://steemit.com" }, { "title": "Steinberg", @@ -10046,22 +12047,22 @@ { "title": "Stencyl", "hex": "8E1C04", - "source": "http://www.stencyl.com/about/press/" + "source": "https://www.stencyl.com/about/press/" }, { "title": "Stimulus", "hex": "77E8B9", - "source": "https://stimulus.hotwire.dev/" + "source": "https://stimulus.hotwire.dev" }, { "title": "Stitcher", "hex": "000000", - "source": "https://partners.stitcher.com/" + "source": "https://partners.stitcher.com" }, { "title": "STMicroelectronics", "hex": "03234B", - "source": "https://www.st.com/" + "source": "https://www.st.com" }, { "title": "StopStalk", @@ -10111,15 +12112,25 @@ "hex": "E00033", "source": "https://www.strongswan.org/images/" }, + { + "title": "Stryker", + "hex": "E74C3C", + "source": "https://stryker-mutator.io" + }, { "title": "StubHub", "hex": "003168", - "source": "http://www.stubhub.com" + "source": "https://www.stubhub.com" + }, + { + "title": "Studio 3T", + "hex": "17AF66", + "source": "https://studio3t.com" }, { "title": "styled-components", "hex": "DB7093", - "source": "https://www.styled-components.com/" + "source": "https://www.styled-components.com" }, { "title": "stylelint", @@ -10129,7 +12140,7 @@ { "title": "StyleShare", "hex": "212121", - "source": "https://www.stylesha.re/" + "source": "https://www.stylesha.re" }, { "title": "Stylus", @@ -10144,17 +12155,22 @@ { "title": "Sublime Text", "hex": "FF9800", - "source": "https://www.sublimetext.com/" + "source": "https://www.sublimetext.com" }, { "title": "Substack", "hex": "FF6719", - "source": "https://on.substack.com/" + "source": "https://on.substack.com" + }, + { + "title": "Subtitle Edit", + "hex": "CC2424", + "source": "https://github.com/SubtitleEdit/subtitleedit/issues/61#issuecomment-1442100888" }, { "title": "Subversion", "hex": "809CC9", - "source": "http://subversion.apache.org/logo" + "source": "https://subversion.apache.org/logo" }, { "title": "suckless", @@ -10169,8 +12185,8 @@ }, { "title": "Supabase", - "hex": "3ECF8E", - "source": "https://github.com/supabase/supabase/blob/2a983c3290148d17cfce9e34c0a39102b22fdf78/web/static/img/showcase-logo/supabase-logo.svg" + "hex": "3FCF8E", + "source": "https://github.com/supabase/supabase/blob/4031a7549f5d46da7bc79c01d56be4177dc7c114/packages/common/assets/images/supabase-logo-wordmark--light.svg" }, { "title": "Super User", @@ -10178,11 +12194,21 @@ "source": "https://stackoverflow.design/brand/logo/", "guidelines": "https://stackoverflow.com/legal/trademark-guidance" }, + { + "title": "Supercrease", + "hex": "000000", + "source": "https://supercrease.com/wp-content/themes/super-crease/assets/svgs/super-crease.svg" + }, { "title": "Supermicro", "hex": "151F6D", "source": "https://www.supermicro.com/manuals/supermicro_logo_guidelines.pdf" }, + { + "title": "SurrealDB", + "hex": "FF00A0", + "source": "https://surrealdb.com/media" + }, { "title": "SurveyMonkey", "hex": "00BF6F", @@ -10192,13 +12218,13 @@ { "title": "SUSE", "hex": "0C322C", - "source": "https://brand.suse.com/", - "guidelines": "https://brand.suse.com/" + "source": "https://brand.suse.com", + "guidelines": "https://brand.suse.com" }, { "title": "Suzuki", "hex": "E30613", - "source": "https://www.suzuki.ie/" + "source": "https://www.suzuki.ie" }, { "title": "Svelte", @@ -10209,7 +12235,7 @@ { "title": "Sapper", "hex": "159497", - "source": "https://sapper.svelte.dev/" + "source": "https://sapper.svelte.dev" } ] } @@ -10223,6 +12249,11 @@ "type": "CC-BY-SA-4.0" } }, + { + "title": "SVG.js", + "hex": "FF0066", + "source": "https://github.com/svgdotjs/svg.logo/blob/0de9ff2cca6c058968f838baaaf507e475ee4583/logo.svg" + }, { "title": "SVGO", "hex": "3E7FC1", @@ -10252,12 +12283,12 @@ { "title": "Swiggy", "hex": "FC8019", - "source": "https://www.swiggy.com/" + "source": "https://www.swiggy.com" }, { "title": "Swiper", "hex": "6332F6", - "source": "https://swiperjs.com/" + "source": "https://swiperjs.com" }, { "title": "SWR", @@ -10269,6 +12300,11 @@ "hex": "FDB511", "source": "https://commons.wikimedia.org/wiki/File:Symantec_logo10.svg" }, + { + "title": "Symbolab", + "hex": "DB3F59", + "source": "https://www.symbolab.com" + }, { "title": "Symfony", "hex": "000000", @@ -10278,7 +12314,7 @@ { "title": "Symphony", "hex": "0098FF", - "source": "https://symphony.com/" + "source": "https://symphony.com" }, { "title": "SymPy", @@ -10291,6 +12327,11 @@ "source": "https://www.synology.com/en-global/company/branding", "guidelines": "https://www.synology.com/en-global/company/branding" }, + { + "title": "System76", + "hex": "585048", + "source": "https://github.com/system76/brand/blob/7a31740b54f929b62a165baa61dfb0b5164261e8/System76%20branding/system76-logo_secondary.svg" + }, { "title": "T-Mobile", "hex": "E20074", @@ -10302,11 +12343,31 @@ "hex": "E97627", "source": "https://www.tableau.com/about/media-download-center" }, + { + "title": "TableCheck", + "hex": "7935D2", + "source": "https://www.tablecheck.com/join" + }, + { + "title": "Taco Bell", + "hex": "38096C", + "source": "https://www.tacobell.com" + }, { "title": "tado°", "hex": "FFA900", "source": "https://www.tado.com/gb-en/press-assets" }, + { + "title": "Taichi Graphics", + "hex": "000000", + "source": "https://taichi.graphics" + }, + { + "title": "Taichi Lang", + "hex": "000000", + "source": "https://docs.taichi-lang.org/blog" + }, { "title": "Tails", "hex": "56347C", @@ -10326,7 +12387,12 @@ { "title": "Talenthouse", "hex": "FFFFFF", - "source": "https://www.talenthouse.com/" + "source": "https://www.talenthouse.com" + }, + { + "title": "Tamiya", + "hex": "000000", + "source": "https://commons.wikimedia.org/wiki/File:TAMIYA_Logo.svg" }, { "title": "Tampermonkey", @@ -10346,7 +12412,12 @@ { "title": "Target", "hex": "CC0000", - "source": "https://www.target.com/" + "source": "https://www.target.com" + }, + { + "title": "Task", + "hex": "29BEB0", + "source": "https://github.com/go-task/task/blob/367c0b38a6787bebf6ee5af864be1574ad40b24a/docs/Logo_mono.svg" }, { "title": "Tasmota", @@ -10359,6 +12430,17 @@ "source": "https://www.tatasteel.com/media/media-kit/logos-usage-guidelines/", "guidelines": "https://www.tatasteel.com/media/media-kit/logos-usage-guidelines/" }, + { + "title": "Tata Consultancy Services", + "slug": "tcs", + "hex": "EE3984", + "source": "https://www.tcs.com", + "aliases": { + "aka": [ + "TCS" + ] + } + }, { "title": "Tauri", "hex": "FFC131", @@ -10371,7 +12453,7 @@ { "title": "TaxBuzz", "hex": "ED8B0B", - "source": "https://www.taxbuzz.com/" + "source": "https://www.taxbuzz.com" }, { "title": "TeamCity", @@ -10381,8 +12463,8 @@ }, { "title": "TeamSpeak", - "hex": "2580C3", - "source": "https://www.teamspeak.com/en/more/media-pack/" + "hex": "4B69B6", + "source": "https://teamspeak.com" }, { "title": "TeamViewer", @@ -10418,7 +12500,7 @@ { "title": "Telegraph", "hex": "FAFAFA", - "source": "https://telegra.ph/" + "source": "https://telegra.ph" }, { "title": "Temporal", @@ -10443,7 +12525,13 @@ { "title": "teratail", "hex": "F4C51C", - "source": "https://teratail.com/" + "source": "https://teratail.com" + }, + { + "title": "Termius", + "hex": "000000", + "source": "https://termius.com/brand-resources", + "guidelines": "https://termius.com/terms-of-use" }, { "title": "Terraform", @@ -10469,12 +12557,17 @@ { "title": "Testin", "hex": "007DD7", - "source": "https://www.testin.cn/" + "source": "https://www.testin.cn" }, { "title": "Testing Library", "hex": "E33332", - "source": "https://testing-library.com/" + "source": "https://testing-library.com" + }, + { + "title": "TestRail", + "hex": "65C179", + "source": "https://www.testrail.com" }, { "title": "Tether", @@ -10490,7 +12583,22 @@ { "title": "Textpattern", "hex": "FFDA44", - "source": "https://textpattern.com/" + "source": "https://textpattern.com" + }, + { + "title": "TGA", + "hex": "0014FF", + "source": "https://thegameawards.com/about", + "aliases": { + "aka": [ + "The Game Awards" + ] + } + }, + { + "title": "Thangs", + "hex": "FFBC00", + "source": "https://thangs.com" }, { "title": "The Algorithms", @@ -10505,17 +12613,17 @@ { "title": "The Irish Times", "hex": "000000", - "source": "https://www.irishtimes.com/" + "source": "https://www.irishtimes.com" }, { "title": "The Mighty", "hex": "D0072A", - "source": "https://themighty.com/" + "source": "https://themighty.com" }, { "title": "The Models Resource", "hex": "3A75BD", - "source": "https://www.models-resource.com/" + "source": "https://www.models-resource.com" }, { "title": "The Movie Database", @@ -10530,22 +12638,22 @@ { "title": "The North Face", "hex": "000000", - "source": "https://www.thenorthface.com/" + "source": "https://www.thenorthface.com" }, { "title": "The Register", "hex": "FF0000", - "source": "https://www.theregister.co.uk/" + "source": "https://www.theregister.co.uk" }, { "title": "The Sounds Resource", "hex": "39BE6B", - "source": "https://www.sounds-resource.com/" + "source": "https://www.sounds-resource.com" }, { "title": "The Spriters Resource", "hex": "BE3939", - "source": "https://www.spriters-resource.com/" + "source": "https://www.spriters-resource.com" }, { "title": "The Washington Post", @@ -10555,7 +12663,7 @@ { "title": "Thingiverse", "hex": "248BFB", - "source": "https://www.thingiverse.com/" + "source": "https://www.thingiverse.com" }, { "title": "ThinkPad", @@ -10567,6 +12675,11 @@ "hex": "0099FF", "source": "https://www.threadless.com/about-us/" }, + { + "title": "Threads", + "hex": "000000", + "source": "https://commons.wikimedia.org/wiki/File:Threads_(app)_logo.svg" + }, { "title": "Three.js", "hex": "000000", @@ -10587,6 +12700,11 @@ "hex": "0A84FF", "source": "https://github.com/thundernest/thunderbird-website/blob/d7446f3eee14b38f02ee60da7d4b4fb8c9ef20e3/media/svg/logo.svg" }, + { + "title": "Thurgauer Kantonalbank", + "hex": "006D41", + "source": "https://www.tkb.ch" + }, { "title": "Thymeleaf", "hex": "005F0F", @@ -10602,11 +12720,21 @@ "hex": "000000", "source": "https://tidal.com" }, + { + "title": "TiddlyWiki", + "hex": "111111", + "source": "https://tiddlywiki.com" + }, { "title": "Tide", "hex": "4050FB", "source": "https://www.tide.co/newsroom/" }, + { + "title": "Tidyverse", + "hex": "1A162D", + "source": "https://github.com/rstudio/hex-stickers/blob/69528093ef59f541e5a4798dbcb00e60267e8870/SVG/tidyverse.svg" + }, { "title": "TietoEVRY", "hex": "063752", @@ -10620,28 +12748,48 @@ { "title": "Tile", "hex": "000000", - "source": "https://www.thetileapp.com/" + "source": "https://www.thetileapp.com" }, { "title": "Timescale", "hex": "FDB515", - "source": "https://www.timescale.com/" + "source": "https://www.timescale.com" + }, + { + "title": "Tina", + "hex": "EC4815", + "source": "https://github.com/tinacms/tinacms/blob/965edfb7d2a318ab6b86a4772e4daebf53f34f2e/examples/tina-self-hosted-demo/public/tina.svg" }, { "title": "Tinder", "hex": "FF6B6B", - "source": "http://www.gotinder.com/press" + "source": "https://www.gotinder.com/press" }, { "title": "TinyLetter", "hex": "ED1C24", "source": "https://tinyletter.com/site/press/" }, + { + "title": "Tistory", + "hex": "000000", + "source": "https://tistory.com", + "aliases": { + "loc": { + "ko-KR": "티스토리" + } + } + }, { "title": "tmux", "hex": "1BB91F", "source": "https://github.com/tmux/tmux/tree/f04cc3997629823f0e304d4e4184e2ec93c703f0/logo" }, + { + "title": "TNT", + "hex": "FF6600", + "source": "https://commons.wikimedia.org/wiki/File:TNT_Express_Logo.svg" + }, { "title": "Todoist", "hex": "E44332", @@ -10649,18 +12797,28 @@ }, { "title": "Toggl", - "hex": "E01B22", - "source": "https://toggl.com/media-toolkit" + "hex": "FFDE91", + "source": "https://toggl.com/track/media-toolkit" + }, + { + "title": "Toggl Track", + "hex": "E57CD8", + "source": "https://toggl.com/track/media-toolkit" }, { "title": "Tokyo Metro", "hex": "149DD3", "source": "https://en.wikipedia.org/wiki/File:TokyoMetro.svg" }, + { + "title": "TOML", + "hex": "9C4121", + "source": "https://github.com/toml-lang/toml/blob/625f62b55c5acdfb9924c78e1d0bf4cf0be23d91/logos/toml.svg" + }, { "title": "Tomorrowland", "hex": "000000", - "source": "https://global.tomorrowland.com/" + "source": "https://global.tomorrowland.com" }, { "title": "Topcoder", @@ -10697,7 +12855,7 @@ { "title": "TP-Link", "hex": "4ACBD6", - "source": "https://www.tp-link.com/" + "source": "https://www.tp-link.com" }, { "title": "tqdm", @@ -10709,6 +12867,17 @@ "hex": "9D0FB0", "source": "https://github.com/traefik/mesh/blob/ef03c40b78c08931d47fdad0be10d1986f4e21bc/docs/content/assets/img/traefik-mesh-logo.svg" }, + { + "title": "Traefik Proxy", + "hex": "24A1C1", + "source": "https://traefik.io/traefik/" + }, + { + "title": "Trailforks", + "hex": "FFCD00", + "source": "https://www.trailforks.com/about/graphics/", + "guidelines": "https://www.trailforks.com/about/graphics/" + }, { "title": "TrainerRoad", "hex": "DA291C", @@ -10720,20 +12889,15 @@ "hex": "ED1C24", "source": "https://trakt.tv" }, - { - "title": "TransferWise", - "hex": "00B9FF", - "source": "https://brand.transferwise.com/logo" - }, { "title": "Transport for Ireland", "hex": "00B274", - "source": "https://www.transportforireland.ie/" + "source": "https://www.transportforireland.ie" }, { "title": "Transport for London", "hex": "113B92", - "source": "https://tfl.gov.uk/" + "source": "https://tfl.gov.uk" }, { "title": "Travis CI", @@ -10754,13 +12918,18 @@ { "title": "Trend Micro", "hex": "D71921", - "source": "https://www.trendmicro.com/" + "source": "https://www.trendmicro.com" }, { "title": "Treyarch", "hex": "000000", "source": "https://upload.wikimedia.org/wikipedia/en/7/7a/Treyarch_logo.svg" }, + { + "title": "Trilium", + "hex": "000000", + "source": "https://github.com/zadam/trilium/blob/05d2f4fe96f49c5bc7f3a02a9e47fc352ce5971d/images/icon.svg" + }, { "title": "Triller", "hex": "FF0089", @@ -10774,23 +12943,34 @@ { "title": "Trip.com", "hex": "287DFA", - "source": "https://careers.trip.com/" + "source": "https://careers.trip.com" }, { "title": "Tripadvisor", "hex": "34E0A1", "source": "https://tripadvisor.mediaroom.com/logo-guidelines" }, + { + "title": "Trivy", + "hex": "1904DA", + "source": "https://www.aquasec.com/brand/", + "guidelines": "https://www.aquasec.com/brand/" + }, { "title": "Trove", "hex": "2D004B", "source": "https://trove.nla.gov.au/about/who-we-are/our-logo", "guidelines": "https://trove.nla.gov.au/about/who-we-are/trove-brand-guidelines" }, + { + "title": "tRPC", + "hex": "2596BE", + "source": "https://github.com/trpc/trpc/blob/e0df4a2d5b498dd953a65901e04915c6e3f7ecc5/www/static/img/logo-no-text.svg" + }, { "title": "TrueNAS", "hex": "0095D5", - "source": "https://www.truenas.com/" + "source": "https://www.truenas.com" }, { "title": "trulia", @@ -10811,7 +12991,7 @@ { "title": "Try It Online", "hex": "303030", - "source": "https://tio.run/" + "source": "https://tio.run" }, { "title": "TryHackMe", @@ -10844,6 +13024,11 @@ "hex": "14D8CC", "source": "https://cms.tunein.com/press/" }, + { + "title": "Turbo", + "hex": "5CD8E5", + "source": "https://turbo.hotwired.dev" + }, { "title": "Turborepo", "hex": "EF4444", @@ -10853,7 +13038,7 @@ "title": "TurboSquid", "hex": "FF8135", "source": "https://www.brand.turbosquid.com/turbosquidicons", - "guidelines": "https://www.brand.turbosquid.com/" + "guidelines": "https://www.brand.turbosquid.com" }, { "title": "Turkish Airlines", @@ -10868,7 +13053,7 @@ { "title": "TV Time", "hex": "FFD400", - "source": "https://www.tvtime.com/" + "source": "https://www.tvtime.com" }, { "title": "Twilio", @@ -10882,13 +13067,14 @@ }, { "title": "Twitter", - "hex": "1DA1F2", - "source": "https://brand.twitter.com" + "hex": "1D9BF0", + "source": "https://brand.twitter.com", + "guidelines": "https://about.twitter.com/en/who-we-are/brand-toolkit" }, { "title": "Twoo", "hex": "FF7102", - "source": "http://www.twoo.com/about/press" + "source": "https://www.twoo.com/about/press" }, { "title": "Typeform", @@ -10919,7 +13105,7 @@ { "title": "Ubiquiti", "hex": "0559C9", - "source": "https://www.ui.com/marketing/#logos" + "source": "https://www.ui.com" }, { "title": "Ubisoft", @@ -10929,12 +13115,12 @@ { "title": "uBlock Origin", "hex": "800000", - "source": "https://github.com/gorhill/uBlock/blob/master/src/img/ublock.svg" + "source": "https://github.com/gorhill/uBlock/blob/59aa235952a9289cfe72e4fb9f8a7d8f4c80be9a/src/img/ublock.svg" }, { "title": "Ubuntu", "hex": "E95420", - "source": "https://design.ubuntu.com/brand/ubuntu-logo/", + "source": "https://design.ubuntu.com/downloads/", "guidelines": "https://design.ubuntu.com/brand/ubuntu-logo/" }, { @@ -10965,12 +13151,22 @@ { "title": "Umbraco", "hex": "3544B1", - "source": "https://umbraco.com/" + "source": "https://umbraco.com" + }, + { + "title": "UML", + "hex": "FABD14", + "source": "https://www.uml.org", + "aliases": { + "aka": [ + "Unified Modelling Language" + ] + } }, { "title": "Unacademy", "hex": "08BD80", - "source": "https://unacademy.com/" + "source": "https://unacademy.com" }, { "title": "Under Armour", @@ -10985,7 +13181,7 @@ { "title": "Undertale", "hex": "E71D29", - "source": "https://undertale.com/" + "source": "https://undertale.com" }, { "title": "Unicode", @@ -11005,13 +13201,23 @@ { "title": "Unity", "hex": "FFFFFF", - "source": "https://brand.unity.com/", - "guidelines": "https://brand.unity.com/" + "source": "https://brand.unity.com", + "guidelines": "https://brand.unity.com" + }, + { + "title": "Unlicense", + "hex": "808080", + "source": "https://commons.wikimedia.org/wiki/File:PD-icon.svg" + }, + { + "title": "UnoCSS", + "hex": "333333", + "source": "https://github.com/unocss/unocss/blob/fc2ed5bb6019b45565ff5293d4b650522f1b79b4/playground/public/icon.svg" }, { "title": "Unraid", "hex": "F15A2C", - "source": "https://unraid.net/" + "source": "https://unraid.net" }, { "title": "Unreal Engine", @@ -11022,7 +13228,7 @@ { "title": "Unsplash", "hex": "000000", - "source": "https://unsplash.com/" + "source": "https://unsplash.com" }, { "title": "Untangle", @@ -11033,7 +13239,7 @@ { "title": "Untappd", "hex": "FFC000", - "source": "https://untappd.com/" + "source": "https://untappd.com" }, { "title": "UpCloud", @@ -11044,7 +13250,7 @@ { "title": "UpLabs", "hex": "3930D8", - "source": "https://www.uplabs.com/" + "source": "https://www.uplabs.com" }, { "title": "Uploaded", @@ -11054,17 +13260,22 @@ { "title": "UPS", "hex": "150400", - "source": "https://www.ups.com/" + "source": "https://www.ups.com" }, { "title": "Upstash", "hex": "00E9A3", - "source": "https://upstash.com/" + "source": "https://upstash.com" + }, + { + "title": "Uptime Kuma", + "hex": "5CDD8B", + "source": "https://uptime.kuma.pet" }, { "title": "Uptobox", "hex": "5CE1E6", - "source": "https://uptoboxpremium.org/" + "source": "https://uptoboxpremium.org" }, { "title": "Upwork", @@ -11074,7 +13285,7 @@ { "title": "USPS", "hex": "333366", - "source": "https://www.usps.com/" + "source": "https://www.usps.com" }, { "title": "V", @@ -11084,6 +13295,11 @@ "type": "MIT" } }, + { + "title": "V2EX", + "hex": "1F1F1F", + "source": "https://www.v2ex.com" + }, { "title": "V8", "hex": "4B8BF5", @@ -11101,15 +13317,29 @@ "source": "https://www.hashicorp.com/brand", "guidelines": "https://www.hashicorp.com/brand" }, + { + "title": "Vala", + "hex": "7239B3", + "source": "https://commons.wikimedia.org/wiki/File:Vala_Logo.svg", + "license": { + "type": "MIT", + "url": "https://commons.wikimedia.org/wiki/File:Vala_Logo.svg" + } + }, + { + "title": "Valorant", + "hex": "FA4454", + "source": "https://commons.wikimedia.org/wiki/File:Valorant_logo_-_black_color_version.svg" + }, { "title": "Valve", "hex": "F74843", - "source": "https://www.valvesoftware.com/" + "source": "https://www.valvesoftware.com" }, { "title": "Vapor", "hex": "0D0D0D", - "source": "https://vapor.codes/" + "source": "https://vapor.codes" }, { "title": "Vault", @@ -11130,7 +13360,7 @@ { "title": "Vector Logo Zone", "hex": "184D66", - "source": "https://www.vectorlogo.zone/" + "source": "https://www.vectorlogo.zone" }, { "title": "Vectorworks", @@ -11145,7 +13375,16 @@ { "title": "Veepee", "hex": "EC008C", - "source": "https://www.veepee.fr/" + "source": "https://www.veepee.fr" + }, + { + "title": "Vega", + "hex": "2450B2", + "source": "https://github.com/vega/logos/blob/af32bc29f0c09c8de826aaafb037935fb69e960a/assets/VG_Black.svg", + "guidelines": "https://github.com/vega/logos", + "license": { + "type": "BSD-3-Clause" + } }, { "title": "Velog", @@ -11185,12 +13424,12 @@ { "title": "vFairs", "hex": "EF4678", - "source": "https://www.vfairs.com/" + "source": "https://www.vfairs.com" }, { "title": "Viadeo", "hex": "F07355", - "source": "https://viadeo.journaldunet.com/" + "source": "https://viadeo.journaldunet.com" }, { "title": "Viber", @@ -11222,6 +13461,11 @@ "hex": "E10A0A", "source": "https://www.virgin.com/img/virgin-logo-square.svg" }, + { + "title": "Virgin Media", + "hex": "ED1A37", + "source": "https://en.wikipedia.org/wiki/Virgin_Media#/media/File:Virgin_Media.svg" + }, { "title": "VirtualBox", "hex": "183A61", @@ -11230,17 +13474,23 @@ { "title": "VirusTotal", "hex": "394EFF", - "source": "https://www.virustotal.com/" + "source": "https://www.virustotal.com" }, { "title": "Visa", "hex": "1A1F71", "source": "https://merchantsignageeu.visa.com/product.asp?dptID=696" }, + { + "title": "Visual Basic", + "hex": "512BD4", + "source": "https://aka.ms/fluentui-icons", + "guidelines": "https://aka.ms/fluentui-assets-license" + }, { "title": "Visual Studio", "hex": "5C2D91", - "source": "https://visualstudio.microsoft.com/" + "source": "https://visualstudio.microsoft.com" }, { "title": "Visual Studio Code", @@ -11250,7 +13500,22 @@ { "title": "Vite", "hex": "646CFF", - "source": "https://vitejs.dev/" + "source": "https://vitejs.dev" + }, + { + "title": "Vitess", + "hex": "F16728", + "source": "https://cncf-branding.netlify.app/projects/vitess/" + }, + { + "title": "Vitest", + "hex": "6E9F18", + "source": "https://vitest.dev" + }, + { + "title": "Viva Wallet", + "hex": "1F263A", + "source": "https://www.vivawallet.com/gb_en/press-center-gb" }, { "title": "Vivaldi", @@ -11271,22 +13536,27 @@ { "title": "VLC media player", "hex": "FF8800", - "source": "http://git.videolan.org/?p=vlc.git;a=tree;f=extras/package/macosx/asset_sources" + "source": "https://git.videolan.org/?p=vlc.git;a=tree;f=extras/package/macosx/asset_sources" }, { "title": "VMware", "hex": "607078", - "source": "https://myvmware.workspaceair.com/" + "source": "https://myvmware.workspaceair.com" }, { "title": "Vodafone", "hex": "E60000", - "source": "https://web.vodafone.com.eg/" + "source": "https://web.vodafone.com.eg" + }, + { + "title": "VoIP.ms", + "hex": "E1382D", + "source": "https://voip.ms" }, { "title": "Volkswagen", "hex": "151F5D", - "source": "https://www.volkswagen.ie/" + "source": "https://www.volkswagen.ie" }, { "title": "Volvo", @@ -11298,6 +13568,11 @@ "hex": "FFFFFF", "source": "https://www.vonage.com" }, + { + "title": "Voron Design", + "hex": "ED3023", + "source": "https://github.com/VoronDesign/Voron-Extras/blob/d8591f964b408b3da21b6f9b4ab0437e229065de/Images/Logo/SVG/Voron_Design_Hex.svg" + }, { "title": "Vowpal Wabbit", "hex": "FF81F9", @@ -11313,6 +13588,11 @@ "hex": "000000", "source": "https://vscopress.co/media-kit" }, + { + "title": "VSCodium", + "hex": "2F80ED", + "source": "https://vscodium.com" + }, { "title": "VTEX", "hex": "ED125F", @@ -11330,7 +13610,7 @@ { "title": "Vuetify", "hex": "1867C0", - "source": "https://vuetifyjs.com/" + "source": "https://vuetifyjs.com" }, { "title": "Vulkan", @@ -11342,6 +13622,11 @@ "hex": "007BFC", "source": "https://www.vultr.com/company/brand-assets/" }, + { + "title": "Vyond", + "hex": "D95E26", + "source": "https://www.vyond.com" + }, { "title": "W3C", "hex": "005A9C", @@ -11351,11 +13636,21 @@ "url": "https://www.w3.org/Consortium/Legal/2002/trademark-license-20021231" } }, + { + "title": "Wacom", + "hex": "000000", + "source": "https://support.wacom.com/hc/en-us" + }, { "title": "Wagtail", "hex": "43B1B0", "source": "https://github.com/wagtail/wagtail/blob/e3e46e23b780aa2b1b521de081cb81872f77466d/wagtail/admin/static_src/wagtailadmin/images/wagtail-logo.svg" }, + { + "title": "Wails", + "hex": "DF0000", + "source": "https://wails.io" + }, { "title": "WakaTime", "hex": "000000", @@ -11372,22 +13667,54 @@ "hex": "3F6184", "source": "https://github.com/wallabag/logo/blob/f670395da2d85c3bbcb8dcfa8d2a339d8af5abb0/_default/icon/svg/logo-icon-black-no-bg.svg" }, + { + "title": "WalletConnect", + "hex": "3B99FC", + "source": "https://walletconnect.com/brand" + }, { "title": "Walmart", "hex": "0071CE", "source": "https://corporate.walmart.com", "guidelines": "https://one.walmart.com/content/people-experience/associate-brand-center.html" }, + { + "title": "Wantedly", + "hex": "21BDDB", + "source": "https://wantedlyinc.com/ja/brand_assets", + "guidelines": "https://wantedlyinc.com/ja/brand_assets" + }, { "title": "Wappalyzer", "hex": "32067C", - "source": "https://www.wappalyzer.com/" + "source": "https://www.wappalyzer.com" }, { "title": "Warner Bros.", "slug": "warnerbros", "hex": "004DB4", - "source": "https://www.warnerbros.com/" + "source": "https://www.warnerbros.com" + }, + { + "title": "Warp", + "hex": "01A4FF", + "source": "https://warp.dev" + }, + { + "title": "Wasabi", + "hex": "01CD3E", + "source": "https://wasabi.com" + }, + { + "title": "wasmCloud", + "hex": "00BC8E", + "source": "https://github.com/wasmCloud/branding/tree/0827503c63f55471a0c709e97d609f56d716be40", + "guidelines": "https://github.com/wasmCloud/branding/" + }, + { + "title": "Wasmer", + "hex": "4946DD", + "source": "https://github.com/wasmerio/wasmer.io/blob/0d425f5b4ace56496e75278e304f54492c46adde/public/images/icon.svg" }, { "title": "Wattpad", @@ -11395,10 +13722,18 @@ "source": "https://company.wattpad.com/brandguideline", "guidelines": "https://company.wattpad.com/brandguideline" }, + { + "title": "Wayland", + "hex": "FFBC00", + "source": "https://gitlab.freedesktop.org/wayland/weston/-/blob/77ede00a938b8137bd638ce67b6f58cb52b1d1b0/data/wayland.svg", + "license": { + "type": "MIT" + } + }, { "title": "Waze", "hex": "33CCFF", - "source": "https://www.waze.com/" + "source": "https://www.waze.com" }, { "title": "Wear OS", @@ -11408,7 +13743,7 @@ { "title": "Weasyl", "hex": "990000", - "source": "https://www.weasyl.com/" + "source": "https://www.weasyl.com" }, { "title": "Web3.js", @@ -11418,7 +13753,7 @@ { "title": "WebAssembly", "hex": "654FF0", - "source": "https://webassembly.org/" + "source": "https://webassembly.org" }, { "title": "WebAuthn", @@ -11429,7 +13764,7 @@ { "title": "webcomponents.org", "hex": "29ABE2", - "source": "https://www.webcomponents.org/" + "source": "https://www.webcomponents.org" }, { "title": "WebdriverIO", @@ -11439,7 +13774,7 @@ { "title": "Webflow", "hex": "4353FF", - "source": "https://webflow.com/" + "source": "https://webflow.com" }, { "title": "WebGL", @@ -11478,7 +13813,7 @@ { "title": "WebRTC", "hex": "333333", - "source": "https://webrtc.org/" + "source": "https://webrtc.org" }, { "title": "WebStorm", @@ -11489,7 +13824,13 @@ { "title": "WEBTOON", "hex": "00D564", - "source": "http://webtoons.com/" + "source": "https://webtoons.com" + }, + { + "title": "webtrees", + "hex": "2694E8", + "source": "https://webtrees.net", + "guidelines": "https://wtwi.jprodina.cz/index.php?title=Logo_webtrees" }, { "title": "WeChat", @@ -11505,7 +13846,7 @@ { "title": "Weights & Biases", "hex": "FFBE00", - "source": "https://wandb.ai/" + "source": "https://wandb.ai" }, { "title": "Welcome to the Jungle", @@ -11515,7 +13856,7 @@ ] }, "hex": "FFCD00", - "source": "https://www.welcometothejungle.com/" + "source": "https://www.welcometothejungle.com" }, { "title": "WEMO", @@ -11535,7 +13876,7 @@ { "title": "WeTransfer", "hex": "409FFF", - "source": "https://wetransfer.com/" + "source": "https://wetransfer.com" }, { "title": "WhatsApp", @@ -11546,7 +13887,7 @@ { "title": "When I Work", "hex": "51A33D", - "source": "https://wheniwork.com/" + "source": "https://wheniwork.com" }, { "title": "WhiteSource", @@ -11563,6 +13904,11 @@ "hex": "8B8B8B", "source": "https://commons.wikipedia.org/wiki/File:WiiU.svg" }, + { + "title": "wiki.gg", + "hex": "FF1985", + "source": "https://commons.wiki.gg/wiki/Category:Wiki.gg_logos" + }, { "title": "Wiki.js", "hex": "1976D2", @@ -11605,9 +13951,21 @@ }, { "title": "Windows", + "hex": "0078D4", + "source": "https://commons.wikimedia.org/wiki/File:Windows_logo_-_2021_(Black).svg", + "guidelines": "https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE1voQq" + }, + { + "title": "Windows 10", "hex": "0078D6", "source": "https://commons.wikimedia.org/wiki/File:Windows_10_Logo.svg" }, + { + "title": "Windows 11", + "hex": "0078D4", + "source": "https://commons.wikimedia.org/wiki/File:Windows_logo_-_2021_(Black).svg", + "guidelines": "https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE1voQq" + }, { "title": "Windows 95", "hex": "008080", @@ -11636,23 +13994,29 @@ { "title": "Wire", "hex": "000000", - "source": "http://brand.wire.com", - "guidelines": "https://brand.wire.com/" + "source": "https://brand.wire.com", + "guidelines": "https://brand.wire.com" }, { "title": "WireGuard", "hex": "88171A", - "source": "https://www.wireguard.com/" + "source": "https://www.wireguard.com" }, { "title": "Wireshark", "hex": "1679A7", "source": "https://gitlab.com/wanduow/wireshark/-/blob/cd5539b0f76975474869984a9d2f0fce29d5c21e/image/wsicon.svg" }, + { + "title": "Wise", + "hex": "9FE870", + "source": "https://wise.design/foundations/logo", + "guidelines": "https://wise.design/foundations/logo" + }, { "title": "Wish", "hex": "2FB7EC", - "source": "https://wish.com/" + "source": "https://wish.com" }, { "title": "Wistia", @@ -11663,7 +14027,7 @@ { "title": "Wix", "hex": "0C6EFC", - "source": "http://www.wix.com/about/design-assets" + "source": "https://www.wix.com/about/design-assets" }, { "title": "Wizz Air", @@ -11673,17 +14037,17 @@ { "title": "Wolfram", "hex": "DD1100", - "source": "http://company.wolfram.com/press-center/wolfram-corporate/" + "source": "https://company.wolfram.com/press-center/wolfram-corporate/" }, { "title": "Wolfram Language", "hex": "DD1100", - "source": "http://company.wolfram.com/press-center/language/" + "source": "https://company.wolfram.com/press-center/language/" }, { "title": "Wolfram Mathematica", "hex": "DD1100", - "source": "http://company.wolfram.com/press-center/mathematica/" + "source": "https://company.wolfram.com/press-center/mathematica/" }, { "title": "Woo", @@ -11705,13 +14069,13 @@ { "title": "Workplace", "hex": "4326C4", - "source": "https://en.facebookbrand.com/", - "guidelines": "https://en.facebookbrand.com/" + "source": "https://en.facebookbrand.com", + "guidelines": "https://en.facebookbrand.com" }, { "title": "World Health Organization", "hex": "0093D5", - "source": "https://www.who.int/" + "source": "https://www.who.int" }, { "title": "WP Engine", @@ -11721,7 +14085,12 @@ { "title": "WP Rocket", "hex": "F56640", - "source": "https://wp-rocket.me/" + "source": "https://wp-rocket.me" + }, + { + "title": "WPExplorer", + "hex": "2563EB", + "source": "https://wpexplorer.com" }, { "title": "write.as", @@ -11740,6 +14109,11 @@ "source": "https://www.audiokinetic.com/resources/credits/", "guidelines": "https://www.audiokinetic.com/resources/credits/" }, + { + "title": "X", + "hex": "000000", + "source": "https://twitter.com" + }, { "title": "X.Org", "hex": "F28834", @@ -11748,7 +14122,7 @@ { "title": "Xamarin", "hex": "3498DB", - "source": "https://github.com/dotnet/swag/tree/master/xamarin" + "source": "https://github.com/dotnet-foundation/swag/tree/0d21c59a604f348f509d772c12a99b888ed9f21f/xamarin" }, { "title": "XAML", @@ -11773,7 +14147,7 @@ { "title": "XDA Developers", "hex": "EA7100", - "source": "https://www.xda-developers.com/" + "source": "https://www.xda-developers.com" }, { "title": "Xero", @@ -11805,10 +14179,15 @@ "hex": "002B5C", "source": "https://github.com/xsf/xmpp.org/tree/00c49187e353c1a156c95562dafaf129e688fbad/content/icons" }, + { + "title": "XO", + "hex": "5ED9C7", + "source": "https://github.com/xojs/xo/tree/f9c7db99255d009b3c81535ced021c3f6ade57b4" + }, { "title": "XRP", "hex": "25A768", - "source": "https://xrpl.org/" + "source": "https://xrpl.org" }, { "title": "XSplit", @@ -11828,7 +14207,7 @@ { "title": "Yahoo!", "hex": "6001D2", - "source": "https://yahoo.com/" + "source": "https://yahoo.com" }, { "title": "Yale", @@ -11845,21 +14224,40 @@ "hex": "E60012", "source": "https://en.wikipedia.org/wiki/Yamaha_Motor_Company" }, + { + "title": "YAML", + "hex": "CB171E", + "source": "https://commons.wikimedia.org/wiki/File:Official_YAML_Logo.svg" + }, { "title": "Yammer", "hex": "106EBE", - "source": "https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products" + "source": "https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products", + "guidelines": "https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks", + "license": { + "type": "custom", + "url": "https://aka.ms/fluentui-assets-license" + } }, { "title": "Yarn", "hex": "2C8EBB", - "source": "https://github.com/yarnpkg/assets/tree/76d30ca2aebed5b73ea8131d972218fb860bd32d" + "source": "https://github.com/yarnpkg/assets/blob/76d30ca2aebed5b73ea8131d972218fb860bd32d/yarn-kitten-circle.svg", + "guidelines": "https://github.com/yarnpkg/assets/tree/76d30ca2aebed5b73ea8131d972218fb860bd32d", + "license": { + "type": "CC-BY-4.0" + } }, { "title": "Yelp", "hex": "D32323", "source": "https://www.yelp.com/styleguide/icons" }, + { + "title": "Yeti", + "hex": "00263C", + "source": "https://www.yeti.com" + }, { "title": "Yoast", "hex": "A4286A", @@ -11884,7 +14282,7 @@ { "title": "YouTube Gaming", "hex": "FF0000", - "source": "https://gaming.youtube.com/" + "source": "https://gaming.youtube.com" }, { "title": "YouTube Music", @@ -11894,7 +14292,7 @@ { "title": "YouTube Studio", "hex": "FF0000", - "source": "https://www.youtube.com/" + "source": "https://www.youtube.com" }, { "title": "YouTube TV", @@ -11909,22 +14307,22 @@ { "title": "Z-Wave", "hex": "1B365D", - "source": "https://www.z-wave.com/" + "source": "https://www.z-wave.com" }, { "title": "Żabka", "hex": "006420", - "source": "https://www.zabka.pl/" + "source": "https://www.zabka.pl" }, { "title": "Zalando", "hex": "FF6900", - "source": "https://www.zalando.co.uk/" + "source": "https://www.zalando.co.uk" }, { "title": "Zalo", "hex": "0068FF", - "source": "https://zalo.me/" + "source": "https://zalo.me" }, { "title": "Zapier", @@ -11934,7 +14332,7 @@ { "title": "Zara", "hex": "000000", - "source": "https://www.zara.com/" + "source": "https://www.zara.com" }, { "title": "Zazzle", @@ -11949,34 +14347,40 @@ "ZEC" ] }, - "hex": "F4B728", - "source": "https://z.cash/press/", - "guidelines": "https://www.zfnd.org/about/trademark-policy/" + "hex": "F3B724", + "source": "https://z.cash", + "guidelines": "https://zfnd.org/trademark-policy" }, { "title": "ZDF", "hex": "FA7D19", - "source": "https://www.zdf.de/" + "source": "https://www.zdf.de" + }, + { + "title": "Zebra Technologies", + "hex": "000000", + "source": "https://www.zebra.com" }, { "title": "Zelle", "hex": "6D1ED4", - "source": "https://www.zellepay.com/" + "source": "https://www.zellepay.com" }, { "title": "Zend", "hex": "0679EA", - "source": "https://www.zend.com/" + "source": "https://www.zend.com" }, { "title": "Zend Framework", "hex": "68B604", - "source": "https://framework.zend.com/" + "source": "https://framework.zend.com" }, { "title": "Zendesk", "hex": "03363D", - "source": "https://brandland.zendesk.com/" + "source": "https://brandland.zendesk.com", + "guidelines": "https://brandland.zendesk.com" }, { "title": "Zenn", @@ -11997,22 +14401,29 @@ { "title": "ZeroMQ", "hex": "DF0000", - "source": "https://github.com/zeromq/zeromq.org/blob/master/static/safari-pinned-tab.svg" + "source": "https://github.com/zeromq/zeromq.org/blob/00f635314a0b0b801d411c7efef314dfd9625404/static/safari-pinned-tab.svg" }, { "title": "Zerply", "hex": "7BBB6E", - "source": "https://zerply.com/about/resources" + "source": "https://zerply.com/about/resources", + "guidelines": "https://zerply.com/about/resources" + }, + { + "title": "Zettlr", + "hex": "1CB27E", + "source": "https://www.zettlr.com", + "guidelines": "https://www.zettlr.com/press" }, { "title": "Zhihu", "hex": "0084FF", - "source": "https://www.zhihu.com/" + "source": "https://www.zhihu.com" }, { "title": "Zig", "hex": "F7A41D", - "source": "https://github.com/ziglang/logo/tree/608770bf7303613c18a8c3faf284516fa31072f0", + "source": "https://github.com/ziglang/logo/blob/6446ba8e37a0651da720d8869e1ce9264fa0c0b9/zig-mark.svg", "license": { "type": "CC-BY-SA-4.0" } @@ -12020,22 +14431,41 @@ { "title": "Zigbee", "hex": "EB0443", - "source": "https://zigbeealliance.org/solution/zigbee/" + "source": "https://csa-iot.org/all-solutions/zigbee" + }, + { + "title": "Zilch", + "hex": "00D287", + "source": "https://www.zilch.com" }, { "title": "Zillow", "hex": "006AFF", - "source": "https://www.zillow.com/" + "source": "https://www.zillow.com" + }, + { + "title": "ZincSearch", + "hex": "5BA37F", + "source": "https://github.com/zincsearch/zincsearch-docs/blob/f5b8bec0c05c10968f54aca3eabde9d4d77a1712/docs/images/logo.svg" }, { "title": "Zingat", "hex": "009CFB", "source": "https://www.zingat.com/kurumsal-logolar" }, + { + "title": "Zod", + "hex": "3E67B1", + "source": "https://zod.dev", + "license": { + "type": "MIT", + "url": "https://github.com/colinhacks/zod/blob/master/LICENSE" + } + }, { "title": "Zoho", - "hex": "C8202B", - "source": "https://www.zoho.com/branding/" + "hex": "E42527", + "source": "https://www.zoho.com/branding" }, { "title": "Zoiper", @@ -12049,13 +14479,14 @@ }, { "title": "Zoom", - "hex": "2D8CFF", - "source": "https://zoom.us/brandguidelines" + "hex": "0B5CFF", + "source": "https://brand.zoom.us/media-library.html", + "guidelines": "https://brand.zoom.us" }, { "title": "Zorin", - "hex": "0CC1F3", - "source": "https://zorinos.com/press/" + "hex": "15A6F0", + "source": "https://zorin.com/press" }, { "title": "Zotero", @@ -12070,7 +14501,7 @@ { "title": "Zyte", "hex": "B02CCE", - "source": "https://www.zyte.com/" + "source": "https://www.zyte.com" } ] } diff --git a/alias.d.ts b/alias.d.ts deleted file mode 100644 index 99c10e1bba53..000000000000 --- a/alias.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { SimpleIcon } from '.'; - -/** - * @internal - */ -export type I = SimpleIcon; diff --git a/assets/readme/angular-white.svg b/assets/readme/angular-white.svg deleted file mode 100644 index 7844c2771db0..000000000000 --- a/assets/readme/angular-white.svg +++ /dev/null @@ -1 +0,0 @@ -<svg fill="white" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Angular \ No newline at end of file diff --git a/assets/readme/blender-white.svg b/assets/readme/blender-white.svg deleted file mode 100644 index bb4810a0e19d..000000000000 --- a/assets/readme/blender-white.svg +++ /dev/null @@ -1 +0,0 @@ -Blender \ No newline at end of file diff --git a/assets/readme/diagramsdotnet-white.svg b/assets/readme/diagramsdotnet-white.svg deleted file mode 100644 index d0fd50818133..000000000000 --- a/assets/readme/diagramsdotnet-white.svg +++ /dev/null @@ -1 +0,0 @@ -diagrams.net \ No newline at end of file diff --git a/assets/readme/drupal-white.svg b/assets/readme/drupal-white.svg deleted file mode 100644 index d53a9986682e..000000000000 --- a/assets/readme/drupal-white.svg +++ /dev/null @@ -1 +0,0 @@ -Drupal \ No newline at end of file diff --git a/assets/readme/flutter-white.svg b/assets/readme/flutter-white.svg deleted file mode 100644 index 3fd3bfb2e2da..000000000000 --- a/assets/readme/flutter-white.svg +++ /dev/null @@ -1 +0,0 @@ -Flutter \ No newline at end of file diff --git a/assets/readme/hexo-white.svg b/assets/readme/hexo-white.svg deleted file mode 100644 index ecbcdff1f4fe..000000000000 --- a/assets/readme/hexo-white.svg +++ /dev/null @@ -1 +0,0 @@ -Hexo \ No newline at end of file diff --git a/assets/readme/homeassistant-white.svg b/assets/readme/homeassistant-white.svg deleted file mode 100644 index ec9813d5b267..000000000000 --- a/assets/readme/homeassistant-white.svg +++ /dev/null @@ -1 +0,0 @@ -Home Assistant \ No newline at end of file diff --git a/assets/readme/hugo-white.svg b/assets/readme/hugo-white.svg deleted file mode 100644 index 18e5a1872c28..000000000000 --- a/assets/readme/hugo-white.svg +++ /dev/null @@ -1 +0,0 @@ -Hugo \ No newline at end of file diff --git a/assets/readme/java-white.svg b/assets/readme/java-white.svg deleted file mode 100644 index 51a11a313d45..000000000000 --- a/assets/readme/java-white.svg +++ /dev/null @@ -1 +0,0 @@ -Java \ No newline at end of file diff --git a/assets/readme/jetpackcompose-white.svg b/assets/readme/jetpackcompose-white.svg deleted file mode 100644 index c67533e4f130..000000000000 --- a/assets/readme/jetpackcompose-white.svg +++ /dev/null @@ -1 +0,0 @@ -Jetpack Compose diff --git a/assets/readme/kirby-white.svg b/assets/readme/kirby-white.svg deleted file mode 100644 index 799588439262..000000000000 --- a/assets/readme/kirby-white.svg +++ /dev/null @@ -1 +0,0 @@ -Kirby \ No newline at end of file diff --git a/assets/readme/laravel-white.svg b/assets/readme/laravel-white.svg deleted file mode 100644 index 3edfcea56ae1..000000000000 --- a/assets/readme/laravel-white.svg +++ /dev/null @@ -1 +0,0 @@ -Laravel \ No newline at end of file diff --git a/assets/readme/nodedotjs-white.svg b/assets/readme/nodedotjs-white.svg deleted file mode 100644 index ed8a6959b7da..000000000000 --- a/assets/readme/nodedotjs-white.svg +++ /dev/null @@ -1 +0,0 @@ -Node.js \ No newline at end of file diff --git a/assets/readme/php-white.svg b/assets/readme/php-white.svg deleted file mode 100644 index f20b708bda71..000000000000 --- a/assets/readme/php-white.svg +++ /dev/null @@ -1 +0,0 @@ -PHP \ No newline at end of file diff --git a/assets/readme/python-white.svg b/assets/readme/python-white.svg deleted file mode 100644 index 452d9b7e00aa..000000000000 --- a/assets/readme/python-white.svg +++ /dev/null @@ -1 +0,0 @@ -Python \ No newline at end of file diff --git a/assets/readme/react-white.svg b/assets/readme/react-white.svg deleted file mode 100644 index a1197a26878d..000000000000 --- a/assets/readme/react-white.svg +++ /dev/null @@ -1 +0,0 @@ -React \ No newline at end of file diff --git a/assets/readme/simpleicons-white.svg b/assets/readme/simpleicons-white.svg deleted file mode 100644 index 21bd6b513492..000000000000 --- a/assets/readme/simpleicons-white.svg +++ /dev/null @@ -1 +0,0 @@ -Simple Icons \ No newline at end of file diff --git a/assets/readme/svelte-white.svg b/assets/readme/svelte-white.svg deleted file mode 100644 index 4a04412d6d36..000000000000 --- a/assets/readme/svelte-white.svg +++ /dev/null @@ -1 +0,0 @@ -Svelte \ No newline at end of file diff --git a/assets/readme/typescript-white.svg b/assets/readme/typescript-white.svg deleted file mode 100644 index 968ff97eafde..000000000000 --- a/assets/readme/typescript-white.svg +++ /dev/null @@ -1 +0,0 @@ -TypeScript \ No newline at end of file diff --git a/assets/readme/vuedotjs-white.svg b/assets/readme/vuedotjs-white.svg deleted file mode 100644 index 1c9e2beef3b8..000000000000 --- a/assets/readme/vuedotjs-white.svg +++ /dev/null @@ -1 +0,0 @@ -Vue.js \ No newline at end of file diff --git a/assets/readme/wordpress-white.svg b/assets/readme/wordpress-white.svg deleted file mode 100644 index 25ed7792ab2c..000000000000 --- a/assets/readme/wordpress-white.svg +++ /dev/null @@ -1 +0,0 @@ -WordPress \ No newline at end of file diff --git a/icons/1password.svg b/icons/1password.svg index 2021fc9d2c88..45f0772d0abf 100644 --- a/icons/1password.svg +++ b/icons/1password.svg @@ -1 +1 @@ -1Password \ No newline at end of file +1Password \ No newline at end of file diff --git a/icons/acura.svg b/icons/acura.svg new file mode 100644 index 000000000000..e3ae46723271 --- /dev/null +++ b/icons/acura.svg @@ -0,0 +1 @@ +Acura \ No newline at end of file diff --git a/icons/adminer.svg b/icons/adminer.svg new file mode 100644 index 000000000000..915be0082876 --- /dev/null +++ b/icons/adminer.svg @@ -0,0 +1 @@ +Adminer \ No newline at end of file diff --git a/icons/adobexd.svg b/icons/adobexd.svg index 70d39b85facd..aefa0bb47156 100644 --- a/icons/adobexd.svg +++ b/icons/adobexd.svg @@ -1 +1 @@ -Adobe XD \ No newline at end of file +Adobe XD \ No newline at end of file diff --git a/icons/adonisjs.svg b/icons/adonisjs.svg index e019c1a660a5..ef489fcb57c5 100644 --- a/icons/adonisjs.svg +++ b/icons/adonisjs.svg @@ -1 +1 @@ -AdonisJS \ No newline at end of file +AdonisJS \ No newline at end of file diff --git a/icons/adp.svg b/icons/adp.svg new file mode 100644 index 000000000000..a861e7347778 --- /dev/null +++ b/icons/adp.svg @@ -0,0 +1 @@ +ADP \ No newline at end of file diff --git a/icons/adroll.svg b/icons/adroll.svg new file mode 100644 index 000000000000..50ed6392042e --- /dev/null +++ b/icons/adroll.svg @@ -0,0 +1 @@ +Adroll \ No newline at end of file diff --git a/icons/affine.svg b/icons/affine.svg new file mode 100644 index 000000000000..b0291723ddd5 --- /dev/null +++ b/icons/affine.svg @@ -0,0 +1 @@ +AFFiNE \ No newline at end of file diff --git a/icons/agora.svg b/icons/agora.svg new file mode 100644 index 000000000000..32c34a41d709 --- /dev/null +++ b/icons/agora.svg @@ -0,0 +1 @@ +Agora \ No newline at end of file diff --git a/icons/airbrakedotio.svg b/icons/airbrakedotio.svg new file mode 100644 index 000000000000..6c06ce27b0c9 --- /dev/null +++ b/icons/airbrakedotio.svg @@ -0,0 +1 @@ +Airbrake.io \ No newline at end of file diff --git a/icons/airbyte.svg b/icons/airbyte.svg new file mode 100644 index 000000000000..589d1fd8b9dc --- /dev/null +++ b/icons/airbyte.svg @@ -0,0 +1 @@ +Airbyte \ No newline at end of file diff --git a/icons/airindia.svg b/icons/airindia.svg new file mode 100644 index 000000000000..d4333002f54f --- /dev/null +++ b/icons/airindia.svg @@ -0,0 +1 @@ +Air India \ No newline at end of file diff --git a/icons/ajv.svg b/icons/ajv.svg index 10463ade45c8..de8f0582c62a 100644 --- a/icons/ajv.svg +++ b/icons/ajv.svg @@ -1 +1 @@ -Ajv +Ajv \ No newline at end of file diff --git a/icons/akamai.svg b/icons/akamai.svg new file mode 100644 index 000000000000..25d95aca4578 --- /dev/null +++ b/icons/akamai.svg @@ -0,0 +1 @@ +Akamai \ No newline at end of file diff --git a/icons/alchemy.svg b/icons/alchemy.svg new file mode 100644 index 000000000000..284b60083f86 --- /dev/null +++ b/icons/alchemy.svg @@ -0,0 +1 @@ +Alchemy \ No newline at end of file diff --git a/icons/algolia.svg b/icons/algolia.svg index 20f11ef9d2b4..5cee59a7bc25 100644 --- a/icons/algolia.svg +++ b/icons/algolia.svg @@ -1 +1 @@ -Algolia \ No newline at end of file +Algolia \ No newline at end of file diff --git a/icons/algorand.svg b/icons/algorand.svg new file mode 100644 index 000000000000..a1f9b09a2246 --- /dev/null +++ b/icons/algorand.svg @@ -0,0 +1 @@ +Algorand \ No newline at end of file diff --git a/icons/alipay.svg b/icons/alipay.svg index ba363d8adc39..7514d6dd7576 100644 --- a/icons/alipay.svg +++ b/icons/alipay.svg @@ -1 +1 @@ -Alipay \ No newline at end of file +Alipay \ No newline at end of file diff --git a/icons/alitalia.svg b/icons/alitalia.svg deleted file mode 100644 index 2c2266362319..000000000000 --- a/icons/alitalia.svg +++ /dev/null @@ -1 +0,0 @@ -Alitalia \ No newline at end of file diff --git a/icons/alteryx.svg b/icons/alteryx.svg new file mode 100644 index 000000000000..c6f7fff3cb2b --- /dev/null +++ b/icons/alteryx.svg @@ -0,0 +1 @@ +Alteryx \ No newline at end of file diff --git a/icons/alwaysdata.svg b/icons/alwaysdata.svg new file mode 100644 index 000000000000..9f3eb2632619 --- /dev/null +++ b/icons/alwaysdata.svg @@ -0,0 +1 @@ +Alwaysdata \ No newline at end of file diff --git a/icons/amazonapigateway.svg b/icons/amazonapigateway.svg new file mode 100644 index 000000000000..1127550f275e --- /dev/null +++ b/icons/amazonapigateway.svg @@ -0,0 +1 @@ +Amazon API Gateway \ No newline at end of file diff --git a/icons/amazoncloudwatch.svg b/icons/amazoncloudwatch.svg new file mode 100644 index 000000000000..4b57d04ddc92 --- /dev/null +++ b/icons/amazoncloudwatch.svg @@ -0,0 +1 @@ +Amazon CloudWatch \ No newline at end of file diff --git a/icons/amazonec2.svg b/icons/amazonec2.svg new file mode 100644 index 000000000000..1206482caeaf --- /dev/null +++ b/icons/amazonec2.svg @@ -0,0 +1 @@ +Amazon EC2 \ No newline at end of file diff --git a/icons/amazonecs.svg b/icons/amazonecs.svg new file mode 100644 index 000000000000..afcb5ec43ce0 --- /dev/null +++ b/icons/amazonecs.svg @@ -0,0 +1 @@ +Amazon ECS \ No newline at end of file diff --git a/icons/amazoneks.svg b/icons/amazoneks.svg new file mode 100644 index 000000000000..fab8006a825a --- /dev/null +++ b/icons/amazoneks.svg @@ -0,0 +1 @@ +Amazon EKS \ No newline at end of file diff --git a/icons/amazongames.svg b/icons/amazongames.svg new file mode 100644 index 000000000000..950b408b05c2 --- /dev/null +++ b/icons/amazongames.svg @@ -0,0 +1 @@ +Amazon Games \ No newline at end of file diff --git a/icons/amazoniam.svg b/icons/amazoniam.svg new file mode 100644 index 000000000000..d649b23cce79 --- /dev/null +++ b/icons/amazoniam.svg @@ -0,0 +1 @@ +Amazon Identity Access Management \ No newline at end of file diff --git a/icons/amazonluna.svg b/icons/amazonluna.svg new file mode 100644 index 000000000000..9ea22b3a467d --- /dev/null +++ b/icons/amazonluna.svg @@ -0,0 +1 @@ +Amazon Luna \ No newline at end of file diff --git a/icons/amazonrds.svg b/icons/amazonrds.svg new file mode 100644 index 000000000000..6edfa849ea64 --- /dev/null +++ b/icons/amazonrds.svg @@ -0,0 +1 @@ +Amazon RDS \ No newline at end of file diff --git a/icons/amazonredshift.svg b/icons/amazonredshift.svg new file mode 100644 index 000000000000..18f6a2cc2d81 --- /dev/null +++ b/icons/amazonredshift.svg @@ -0,0 +1 @@ +Amazon Redshift \ No newline at end of file diff --git a/icons/amazonsqs.svg b/icons/amazonsqs.svg new file mode 100644 index 000000000000..483b4adea020 --- /dev/null +++ b/icons/amazonsqs.svg @@ -0,0 +1 @@ +Amazon SQS \ No newline at end of file diff --git a/icons/ameba.svg b/icons/ameba.svg new file mode 100644 index 000000000000..494bf22d5c11 --- /dev/null +++ b/icons/ameba.svg @@ -0,0 +1 @@ +Ameba \ No newline at end of file diff --git a/icons/andela.svg b/icons/andela.svg index c34c98934e84..8abf458541fa 100644 --- a/icons/andela.svg +++ b/icons/andela.svg @@ -1 +1 @@ -Andela \ No newline at end of file +Andela \ No newline at end of file diff --git a/icons/anilist.svg b/icons/anilist.svg index bb1911669e93..fa1dd07503c2 100644 --- a/icons/anilist.svg +++ b/icons/anilist.svg @@ -1 +1 @@ -AniList \ No newline at end of file +AniList \ No newline at end of file diff --git a/icons/answer.svg b/icons/answer.svg new file mode 100644 index 000000000000..4010872537f0 --- /dev/null +++ b/icons/answer.svg @@ -0,0 +1 @@ +Answer \ No newline at end of file diff --git a/icons/anta.svg b/icons/anta.svg index ba33997edf9b..56bb41de743d 100644 --- a/icons/anta.svg +++ b/icons/anta.svg @@ -1 +1 @@ -Anta +Anta \ No newline at end of file diff --git a/icons/apachecouchdb.svg b/icons/apachecouchdb.svg index 9527a924bf61..a3fbda001b88 100644 --- a/icons/apachecouchdb.svg +++ b/icons/apachecouchdb.svg @@ -1 +1 @@ -Apache CouchDB +Apache CouchDB \ No newline at end of file diff --git a/icons/apachehadoop.svg b/icons/apachehadoop.svg index 6794587f77e6..01fa5f2399db 100644 --- a/icons/apachehadoop.svg +++ b/icons/apachehadoop.svg @@ -1 +1 @@ -Apache Hadoop +Apache Hadoop \ No newline at end of file diff --git a/icons/apacheparquet.svg b/icons/apacheparquet.svg new file mode 100644 index 000000000000..7cbbe71a9f30 --- /dev/null +++ b/icons/apacheparquet.svg @@ -0,0 +1 @@ +Apache Parquet \ No newline at end of file diff --git a/icons/apachestorm.svg b/icons/apachestorm.svg new file mode 100644 index 000000000000..b6d0c3682f28 --- /dev/null +++ b/icons/apachestorm.svg @@ -0,0 +1 @@ +Apache Storm \ No newline at end of file diff --git a/icons/apifox.svg b/icons/apifox.svg new file mode 100644 index 000000000000..592de494e294 --- /dev/null +++ b/icons/apifox.svg @@ -0,0 +1 @@ +Apifox \ No newline at end of file diff --git a/icons/appannie.svg b/icons/appannie.svg deleted file mode 100644 index 3db685f5f0b3..000000000000 --- a/icons/appannie.svg +++ /dev/null @@ -1 +0,0 @@ -App Annie \ No newline at end of file diff --git a/icons/applenews.svg b/icons/applenews.svg new file mode 100644 index 000000000000..ebbd12cccb65 --- /dev/null +++ b/icons/applenews.svg @@ -0,0 +1 @@ +Apple News \ No newline at end of file diff --git a/icons/appsmith.svg b/icons/appsmith.svg new file mode 100644 index 000000000000..80b037f4b4b7 --- /dev/null +++ b/icons/appsmith.svg @@ -0,0 +1 @@ +Appsmith \ No newline at end of file diff --git a/icons/appwrite.svg b/icons/appwrite.svg index 350d784f8a40..64994f233972 100644 --- a/icons/appwrite.svg +++ b/icons/appwrite.svg @@ -1 +1 @@ -Appwrite +Appwrite \ No newline at end of file diff --git a/icons/aqua.svg b/icons/aqua.svg index 8207737ed006..3f38148904f3 100644 --- a/icons/aqua.svg +++ b/icons/aqua.svg @@ -1 +1 @@ -Aqua +Aqua \ No newline at end of file diff --git a/icons/arcgis.svg b/icons/arcgis.svg new file mode 100644 index 000000000000..d97db8dee8fe --- /dev/null +++ b/icons/arcgis.svg @@ -0,0 +1 @@ +ArcGIS \ No newline at end of file diff --git a/icons/arduino.svg b/icons/arduino.svg index 2d4d2ac4b625..56621c99e092 100644 --- a/icons/arduino.svg +++ b/icons/arduino.svg @@ -1 +1 @@ -Arduino \ No newline at end of file +Arduino \ No newline at end of file diff --git a/icons/argo.svg b/icons/argo.svg new file mode 100644 index 000000000000..fde6bb799edf --- /dev/null +++ b/icons/argo.svg @@ -0,0 +1 @@ +Argo \ No newline at end of file diff --git a/icons/ariakit.svg b/icons/ariakit.svg new file mode 100644 index 000000000000..5a26b4c624ba --- /dev/null +++ b/icons/ariakit.svg @@ -0,0 +1 @@ +Ariakit \ No newline at end of file diff --git a/icons/armkeil.svg b/icons/armkeil.svg new file mode 100644 index 000000000000..66830cd4800d --- /dev/null +++ b/icons/armkeil.svg @@ -0,0 +1 @@ +Arm Keil \ No newline at end of file diff --git a/icons/arstechnica.svg b/icons/arstechnica.svg new file mode 100644 index 000000000000..5db95af1a886 --- /dev/null +++ b/icons/arstechnica.svg @@ -0,0 +1 @@ +Ars Technica \ No newline at end of file diff --git a/icons/artifacthub.svg b/icons/artifacthub.svg index 12649c235300..e2fb3627e5f9 100644 --- a/icons/artifacthub.svg +++ b/icons/artifacthub.svg @@ -1 +1 @@ -Artifact Hub +Artifact Hub \ No newline at end of file diff --git a/icons/arxiv.svg b/icons/arxiv.svg index 4d09be6964dd..300d3c646fa4 100644 --- a/icons/arxiv.svg +++ b/icons/arxiv.svg @@ -1 +1 @@ -arXiv \ No newline at end of file +arXiv \ No newline at end of file diff --git a/icons/astro.svg b/icons/astro.svg index 781213c606a7..9461e71041f8 100644 --- a/icons/astro.svg +++ b/icons/astro.svg @@ -1 +1 @@ -Astro \ No newline at end of file +Astro \ No newline at end of file diff --git a/icons/authelia.svg b/icons/authelia.svg new file mode 100644 index 000000000000..ba419e18a8b5 --- /dev/null +++ b/icons/authelia.svg @@ -0,0 +1 @@ +Authelia \ No newline at end of file diff --git a/icons/autodesk.svg b/icons/autodesk.svg index db43f09d3b13..d767acc11c3e 100644 --- a/icons/autodesk.svg +++ b/icons/autodesk.svg @@ -1 +1 @@ -Autodesk \ No newline at end of file +Autodesk \ No newline at end of file diff --git a/icons/avajs.svg b/icons/avajs.svg new file mode 100644 index 000000000000..36584e61c2ee --- /dev/null +++ b/icons/avajs.svg @@ -0,0 +1 @@ +avajs \ No newline at end of file diff --git a/icons/awsfargate.svg b/icons/awsfargate.svg new file mode 100644 index 000000000000..2b575c0ba173 --- /dev/null +++ b/icons/awsfargate.svg @@ -0,0 +1 @@ +AWS Fargate \ No newline at end of file diff --git a/icons/axios.svg b/icons/axios.svg new file mode 100644 index 000000000000..6f0364a44d06 --- /dev/null +++ b/icons/axios.svg @@ -0,0 +1 @@ +Axios \ No newline at end of file diff --git a/icons/babylondotjs.svg b/icons/babylondotjs.svg new file mode 100644 index 000000000000..086b5d06fa86 --- /dev/null +++ b/icons/babylondotjs.svg @@ -0,0 +1 @@ +Babylon.js \ No newline at end of file diff --git a/icons/backblaze.svg b/icons/backblaze.svg new file mode 100644 index 000000000000..19691ae9df9e --- /dev/null +++ b/icons/backblaze.svg @@ -0,0 +1 @@ +Backblaze \ No newline at end of file diff --git a/icons/backendless.svg b/icons/backendless.svg new file mode 100644 index 000000000000..52808010a362 --- /dev/null +++ b/icons/backendless.svg @@ -0,0 +1 @@ +Backendless \ No newline at end of file diff --git a/icons/backstage.svg b/icons/backstage.svg new file mode 100644 index 000000000000..20adb8bc7893 --- /dev/null +++ b/icons/backstage.svg @@ -0,0 +1 @@ +Backstage \ No newline at end of file diff --git a/icons/bandlab.svg b/icons/bandlab.svg index e0de169cbb6b..5bf4eb13a139 100644 --- a/icons/bandlab.svg +++ b/icons/bandlab.svg @@ -1 +1 @@ -BandLab +BandLab \ No newline at end of file diff --git a/icons/bastyon.svg b/icons/bastyon.svg new file mode 100644 index 000000000000..089fab5c8836 --- /dev/null +++ b/icons/bastyon.svg @@ -0,0 +1 @@ +Bastyon \ No newline at end of file diff --git a/icons/bbc.svg b/icons/bbc.svg index f8255e0948c5..66296df85684 100644 --- a/icons/bbc.svg +++ b/icons/bbc.svg @@ -1 +1 @@ -BBC \ No newline at end of file +BBC \ No newline at end of file diff --git a/icons/bbciplayer.svg b/icons/bbciplayer.svg index 85609335a2f0..a7ee72b6f613 100644 --- a/icons/bbciplayer.svg +++ b/icons/bbciplayer.svg @@ -1 +1 @@ -BBC iPlayer \ No newline at end of file +BBC iPlayer \ No newline at end of file diff --git a/icons/bento.svg b/icons/bento.svg new file mode 100644 index 000000000000..3ee7ab4df6b9 --- /dev/null +++ b/icons/bento.svg @@ -0,0 +1 @@ +Bento \ No newline at end of file diff --git a/icons/bentoml.svg b/icons/bentoml.svg new file mode 100644 index 000000000000..1371e20b0889 --- /dev/null +++ b/icons/bentoml.svg @@ -0,0 +1 @@ +BentoML \ No newline at end of file diff --git a/icons/billboard.svg b/icons/billboard.svg new file mode 100644 index 000000000000..5e13e63b1cb1 --- /dev/null +++ b/icons/billboard.svg @@ -0,0 +1 @@ +Billboard \ No newline at end of file diff --git a/icons/bim.svg b/icons/bim.svg new file mode 100644 index 000000000000..5758da89ab06 --- /dev/null +++ b/icons/bim.svg @@ -0,0 +1 @@ +BIM \ No newline at end of file diff --git a/icons/bisecthosting.svg b/icons/bisecthosting.svg new file mode 100644 index 000000000000..d43c8441d357 --- /dev/null +++ b/icons/bisecthosting.svg @@ -0,0 +1 @@ +BisectHosting \ No newline at end of file diff --git a/icons/boardgamegeek.svg b/icons/boardgamegeek.svg new file mode 100644 index 000000000000..835cabd96df8 --- /dev/null +++ b/icons/boardgamegeek.svg @@ -0,0 +1 @@ +BoardGameGeek \ No newline at end of file diff --git a/icons/boehringeringelheim.svg b/icons/boehringeringelheim.svg index 0381fecd1113..c03ec373319c 100644 --- a/icons/boehringeringelheim.svg +++ b/icons/boehringeringelheim.svg @@ -1 +1 @@ -Boehringer Ingelheim +Boehringer Ingelheim \ No newline at end of file diff --git a/icons/bombardier.svg b/icons/bombardier.svg new file mode 100644 index 000000000000..8d816e8b3494 --- /dev/null +++ b/icons/bombardier.svg @@ -0,0 +1 @@ +Bombardier \ No newline at end of file diff --git a/icons/bookalope.svg b/icons/bookalope.svg new file mode 100644 index 000000000000..f87339353593 --- /dev/null +++ b/icons/bookalope.svg @@ -0,0 +1 @@ +Bookalope \ No newline at end of file diff --git a/icons/bookmyshow.svg b/icons/bookmyshow.svg new file mode 100644 index 000000000000..40b3d9ccd61a --- /dev/null +++ b/icons/bookmyshow.svg @@ -0,0 +1 @@ +BookMyShow \ No newline at end of file diff --git a/icons/borgbackup.svg b/icons/borgbackup.svg new file mode 100644 index 000000000000..ebd656be1bf9 --- /dev/null +++ b/icons/borgbackup.svg @@ -0,0 +1 @@ +BorgBackup \ No newline at end of file diff --git a/icons/bose.svg b/icons/bose.svg index b4ac891be8be..da2d07b4e86b 100644 --- a/icons/bose.svg +++ b/icons/bose.svg @@ -1 +1 @@ -Bose \ No newline at end of file +Bose \ No newline at end of file diff --git a/icons/botblecms.svg b/icons/botblecms.svg new file mode 100644 index 000000000000..7c2961c95384 --- /dev/null +++ b/icons/botblecms.svg @@ -0,0 +1 @@ +Botble CMS \ No newline at end of file diff --git a/icons/boxysvg.svg b/icons/boxysvg.svg new file mode 100644 index 000000000000..f59942f2963e --- /dev/null +++ b/icons/boxysvg.svg @@ -0,0 +1 @@ +Boxy SVG \ No newline at end of file diff --git a/icons/brevo.svg b/icons/brevo.svg new file mode 100644 index 000000000000..05b332793267 --- /dev/null +++ b/icons/brevo.svg @@ -0,0 +1 @@ +Brevo \ No newline at end of file diff --git a/icons/broadcom.svg b/icons/broadcom.svg index 3877dcb63f38..8c75d7bb7f30 100644 --- a/icons/broadcom.svg +++ b/icons/broadcom.svg @@ -1 +1 @@ -Broadcom \ No newline at end of file +Broadcom \ No newline at end of file diff --git a/icons/bspwm.svg b/icons/bspwm.svg new file mode 100644 index 000000000000..393c9d9e30c0 --- /dev/null +++ b/icons/bspwm.svg @@ -0,0 +1 @@ +bspwm \ No newline at end of file diff --git a/icons/bun.svg b/icons/bun.svg new file mode 100644 index 000000000000..7e3c932c6ad4 --- /dev/null +++ b/icons/bun.svg @@ -0,0 +1 @@ +Bun \ No newline at end of file diff --git a/icons/burton.svg b/icons/burton.svg new file mode 100644 index 000000000000..46131f642c88 --- /dev/null +++ b/icons/burton.svg @@ -0,0 +1 @@ +Burton \ No newline at end of file diff --git a/icons/bvg.svg b/icons/bvg.svg new file mode 100644 index 000000000000..6af93bb93431 --- /dev/null +++ b/icons/bvg.svg @@ -0,0 +1 @@ +BVG \ No newline at end of file diff --git a/icons/caddy.svg b/icons/caddy.svg new file mode 100644 index 000000000000..2ffcb7625ac4 --- /dev/null +++ b/icons/caddy.svg @@ -0,0 +1 @@ +Caddy \ No newline at end of file diff --git a/icons/cadillac.svg b/icons/cadillac.svg new file mode 100644 index 000000000000..e1d5a495ec45 --- /dev/null +++ b/icons/cadillac.svg @@ -0,0 +1 @@ +Cadillac \ No newline at end of file diff --git a/icons/cafepress.svg b/icons/cafepress.svg new file mode 100644 index 000000000000..97f8ca573d6b --- /dev/null +++ b/icons/cafepress.svg @@ -0,0 +1 @@ +CafePress \ No newline at end of file diff --git a/icons/caffeine.svg b/icons/caffeine.svg index 803f1bdea27b..f71e1ccf169b 100644 --- a/icons/caffeine.svg +++ b/icons/caffeine.svg @@ -1 +1 @@ -Caffeine +Caffeine \ No newline at end of file diff --git a/icons/cairographics.svg b/icons/cairographics.svg new file mode 100644 index 000000000000..c68a827aad00 --- /dev/null +++ b/icons/cairographics.svg @@ -0,0 +1 @@ +Cairo Graphics \ No newline at end of file diff --git a/icons/cardano.svg b/icons/cardano.svg new file mode 100644 index 000000000000..875597a933b1 --- /dev/null +++ b/icons/cardano.svg @@ -0,0 +1 @@ +Cardano \ No newline at end of file diff --git a/icons/chainguard.svg b/icons/chainguard.svg new file mode 100644 index 000000000000..639dea727fb4 --- /dev/null +++ b/icons/chainguard.svg @@ -0,0 +1 @@ +Chainguard \ No newline at end of file diff --git a/icons/channel4.svg b/icons/channel4.svg new file mode 100644 index 000000000000..c0e809ca2034 --- /dev/null +++ b/icons/channel4.svg @@ -0,0 +1 @@ +Channel 4 \ No newline at end of file diff --git a/icons/chatwoot.svg b/icons/chatwoot.svg new file mode 100644 index 000000000000..85ad9eff7675 --- /dev/null +++ b/icons/chatwoot.svg @@ -0,0 +1 @@ +Chatwoot \ No newline at end of file diff --git a/icons/checkmk.svg b/icons/checkmk.svg new file mode 100644 index 000000000000..9f1f216f8563 --- /dev/null +++ b/icons/checkmk.svg @@ -0,0 +1 @@ +Checkmk \ No newline at end of file diff --git a/icons/chianetwork.svg b/icons/chianetwork.svg new file mode 100644 index 000000000000..f521e0a79d77 --- /dev/null +++ b/icons/chianetwork.svg @@ -0,0 +1 @@ +Chia Network \ No newline at end of file diff --git a/icons/chromatic.svg b/icons/chromatic.svg new file mode 100644 index 000000000000..9995b47fba16 --- /dev/null +++ b/icons/chromatic.svg @@ -0,0 +1 @@ +Chromatic \ No newline at end of file diff --git a/icons/cilium.svg b/icons/cilium.svg index 689760e9a59e..ae5132e70c9c 100644 --- a/icons/cilium.svg +++ b/icons/cilium.svg @@ -1 +1 @@ -Cilium +Cilium \ No newline at end of file diff --git a/icons/circuitverse.svg b/icons/circuitverse.svg new file mode 100644 index 000000000000..0e40e7613827 --- /dev/null +++ b/icons/circuitverse.svg @@ -0,0 +1 @@ +CircuitVerse \ No newline at end of file diff --git a/icons/clarifai.svg b/icons/clarifai.svg new file mode 100644 index 000000000000..f07b9d3fe60c --- /dev/null +++ b/icons/clarifai.svg @@ -0,0 +1 @@ +Clarifai \ No newline at end of file diff --git a/icons/clarivate.svg b/icons/clarivate.svg new file mode 100644 index 000000000000..ded3176bfac9 --- /dev/null +++ b/icons/clarivate.svg @@ -0,0 +1 @@ +Clarivate \ No newline at end of file diff --git a/icons/cloudflarepages.svg b/icons/cloudflarepages.svg new file mode 100644 index 000000000000..6278cca6b669 --- /dev/null +++ b/icons/cloudflarepages.svg @@ -0,0 +1 @@ +Cloudflare Pages \ No newline at end of file diff --git a/icons/cloudsmith.svg b/icons/cloudsmith.svg index 220591c59b36..5fbf813dd942 100644 --- a/icons/cloudsmith.svg +++ b/icons/cloudsmith.svg @@ -1 +1 @@ -Cloudsmith \ No newline at end of file +Cloudsmith \ No newline at end of file diff --git a/icons/cocacola.svg b/icons/cocacola.svg new file mode 100644 index 000000000000..4a845e9972f6 --- /dev/null +++ b/icons/cocacola.svg @@ -0,0 +1 @@ +Coca Cola \ No newline at end of file diff --git a/icons/codesandbox.svg b/icons/codesandbox.svg index 970408815fee..99d85c3697d4 100644 --- a/icons/codesandbox.svg +++ b/icons/codesandbox.svg @@ -1 +1 @@ -CodeSandbox \ No newline at end of file +CodeSandbox \ No newline at end of file diff --git a/icons/codesignal.svg b/icons/codesignal.svg new file mode 100644 index 000000000000..ffb8035990ef --- /dev/null +++ b/icons/codesignal.svg @@ -0,0 +1 @@ +CodeSignal \ No newline at end of file diff --git a/icons/codestream.svg b/icons/codestream.svg new file mode 100644 index 000000000000..df86e5f8bd13 --- /dev/null +++ b/icons/codestream.svg @@ -0,0 +1 @@ +CodeStream \ No newline at end of file diff --git a/icons/commitlint.svg b/icons/commitlint.svg new file mode 100644 index 000000000000..9496f6f6dc79 --- /dev/null +++ b/icons/commitlint.svg @@ -0,0 +1 @@ +commitlint \ No newline at end of file diff --git a/icons/commodore.svg b/icons/commodore.svg new file mode 100644 index 000000000000..56cfe5b95ddf --- /dev/null +++ b/icons/commodore.svg @@ -0,0 +1 @@ +Commodore \ No newline at end of file diff --git a/icons/compilerexplorer.svg b/icons/compilerexplorer.svg new file mode 100644 index 000000000000..7f5fff289e13 --- /dev/null +++ b/icons/compilerexplorer.svg @@ -0,0 +1 @@ +Compiler Explorer \ No newline at end of file diff --git a/icons/comptia.svg b/icons/comptia.svg new file mode 100644 index 000000000000..7ff2eefcd6f1 --- /dev/null +++ b/icons/comptia.svg @@ -0,0 +1 @@ +CompTIA \ No newline at end of file diff --git a/icons/contao.svg b/icons/contao.svg new file mode 100644 index 000000000000..ba221d644c94 --- /dev/null +++ b/icons/contao.svg @@ -0,0 +1 @@ +Contao \ No newline at end of file diff --git a/icons/crayon.svg b/icons/crayon.svg new file mode 100644 index 000000000000..35983934bd5b --- /dev/null +++ b/icons/crayon.svg @@ -0,0 +1 @@ +Crayon \ No newline at end of file diff --git a/icons/creality.svg b/icons/creality.svg new file mode 100644 index 000000000000..15e804dbae4b --- /dev/null +++ b/icons/creality.svg @@ -0,0 +1 @@ +Creality \ No newline at end of file diff --git a/icons/creativetechnology.svg b/icons/creativetechnology.svg new file mode 100644 index 000000000000..f24809647bd9 --- /dev/null +++ b/icons/creativetechnology.svg @@ -0,0 +1 @@ +Creative Technology \ No newline at end of file diff --git a/icons/criticalrole.svg b/icons/criticalrole.svg new file mode 100644 index 000000000000..1e60bf7c1a2d --- /dev/null +++ b/icons/criticalrole.svg @@ -0,0 +1 @@ +Critical Role \ No newline at end of file diff --git a/icons/cssmodules.svg b/icons/cssmodules.svg index 5f95a9fd7e61..c0feaf01208a 100644 --- a/icons/cssmodules.svg +++ b/icons/cssmodules.svg @@ -1 +1 @@ -CSS Modules +CSS Modules \ No newline at end of file diff --git a/icons/cts.svg b/icons/cts.svg new file mode 100644 index 000000000000..fb2c96177d9d --- /dev/null +++ b/icons/cts.svg @@ -0,0 +1 @@ +CTS \ No newline at end of file diff --git a/icons/cultura.svg b/icons/cultura.svg new file mode 100644 index 000000000000..03ea9ceff527 --- /dev/null +++ b/icons/cultura.svg @@ -0,0 +1 @@ +Cultura \ No newline at end of file diff --git a/icons/curseforge.svg b/icons/curseforge.svg index 997d5f9d5bd7..16b129f4d06a 100644 --- a/icons/curseforge.svg +++ b/icons/curseforge.svg @@ -1 +1 @@ -CurseForge \ No newline at end of file +CurseForge \ No newline at end of file diff --git a/icons/d.svg b/icons/d.svg new file mode 100644 index 000000000000..643bd60e1311 --- /dev/null +++ b/icons/d.svg @@ -0,0 +1 @@ +D \ No newline at end of file diff --git a/icons/dacia.svg b/icons/dacia.svg index c482cc3e7d21..a45e12b103ae 100644 --- a/icons/dacia.svg +++ b/icons/dacia.svg @@ -1 +1 @@ -Dacia \ No newline at end of file +Dacia \ No newline at end of file diff --git a/icons/daisyui.svg b/icons/daisyui.svg new file mode 100644 index 000000000000..d5b5c8d738c2 --- /dev/null +++ b/icons/daisyui.svg @@ -0,0 +1 @@ +DaisyUI \ No newline at end of file diff --git a/icons/dapr.svg b/icons/dapr.svg new file mode 100644 index 000000000000..370d31d18d77 --- /dev/null +++ b/icons/dapr.svg @@ -0,0 +1 @@ +Dapr \ No newline at end of file diff --git a/icons/dask.svg b/icons/dask.svg index e71275c0acc9..49985698e695 100644 --- a/icons/dask.svg +++ b/icons/dask.svg @@ -1 +1 @@ -Dask \ No newline at end of file +Dask \ No newline at end of file diff --git a/icons/datadotai.svg b/icons/datadotai.svg index 05bdf23cfc06..87f5bc726a75 100644 --- a/icons/datadotai.svg +++ b/icons/datadotai.svg @@ -1 +1 @@ -data.ai +data.ai \ No newline at end of file diff --git a/icons/dataverse.svg b/icons/dataverse.svg new file mode 100644 index 000000000000..1f74803eddcf --- /dev/null +++ b/icons/dataverse.svg @@ -0,0 +1 @@ +Dataverse \ No newline at end of file diff --git a/icons/dataversioncontrol.svg b/icons/dataversioncontrol.svg deleted file mode 100644 index 65836f7c8603..000000000000 --- a/icons/dataversioncontrol.svg +++ /dev/null @@ -1 +0,0 @@ -Data Version Control \ No newline at end of file diff --git a/icons/dedge.svg b/icons/dedge.svg index 6c7fbf05ee3d..325b9533074c 100644 --- a/icons/dedge.svg +++ b/icons/dedge.svg @@ -1 +1 @@ -D-EDGE +D-EDGE \ No newline at end of file diff --git a/icons/deno.svg b/icons/deno.svg index b60b207a4ded..ea6459994a4d 100644 --- a/icons/deno.svg +++ b/icons/deno.svg @@ -1 +1 @@ -Deno +Deno \ No newline at end of file diff --git a/icons/denon.svg b/icons/denon.svg new file mode 100644 index 000000000000..8c1177a763b1 --- /dev/null +++ b/icons/denon.svg @@ -0,0 +1 @@ +Denon \ No newline at end of file diff --git a/icons/distrokid.svg b/icons/distrokid.svg new file mode 100644 index 000000000000..71b5a0a7bca0 --- /dev/null +++ b/icons/distrokid.svg @@ -0,0 +1 @@ +Distrokid \ No newline at end of file diff --git a/icons/docsdotrs.svg b/icons/docsdotrs.svg index 44e58d9be8d2..cebe3f33052b 100644 --- a/icons/docsdotrs.svg +++ b/icons/docsdotrs.svg @@ -1 +1 @@ -Docs.rs +Docs.rs \ No newline at end of file diff --git a/icons/doi.svg b/icons/doi.svg new file mode 100644 index 000000000000..2777584e2929 --- /dev/null +++ b/icons/doi.svg @@ -0,0 +1 @@ +DOI \ No newline at end of file diff --git a/icons/dotenv.svg b/icons/dotenv.svg new file mode 100644 index 000000000000..333eeda90d15 --- /dev/null +++ b/icons/dotenv.svg @@ -0,0 +1 @@ +.ENV \ No newline at end of file diff --git a/icons/douban.svg b/icons/douban.svg index 0f5d0c0b2c98..cabc267da3e4 100644 --- a/icons/douban.svg +++ b/icons/douban.svg @@ -1 +1 @@ -Douban \ No newline at end of file +Douban \ No newline at end of file diff --git a/icons/dovecot.svg b/icons/dovecot.svg new file mode 100644 index 000000000000..d9968e5ef224 --- /dev/null +++ b/icons/dovecot.svg @@ -0,0 +1 @@ +Dovecot \ No newline at end of file diff --git a/icons/dts.svg b/icons/dts.svg new file mode 100644 index 000000000000..67112ed96dda --- /dev/null +++ b/icons/dts.svg @@ -0,0 +1 @@ +DTS \ No newline at end of file diff --git a/icons/ducati.svg b/icons/ducati.svg new file mode 100644 index 000000000000..391fe83888ba --- /dev/null +++ b/icons/ducati.svg @@ -0,0 +1 @@ +Ducati \ No newline at end of file diff --git a/icons/duckdb.svg b/icons/duckdb.svg new file mode 100644 index 000000000000..feaab85bc541 --- /dev/null +++ b/icons/duckdb.svg @@ -0,0 +1 @@ +DuckDB \ No newline at end of file diff --git a/icons/dynamics365.svg b/icons/dynamics365.svg index 687f5a703daf..a03d74ea90ec 100644 --- a/icons/dynamics365.svg +++ b/icons/dynamics365.svg @@ -1 +1 @@ -Dynamics 365 \ No newline at end of file +Dynamics 365 \ No newline at end of file diff --git a/icons/e3.svg b/icons/e3.svg new file mode 100644 index 000000000000..0beb2eef9ff5 --- /dev/null +++ b/icons/e3.svg @@ -0,0 +1 @@ +E3 \ No newline at end of file diff --git a/icons/easyeda.svg b/icons/easyeda.svg new file mode 100644 index 000000000000..c5ab5404d84a --- /dev/null +++ b/icons/easyeda.svg @@ -0,0 +1 @@ +EasyEDA \ No newline at end of file diff --git a/icons/ebox.svg b/icons/ebox.svg new file mode 100644 index 000000000000..7befe8730705 --- /dev/null +++ b/icons/ebox.svg @@ -0,0 +1 @@ +EBOX \ No newline at end of file diff --git a/icons/eclipseadoptium.svg b/icons/eclipseadoptium.svg new file mode 100644 index 000000000000..47ed4762f5a4 --- /dev/null +++ b/icons/eclipseadoptium.svg @@ -0,0 +1 @@ +Eclipse Adoptium \ No newline at end of file diff --git a/icons/elavon.svg b/icons/elavon.svg new file mode 100644 index 000000000000..7ad76a238094 --- /dev/null +++ b/icons/elavon.svg @@ -0,0 +1 @@ +Elavon \ No newline at end of file diff --git a/icons/electronbuilder.svg b/icons/electronbuilder.svg new file mode 100644 index 000000000000..728eaaf51215 --- /dev/null +++ b/icons/electronbuilder.svg @@ -0,0 +1 @@ +electron-builder \ No newline at end of file diff --git a/icons/electronfiddle.svg b/icons/electronfiddle.svg new file mode 100644 index 000000000000..85faa8a00e27 --- /dev/null +++ b/icons/electronfiddle.svg @@ -0,0 +1 @@ +Electron Fiddle \ No newline at end of file diff --git a/icons/elementor.svg b/icons/elementor.svg new file mode 100644 index 000000000000..6928d6ae711f --- /dev/null +++ b/icons/elementor.svg @@ -0,0 +1 @@ +Elementor \ No newline at end of file diff --git a/icons/elgato.svg b/icons/elgato.svg new file mode 100644 index 000000000000..92b001d261d7 --- /dev/null +++ b/icons/elgato.svg @@ -0,0 +1 @@ +Elgato \ No newline at end of file diff --git a/icons/engadget.svg b/icons/engadget.svg new file mode 100644 index 000000000000..2dee81905f81 --- /dev/null +++ b/icons/engadget.svg @@ -0,0 +1 @@ +Engadget \ No newline at end of file diff --git a/icons/enterprisedb.svg b/icons/enterprisedb.svg new file mode 100644 index 000000000000..9d087a0be13b --- /dev/null +++ b/icons/enterprisedb.svg @@ -0,0 +1 @@ +EnterpriseDB \ No newline at end of file diff --git a/icons/envoyproxy.svg b/icons/envoyproxy.svg new file mode 100644 index 000000000000..1163269aab63 --- /dev/null +++ b/icons/envoyproxy.svg @@ -0,0 +1 @@ +Envoy Proxy \ No newline at end of file diff --git a/icons/esri.svg b/icons/esri.svg new file mode 100644 index 000000000000..8b86da1309a8 --- /dev/null +++ b/icons/esri.svg @@ -0,0 +1 @@ +ESRI \ No newline at end of file diff --git a/icons/f1.svg b/icons/f1.svg new file mode 100644 index 000000000000..01e05d307f01 --- /dev/null +++ b/icons/f1.svg @@ -0,0 +1 @@ +F1 \ No newline at end of file diff --git a/icons/f5.svg b/icons/f5.svg new file mode 100644 index 000000000000..4f302e70775b --- /dev/null +++ b/icons/f5.svg @@ -0,0 +1 @@ +F5 \ No newline at end of file diff --git a/icons/facepunch.svg b/icons/facepunch.svg index 1c1da4790e57..0f906b0c42c3 100644 --- a/icons/facepunch.svg +++ b/icons/facepunch.svg @@ -1 +1 @@ -Facepunch \ No newline at end of file +Facepunch \ No newline at end of file diff --git a/icons/fanfou.svg b/icons/fanfou.svg new file mode 100644 index 000000000000..32a0122e7168 --- /dev/null +++ b/icons/fanfou.svg @@ -0,0 +1 @@ +Fanfou \ No newline at end of file diff --git a/icons/fantom.svg b/icons/fantom.svg new file mode 100644 index 000000000000..e4b768670a37 --- /dev/null +++ b/icons/fantom.svg @@ -0,0 +1 @@ +Fantom \ No newline at end of file diff --git a/icons/fareharbor.svg b/icons/fareharbor.svg new file mode 100644 index 000000000000..a808c67ffdb9 --- /dev/null +++ b/icons/fareharbor.svg @@ -0,0 +1 @@ +FareHarbor \ No newline at end of file diff --git a/icons/fauna.svg b/icons/fauna.svg new file mode 100644 index 000000000000..9f3f776635ff --- /dev/null +++ b/icons/fauna.svg @@ -0,0 +1 @@ +Fauna \ No newline at end of file diff --git a/icons/ferretdb.svg b/icons/ferretdb.svg new file mode 100644 index 000000000000..404448b0e017 --- /dev/null +++ b/icons/ferretdb.svg @@ -0,0 +1 @@ +FerretDB \ No newline at end of file diff --git a/icons/fi.svg b/icons/fi.svg new file mode 100644 index 000000000000..320cfdb8b65d --- /dev/null +++ b/icons/fi.svg @@ -0,0 +1 @@ +Fi \ No newline at end of file diff --git a/icons/fig.svg b/icons/fig.svg new file mode 100644 index 000000000000..b7054eece173 --- /dev/null +++ b/icons/fig.svg @@ -0,0 +1 @@ +Fig \ No newline at end of file diff --git a/icons/fireflyiii.svg b/icons/fireflyiii.svg new file mode 100644 index 000000000000..1a7fc2acdae3 --- /dev/null +++ b/icons/fireflyiii.svg @@ -0,0 +1 @@ +Firefly III \ No newline at end of file diff --git a/icons/fireship.svg b/icons/fireship.svg new file mode 100644 index 000000000000..0251401fd74b --- /dev/null +++ b/icons/fireship.svg @@ -0,0 +1 @@ +Fireship \ No newline at end of file diff --git a/icons/firewalla.svg b/icons/firewalla.svg new file mode 100644 index 000000000000..20251e8ca201 --- /dev/null +++ b/icons/firewalla.svg @@ -0,0 +1 @@ +Firewalla \ No newline at end of file diff --git a/icons/first.svg b/icons/first.svg index ae3f10237bfe..19274e1fb7e1 100644 --- a/icons/first.svg +++ b/icons/first.svg @@ -1 +1 @@ -FIRST \ No newline at end of file +FIRST \ No newline at end of file diff --git a/icons/flathub.svg b/icons/flathub.svg index 6bad8b3dac66..5f665f02e7f3 100644 --- a/icons/flathub.svg +++ b/icons/flathub.svg @@ -1 +1 @@ -Flathub \ No newline at end of file +Flathub \ No newline at end of file diff --git a/icons/flatpak.svg b/icons/flatpak.svg new file mode 100644 index 000000000000..ea7c292d4f4f --- /dev/null +++ b/icons/flatpak.svg @@ -0,0 +1 @@ +Flatpak \ No newline at end of file diff --git a/icons/fluentbit.svg b/icons/fluentbit.svg index 6d7a69aced64..c0fd3709f9cc 100644 --- a/icons/fluentbit.svg +++ b/icons/fluentbit.svg @@ -1 +1 @@ -Fluent Bit +Fluent Bit \ No newline at end of file diff --git a/icons/fluxus.svg b/icons/fluxus.svg new file mode 100644 index 000000000000..5272351ff640 --- /dev/null +++ b/icons/fluxus.svg @@ -0,0 +1 @@ +Fluxus \ No newline at end of file diff --git a/icons/fontforge.svg b/icons/fontforge.svg new file mode 100644 index 000000000000..6e5b2fb100a2 --- /dev/null +++ b/icons/fontforge.svg @@ -0,0 +1 @@ +FontForge \ No newline at end of file diff --git a/icons/forgejo.svg b/icons/forgejo.svg new file mode 100644 index 000000000000..5c6119a13dd2 --- /dev/null +++ b/icons/forgejo.svg @@ -0,0 +1 @@ +Forgejo \ No newline at end of file diff --git a/icons/fox.svg b/icons/fox.svg new file mode 100644 index 000000000000..4e3597ccfcc8 --- /dev/null +++ b/icons/fox.svg @@ -0,0 +1 @@ +FOX \ No newline at end of file diff --git a/icons/freepik.svg b/icons/freepik.svg new file mode 100644 index 000000000000..d1b98f246319 --- /dev/null +++ b/icons/freepik.svg @@ -0,0 +1 @@ +Freepik \ No newline at end of file diff --git a/icons/frontify.svg b/icons/frontify.svg new file mode 100644 index 000000000000..a52e1f2b0a7a --- /dev/null +++ b/icons/frontify.svg @@ -0,0 +1 @@ +Frontify \ No newline at end of file diff --git a/icons/fsharp.svg b/icons/fsharp.svg new file mode 100644 index 000000000000..5205b9569cfd --- /dev/null +++ b/icons/fsharp.svg @@ -0,0 +1 @@ +F# \ No newline at end of file diff --git a/icons/fugacloud.svg b/icons/fugacloud.svg new file mode 100644 index 000000000000..e679c2c5d2f9 --- /dev/null +++ b/icons/fugacloud.svg @@ -0,0 +1 @@ +Fuga Cloud \ No newline at end of file diff --git a/icons/fujifilm.svg b/icons/fujifilm.svg index 00766e688afb..e9ab12b1f039 100644 --- a/icons/fujifilm.svg +++ b/icons/fujifilm.svg @@ -1 +1 @@ -Fujifilm \ No newline at end of file +Fujifilm \ No newline at end of file diff --git a/icons/gamedeveloper.svg b/icons/gamedeveloper.svg new file mode 100644 index 000000000000..26624680267c --- /dev/null +++ b/icons/gamedeveloper.svg @@ -0,0 +1 @@ +Game Developer \ No newline at end of file diff --git a/icons/gamemaker.svg b/icons/gamemaker.svg new file mode 100644 index 000000000000..a540abae978b --- /dev/null +++ b/icons/gamemaker.svg @@ -0,0 +1 @@ +Gamemaker \ No newline at end of file diff --git a/icons/gdal.svg b/icons/gdal.svg new file mode 100644 index 000000000000..5da8bdea4e5c --- /dev/null +++ b/icons/gdal.svg @@ -0,0 +1 @@ +GDAL \ No newline at end of file diff --git a/icons/godaddy.svg b/icons/godaddy.svg index 31bf2c16e318..8041083eb56b 100644 --- a/icons/godaddy.svg +++ b/icons/godaddy.svg @@ -1 +1 @@ -GoDaddy +GoDaddy \ No newline at end of file diff --git a/icons/googleappsscript.svg b/icons/googleappsscript.svg new file mode 100644 index 000000000000..9ab974b5baed --- /dev/null +++ b/icons/googleappsscript.svg @@ -0,0 +1 @@ +Google Apps Script \ No newline at end of file diff --git a/icons/googlebard.svg b/icons/googlebard.svg new file mode 100644 index 000000000000..772bc562fdf5 --- /dev/null +++ b/icons/googlebard.svg @@ -0,0 +1 @@ +Google Bard \ No newline at end of file diff --git a/icons/googlecontaineroptimizedos.svg b/icons/googlecontaineroptimizedos.svg new file mode 100644 index 000000000000..32b909459f80 --- /dev/null +++ b/icons/googlecontaineroptimizedos.svg @@ -0,0 +1 @@ +Google Container Optimized OS \ No newline at end of file diff --git a/icons/googledocs.svg b/icons/googledocs.svg new file mode 100644 index 000000000000..8354c6fa2e54 --- /dev/null +++ b/icons/googledocs.svg @@ -0,0 +1 @@ +Google Docs \ No newline at end of file diff --git a/icons/googleforms.svg b/icons/googleforms.svg new file mode 100644 index 000000000000..a31b509f0bb4 --- /dev/null +++ b/icons/googleforms.svg @@ -0,0 +1 @@ +Google Forms \ No newline at end of file diff --git a/icons/googlehome.svg b/icons/googlehome.svg new file mode 100644 index 000000000000..e241757ba104 --- /dev/null +++ b/icons/googlehome.svg @@ -0,0 +1 @@ +Google Home \ No newline at end of file diff --git a/icons/grandfrais.svg b/icons/grandfrais.svg index 3c40956f5504..7984156d769c 100644 --- a/icons/grandfrais.svg +++ b/icons/grandfrais.svg @@ -1 +1 @@ -Grand Frais +Grand Frais \ No newline at end of file diff --git a/icons/greenhouse.svg b/icons/greenhouse.svg new file mode 100644 index 000000000000..e859f5007813 --- /dev/null +++ b/icons/greenhouse.svg @@ -0,0 +1 @@ +Greenhouse \ No newline at end of file diff --git a/icons/gsk.svg b/icons/gsk.svg new file mode 100644 index 000000000000..da7544d135a8 --- /dev/null +++ b/icons/gsk.svg @@ -0,0 +1 @@ +GSK \ No newline at end of file diff --git a/icons/gstreamer.svg b/icons/gstreamer.svg new file mode 100644 index 000000000000..2326af3d08f8 --- /dev/null +++ b/icons/gstreamer.svg @@ -0,0 +1 @@ +GStreamer \ No newline at end of file diff --git a/icons/gumroad.svg b/icons/gumroad.svg index e92808715918..3204d8e967c9 100644 --- a/icons/gumroad.svg +++ b/icons/gumroad.svg @@ -1 +1 @@ -Gumroad \ No newline at end of file +Gumroad \ No newline at end of file diff --git a/icons/gurobi.svg b/icons/gurobi.svg index 012177795e81..4e8271f94752 100644 --- a/icons/gurobi.svg +++ b/icons/gurobi.svg @@ -1 +1 @@ -Gurobi +Gurobi \ No newline at end of file diff --git a/icons/h3.svg b/icons/h3.svg new file mode 100644 index 000000000000..112a06d08525 --- /dev/null +++ b/icons/h3.svg @@ -0,0 +1 @@ +H3 \ No newline at end of file diff --git a/icons/harmonyos.svg b/icons/harmonyos.svg new file mode 100644 index 000000000000..99b8d7e62681 --- /dev/null +++ b/icons/harmonyos.svg @@ -0,0 +1 @@ +HarmonyOS \ No newline at end of file diff --git a/icons/hashicorp.svg b/icons/hashicorp.svg new file mode 100644 index 000000000000..9f51735ad7ed --- /dev/null +++ b/icons/hashicorp.svg @@ -0,0 +1 @@ +HashiCorp \ No newline at end of file diff --git a/icons/headlessui.svg b/icons/headlessui.svg index 75c3d6e231fc..79cf3ff7e781 100644 --- a/icons/headlessui.svg +++ b/icons/headlessui.svg @@ -1 +1 @@ -Headless UI +Headless UI \ No newline at end of file diff --git a/icons/hearthisdotat.svg b/icons/hearthisdotat.svg new file mode 100644 index 000000000000..5dfc4222b152 --- /dev/null +++ b/icons/hearthisdotat.svg @@ -0,0 +1 @@ +hearthis.at \ No newline at end of file diff --git a/icons/hedera.svg b/icons/hedera.svg new file mode 100644 index 000000000000..a992c915813e --- /dev/null +++ b/icons/hedera.svg @@ -0,0 +1 @@ +Hedera \ No newline at end of file diff --git a/icons/hibob.svg b/icons/hibob.svg new file mode 100644 index 000000000000..4499dce488c0 --- /dev/null +++ b/icons/hibob.svg @@ -0,0 +1 @@ +Hi Bob \ No newline at end of file diff --git a/icons/honey.svg b/icons/honey.svg new file mode 100644 index 000000000000..4443fe348ad9 --- /dev/null +++ b/icons/honey.svg @@ -0,0 +1 @@ +Honey \ No newline at end of file diff --git a/icons/hotwire.svg b/icons/hotwire.svg new file mode 100644 index 000000000000..136eaaa592d8 --- /dev/null +++ b/icons/hotwire.svg @@ -0,0 +1 @@ +Hotwire \ No newline at end of file diff --git a/icons/hsbc.svg b/icons/hsbc.svg new file mode 100644 index 000000000000..86eca074a1af --- /dev/null +++ b/icons/hsbc.svg @@ -0,0 +1 @@ +HSBC \ No newline at end of file diff --git a/icons/htop.svg b/icons/htop.svg new file mode 100644 index 000000000000..9d955ae6f168 --- /dev/null +++ b/icons/htop.svg @@ -0,0 +1 @@ +htop \ No newline at end of file diff --git a/icons/iced.svg b/icons/iced.svg new file mode 100644 index 000000000000..8e7d69c88266 --- /dev/null +++ b/icons/iced.svg @@ -0,0 +1 @@ +Iced \ No newline at end of file diff --git a/icons/iledefrancemobilites.svg b/icons/iledefrancemobilites.svg new file mode 100644 index 000000000000..1628119b2f7c --- /dev/null +++ b/icons/iledefrancemobilites.svg @@ -0,0 +1 @@ +Île-de-France Mobilités \ No newline at end of file diff --git a/icons/immich.svg b/icons/immich.svg new file mode 100644 index 000000000000..a384ccb7ea61 --- /dev/null +++ b/icons/immich.svg @@ -0,0 +1 @@ +Immich \ No newline at end of file diff --git a/icons/improvmx.svg b/icons/improvmx.svg new file mode 100644 index 000000000000..9b30a4350e30 --- /dev/null +++ b/icons/improvmx.svg @@ -0,0 +1 @@ +ImprovMX \ No newline at end of file diff --git a/icons/inertia.svg b/icons/inertia.svg new file mode 100644 index 000000000000..f83e88a5721d --- /dev/null +++ b/icons/inertia.svg @@ -0,0 +1 @@ +Inertia \ No newline at end of file diff --git a/icons/infoq.svg b/icons/infoq.svg new file mode 100644 index 000000000000..7f0fea471e85 --- /dev/null +++ b/icons/infoq.svg @@ -0,0 +1 @@ +InfoQ \ No newline at end of file diff --git a/icons/infracost.svg b/icons/infracost.svg new file mode 100644 index 000000000000..2f138d54cc1d --- /dev/null +++ b/icons/infracost.svg @@ -0,0 +1 @@ +Infracost \ No newline at end of file diff --git a/icons/inkdrop.svg b/icons/inkdrop.svg new file mode 100644 index 000000000000..cce8b8819c9a --- /dev/null +++ b/icons/inkdrop.svg @@ -0,0 +1 @@ +Inkdrop \ No newline at end of file diff --git a/icons/instructure.svg b/icons/instructure.svg new file mode 100644 index 000000000000..0f713b2dbca9 --- /dev/null +++ b/icons/instructure.svg @@ -0,0 +1 @@ +Instructure \ No newline at end of file diff --git a/icons/interactiondesignfoundation.svg b/icons/interactiondesignfoundation.svg new file mode 100644 index 000000000000..c708c20ef4f2 --- /dev/null +++ b/icons/interactiondesignfoundation.svg @@ -0,0 +1 @@ +Interaction Design Foundation \ No newline at end of file diff --git a/icons/intuit.svg b/icons/intuit.svg new file mode 100644 index 000000000000..1a4530a9cdff --- /dev/null +++ b/icons/intuit.svg @@ -0,0 +1 @@ +Intuit \ No newline at end of file diff --git a/icons/iris.svg b/icons/iris.svg new file mode 100644 index 000000000000..9f90100522ee --- /dev/null +++ b/icons/iris.svg @@ -0,0 +1 @@ +IRIS \ No newline at end of file diff --git a/icons/iscsquared.svg b/icons/iscsquared.svg new file mode 100644 index 000000000000..88f6b836e678 --- /dev/null +++ b/icons/iscsquared.svg @@ -0,0 +1 @@ +(ISC)² \ No newline at end of file diff --git a/icons/itvx.svg b/icons/itvx.svg new file mode 100644 index 000000000000..ce0e9b705bb4 --- /dev/null +++ b/icons/itvx.svg @@ -0,0 +1 @@ +ITVx \ No newline at end of file diff --git a/icons/java.svg b/icons/java.svg deleted file mode 100644 index 9ec302f608f8..000000000000 --- a/icons/java.svg +++ /dev/null @@ -1 +0,0 @@ -Java \ No newline at end of file diff --git a/icons/jetblue.svg b/icons/jetblue.svg new file mode 100644 index 000000000000..358222198af6 --- /dev/null +++ b/icons/jetblue.svg @@ -0,0 +1 @@ +JetBlue \ No newline at end of file diff --git a/icons/jetpackcompose.svg b/icons/jetpackcompose.svg index cf38e44ce4e8..53db7b4373ca 100644 --- a/icons/jetpackcompose.svg +++ b/icons/jetpackcompose.svg @@ -1 +1 @@ -Jetpack Compose +Jetpack Compose \ No newline at end of file diff --git a/icons/jfrogpipelines.svg b/icons/jfrogpipelines.svg new file mode 100644 index 000000000000..4dd6a1e5bd05 --- /dev/null +++ b/icons/jfrogpipelines.svg @@ -0,0 +1 @@ +JFrog Pipelines \ No newline at end of file diff --git a/icons/jovian.svg b/icons/jovian.svg new file mode 100644 index 000000000000..654afad98551 --- /dev/null +++ b/icons/jovian.svg @@ -0,0 +1 @@ +Jovian \ No newline at end of file diff --git a/icons/juce.svg b/icons/juce.svg new file mode 100644 index 000000000000..400015715bc6 --- /dev/null +++ b/icons/juce.svg @@ -0,0 +1 @@ +JUCE \ No newline at end of file diff --git a/icons/juejin.svg b/icons/juejin.svg new file mode 100644 index 000000000000..2500f29ca7ff --- /dev/null +++ b/icons/juejin.svg @@ -0,0 +1 @@ +Juejin \ No newline at end of file diff --git a/icons/juke.svg b/icons/juke.svg new file mode 100644 index 000000000000..5de22de44238 --- /dev/null +++ b/icons/juke.svg @@ -0,0 +1 @@ +JUKE \ No newline at end of file diff --git a/icons/k3s.svg b/icons/k3s.svg index 5513a88195da..4760e0d421ec 100644 --- a/icons/k3s.svg +++ b/icons/k3s.svg @@ -1 +1 @@ -K3s +K3s \ No newline at end of file diff --git a/icons/k6.svg b/icons/k6.svg new file mode 100644 index 000000000000..8c2da2107c83 --- /dev/null +++ b/icons/k6.svg @@ -0,0 +1 @@ +k6 \ No newline at end of file diff --git a/icons/kamailio.svg b/icons/kamailio.svg new file mode 100644 index 000000000000..761ab2b95419 --- /dev/null +++ b/icons/kamailio.svg @@ -0,0 +1 @@ +Kamailio \ No newline at end of file diff --git a/icons/kaniko.svg b/icons/kaniko.svg index d3d4c8eff705..83f2ce8f23da 100644 --- a/icons/kaniko.svg +++ b/icons/kaniko.svg @@ -1 +1 @@ -Kaniko +Kaniko \ No newline at end of file diff --git a/icons/keepachangelog.svg b/icons/keepachangelog.svg new file mode 100644 index 000000000000..9e54f8183185 --- /dev/null +++ b/icons/keepachangelog.svg @@ -0,0 +1 @@ +Keep a Changelog \ No newline at end of file diff --git a/icons/keystone.svg b/icons/keystone.svg new file mode 100644 index 000000000000..028998351a8f --- /dev/null +++ b/icons/keystone.svg @@ -0,0 +1 @@ +Keystone \ No newline at end of file diff --git a/icons/kicad.svg b/icons/kicad.svg new file mode 100644 index 000000000000..f0ae28a4f156 --- /dev/null +++ b/icons/kicad.svg @@ -0,0 +1 @@ +KiCad \ No newline at end of file diff --git a/icons/kinsta.svg b/icons/kinsta.svg new file mode 100644 index 000000000000..51784264e1f3 --- /dev/null +++ b/icons/kinsta.svg @@ -0,0 +1 @@ +Kinsta \ No newline at end of file diff --git a/icons/kit.svg b/icons/kit.svg new file mode 100644 index 000000000000..17828c40b0e1 --- /dev/null +++ b/icons/kit.svg @@ -0,0 +1 @@ +Kit \ No newline at end of file diff --git a/icons/knative.svg b/icons/knative.svg index 3b5370705ff4..6d6221871593 100644 --- a/icons/knative.svg +++ b/icons/knative.svg @@ -1 +1 @@ -Knative +Knative \ No newline at end of file diff --git a/icons/kodak.svg b/icons/kodak.svg new file mode 100644 index 000000000000..aedb5ffaca19 --- /dev/null +++ b/icons/kodak.svg @@ -0,0 +1 @@ +Kodak \ No newline at end of file diff --git a/icons/kong.svg b/icons/kong.svg index 2440ecc3dc89..e9e735f8f38e 100644 --- a/icons/kong.svg +++ b/icons/kong.svg @@ -1 +1 @@ -Kong +Kong \ No newline at end of file diff --git a/icons/koyeb.svg b/icons/koyeb.svg new file mode 100644 index 000000000000..b8fed6e52263 --- /dev/null +++ b/icons/koyeb.svg @@ -0,0 +1 @@ +Koyeb \ No newline at end of file diff --git a/icons/kuula.svg b/icons/kuula.svg new file mode 100644 index 000000000000..d58f65365acc --- /dev/null +++ b/icons/kuula.svg @@ -0,0 +1 @@ +Kuula \ No newline at end of file diff --git a/icons/lapce.svg b/icons/lapce.svg new file mode 100644 index 000000000000..ba7328ec36a3 --- /dev/null +++ b/icons/lapce.svg @@ -0,0 +1 @@ +Lapce \ No newline at end of file diff --git a/icons/legacygames.svg b/icons/legacygames.svg new file mode 100644 index 000000000000..97349de66c5a --- /dev/null +++ b/icons/legacygames.svg @@ -0,0 +1 @@ +Legacy Games \ No newline at end of file diff --git a/icons/leica.svg b/icons/leica.svg new file mode 100644 index 000000000000..1d236d8e3c92 --- /dev/null +++ b/icons/leica.svg @@ -0,0 +1 @@ +Leica \ No newline at end of file diff --git a/icons/leptos.svg b/icons/leptos.svg new file mode 100644 index 000000000000..0b37cd24c409 --- /dev/null +++ b/icons/leptos.svg @@ -0,0 +1 @@ +Leptos \ No newline at end of file diff --git a/icons/letterboxd.svg b/icons/letterboxd.svg index 760d5041b2e1..6db3193b203d 100644 --- a/icons/letterboxd.svg +++ b/icons/letterboxd.svg @@ -1 +1 @@ -Letterboxd \ No newline at end of file +Letterboxd \ No newline at end of file diff --git a/icons/levelsdotfyi.svg b/icons/levelsdotfyi.svg index d5759a9c2f80..e4cbca011d8b 100644 --- a/icons/levelsdotfyi.svg +++ b/icons/levelsdotfyi.svg @@ -1 +1 @@ -levels.fyi +levels.fyi \ No newline at end of file diff --git a/icons/liberadotchat.svg b/icons/liberadotchat.svg new file mode 100644 index 000000000000..74623d5bf374 --- /dev/null +++ b/icons/liberadotchat.svg @@ -0,0 +1 @@ +Libera.Chat \ No newline at end of file diff --git a/icons/lightning.svg b/icons/lightning.svg new file mode 100644 index 000000000000..89f7f274906d --- /dev/null +++ b/icons/lightning.svg @@ -0,0 +1 @@ +Lightning \ No newline at end of file diff --git a/icons/linear.svg b/icons/linear.svg new file mode 100644 index 000000000000..f3770d654ec5 --- /dev/null +++ b/icons/linear.svg @@ -0,0 +1 @@ +Linear \ No newline at end of file diff --git a/icons/linkerd.svg b/icons/linkerd.svg index 4b81684a713c..767b6e4f24d0 100644 --- a/icons/linkerd.svg +++ b/icons/linkerd.svg @@ -1 +1 @@ -Linkerd +Linkerd \ No newline at end of file diff --git a/icons/linktree.svg b/icons/linktree.svg index 335b11a9e383..3dca1678d2da 100644 --- a/icons/linktree.svg +++ b/icons/linktree.svg @@ -1 +1 @@ -Linktree \ No newline at end of file +Linktree \ No newline at end of file diff --git a/icons/linode.svg b/icons/linode.svg deleted file mode 100644 index c59cca185c2a..000000000000 --- a/icons/linode.svg +++ /dev/null @@ -1 +0,0 @@ -Linode \ No newline at end of file diff --git a/icons/litiengine.svg b/icons/litiengine.svg new file mode 100644 index 000000000000..a29788274d1f --- /dev/null +++ b/icons/litiengine.svg @@ -0,0 +1 @@ +LITIENGINE \ No newline at end of file diff --git a/icons/logseq.svg b/icons/logseq.svg new file mode 100644 index 000000000000..e1b6ce1d4b7d --- /dev/null +++ b/icons/logseq.svg @@ -0,0 +1 @@ +Logseq \ No newline at end of file diff --git a/icons/loopback.svg b/icons/loopback.svg new file mode 100644 index 000000000000..f011564d814a --- /dev/null +++ b/icons/loopback.svg @@ -0,0 +1 @@ +LoopBack \ No newline at end of file diff --git a/icons/ltspice.svg b/icons/ltspice.svg new file mode 100644 index 000000000000..82da3fd4d166 --- /dev/null +++ b/icons/ltspice.svg @@ -0,0 +1 @@ +LTspice \ No newline at end of file diff --git a/icons/ludwig.svg b/icons/ludwig.svg new file mode 100644 index 000000000000..dc41b46649c1 --- /dev/null +++ b/icons/ludwig.svg @@ -0,0 +1 @@ +Ludwig \ No newline at end of file diff --git a/icons/macpaw.svg b/icons/macpaw.svg new file mode 100644 index 000000000000..24ba8444691b --- /dev/null +++ b/icons/macpaw.svg @@ -0,0 +1 @@ +MacPaw \ No newline at end of file diff --git a/icons/maildotcom.svg b/icons/maildotcom.svg new file mode 100644 index 000000000000..a8a44680b3cd --- /dev/null +++ b/icons/maildotcom.svg @@ -0,0 +1 @@ +mail.com \ No newline at end of file diff --git a/icons/mailgun.svg b/icons/mailgun.svg index 86788431b6e3..0bfde075b17d 100644 --- a/icons/mailgun.svg +++ b/icons/mailgun.svg @@ -1 +1 @@ -Mailgun +Mailgun \ No newline at end of file diff --git a/icons/mambaui.svg b/icons/mambaui.svg new file mode 100644 index 000000000000..0b42af0860b3 --- /dev/null +++ b/icons/mambaui.svg @@ -0,0 +1 @@ +Mamba UI \ No newline at end of file diff --git a/icons/maplibre.svg b/icons/maplibre.svg new file mode 100644 index 000000000000..1d69813a711c --- /dev/null +++ b/icons/maplibre.svg @@ -0,0 +1 @@ +MapLibre \ No newline at end of file diff --git a/icons/marko.svg b/icons/marko.svg index dd7c5246b4aa..083cde1a534e 100644 --- a/icons/marko.svg +++ b/icons/marko.svg @@ -1 +1 @@ -Marko +Marko \ No newline at end of file diff --git a/icons/mastodon.svg b/icons/mastodon.svg index 19141c72b974..5e3b7e13cf0f 100644 --- a/icons/mastodon.svg +++ b/icons/mastodon.svg @@ -1 +1 @@ -Mastodon \ No newline at end of file +Mastodon \ No newline at end of file diff --git a/icons/mautic.svg b/icons/mautic.svg new file mode 100644 index 000000000000..1978671614ff --- /dev/null +++ b/icons/mautic.svg @@ -0,0 +1 @@ +Mautic \ No newline at end of file diff --git a/icons/mdbook.svg b/icons/mdbook.svg new file mode 100644 index 000000000000..1727c21bc092 --- /dev/null +++ b/icons/mdbook.svg @@ -0,0 +1 @@ +mdBook \ No newline at end of file diff --git a/icons/mdx.svg b/icons/mdx.svg index aace09b61c46..53fdf30b6455 100644 --- a/icons/mdx.svg +++ b/icons/mdx.svg @@ -1 +1 @@ -MDX +MDX \ No newline at end of file diff --git a/icons/medibangpaint.svg b/icons/medibangpaint.svg new file mode 100644 index 000000000000..b986a834f05c --- /dev/null +++ b/icons/medibangpaint.svg @@ -0,0 +1 @@ +MediBang Paint \ No newline at end of file diff --git a/icons/mercadopago.svg b/icons/mercadopago.svg new file mode 100644 index 000000000000..9df4aa100e1f --- /dev/null +++ b/icons/mercadopago.svg @@ -0,0 +1 @@ +Mercado Pago \ No newline at end of file diff --git a/icons/mg.svg b/icons/mg.svg new file mode 100644 index 000000000000..0246bf9f1772 --- /dev/null +++ b/icons/mg.svg @@ -0,0 +1 @@ +MG \ No newline at end of file diff --git a/icons/microeditor.svg b/icons/microeditor.svg new file mode 100644 index 000000000000..5d0c4e5f68c8 --- /dev/null +++ b/icons/microeditor.svg @@ -0,0 +1 @@ +Micro Editor \ No newline at end of file diff --git a/icons/microstation.svg b/icons/microstation.svg new file mode 100644 index 000000000000..04b3e84937ff --- /dev/null +++ b/icons/microstation.svg @@ -0,0 +1 @@ +Microstation \ No newline at end of file diff --git a/icons/mikrotik.svg b/icons/mikrotik.svg new file mode 100644 index 000000000000..dca2be987aa6 --- /dev/null +++ b/icons/mikrotik.svg @@ -0,0 +1 @@ +Mikrotik \ No newline at end of file diff --git a/icons/minio.svg b/icons/minio.svg new file mode 100644 index 000000000000..baf5f883f616 --- /dev/null +++ b/icons/minio.svg @@ -0,0 +1 @@ +MinIO \ No newline at end of file diff --git a/icons/miraheze.svg b/icons/miraheze.svg new file mode 100644 index 000000000000..0520e74d256c --- /dev/null +++ b/icons/miraheze.svg @@ -0,0 +1 @@ +Miraheze \ No newline at end of file diff --git a/icons/misskey.svg b/icons/misskey.svg new file mode 100644 index 000000000000..d94b5ccd0a58 --- /dev/null +++ b/icons/misskey.svg @@ -0,0 +1 @@ +Misskey \ No newline at end of file diff --git a/icons/mlflow.svg b/icons/mlflow.svg new file mode 100644 index 000000000000..b44c2eea9a2e --- /dev/null +++ b/icons/mlflow.svg @@ -0,0 +1 @@ +MLflow \ No newline at end of file diff --git a/icons/mobx.svg b/icons/mobx.svg index ddb98a80da9c..28ba33fc9575 100644 --- a/icons/mobx.svg +++ b/icons/mobx.svg @@ -1 +1 @@ -MobX +MobX \ No newline at end of file diff --git a/icons/modin.svg b/icons/modin.svg new file mode 100644 index 000000000000..7e723c27610c --- /dev/null +++ b/icons/modin.svg @@ -0,0 +1 @@ +Modin \ No newline at end of file diff --git a/icons/modrinth.svg b/icons/modrinth.svg new file mode 100644 index 000000000000..6d7bf5d76f27 --- /dev/null +++ b/icons/modrinth.svg @@ -0,0 +1 @@ +Modrinth \ No newline at end of file diff --git a/icons/mongoose.svg b/icons/mongoose.svg new file mode 100644 index 000000000000..5b6862f7843f --- /dev/null +++ b/icons/mongoose.svg @@ -0,0 +1 @@ +Mongoose \ No newline at end of file diff --git a/icons/mongoosedotws.svg b/icons/mongoosedotws.svg new file mode 100644 index 000000000000..5d7c5060c75d --- /dev/null +++ b/icons/mongoosedotws.svg @@ -0,0 +1 @@ +Mongoose \ No newline at end of file diff --git a/icons/monica.svg b/icons/monica.svg new file mode 100644 index 000000000000..035bdb388cdb --- /dev/null +++ b/icons/monica.svg @@ -0,0 +1 @@ +Monica \ No newline at end of file diff --git a/icons/monkeytype.svg b/icons/monkeytype.svg new file mode 100644 index 000000000000..0db5b09bfd04 --- /dev/null +++ b/icons/monkeytype.svg @@ -0,0 +1 @@ +Monkeytype \ No newline at end of file diff --git a/icons/monogame.svg b/icons/monogame.svg new file mode 100644 index 000000000000..412ba852802b --- /dev/null +++ b/icons/monogame.svg @@ -0,0 +1 @@ +MonoGame \ No newline at end of file diff --git a/icons/moonrepo.svg b/icons/moonrepo.svg new file mode 100644 index 000000000000..5779e0bc8101 --- /dev/null +++ b/icons/moonrepo.svg @@ -0,0 +1 @@ +Moonrepo \ No newline at end of file diff --git a/icons/mqtt.svg b/icons/mqtt.svg new file mode 100644 index 000000000000..7180c4d5c884 --- /dev/null +++ b/icons/mqtt.svg @@ -0,0 +1 @@ +MQTT \ No newline at end of file diff --git a/icons/msibusiness.svg b/icons/msibusiness.svg new file mode 100644 index 000000000000..710d3d9b25d0 --- /dev/null +++ b/icons/msibusiness.svg @@ -0,0 +1 @@ +MSI Business \ No newline at end of file diff --git a/icons/mubi.svg b/icons/mubi.svg new file mode 100644 index 000000000000..9bd2a36ace25 --- /dev/null +++ b/icons/mubi.svg @@ -0,0 +1 @@ +MUBI \ No newline at end of file diff --git a/icons/multisim.svg b/icons/multisim.svg new file mode 100644 index 000000000000..80b20d56e543 --- /dev/null +++ b/icons/multisim.svg @@ -0,0 +1 @@ +Multisim \ No newline at end of file diff --git a/icons/naver.svg b/icons/naver.svg index 80e760a74e1a..611ad4b647c9 100644 --- a/icons/naver.svg +++ b/icons/naver.svg @@ -1 +1 @@ -Naver \ No newline at end of file +Naver \ No newline at end of file diff --git a/icons/nbc.svg b/icons/nbc.svg new file mode 100644 index 000000000000..7b829e375f9e --- /dev/null +++ b/icons/nbc.svg @@ -0,0 +1 @@ +NBC \ No newline at end of file diff --git a/icons/neo4j.svg b/icons/neo4j.svg index 6349ca49e407..40c87f1fdac1 100644 --- a/icons/neo4j.svg +++ b/icons/neo4j.svg @@ -1 +1 @@ -Neo4j \ No newline at end of file +Neo4j \ No newline at end of file diff --git a/icons/netlify.svg b/icons/netlify.svg index cf0cc4134c0a..085838e3a812 100644 --- a/icons/netlify.svg +++ b/icons/netlify.svg @@ -1 +1 @@ -Netlify \ No newline at end of file +Netlify \ No newline at end of file diff --git a/icons/nette.svg b/icons/nette.svg index 768955c6f170..304311cc2b5c 100644 --- a/icons/nette.svg +++ b/icons/nette.svg @@ -1 +1 @@ -Nette +Nette \ No newline at end of file diff --git a/icons/neutralinojs.svg b/icons/neutralinojs.svg new file mode 100644 index 000000000000..3b0c52ecb97a --- /dev/null +++ b/icons/neutralinojs.svg @@ -0,0 +1 @@ +Neutralinojs \ No newline at end of file diff --git a/icons/newegg.svg b/icons/newegg.svg new file mode 100644 index 000000000000..a73ecabe5b5d --- /dev/null +++ b/icons/newegg.svg @@ -0,0 +1 @@ +Newegg \ No newline at end of file diff --git a/icons/newrelic.svg b/icons/newrelic.svg index bef8f7b80c8d..d4db239b5734 100644 --- a/icons/newrelic.svg +++ b/icons/newrelic.svg @@ -1 +1 @@ -New Relic \ No newline at end of file +New Relic \ No newline at end of file diff --git a/icons/nextbilliondotai.svg b/icons/nextbilliondotai.svg new file mode 100644 index 000000000000..6b99e9aab73d --- /dev/null +++ b/icons/nextbilliondotai.svg @@ -0,0 +1 @@ +NextBillion.ai \ No newline at end of file diff --git a/icons/nextra.svg b/icons/nextra.svg new file mode 100644 index 000000000000..53da3fc334b6 --- /dev/null +++ b/icons/nextra.svg @@ -0,0 +1 @@ +Nextra \ No newline at end of file diff --git a/icons/nginxproxymanager.svg b/icons/nginxproxymanager.svg new file mode 100644 index 000000000000..cd94f3b5def7 --- /dev/null +++ b/icons/nginxproxymanager.svg @@ -0,0 +1 @@ +Nginx Proxy Manager \ No newline at end of file diff --git a/icons/ngrx.svg b/icons/ngrx.svg new file mode 100644 index 000000000000..347236b082e7 --- /dev/null +++ b/icons/ngrx.svg @@ -0,0 +1 @@ +NgRx \ No newline at end of file diff --git a/icons/nikon.svg b/icons/nikon.svg new file mode 100644 index 000000000000..12d8bbcaed18 --- /dev/null +++ b/icons/nikon.svg @@ -0,0 +1 @@ +Nikon \ No newline at end of file diff --git a/icons/nokia.svg b/icons/nokia.svg index 6447dcb088b1..a4a21137e008 100644 --- a/icons/nokia.svg +++ b/icons/nokia.svg @@ -1 +1 @@ -Nokia \ No newline at end of file +Nokia \ No newline at end of file diff --git a/icons/norco.svg b/icons/norco.svg index 886afed2184f..e1f0949f31ef 100644 --- a/icons/norco.svg +++ b/icons/norco.svg @@ -1 +1 @@ -Norco +Norco \ No newline at end of file diff --git a/icons/normalizedotcss.svg b/icons/normalizedotcss.svg new file mode 100644 index 000000000000..a6010318b33c --- /dev/null +++ b/icons/normalizedotcss.svg @@ -0,0 +1 @@ +Normalize.css \ No newline at end of file diff --git a/icons/novu.svg b/icons/novu.svg new file mode 100644 index 000000000000..0ffa9241f49f --- /dev/null +++ b/icons/novu.svg @@ -0,0 +1 @@ +Novu \ No newline at end of file diff --git a/icons/nunjucks.svg b/icons/nunjucks.svg new file mode 100644 index 000000000000..6374253f421a --- /dev/null +++ b/icons/nunjucks.svg @@ -0,0 +1 @@ +Nunjucks \ No newline at end of file diff --git a/icons/nuxtdotjs.svg b/icons/nuxtdotjs.svg index cdedb71ea93a..6b39e8faab62 100644 --- a/icons/nuxtdotjs.svg +++ b/icons/nuxtdotjs.svg @@ -1 +1 @@ -Nuxt.js \ No newline at end of file +Nuxt.js \ No newline at end of file diff --git a/icons/nxp.svg b/icons/nxp.svg new file mode 100644 index 000000000000..3f558cbbbff4 --- /dev/null +++ b/icons/nxp.svg @@ -0,0 +1 @@ +NXP \ No newline at end of file diff --git a/icons/obsidian.svg b/icons/obsidian.svg index 0bd9467c49a7..fc35287f3ab7 100644 --- a/icons/obsidian.svg +++ b/icons/obsidian.svg @@ -1 +1 @@ -Obsidian \ No newline at end of file +Obsidian \ No newline at end of file diff --git a/icons/octoprint.svg b/icons/octoprint.svg new file mode 100644 index 000000000000..5098f6b21146 --- /dev/null +++ b/icons/octoprint.svg @@ -0,0 +1 @@ +OctoPrint \ No newline at end of file diff --git a/icons/onlyfans.svg b/icons/onlyfans.svg index a610c5d0452f..aa6aaa657c63 100644 --- a/icons/onlyfans.svg +++ b/icons/onlyfans.svg @@ -1 +1 @@ -OnlyFans \ No newline at end of file +OnlyFans \ No newline at end of file diff --git a/icons/openproject.svg b/icons/openproject.svg new file mode 100644 index 000000000000..4e7804e060e6 --- /dev/null +++ b/icons/openproject.svg @@ -0,0 +1 @@ +OpenProject \ No newline at end of file diff --git a/icons/openscad.svg b/icons/openscad.svg new file mode 100644 index 000000000000..02451d887458 --- /dev/null +++ b/icons/openscad.svg @@ -0,0 +1 @@ +OpenSCAD \ No newline at end of file diff --git a/icons/opensearch.svg b/icons/opensearch.svg index 02063bbd5eb4..a00e87e2ddc4 100644 --- a/icons/opensearch.svg +++ b/icons/opensearch.svg @@ -1 +1 @@ -OpenSearch +OpenSearch \ No newline at end of file diff --git a/icons/opensourcehardware.svg b/icons/opensourcehardware.svg new file mode 100644 index 000000000000..f1c3048981ca --- /dev/null +++ b/icons/opensourcehardware.svg @@ -0,0 +1 @@ +Open Source Hardware \ No newline at end of file diff --git a/icons/openverse.svg b/icons/openverse.svg new file mode 100644 index 000000000000..6d98bfda4e0d --- /dev/null +++ b/icons/openverse.svg @@ -0,0 +1 @@ +Openverse \ No newline at end of file diff --git a/icons/openzeppelin.svg b/icons/openzeppelin.svg new file mode 100644 index 000000000000..d5e94dd09324 --- /dev/null +++ b/icons/openzeppelin.svg @@ -0,0 +1 @@ +OpenZeppelin \ No newline at end of file diff --git a/icons/openzfs.svg b/icons/openzfs.svg index f690a63de184..1d398bb0e5b6 100644 --- a/icons/openzfs.svg +++ b/icons/openzfs.svg @@ -1 +1 @@ -OpenZFS +OpenZFS \ No newline at end of file diff --git a/icons/operagx.svg b/icons/operagx.svg new file mode 100644 index 000000000000..b560822cb9eb --- /dev/null +++ b/icons/operagx.svg @@ -0,0 +1 @@ +Opera GX \ No newline at end of file diff --git a/icons/osgeo.svg b/icons/osgeo.svg new file mode 100644 index 000000000000..3eace4b6611a --- /dev/null +++ b/icons/osgeo.svg @@ -0,0 +1 @@ +OSGeo \ No newline at end of file diff --git a/icons/otto.svg b/icons/otto.svg index d3fd4d0c3af8..1e6dc74522b1 100644 --- a/icons/otto.svg +++ b/icons/otto.svg @@ -1 +1 @@ -Otto +Otto \ No newline at end of file diff --git a/icons/owncloud.svg b/icons/owncloud.svg new file mode 100644 index 000000000000..b193ccd06ee2 --- /dev/null +++ b/icons/owncloud.svg @@ -0,0 +1 @@ +ownCloud \ No newline at end of file diff --git a/icons/paddlepaddle.svg b/icons/paddlepaddle.svg new file mode 100644 index 000000000000..f73ff8457a62 --- /dev/null +++ b/icons/paddlepaddle.svg @@ -0,0 +1 @@ +PaddlePaddle \ No newline at end of file diff --git a/icons/paloaltonetworks.svg b/icons/paloaltonetworks.svg new file mode 100644 index 000000000000..303f6de9ba2c --- /dev/null +++ b/icons/paloaltonetworks.svg @@ -0,0 +1 @@ +Palo Alto Networks \ No newline at end of file diff --git a/icons/paperspace.svg b/icons/paperspace.svg index 6ca896923f8e..bf61fc6b7872 100644 --- a/icons/paperspace.svg +++ b/icons/paperspace.svg @@ -1 +1 @@ -Paperspace +Paperspace \ No newline at end of file diff --git a/icons/paychex.svg b/icons/paychex.svg new file mode 100644 index 000000000000..4aadd84934d9 --- /dev/null +++ b/icons/paychex.svg @@ -0,0 +1 @@ +Paychex \ No newline at end of file diff --git a/icons/payloadcms.svg b/icons/payloadcms.svg new file mode 100644 index 000000000000..cda4195fda3c --- /dev/null +++ b/icons/payloadcms.svg @@ -0,0 +1 @@ +Payload CMS \ No newline at end of file diff --git a/icons/pearson.svg b/icons/pearson.svg new file mode 100644 index 000000000000..8eb83a8f249d --- /dev/null +++ b/icons/pearson.svg @@ -0,0 +1 @@ +Pearson \ No newline at end of file diff --git a/icons/penpot.svg b/icons/penpot.svg new file mode 100644 index 000000000000..a976fb049ab3 --- /dev/null +++ b/icons/penpot.svg @@ -0,0 +1 @@ +Penpot \ No newline at end of file diff --git a/icons/persistent.svg b/icons/persistent.svg new file mode 100644 index 000000000000..ccd30918443d --- /dev/null +++ b/icons/persistent.svg @@ -0,0 +1 @@ +Persistent \ No newline at end of file diff --git a/icons/phoenixframework.svg b/icons/phoenixframework.svg new file mode 100644 index 000000000000..4f9cfe82bfcd --- /dev/null +++ b/icons/phoenixframework.svg @@ -0,0 +1 @@ +Phoenix Framework \ No newline at end of file diff --git a/icons/picardsurgeles.svg b/icons/picardsurgeles.svg index 9166edb80eef..7e63d6234474 100644 --- a/icons/picardsurgeles.svg +++ b/icons/picardsurgeles.svg @@ -1 +1 @@ -Picard Surgelés +Picard Surgelés \ No newline at end of file diff --git a/icons/planetscale.svg b/icons/planetscale.svg new file mode 100644 index 000000000000..284eeb740b79 --- /dev/null +++ b/icons/planetscale.svg @@ -0,0 +1 @@ +PlanetScale \ No newline at end of file diff --git a/icons/playwright.svg b/icons/playwright.svg new file mode 100644 index 000000000000..3d45a76393ec --- /dev/null +++ b/icons/playwright.svg @@ -0,0 +1 @@ +Playwright \ No newline at end of file diff --git a/icons/plex.svg b/icons/plex.svg index 8e74c5e71dae..87379e14fd1a 100644 --- a/icons/plex.svg +++ b/icons/plex.svg @@ -1 +1 @@ -Plex \ No newline at end of file +Plex \ No newline at end of file diff --git a/icons/pocketbase.svg b/icons/pocketbase.svg new file mode 100644 index 000000000000..e22bbe2ab389 --- /dev/null +++ b/icons/pocketbase.svg @@ -0,0 +1 @@ +PocketBase \ No newline at end of file diff --git a/icons/podcastindex.svg b/icons/podcastindex.svg new file mode 100644 index 000000000000..f516bcdafbd5 --- /dev/null +++ b/icons/podcastindex.svg @@ -0,0 +1 @@ +Podcast Index \ No newline at end of file diff --git a/icons/poe.svg b/icons/poe.svg new file mode 100644 index 000000000000..775b964438a0 --- /dev/null +++ b/icons/poe.svg @@ -0,0 +1 @@ +Poe \ No newline at end of file diff --git a/icons/poetry.svg b/icons/poetry.svg index a158c6d28cc1..3289fa8ec94a 100644 --- a/icons/poetry.svg +++ b/icons/poetry.svg @@ -1 +1 @@ -Poetry +Poetry \ No newline at end of file diff --git a/icons/polars.svg b/icons/polars.svg new file mode 100644 index 000000000000..033df706b81f --- /dev/null +++ b/icons/polars.svg @@ -0,0 +1 @@ +Polars \ No newline at end of file diff --git a/icons/polkadot.svg b/icons/polkadot.svg index d33c09e08c12..05f399c1f2c5 100644 --- a/icons/polkadot.svg +++ b/icons/polkadot.svg @@ -1 +1 @@ -Polkadot \ No newline at end of file +Polkadot \ No newline at end of file diff --git a/icons/polywork.svg b/icons/polywork.svg index b17e6f9356a2..a28f39e75be3 100644 --- a/icons/polywork.svg +++ b/icons/polywork.svg @@ -1 +1 @@ -Polywork +Polywork \ No newline at end of file diff --git a/icons/posthog.svg b/icons/posthog.svg new file mode 100644 index 000000000000..70d8cb7782f1 --- /dev/null +++ b/icons/posthog.svg @@ -0,0 +1 @@ +PostHog \ No newline at end of file diff --git a/icons/powerapps.svg b/icons/powerapps.svg index 2a2bc8af5139..738b8b0a7579 100644 --- a/icons/powerapps.svg +++ b/icons/powerapps.svg @@ -1 +1 @@ -Power Apps +Power Apps \ No newline at end of file diff --git a/icons/powerautomate.svg b/icons/powerautomate.svg index 122bb02f1c72..a456e16d86c9 100644 --- a/icons/powerautomate.svg +++ b/icons/powerautomate.svg @@ -1 +1 @@ -Power Automate +Power Automate \ No newline at end of file diff --git a/icons/powerbi.svg b/icons/powerbi.svg index 6379bf671f8b..144866289147 100644 --- a/icons/powerbi.svg +++ b/icons/powerbi.svg @@ -1 +1 @@ -Power BI \ No newline at end of file +Power BI \ No newline at end of file diff --git a/icons/powerfx.svg b/icons/powerfx.svg new file mode 100644 index 000000000000..b3eacebaab5c --- /dev/null +++ b/icons/powerfx.svg @@ -0,0 +1 @@ +Power Fx \ No newline at end of file diff --git a/icons/powerpages.svg b/icons/powerpages.svg new file mode 100644 index 000000000000..7b1543b412a0 --- /dev/null +++ b/icons/powerpages.svg @@ -0,0 +1 @@ +Power Pages \ No newline at end of file diff --git a/icons/powervirtualagents.svg b/icons/powervirtualagents.svg index 5533c66335df..68b2f0dfdc3e 100644 --- a/icons/powervirtualagents.svg +++ b/icons/powervirtualagents.svg @@ -1 +1 @@ -Power Virtual Agents +Power Virtual Agents \ No newline at end of file diff --git a/icons/prefect.svg b/icons/prefect.svg new file mode 100644 index 000000000000..f0182730f1ac --- /dev/null +++ b/icons/prefect.svg @@ -0,0 +1 @@ +Prefect \ No newline at end of file diff --git a/icons/pretzel.svg b/icons/pretzel.svg new file mode 100644 index 000000000000..00a0ad71b584 --- /dev/null +++ b/icons/pretzel.svg @@ -0,0 +1 @@ +Pretzel \ No newline at end of file diff --git a/icons/prevention.svg b/icons/prevention.svg new file mode 100644 index 000000000000..59e1b5c4503b --- /dev/null +++ b/icons/prevention.svg @@ -0,0 +1 @@ +Prevention \ No newline at end of file diff --git a/icons/printables.svg b/icons/printables.svg new file mode 100644 index 000000000000..7eccf2c9594e --- /dev/null +++ b/icons/printables.svg @@ -0,0 +1 @@ +Printables \ No newline at end of file diff --git a/icons/proton.svg b/icons/proton.svg new file mode 100644 index 000000000000..ba1580956a96 --- /dev/null +++ b/icons/proton.svg @@ -0,0 +1 @@ +Proton \ No newline at end of file diff --git a/icons/protoncalendar.svg b/icons/protoncalendar.svg new file mode 100644 index 000000000000..e43651e4957a --- /dev/null +++ b/icons/protoncalendar.svg @@ -0,0 +1 @@ +Proton Calendar \ No newline at end of file diff --git a/icons/protondrive.svg b/icons/protondrive.svg new file mode 100644 index 000000000000..2daa7f36251a --- /dev/null +++ b/icons/protondrive.svg @@ -0,0 +1 @@ +Proton Drive \ No newline at end of file diff --git a/icons/protonmail.svg b/icons/protonmail.svg index 6df8b1048f6b..05a066f07ce0 100644 --- a/icons/protonmail.svg +++ b/icons/protonmail.svg @@ -1 +1 @@ -ProtonMail \ No newline at end of file +ProtonMail \ No newline at end of file diff --git a/icons/protonvpn.svg b/icons/protonvpn.svg index e257b015a9c2..6199a004352f 100644 --- a/icons/protonvpn.svg +++ b/icons/protonvpn.svg @@ -1 +1 @@ -ProtonVPN \ No newline at end of file +ProtonVPN \ No newline at end of file diff --git a/icons/pterodactyl.svg b/icons/pterodactyl.svg new file mode 100644 index 000000000000..f364db00c346 --- /dev/null +++ b/icons/pterodactyl.svg @@ -0,0 +1 @@ +Pterodactyl \ No newline at end of file diff --git a/icons/pwa.svg b/icons/pwa.svg index 181cba250a78..f6fb3ab7a111 100644 --- a/icons/pwa.svg +++ b/icons/pwa.svg @@ -1 +1 @@ -PWA +PWA \ No newline at end of file diff --git a/icons/pydantic.svg b/icons/pydantic.svg new file mode 100644 index 000000000000..d1330b4fa63b --- /dev/null +++ b/icons/pydantic.svg @@ -0,0 +1 @@ +Pydantic \ No newline at end of file diff --git a/icons/pyg.svg b/icons/pyg.svg new file mode 100644 index 000000000000..7371631aa2fb --- /dev/null +++ b/icons/pyg.svg @@ -0,0 +1 @@ +PyG \ No newline at end of file diff --git a/icons/pyscaffold.svg b/icons/pyscaffold.svg index b68d01a08226..198ced0f45bf 100644 --- a/icons/pyscaffold.svg +++ b/icons/pyscaffold.svg @@ -1 +1 @@ -PyScaffold +PyScaffold \ No newline at end of file diff --git a/icons/pysyft.svg b/icons/pysyft.svg new file mode 100644 index 000000000000..9e95890e0877 --- /dev/null +++ b/icons/pysyft.svg @@ -0,0 +1 @@ +PySyft \ No newline at end of file diff --git a/icons/pythonanywhere.svg b/icons/pythonanywhere.svg new file mode 100644 index 000000000000..045d29d254f1 --- /dev/null +++ b/icons/pythonanywhere.svg @@ -0,0 +1 @@ +PythonAnywhere \ No newline at end of file diff --git a/icons/pytorchlightning.svg b/icons/pytorchlightning.svg deleted file mode 100644 index 9c0f2a2348f1..000000000000 --- a/icons/pytorchlightning.svg +++ /dev/null @@ -1 +0,0 @@ -PyTorch Lightning \ No newline at end of file diff --git a/icons/qlik.svg b/icons/qlik.svg new file mode 100644 index 000000000000..f29bff3d6732 --- /dev/null +++ b/icons/qlik.svg @@ -0,0 +1 @@ +Qlik \ No newline at end of file diff --git a/icons/qmk.svg b/icons/qmk.svg new file mode 100644 index 000000000000..7b50a765b114 --- /dev/null +++ b/icons/qmk.svg @@ -0,0 +1 @@ +QMK \ No newline at end of file diff --git a/icons/qwant.svg b/icons/qwant.svg new file mode 100644 index 000000000000..1a6be2f2981d --- /dev/null +++ b/icons/qwant.svg @@ -0,0 +1 @@ +Qwant \ No newline at end of file diff --git a/icons/radixui.svg b/icons/radixui.svg new file mode 100644 index 000000000000..4a005f3ef13e --- /dev/null +++ b/icons/radixui.svg @@ -0,0 +1 @@ +Radix UI \ No newline at end of file diff --git a/icons/rarible.svg b/icons/rarible.svg index 04accb8235f9..207525024994 100644 --- a/icons/rarible.svg +++ b/icons/rarible.svg @@ -1 +1 @@ -Rarible +Rarible \ No newline at end of file diff --git a/icons/rasa.svg b/icons/rasa.svg new file mode 100644 index 000000000000..7d7ca3263fbb --- /dev/null +++ b/icons/rasa.svg @@ -0,0 +1 @@ +Rasa \ No newline at end of file diff --git a/icons/ravelry.svg b/icons/ravelry.svg new file mode 100644 index 000000000000..b1eeb54f37e1 --- /dev/null +++ b/icons/ravelry.svg @@ -0,0 +1 @@ +Ravelry \ No newline at end of file diff --git a/icons/reacthookform.svg b/icons/reacthookform.svg new file mode 100644 index 000000000000..c2866fe34ff4 --- /dev/null +++ b/icons/reacthookform.svg @@ -0,0 +1 @@ +React Hook Form \ No newline at end of file diff --git a/icons/reactquery.svg b/icons/reactquery.svg index 3ae2e47c5db2..b500b4f70421 100644 --- a/icons/reactquery.svg +++ b/icons/reactquery.svg @@ -1 +1 @@ -React Query +React Query \ No newline at end of file diff --git a/icons/reacttable.svg b/icons/reacttable.svg index e071a1379ded..0525afa49352 100644 --- a/icons/reacttable.svg +++ b/icons/reacttable.svg @@ -1 +1 @@ -React Table +React Table \ No newline at end of file diff --git a/icons/readdotcv.svg b/icons/readdotcv.svg new file mode 100644 index 000000000000..cc470d41335d --- /dev/null +++ b/icons/readdotcv.svg @@ -0,0 +1 @@ +read.cv \ No newline at end of file diff --git a/icons/readme.svg b/icons/readme.svg new file mode 100644 index 000000000000..fbd8f9d1e7f1 --- /dev/null +++ b/icons/readme.svg @@ -0,0 +1 @@ +ReadMe \ No newline at end of file diff --git a/icons/recoil.svg b/icons/recoil.svg new file mode 100644 index 000000000000..b638a4abb142 --- /dev/null +++ b/icons/recoil.svg @@ -0,0 +1 @@ +Recoil \ No newline at end of file diff --git a/icons/red.svg b/icons/red.svg new file mode 100644 index 000000000000..c916a81f0293 --- /dev/null +++ b/icons/red.svg @@ -0,0 +1 @@ +Red \ No newline at end of file diff --git a/icons/redox.svg b/icons/redox.svg new file mode 100644 index 000000000000..b4790ee5d46d --- /dev/null +++ b/icons/redox.svg @@ -0,0 +1 @@ +Redox \ No newline at end of file diff --git a/icons/relay.svg b/icons/relay.svg new file mode 100644 index 000000000000..d188cff4512d --- /dev/null +++ b/icons/relay.svg @@ -0,0 +1 @@ +Relay \ No newline at end of file diff --git a/icons/remark.svg b/icons/remark.svg new file mode 100644 index 000000000000..07e5451f86dd --- /dev/null +++ b/icons/remark.svg @@ -0,0 +1 @@ +remark \ No newline at end of file diff --git a/icons/render.svg b/icons/render.svg new file mode 100644 index 000000000000..90e4e87eb5f3 --- /dev/null +++ b/icons/render.svg @@ -0,0 +1 @@ +Render \ No newline at end of file diff --git a/icons/replit.svg b/icons/replit.svg index 6baba8e4179b..21b7620b187f 100644 --- a/icons/replit.svg +++ b/icons/replit.svg @@ -1 +1 @@ -Replit \ No newline at end of file +Replit \ No newline at end of file diff --git a/icons/republicofgamers.svg b/icons/republicofgamers.svg index 828ca24558f0..3786f58dc8e1 100644 --- a/icons/republicofgamers.svg +++ b/icons/republicofgamers.svg @@ -1 +1 @@ -Republic of Gamers +Republic of Gamers \ No newline at end of file diff --git a/icons/resharper.svg b/icons/resharper.svg new file mode 100644 index 000000000000..d3ba5cfc3ae8 --- /dev/null +++ b/icons/resharper.svg @@ -0,0 +1 @@ +ReSharper \ No newline at end of file diff --git a/icons/revanced.svg b/icons/revanced.svg new file mode 100644 index 000000000000..f56792103412 --- /dev/null +++ b/icons/revanced.svg @@ -0,0 +1 @@ +ReVanced \ No newline at end of file diff --git a/icons/revoltdotchat.svg b/icons/revoltdotchat.svg new file mode 100644 index 000000000000..e3e5010f014e --- /dev/null +++ b/icons/revoltdotchat.svg @@ -0,0 +1 @@ +Revolt.chat \ No newline at end of file diff --git a/icons/riscv.svg b/icons/riscv.svg new file mode 100644 index 000000000000..0e2ba3c603e9 --- /dev/null +++ b/icons/riscv.svg @@ -0,0 +1 @@ +RISC-V \ No newline at end of file diff --git a/icons/roadmapdotsh.svg b/icons/roadmapdotsh.svg new file mode 100644 index 000000000000..647f7bc568cc --- /dev/null +++ b/icons/roadmapdotsh.svg @@ -0,0 +1 @@ +roadmap.sh \ No newline at end of file diff --git a/icons/roblox.svg b/icons/roblox.svg index 0a51a5c6b9ed..01b47ed0705d 100644 --- a/icons/roblox.svg +++ b/icons/roblox.svg @@ -1 +1 @@ -Roblox \ No newline at end of file +Roblox \ No newline at end of file diff --git a/icons/robloxstudio.svg b/icons/robloxstudio.svg new file mode 100644 index 000000000000..d6a42dc52642 --- /dev/null +++ b/icons/robloxstudio.svg @@ -0,0 +1 @@ +Roblox Studio \ No newline at end of file diff --git a/icons/rotaryinternational.svg b/icons/rotaryinternational.svg index b3e1afab66d8..d94b5b32e56d 100644 --- a/icons/rotaryinternational.svg +++ b/icons/rotaryinternational.svg @@ -1 +1 @@ -Rotary International \ No newline at end of file +Rotary International \ No newline at end of file diff --git a/icons/rsocket.svg b/icons/rsocket.svg new file mode 100644 index 000000000000..eed897e3d4a3 --- /dev/null +++ b/icons/rsocket.svg @@ -0,0 +1 @@ +RSocket \ No newline at end of file diff --git a/icons/ruff.svg b/icons/ruff.svg new file mode 100644 index 000000000000..9161e651b9de --- /dev/null +++ b/icons/ruff.svg @@ -0,0 +1 @@ +Ruff \ No newline at end of file diff --git a/icons/rundeck.svg b/icons/rundeck.svg new file mode 100644 index 000000000000..c294c2410e25 --- /dev/null +++ b/icons/rundeck.svg @@ -0,0 +1 @@ +Rundeck \ No newline at end of file diff --git a/icons/sage.svg b/icons/sage.svg new file mode 100644 index 000000000000..589393971cc8 --- /dev/null +++ b/icons/sage.svg @@ -0,0 +1 @@ +Sage \ No newline at end of file diff --git a/icons/sanity.svg b/icons/sanity.svg new file mode 100644 index 000000000000..cae43813a592 --- /dev/null +++ b/icons/sanity.svg @@ -0,0 +1 @@ +Sanity \ No newline at end of file diff --git a/icons/saucelabs.svg b/icons/saucelabs.svg index a0bc31c4b608..fe4dc02267a0 100644 --- a/icons/saucelabs.svg +++ b/icons/saucelabs.svg @@ -1 +1 @@ -Sauce Labs \ No newline at end of file +Sauce Labs \ No newline at end of file diff --git a/icons/scribd.svg b/icons/scribd.svg index a3a48695304a..2aff4097346c 100644 --- a/icons/scribd.svg +++ b/icons/scribd.svg @@ -1 +1 @@ -Scribd \ No newline at end of file +Scribd \ No newline at end of file diff --git a/icons/securityscorecard.svg b/icons/securityscorecard.svg new file mode 100644 index 000000000000..ea68389416dc --- /dev/null +++ b/icons/securityscorecard.svg @@ -0,0 +1 @@ +SecurityScorecard \ No newline at end of file diff --git a/icons/semanticscholar.svg b/icons/semanticscholar.svg new file mode 100644 index 000000000000..c4a43904c946 --- /dev/null +++ b/icons/semanticscholar.svg @@ -0,0 +1 @@ +Semantic Scholar \ No newline at end of file diff --git a/icons/semrush.svg b/icons/semrush.svg new file mode 100644 index 000000000000..8aabf0b915df --- /dev/null +++ b/icons/semrush.svg @@ -0,0 +1 @@ +Semrush \ No newline at end of file diff --git a/icons/sendinblue.svg b/icons/sendinblue.svg new file mode 100644 index 000000000000..2bb2c4598a85 --- /dev/null +++ b/icons/sendinblue.svg @@ -0,0 +1 @@ +Sendinblue \ No newline at end of file diff --git a/icons/sequelize.svg b/icons/sequelize.svg index f8599b6c50f0..c483402b502f 100644 --- a/icons/sequelize.svg +++ b/icons/sequelize.svg @@ -1 +1 @@ -Sequelize +Sequelize \ No newline at end of file diff --git a/icons/sessionize.svg b/icons/sessionize.svg new file mode 100644 index 000000000000..e5734998ba39 --- /dev/null +++ b/icons/sessionize.svg @@ -0,0 +1 @@ +Sessionize \ No newline at end of file diff --git a/icons/setapp.svg b/icons/setapp.svg new file mode 100644 index 000000000000..598cbb8138be --- /dev/null +++ b/icons/setapp.svg @@ -0,0 +1 @@ +Setapp \ No newline at end of file diff --git a/icons/sharex.svg b/icons/sharex.svg new file mode 100644 index 000000000000..b2407ae9393f --- /dev/null +++ b/icons/sharex.svg @@ -0,0 +1 @@ +ShareX \ No newline at end of file diff --git a/icons/shopee.svg b/icons/shopee.svg new file mode 100644 index 000000000000..1e4393f527d7 --- /dev/null +++ b/icons/shopee.svg @@ -0,0 +1 @@ +Shopee \ No newline at end of file diff --git a/icons/similarweb.svg b/icons/similarweb.svg new file mode 100644 index 000000000000..87565e6bbac5 --- /dev/null +++ b/icons/similarweb.svg @@ -0,0 +1 @@ +Similarweb \ No newline at end of file diff --git a/icons/sitecore.svg b/icons/sitecore.svg new file mode 100644 index 000000000000..cadce5180599 --- /dev/null +++ b/icons/sitecore.svg @@ -0,0 +1 @@ +Sitecore \ No newline at end of file diff --git a/icons/skyrock.svg b/icons/skyrock.svg new file mode 100644 index 000000000000..e6e404233872 --- /dev/null +++ b/icons/skyrock.svg @@ -0,0 +1 @@ +Skyrock \ No newline at end of file diff --git a/icons/sncf.svg b/icons/sncf.svg new file mode 100644 index 000000000000..4b0db2e2fe24 --- /dev/null +++ b/icons/sncf.svg @@ -0,0 +1 @@ +SNCF \ No newline at end of file diff --git a/icons/socialblade.svg b/icons/socialblade.svg index 310b850712ad..a9f87c048413 100644 --- a/icons/socialblade.svg +++ b/icons/socialblade.svg @@ -1 +1 @@ -Social Blade +Social Blade \ No newline at end of file diff --git a/icons/solid.svg b/icons/solid.svg index c2737c48b06f..73432258b7d0 100644 --- a/icons/solid.svg +++ b/icons/solid.svg @@ -1 +1 @@ -Solid +Solid \ No newline at end of file diff --git a/icons/sonar.svg b/icons/sonar.svg new file mode 100644 index 000000000000..935cf4bab2ea --- /dev/null +++ b/icons/sonar.svg @@ -0,0 +1 @@ +Sonar \ No newline at end of file diff --git a/icons/sourcegraph.svg b/icons/sourcegraph.svg index 71bb3b6934de..595236856048 100644 --- a/icons/sourcegraph.svg +++ b/icons/sourcegraph.svg @@ -1 +1 @@ -Sourcegraph \ No newline at end of file +Sourcegraph \ No newline at end of file diff --git a/icons/sourcehut.svg b/icons/sourcehut.svg new file mode 100644 index 000000000000..528bddc2c925 --- /dev/null +++ b/icons/sourcehut.svg @@ -0,0 +1 @@ +SourceHut \ No newline at end of file diff --git a/icons/spacy.svg b/icons/spacy.svg index 667d23dcc9c1..974ae049b4b1 100644 --- a/icons/spacy.svg +++ b/icons/spacy.svg @@ -1 +1 @@ -spaCy +spaCy \ No newline at end of file diff --git a/icons/speedypage.svg b/icons/speedypage.svg new file mode 100644 index 000000000000..68332a949b0c --- /dev/null +++ b/icons/speedypage.svg @@ -0,0 +1 @@ +SpeedyPage \ No newline at end of file diff --git a/icons/spoj.svg b/icons/spoj.svg new file mode 100644 index 000000000000..2a6497874571 --- /dev/null +++ b/icons/spoj.svg @@ -0,0 +1 @@ +Sphere Online Judge \ No newline at end of file diff --git a/icons/spond.svg b/icons/spond.svg index 2f1459749ab8..8a713741feff 100644 --- a/icons/spond.svg +++ b/icons/spond.svg @@ -1 +1 @@ -Spond +Spond \ No newline at end of file diff --git a/icons/sst.svg b/icons/sst.svg new file mode 100644 index 000000000000..e9c3f4f1ac0e --- /dev/null +++ b/icons/sst.svg @@ -0,0 +1 @@ +SST \ No newline at end of file diff --git a/icons/stackblitz.svg b/icons/stackblitz.svg new file mode 100644 index 000000000000..d3feff8441eb --- /dev/null +++ b/icons/stackblitz.svg @@ -0,0 +1 @@ +StackBlitz \ No newline at end of file diff --git a/icons/stackhawk.svg b/icons/stackhawk.svg new file mode 100644 index 000000000000..3ceaefcdaf8f --- /dev/null +++ b/icons/stackhawk.svg @@ -0,0 +1 @@ +StackHawk \ No newline at end of file diff --git a/icons/standardjs.svg b/icons/standardjs.svg new file mode 100644 index 000000000000..48e3c01d4b54 --- /dev/null +++ b/icons/standardjs.svg @@ -0,0 +1 @@ +StandardJS \ No newline at end of file diff --git a/icons/standardresume.svg b/icons/standardresume.svg new file mode 100644 index 000000000000..be1edec2cae5 --- /dev/null +++ b/icons/standardresume.svg @@ -0,0 +1 @@ +Standard Resume \ No newline at end of file diff --git a/icons/steamdeck.svg b/icons/steamdeck.svg new file mode 100644 index 000000000000..a88d47e1d954 --- /dev/null +++ b/icons/steamdeck.svg @@ -0,0 +1 @@ +Steam Deck \ No newline at end of file diff --git a/icons/stryker.svg b/icons/stryker.svg new file mode 100644 index 000000000000..07e79cc52309 --- /dev/null +++ b/icons/stryker.svg @@ -0,0 +1 @@ +Stryker \ No newline at end of file diff --git a/icons/studio3t.svg b/icons/studio3t.svg new file mode 100644 index 000000000000..927578b00734 --- /dev/null +++ b/icons/studio3t.svg @@ -0,0 +1 @@ +Studio 3T \ No newline at end of file diff --git a/icons/subtitleedit.svg b/icons/subtitleedit.svg new file mode 100644 index 000000000000..a9a09417ff93 --- /dev/null +++ b/icons/subtitleedit.svg @@ -0,0 +1 @@ +Subtitle Edit \ No newline at end of file diff --git a/icons/supabase.svg b/icons/supabase.svg index e986ff16471f..b77355706753 100644 --- a/icons/supabase.svg +++ b/icons/supabase.svg @@ -1 +1 @@ -Supabase \ No newline at end of file +Supabase \ No newline at end of file diff --git a/icons/supercrease.svg b/icons/supercrease.svg new file mode 100644 index 000000000000..c2662183248e --- /dev/null +++ b/icons/supercrease.svg @@ -0,0 +1 @@ +Supercrease \ No newline at end of file diff --git a/icons/surrealdb.svg b/icons/surrealdb.svg new file mode 100644 index 000000000000..f4d46063f401 --- /dev/null +++ b/icons/surrealdb.svg @@ -0,0 +1 @@ +SurrealDB \ No newline at end of file diff --git a/icons/svgdotjs.svg b/icons/svgdotjs.svg new file mode 100644 index 000000000000..852ea87d5520 --- /dev/null +++ b/icons/svgdotjs.svg @@ -0,0 +1 @@ +SVG.js \ No newline at end of file diff --git a/icons/symbolab.svg b/icons/symbolab.svg new file mode 100644 index 000000000000..1ec74d7751a4 --- /dev/null +++ b/icons/symbolab.svg @@ -0,0 +1 @@ +Symbolab \ No newline at end of file diff --git a/icons/system76.svg b/icons/system76.svg new file mode 100644 index 000000000000..7e51926ad5e6 --- /dev/null +++ b/icons/system76.svg @@ -0,0 +1 @@ +System76 \ No newline at end of file diff --git a/icons/tablecheck.svg b/icons/tablecheck.svg new file mode 100644 index 000000000000..af298c3e5e7c --- /dev/null +++ b/icons/tablecheck.svg @@ -0,0 +1 @@ +TableCheck \ No newline at end of file diff --git a/icons/tacobell.svg b/icons/tacobell.svg new file mode 100644 index 000000000000..479af6fde37f --- /dev/null +++ b/icons/tacobell.svg @@ -0,0 +1 @@ +Taco Bell \ No newline at end of file diff --git a/icons/taichigraphics.svg b/icons/taichigraphics.svg new file mode 100644 index 000000000000..2cd9224892b9 --- /dev/null +++ b/icons/taichigraphics.svg @@ -0,0 +1 @@ +Taichi Graphics \ No newline at end of file diff --git a/icons/taichilang.svg b/icons/taichilang.svg new file mode 100644 index 000000000000..da69a2bd4a9b --- /dev/null +++ b/icons/taichilang.svg @@ -0,0 +1 @@ +Taichi Lang \ No newline at end of file diff --git a/icons/tamiya.svg b/icons/tamiya.svg new file mode 100644 index 000000000000..d62ce95c51fc --- /dev/null +++ b/icons/tamiya.svg @@ -0,0 +1 @@ +Tamiya \ No newline at end of file diff --git a/icons/task.svg b/icons/task.svg new file mode 100644 index 000000000000..c33d285e02aa --- /dev/null +++ b/icons/task.svg @@ -0,0 +1 @@ +Task \ No newline at end of file diff --git a/icons/tcs.svg b/icons/tcs.svg new file mode 100644 index 000000000000..6233bfd6b183 --- /dev/null +++ b/icons/tcs.svg @@ -0,0 +1 @@ +Tata Consultancy Services \ No newline at end of file diff --git a/icons/teamspeak.svg b/icons/teamspeak.svg index f9e4ca10ccc1..282b5d9df0d5 100644 --- a/icons/teamspeak.svg +++ b/icons/teamspeak.svg @@ -1 +1 @@ -TeamSpeak \ No newline at end of file +TeamSpeak \ No newline at end of file diff --git a/icons/temporal.svg b/icons/temporal.svg index 5292f26e9be8..3f9daa262139 100644 --- a/icons/temporal.svg +++ b/icons/temporal.svg @@ -1 +1 @@ -Temporal +Temporal \ No newline at end of file diff --git a/icons/termius.svg b/icons/termius.svg new file mode 100644 index 000000000000..a535507c19ce --- /dev/null +++ b/icons/termius.svg @@ -0,0 +1 @@ +Termius \ No newline at end of file diff --git a/icons/testrail.svg b/icons/testrail.svg new file mode 100644 index 000000000000..a5fafe084f68 --- /dev/null +++ b/icons/testrail.svg @@ -0,0 +1 @@ +TestRail \ No newline at end of file diff --git a/icons/tga.svg b/icons/tga.svg new file mode 100644 index 000000000000..fa15625a5011 --- /dev/null +++ b/icons/tga.svg @@ -0,0 +1 @@ +TGA \ No newline at end of file diff --git a/icons/thangs.svg b/icons/thangs.svg new file mode 100644 index 000000000000..1ca08ddaa752 --- /dev/null +++ b/icons/thangs.svg @@ -0,0 +1 @@ +Thangs \ No newline at end of file diff --git a/icons/thealgorithms.svg b/icons/thealgorithms.svg index 5de5082ed0c9..39570eea4e89 100644 --- a/icons/thealgorithms.svg +++ b/icons/thealgorithms.svg @@ -1 +1 @@ -The Algorithms +The Algorithms \ No newline at end of file diff --git a/icons/threadless.svg b/icons/threadless.svg index c93674c58bc1..ca0430bf5608 100644 --- a/icons/threadless.svg +++ b/icons/threadless.svg @@ -1 +1 @@ -Threadless +Threadless \ No newline at end of file diff --git a/icons/threads.svg b/icons/threads.svg new file mode 100644 index 000000000000..15458218b7a1 --- /dev/null +++ b/icons/threads.svg @@ -0,0 +1 @@ +Threads \ No newline at end of file diff --git a/icons/thurgauerkantonalbank.svg b/icons/thurgauerkantonalbank.svg new file mode 100644 index 000000000000..b61d1bfc4033 --- /dev/null +++ b/icons/thurgauerkantonalbank.svg @@ -0,0 +1 @@ +Thurgauer Kantonalbank \ No newline at end of file diff --git a/icons/tiddlywiki.svg b/icons/tiddlywiki.svg new file mode 100644 index 000000000000..482f7fb7fc89 --- /dev/null +++ b/icons/tiddlywiki.svg @@ -0,0 +1 @@ +TiddlyWiki \ No newline at end of file diff --git a/icons/tidyverse.svg b/icons/tidyverse.svg new file mode 100644 index 000000000000..1c389d036042 --- /dev/null +++ b/icons/tidyverse.svg @@ -0,0 +1 @@ +Tidyverse \ No newline at end of file diff --git a/icons/tina.svg b/icons/tina.svg new file mode 100644 index 000000000000..5eed2c371e67 --- /dev/null +++ b/icons/tina.svg @@ -0,0 +1 @@ +Tina \ No newline at end of file diff --git a/icons/tistory.svg b/icons/tistory.svg new file mode 100644 index 000000000000..9fdfe8572893 --- /dev/null +++ b/icons/tistory.svg @@ -0,0 +1 @@ +Tistory \ No newline at end of file diff --git a/icons/tnt.svg b/icons/tnt.svg new file mode 100644 index 000000000000..03183124b717 --- /dev/null +++ b/icons/tnt.svg @@ -0,0 +1 @@ +TNT \ No newline at end of file diff --git a/icons/toggl.svg b/icons/toggl.svg index af37ab00890c..114e1cc30807 100644 --- a/icons/toggl.svg +++ b/icons/toggl.svg @@ -1 +1 @@ -Toggl \ No newline at end of file +Toggl \ No newline at end of file diff --git a/icons/toggltrack.svg b/icons/toggltrack.svg new file mode 100644 index 000000000000..043a463a7525 --- /dev/null +++ b/icons/toggltrack.svg @@ -0,0 +1 @@ +Toggl Track \ No newline at end of file diff --git a/icons/toml.svg b/icons/toml.svg new file mode 100644 index 000000000000..8f7625561c15 --- /dev/null +++ b/icons/toml.svg @@ -0,0 +1 @@ +TOML \ No newline at end of file diff --git a/icons/traefikproxy.svg b/icons/traefikproxy.svg new file mode 100644 index 000000000000..002b6913730e --- /dev/null +++ b/icons/traefikproxy.svg @@ -0,0 +1 @@ +Traefik Proxy \ No newline at end of file diff --git a/icons/trailforks.svg b/icons/trailforks.svg new file mode 100644 index 000000000000..309f052b66e8 --- /dev/null +++ b/icons/trailforks.svg @@ -0,0 +1 @@ +Trailforks \ No newline at end of file diff --git a/icons/transferwise.svg b/icons/transferwise.svg deleted file mode 100644 index 03babcef5d93..000000000000 --- a/icons/transferwise.svg +++ /dev/null @@ -1 +0,0 @@ -TransferWise \ No newline at end of file diff --git a/icons/trilium.svg b/icons/trilium.svg new file mode 100644 index 000000000000..690f56d15707 --- /dev/null +++ b/icons/trilium.svg @@ -0,0 +1 @@ +Trilium \ No newline at end of file diff --git a/icons/trivy.svg b/icons/trivy.svg new file mode 100644 index 000000000000..6547b65da2bf --- /dev/null +++ b/icons/trivy.svg @@ -0,0 +1 @@ +Trivy \ No newline at end of file diff --git a/icons/trpc.svg b/icons/trpc.svg new file mode 100644 index 000000000000..dd824ae0d70b --- /dev/null +++ b/icons/trpc.svg @@ -0,0 +1 @@ +tRPC \ No newline at end of file diff --git a/icons/turbo.svg b/icons/turbo.svg new file mode 100644 index 000000000000..abdb7c75ba44 --- /dev/null +++ b/icons/turbo.svg @@ -0,0 +1 @@ +Turbo \ No newline at end of file diff --git a/icons/turborepo.svg b/icons/turborepo.svg index 646d49842d29..6d63cf7cdd63 100644 --- a/icons/turborepo.svg +++ b/icons/turborepo.svg @@ -1 +1 @@ -Turborepo +Turborepo \ No newline at end of file diff --git a/icons/twitter.svg b/icons/twitter.svg index 45bd20c10699..c5a5eb26582a 100644 --- a/icons/twitter.svg +++ b/icons/twitter.svg @@ -1 +1 @@ -Twitter \ No newline at end of file +Twitter \ No newline at end of file diff --git a/icons/typeform.svg b/icons/typeform.svg index f022f913b945..5f3f29bc485a 100644 --- a/icons/typeform.svg +++ b/icons/typeform.svg @@ -1 +1 @@ -Typeform +Typeform \ No newline at end of file diff --git a/icons/ubiquiti.svg b/icons/ubiquiti.svg index 89817246bf05..a0d34fa8d83c 100644 --- a/icons/ubiquiti.svg +++ b/icons/ubiquiti.svg @@ -1 +1 @@ -Ubiquiti \ No newline at end of file +Ubiquiti \ No newline at end of file diff --git a/icons/ubuntu.svg b/icons/ubuntu.svg index a2917063d4ac..227f86aa329d 100644 --- a/icons/ubuntu.svg +++ b/icons/ubuntu.svg @@ -1 +1 @@ -Ubuntu \ No newline at end of file +Ubuntu \ No newline at end of file diff --git a/icons/uml.svg b/icons/uml.svg new file mode 100644 index 000000000000..894763d8a06e --- /dev/null +++ b/icons/uml.svg @@ -0,0 +1 @@ +UML \ No newline at end of file diff --git a/icons/underscoredotjs.svg b/icons/underscoredotjs.svg index 5d5ba717c5de..ca7140d12a01 100644 --- a/icons/underscoredotjs.svg +++ b/icons/underscoredotjs.svg @@ -1 +1 @@ -Underscore.js +Underscore.js \ No newline at end of file diff --git a/icons/unlicense.svg b/icons/unlicense.svg new file mode 100644 index 000000000000..d6bf6ed11c4e --- /dev/null +++ b/icons/unlicense.svg @@ -0,0 +1 @@ +Unlicense \ No newline at end of file diff --git a/icons/unocss.svg b/icons/unocss.svg new file mode 100644 index 000000000000..b9ea80a8b07c --- /dev/null +++ b/icons/unocss.svg @@ -0,0 +1 @@ +UnoCSS \ No newline at end of file diff --git a/icons/upstash.svg b/icons/upstash.svg index 6a0e00b89c82..accdfd63018c 100644 --- a/icons/upstash.svg +++ b/icons/upstash.svg @@ -1 +1 @@ -Upstash +Upstash \ No newline at end of file diff --git a/icons/uptimekuma.svg b/icons/uptimekuma.svg new file mode 100644 index 000000000000..09bea23cf901 --- /dev/null +++ b/icons/uptimekuma.svg @@ -0,0 +1 @@ +Uptime Kuma \ No newline at end of file diff --git a/icons/v2ex.svg b/icons/v2ex.svg new file mode 100644 index 000000000000..fb44a2dead25 --- /dev/null +++ b/icons/v2ex.svg @@ -0,0 +1 @@ +V2EX \ No newline at end of file diff --git a/icons/vala.svg b/icons/vala.svg new file mode 100644 index 000000000000..f104c9e896a1 --- /dev/null +++ b/icons/vala.svg @@ -0,0 +1 @@ +Vala \ No newline at end of file diff --git a/icons/valorant.svg b/icons/valorant.svg new file mode 100644 index 000000000000..13674afad217 --- /dev/null +++ b/icons/valorant.svg @@ -0,0 +1 @@ +Valorant \ No newline at end of file diff --git a/icons/vega.svg b/icons/vega.svg new file mode 100644 index 000000000000..3efe5e9fe53e --- /dev/null +++ b/icons/vega.svg @@ -0,0 +1 @@ +Vega \ No newline at end of file diff --git a/icons/virginmedia.svg b/icons/virginmedia.svg new file mode 100644 index 000000000000..2958c4f83d83 --- /dev/null +++ b/icons/virginmedia.svg @@ -0,0 +1 @@ +Virgin Media \ No newline at end of file diff --git a/icons/visualbasic.svg b/icons/visualbasic.svg new file mode 100644 index 000000000000..95bd998fd940 --- /dev/null +++ b/icons/visualbasic.svg @@ -0,0 +1 @@ +Visual Basic \ No newline at end of file diff --git a/icons/vitess.svg b/icons/vitess.svg new file mode 100644 index 000000000000..83675d081b53 --- /dev/null +++ b/icons/vitess.svg @@ -0,0 +1 @@ +Vitess \ No newline at end of file diff --git a/icons/vitest.svg b/icons/vitest.svg new file mode 100644 index 000000000000..6462d399df0d --- /dev/null +++ b/icons/vitest.svg @@ -0,0 +1 @@ +Vitest \ No newline at end of file diff --git a/icons/vivawallet.svg b/icons/vivawallet.svg new file mode 100644 index 000000000000..0c66304cb153 --- /dev/null +++ b/icons/vivawallet.svg @@ -0,0 +1 @@ +Viva Wallet \ No newline at end of file diff --git a/icons/voipdotms.svg b/icons/voipdotms.svg new file mode 100644 index 000000000000..04e204a1a176 --- /dev/null +++ b/icons/voipdotms.svg @@ -0,0 +1 @@ +VoIP.ms \ No newline at end of file diff --git a/icons/volvo.svg b/icons/volvo.svg index 65d08206acb1..96e335f36619 100644 --- a/icons/volvo.svg +++ b/icons/volvo.svg @@ -1 +1 @@ -Volvo \ No newline at end of file +Volvo \ No newline at end of file diff --git a/icons/vorondesign.svg b/icons/vorondesign.svg new file mode 100644 index 000000000000..924f3466f891 --- /dev/null +++ b/icons/vorondesign.svg @@ -0,0 +1 @@ +Voron Design \ No newline at end of file diff --git a/icons/vowpalwabbit.svg b/icons/vowpalwabbit.svg index eb2f9792b1fa..e2d82d44e693 100644 --- a/icons/vowpalwabbit.svg +++ b/icons/vowpalwabbit.svg @@ -1 +1 @@ -Vowpal Wabbit +Vowpal Wabbit \ No newline at end of file diff --git a/icons/vscodium.svg b/icons/vscodium.svg new file mode 100644 index 000000000000..6649f32adea8 --- /dev/null +++ b/icons/vscodium.svg @@ -0,0 +1 @@ +VSCodium \ No newline at end of file diff --git a/icons/vtex.svg b/icons/vtex.svg index 94f1e51da739..f8e31fe1608e 100644 --- a/icons/vtex.svg +++ b/icons/vtex.svg @@ -1 +1 @@ -VTEX +VTEX \ No newline at end of file diff --git a/icons/vyond.svg b/icons/vyond.svg new file mode 100644 index 000000000000..757e841a46c4 --- /dev/null +++ b/icons/vyond.svg @@ -0,0 +1 @@ +Vyond \ No newline at end of file diff --git a/icons/wacom.svg b/icons/wacom.svg new file mode 100644 index 000000000000..c99b750dbe87 --- /dev/null +++ b/icons/wacom.svg @@ -0,0 +1 @@ +Wacom \ No newline at end of file diff --git a/icons/wails.svg b/icons/wails.svg new file mode 100644 index 000000000000..1da7133c0772 --- /dev/null +++ b/icons/wails.svg @@ -0,0 +1 @@ +Wails \ No newline at end of file diff --git a/icons/walletconnect.svg b/icons/walletconnect.svg new file mode 100644 index 000000000000..f1d27cb34019 --- /dev/null +++ b/icons/walletconnect.svg @@ -0,0 +1 @@ +WalletConnect \ No newline at end of file diff --git a/icons/wantedly.svg b/icons/wantedly.svg new file mode 100644 index 000000000000..8a735cb423cf --- /dev/null +++ b/icons/wantedly.svg @@ -0,0 +1 @@ +Wantedly \ No newline at end of file diff --git a/icons/warp.svg b/icons/warp.svg new file mode 100644 index 000000000000..b825120839ff --- /dev/null +++ b/icons/warp.svg @@ -0,0 +1 @@ +Warp \ No newline at end of file diff --git a/icons/wasabi.svg b/icons/wasabi.svg new file mode 100644 index 000000000000..6dec36b583be --- /dev/null +++ b/icons/wasabi.svg @@ -0,0 +1 @@ +Wasabi \ No newline at end of file diff --git a/icons/wasmcloud.svg b/icons/wasmcloud.svg new file mode 100644 index 000000000000..f5c983914bed --- /dev/null +++ b/icons/wasmcloud.svg @@ -0,0 +1 @@ +wasmCloud \ No newline at end of file diff --git a/icons/wasmer.svg b/icons/wasmer.svg new file mode 100644 index 000000000000..a5027d819d18 --- /dev/null +++ b/icons/wasmer.svg @@ -0,0 +1 @@ +Wasmer \ No newline at end of file diff --git a/icons/wayland.svg b/icons/wayland.svg new file mode 100644 index 000000000000..23ea17306995 --- /dev/null +++ b/icons/wayland.svg @@ -0,0 +1 @@ +Wayland \ No newline at end of file diff --git a/icons/webtrees.svg b/icons/webtrees.svg new file mode 100644 index 000000000000..207728a65ae6 --- /dev/null +++ b/icons/webtrees.svg @@ -0,0 +1 @@ +webtrees \ No newline at end of file diff --git a/icons/wegame.svg b/icons/wegame.svg index 1541cd138757..127601aa892e 100644 --- a/icons/wegame.svg +++ b/icons/wegame.svg @@ -1 +1 @@ -WeGame +WeGame \ No newline at end of file diff --git a/icons/wikidotgg.svg b/icons/wikidotgg.svg new file mode 100644 index 000000000000..381e5f87aafc --- /dev/null +++ b/icons/wikidotgg.svg @@ -0,0 +1 @@ +wiki.gg \ No newline at end of file diff --git a/icons/wikidotjs.svg b/icons/wikidotjs.svg index d211fa31caf5..fc131e4f359c 100644 --- a/icons/wikidotjs.svg +++ b/icons/wikidotjs.svg @@ -1 +1 @@ -Wiki.js +Wiki.js \ No newline at end of file diff --git a/icons/windows.svg b/icons/windows.svg index 78faa78c4fcc..aca1d539f450 100644 --- a/icons/windows.svg +++ b/icons/windows.svg @@ -1 +1 @@ -Windows \ No newline at end of file +Windows \ No newline at end of file diff --git a/icons/windows10.svg b/icons/windows10.svg new file mode 100644 index 000000000000..9c79dffdb0d1 --- /dev/null +++ b/icons/windows10.svg @@ -0,0 +1 @@ +Windows 10 \ No newline at end of file diff --git a/icons/windows11.svg b/icons/windows11.svg new file mode 100644 index 000000000000..b6e6a6d749ea --- /dev/null +++ b/icons/windows11.svg @@ -0,0 +1 @@ +Windows 11 \ No newline at end of file diff --git a/icons/wise.svg b/icons/wise.svg new file mode 100644 index 000000000000..f66ad78c23f4 --- /dev/null +++ b/icons/wise.svg @@ -0,0 +1 @@ +Wise \ No newline at end of file diff --git a/icons/wpexplorer.svg b/icons/wpexplorer.svg new file mode 100644 index 000000000000..cae4a8121b68 --- /dev/null +++ b/icons/wpexplorer.svg @@ -0,0 +1 @@ +WPExplorer \ No newline at end of file diff --git a/icons/x.svg b/icons/x.svg new file mode 100644 index 000000000000..26be6600902c --- /dev/null +++ b/icons/x.svg @@ -0,0 +1 @@ +X \ No newline at end of file diff --git a/icons/xo.svg b/icons/xo.svg new file mode 100644 index 000000000000..6fd9f42eb621 --- /dev/null +++ b/icons/xo.svg @@ -0,0 +1 @@ +XO \ No newline at end of file diff --git a/icons/yaml.svg b/icons/yaml.svg new file mode 100644 index 000000000000..bb24e71fb115 --- /dev/null +++ b/icons/yaml.svg @@ -0,0 +1 @@ +YAML \ No newline at end of file diff --git a/icons/yeti.svg b/icons/yeti.svg new file mode 100644 index 000000000000..0f7ae9b3add5 --- /dev/null +++ b/icons/yeti.svg @@ -0,0 +1 @@ +Yeti \ No newline at end of file diff --git a/icons/zabka.svg b/icons/zabka.svg index 93b1ab887cdb..46691573ceb9 100644 --- a/icons/zabka.svg +++ b/icons/zabka.svg @@ -1 +1 @@ -Żabka +Żabka \ No newline at end of file diff --git a/icons/zcash.svg b/icons/zcash.svg index e4e7f1e808f9..b64adcace0fe 100644 --- a/icons/zcash.svg +++ b/icons/zcash.svg @@ -1 +1 @@ -Zcash \ No newline at end of file +Zcash \ No newline at end of file diff --git a/icons/zebratechnologies.svg b/icons/zebratechnologies.svg new file mode 100644 index 000000000000..907a2b5e186f --- /dev/null +++ b/icons/zebratechnologies.svg @@ -0,0 +1 @@ +Zebra Technologies \ No newline at end of file diff --git a/icons/zenodo.svg b/icons/zenodo.svg index fbbe31097e32..986056fda30c 100644 --- a/icons/zenodo.svg +++ b/icons/zenodo.svg @@ -1 +1 @@ -Zenodo +Zenodo \ No newline at end of file diff --git a/icons/zettlr.svg b/icons/zettlr.svg new file mode 100644 index 000000000000..3d7a2c696cb6 --- /dev/null +++ b/icons/zettlr.svg @@ -0,0 +1 @@ +Zettlr \ No newline at end of file diff --git a/icons/zig.svg b/icons/zig.svg index 935eba3daacf..e55ac8ca5e9b 100644 --- a/icons/zig.svg +++ b/icons/zig.svg @@ -1 +1 @@ -Zig +Zig \ No newline at end of file diff --git a/icons/zilch.svg b/icons/zilch.svg new file mode 100644 index 000000000000..d1eb2c570636 --- /dev/null +++ b/icons/zilch.svg @@ -0,0 +1 @@ +Zilch \ No newline at end of file diff --git a/icons/zincsearch.svg b/icons/zincsearch.svg new file mode 100644 index 000000000000..e85b5e227b70 --- /dev/null +++ b/icons/zincsearch.svg @@ -0,0 +1 @@ +ZincSearch \ No newline at end of file diff --git a/icons/zod.svg b/icons/zod.svg new file mode 100644 index 000000000000..5054a7080585 --- /dev/null +++ b/icons/zod.svg @@ -0,0 +1 @@ +Zod \ No newline at end of file diff --git a/icons/zoho.svg b/icons/zoho.svg index 6993e51b4c83..f717b968d325 100644 --- a/icons/zoho.svg +++ b/icons/zoho.svg @@ -1 +1 @@ -Zoho \ No newline at end of file +Zoho \ No newline at end of file diff --git a/icons/zoom.svg b/icons/zoom.svg index 77fdbe366c5f..a1976432031c 100644 --- a/icons/zoom.svg +++ b/icons/zoom.svg @@ -1 +1 @@ -Zoom \ No newline at end of file +Zoom \ No newline at end of file diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index 409df601ee9e..000000000000 --- a/index.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -export interface SimpleIcon { - title: string; - slug: string; - svg: string; - path: string; - source: string; - hex: string; - guidelines?: string | undefined; - license?: - | { - type: string; - url: string; - } - | undefined; -} - -declare const icons: Record & { - Get(name: string): SimpleIcon; -}; - -export default icons; diff --git a/package.json b/package.json index 08df702f60f6..8b6af7e13965 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "simple-icons", - "version": "6.21.0", + "version": "9.10.0", "description": "SVG icons for popular brands https://simpleicons.org", "homepage": "https://simpleicons.org", "keywords": [ @@ -11,17 +11,39 @@ "main": "index.js", "types": "index.d.ts", "exports": { - ".": "./index.js", + ".": { + "module": "./index.mjs", + "import": "./index.mjs", + "require": "./index.js", + "default": "./index.js" + }, "./icons": { - "module": "./icons.mjs", - "import": "./icons.mjs", - "require": "./icons.js", - "default": "./icons.js" + "module": "./index.mjs", + "import": "./index.mjs", + "require": "./index.js", + "default": "./index.js" }, "./icons/*": [ - "./icons/*.js", "./icons/*" - ] + ], + "./sdk": { + "import": { + "types": "./sdk.d.ts", + "default": "./sdk.mjs" + }, + "module": { + "types": "./sdk.d.ts", + "default": "./sdk.mjs" + }, + "require": { + "types": "./sdk.d.ts", + "default": "./sdk.js" + }, + "default": { + "types": "./sdk.d.ts", + "default": "./sdk.js" + } + } }, "sideEffects": false, "repository": { @@ -38,32 +60,37 @@ "url": "https://opencollective.com/simple-icons" }, "devDependencies": { - "editorconfig-checker": "4.0.2", - "esbuild": "0.14.38", + "@inquirer/prompts": "1.0.0", + "chalk": "5.2.0", + "editorconfig-checker": "5.0.1", + "esbuild": "0.17.19", "fake-diff": "1.0.0", - "husky": "8.0.1", + "get-relative-luminance": "1.0.0", + "husky": "8.0.3", "is-ci": "3.0.1", - "jsonschema": "1.4.0", - "mocha": "10.0.0", + "jsonschema": "1.4.1", + "markdown-link-check": "3.11.2", + "mocha": "10.2.0", "named-html-entities-json": "1.0.0", "npm-run-all": "4.1.5", - "prettier": "2.6.2", - "rimraf": "3.0.2", - "svg-path-bbox": "1.2.0", + "prettier": "2.8.8", + "rimraf": "5.0.1", + "svg-path-bbox": "1.2.4", "svg-path-segments": "1.0.0", - "svglint": "2.1.0", - "svgo": "2.8.0", - "svgpath": "2.5.0" + "svglint": "2.4.0", + "svgo": "3.0.2", + "svgpath": "2.6.0", + "typescript": "5.1.6" }, "scripts": { "build": "node scripts/build/package.js", - "clean": "rimraf icons/*.js icons/*.d.ts index.js icons.js icons.mjs icons.d.ts", + "clean": "rimraf index.js index.mjs index.d.ts sdk.js", "format": "prettier --write .", "lint": "run-s our-lint jslint jsonlint svglint wslint", "our-lint": "node scripts/lint/ourlint.js", "jslint": "prettier --check .", "jsonlint": "node scripts/lint/jsonlint.js", - "svglint": "svglint icons/*.svg --ci --config .svglintrc.mjs", + "svglint": "svglint icons/*.svg --ci", "wslint": "editorconfig-checker", "prepare": "is-ci || husky install", "prepublishOnly": "npm run build", @@ -71,8 +98,9 @@ "test": "mocha tests --reporter tests/min-reporter.cjs --inline-diffs", "pretest": "npm run prepublishOnly", "posttest": "npm run postpublish", - "svgo": "svgo --config svgo.config.js", - "get-filename": "node scripts/get-filename.js" + "get-filename": "node scripts/get-filename.js", + "add-icon-data": "node scripts/add-icon-data.js", + "strip-theme-link": "node scripts/build/strip-theme-link.js" }, "engines": { "node": ">=0.12.18" diff --git a/scripts/add-icon-data.js b/scripts/add-icon-data.js new file mode 100644 index 000000000000..cc9b903a16d5 --- /dev/null +++ b/scripts/add-icon-data.js @@ -0,0 +1,173 @@ +import process from 'node:process'; +import chalk from 'chalk'; +import { input, confirm, checkbox } from '@inquirer/prompts'; +import getRelativeLuminance from 'get-relative-luminance'; +import { + URL_REGEX, + collator, + getIconsDataString, + titleToSlug, + normalizeColor, +} from '../sdk.mjs'; +import { getJsonSchemaData, writeIconsData } from './utils.js'; + +const hexPattern = /^#?[a-f0-9]{3,8}$/i; + +const iconsData = JSON.parse(await getIconsDataString()); +const jsonSchema = await getJsonSchemaData(); + +const titleValidator = (text) => { + if (!text) return 'This field is required'; + if ( + iconsData.icons.find( + (x) => x.title === text || titleToSlug(x.title) === titleToSlug(text), + ) + ) + return 'This icon title or slug already exist'; + return true; +}; + +const hexValidator = (text) => + hexPattern.test(text) || 'This should be a valid hex code'; + +const sourceValidator = (text) => + URL_REGEX.test(text) || 'This should be a secure URL'; + +const hexTransformer = (text) => { + const color = normalizeColor(text); + const luminance = hexPattern.test(text) + ? getRelativeLuminance.default(`#${color}`) + : -1; + if (luminance === -1) return text.toUpperCase(); + return chalk.bgHex(`#${color}`).hex(luminance < 0.4 ? '#fff' : '#000')( + text.toUpperCase(), + ); +}; + +const aliasesTransformer = (text) => + text + .split(',') + .map((x) => chalk.cyan(x)) + .join(','); + +const aliasesChoices = Object.entries( + jsonSchema.definitions.brand.properties.aliases.properties, +) + .filter(([k]) => ['aka', 'old'].includes(k)) + .map(([k, v]) => ({ name: `${k}: ${v.description}`, value: k })); + +const getIconDataFromAnswers = (answers) => ({ + title: answers.title, + hex: answers.hex.toUpperCase(), + source: answers.source, + ...(answers.hasGuidelines ? { guidelines: answers.guidelines } : {}), + ...(answers.hasLicense + ? { + license: { + type: answers.licenseType, + ...(answers.licenseUrl ? { url: answers.licenseUrl } : {}), + }, + } + : {}), + ...(answers.hasAliases + ? { + aliases: aliasesChoices.reduce((previous, current) => { + const promptKey = `${current.value}AliasesList`; + if (answers[promptKey]) + return { + ...previous, + [current.value]: answers[promptKey] + .split(',') + .map((x) => x.trim()), + }; + return previous; + }, {}), + } + : {}), +}); + +const answers = {}; + +answers.title = await input({ + message: 'Title', + validate: titleValidator, +}); + +answers.hex = await input({ + message: 'Hex', + validate: hexValidator, + filter: (text) => normalizeColor(text), + transformer: hexTransformer, +}); + +answers.source = await input({ + message: 'Source', + validate: sourceValidator, +}); + +answers.hasGuidelines = await confirm({ + message: 'The icon has brand guidelines?', +}); + +if (answers.hasGuidelines) { + answers.guidelines = await input({ + message: 'Guidelines', + validate: sourceValidator, + }); +} + +answers.hasLicense = await confirm({ + message: 'The icon has brand license?', +}); + +if (answers.hasLicense) { + answers.licenseType = await input({ + message: 'License type', + validate: (text) => Boolean(text), + }); + + answers.licenseUrl = await input({ + message: 'License URL' + chalk.reset(' (optional)'), + validate: (text) => !Boolean(text) || sourceValidator(text), + }); +} + +answers.hasAliases = await confirm({ + message: 'This icon has brands aliases?', + default: false, +}); + +if (answers.hasAliases) { + answers.aliasesTypes = await checkbox({ + message: 'What types of aliases do you want to add?', + choices: aliasesChoices, + }); + + for (const x of aliasesChoices) { + if (!answers?.aliasesTypes?.includes(x.value)) continue; + answers[`${x.value}AliasesList`] = await input({ + message: x.value + chalk.reset(' (separate with commas)'), + validate: (text) => Boolean(text), + transformer: aliasesTransformer, + }); + } +} + +answers.confirmToAdd = await confirm({ + message: [ + 'About to write to simple-icons.json', + chalk.reset(JSON.stringify(getIconDataFromAnswers(answers), null, 4)), + chalk.reset('Is this OK?'), + ].join('\n\n'), +}); + +const icon = getIconDataFromAnswers(answers); + +if (answers.confirmToAdd) { + iconsData.icons.push(icon); + iconsData.icons.sort((a, b) => collator.compare(a.title, b.title)); + await writeIconsData(iconsData); +} else { + console.log('Aborted.'); + process.exit(1); +} diff --git a/scripts/build/package.js b/scripts/build/package.js index d53b4e2756be..05ca17bba437 100644 --- a/scripts/build/package.js +++ b/scripts/build/package.js @@ -1,10 +1,6 @@ -#!/usr/bin/env node /** * @fileoverview - * Compiles our icons into static .js files that can be imported in the browser - * and are tree-shakeable. The static .js files go in icons/{filename}.js. Also - * generates an index.js that exports all icons by title, but is not - * tree-shakeable + * Simple Icons package build script. */ import { promises as fs } from 'node:fs'; @@ -18,35 +14,32 @@ import { slugToVariableName, getIconsData, getDirnameFromImportMeta, -} from '../utils.js'; + collator, +} from '../../sdk.mjs'; const __dirname = getDirnameFromImportMeta(import.meta.url); const UTF8 = 'utf8'; const rootDir = path.resolve(__dirname, '..', '..'); -const indexFile = path.resolve(rootDir, 'index.js'); const iconsDir = path.resolve(rootDir, 'icons'); -const iconsJsFile = path.resolve(rootDir, 'icons.js'); -const iconsMjsFile = path.resolve(rootDir, 'icons.mjs'); -const iconsDtsFile = path.resolve(rootDir, 'icons.d.ts'); +const indexJsFile = path.resolve(rootDir, 'index.js'); +const indexMjsFile = path.resolve(rootDir, 'index.mjs'); +const sdkJsFile = path.resolve(rootDir, 'sdk.js'); +const sdkMjsFile = path.resolve(rootDir, 'sdk.mjs'); +const indexDtsFile = path.resolve(rootDir, 'index.d.ts'); const templatesDir = path.resolve(__dirname, 'templates'); -const indexTemplateFile = path.resolve(templatesDir, 'index.js'); const iconObjectTemplateFile = path.resolve(templatesDir, 'icon-object.js'); const build = async () => { const icons = await getIconsData(); - const indexTemplate = await fs.readFile(indexTemplateFile, UTF8); const iconObjectTemplate = await fs.readFile(iconObjectTemplateFile, UTF8); // Local helper functions const escape = (value) => { return value.replace(/(? { - return `'${icon.slug}':${iconToObject(icon)}`; - }; const licenseToObject = (license) => { if (license === undefined) { return; @@ -66,14 +59,15 @@ const build = async () => { escape(icon.path), escape(icon.source), escape(icon.hex), - icon.guidelines ? `'${escape(icon.guidelines)}'` : undefined, - licenseToObject(icon.license), + icon.guidelines ? `\n guidelines: '${escape(icon.guidelines)}',` : '', + licenseToObject(icon.license) + ? `\n license: ${JSON.stringify(licenseToObject(icon.license))},` + : '', ); }; - const writeJs = async (filepath, rawJavaScript) => { - const { code } = await esbuildTransform(rawJavaScript, { - minify: true, - }); + const writeJs = async (filepath, rawJavaScript, opts = null) => { + opts = opts === null ? { minify: true } : opts; + const { code } = await esbuildTransform(rawJavaScript, opts); await fs.writeFile(filepath, code); }; const writeTs = async (filepath, rawTypeScript) => { @@ -81,66 +75,51 @@ const build = async () => { }; // 'main' - const iconsBarrelMjs = []; - const iconsBarrelJs = []; - const iconsBarrelDts = []; - const buildIcons = []; - - await Promise.all( + const buildIcons = await Promise.all( icons.map(async (icon) => { const filename = getIconSlug(icon); const svgFilepath = path.resolve(iconsDir, `${filename}.svg`); - icon.svg = (await fs.readFile(svgFilepath, UTF8)).replace(/\r?\n/, ''); + icon.svg = await fs.readFile(svgFilepath, UTF8); icon.path = svgToPath(icon.svg); icon.slug = filename; - buildIcons.push(icon); - const iconObject = iconToObject(icon); - const iconExportName = slugToVariableName(icon.slug); - - // write the static .js file for the icon - const jsFilepath = path.resolve(iconsDir, `${filename}.js`); - const newImportMessage = `use "const { ${iconExportName} } = require('simple-icons/icons');" instead`; - const message = JSON.stringify( - `Imports like "const ${icon.slug} = require('simple-icons/icons/${icon.slug}');" have been deprecated in v6.0.0 and will no longer work from v7.0.0, ${newImportMessage}`, - ); - - const dtsFilepath = path.resolve(iconsDir, `${filename}.d.ts`); - await Promise.all([ - writeJs( - jsFilepath, - `console.warn("warn -", ${message});module.exports=${iconObject};`, - ), - writeTs( - dtsFilepath, - `/**@deprecated ${newImportMessage}*/declare const i:import("../alias").I;export default i;`, - ), - ]); - - // add object to the barrel file - iconsBarrelJs.push(`${iconExportName}:${iconObject},`); - iconsBarrelMjs.push(`export const ${iconExportName}=${iconObject}`); - iconsBarrelDts.push(`export const ${iconExportName}:I;`); + return { icon, iconObject, iconExportName }; }), ); - // write our generic index.js - const rawIndexJs = util.format( - indexTemplate, - buildIcons.map(iconToKeyValue).join(','), - ); - await writeJs(indexFile, rawIndexJs); + const iconsBarrelDts = []; + const iconsBarrelJs = []; + const iconsBarrelMjs = []; + + buildIcons.sort((a, b) => collator.compare(a.icon.title, b.icon.title)); + for (const { iconObject, iconExportName } of buildIcons) { + iconsBarrelDts.push(`export const ${iconExportName}:I;`); + iconsBarrelJs.push(`${iconExportName}:${iconObject},`); + iconsBarrelMjs.push(`export const ${iconExportName}=${iconObject}`); + } + + // constants used in templates to reduce package size + const constantsString = `const a='',b='';`; // write our file containing the exports of all icons in CommonJS ... - const rawIconsJs = `module.exports={${iconsBarrelJs.join('')}};`; - await writeJs(iconsJsFile, rawIconsJs); + const rawIndexJs = `${constantsString}module.exports={${iconsBarrelJs.join( + '', + )}};`; + await writeJs(indexJsFile, rawIndexJs); // and ESM - const rawIconsMjs = iconsBarrelMjs.join(''); - await writeJs(iconsMjsFile, rawIconsMjs); + const rawIndexMjs = constantsString + iconsBarrelMjs.join(''); + await writeJs(indexMjsFile, rawIndexMjs); // and create a type declaration file - const rawIconsDts = `import {I} from "./alias";${iconsBarrelDts.join('')}`; - await writeTs(iconsDtsFile, rawIconsDts); + const rawIndexDts = `import {SimpleIcon} from "./types";export {SimpleIcon};type I=SimpleIcon;${iconsBarrelDts.join( + '', + )}`; + await writeTs(indexDtsFile, rawIndexDts); + + // create a CommonJS SDK file + await writeJs(sdkJsFile, await fs.readFile(sdkMjsFile, UTF8), { + format: 'cjs', + }); }; build(); diff --git a/scripts/build/strip-theme-link.js b/scripts/build/strip-theme-link.js new file mode 100644 index 000000000000..cc8ab7efb6af --- /dev/null +++ b/scripts/build/strip-theme-link.js @@ -0,0 +1,22 @@ +/** + * @fileoverview + * Simple Icons strip theme URL script. + */ + +import path from 'node:path'; +import { writeFile, readFile } from 'node:fs/promises'; +import { getDirnameFromImportMeta } from '../../sdk.mjs'; + +const __dirname = getDirnameFromImportMeta(import.meta.url); + +const rootDir = path.resolve(__dirname, '..', '..'); +const readmeFile = path.resolve(rootDir, 'README.md'); + +const readme = await readFile(readmeFile, 'utf8'); +await writeFile( + readmeFile, + readme.replace( + /https:\/\/cdn.simpleicons.org\/(.+)\/000\/fff/g, + 'https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/$1.svg', + ), +); diff --git a/scripts/build/templates/icon-object.js b/scripts/build/templates/icon-object.js index dcd10c7a24f0..80eea92ffd62 100644 --- a/scripts/build/templates/icon-object.js +++ b/scripts/build/templates/icon-object.js @@ -2,11 +2,9 @@ title: '%s', slug: '%s', get svg() { - return '%s'; + return a + '%s' + b + this.path + c; }, path: '%s', source: '%s', - hex: '%s', - guidelines: %s, - license: %s, + hex: '%s',%s%s } diff --git a/scripts/build/templates/index.js b/scripts/build/templates/index.js deleted file mode 100644 index b627a4dd42af..000000000000 --- a/scripts/build/templates/index.js +++ /dev/null @@ -1,10 +0,0 @@ -var icons = {%s}; - -Object.defineProperty(icons, "Get", { - enumerable: false, - value: function(targetName) { - return icons[targetName]; - } -}); - -module.exports = icons; diff --git a/scripts/get-filename.js b/scripts/get-filename.js index 6649c8a2cb44..826b43c3ebc7 100644 --- a/scripts/get-filename.js +++ b/scripts/get-filename.js @@ -1,11 +1,11 @@ -#!/usr/bin/env node /** * @fileoverview * Script that takes a brand name as argument and outputs the corresponding * icon SVG filename to standard output. */ -import { titleToSlug } from './utils.js'; +import process from 'node:process'; +import { titleToSlug } from '../sdk.mjs'; if (process.argv.length < 3) { console.error('Provide a brand name as argument'); diff --git a/scripts/lint/jsonlint.js b/scripts/lint/jsonlint.js index 7e61515786d9..0479dc988f41 100644 --- a/scripts/lint/jsonlint.js +++ b/scripts/lint/jsonlint.js @@ -1,33 +1,20 @@ -#!/usr/bin/env node /** * @fileoverview * CLI tool to run jsonschema on the simple-icons.json data file. */ -import { promises as fs } from 'node:fs'; -import path from 'node:path'; +import process from 'node:process'; import { Validator } from 'jsonschema'; -import { getDirnameFromImportMeta, getIconsData } from '../utils.js'; +import { getIconsData } from '../../sdk.mjs'; +import { getJsonSchemaData } from '../utils.js'; -const __dirname = getDirnameFromImportMeta(import.meta.url); +const icons = await getIconsData(); +const schema = await getJsonSchemaData(); -const rootDir = path.resolve(__dirname, '..', '..'); -const schemaFile = path.resolve(rootDir, '.jsonschema.json'); - -(async () => { - const icons = await getIconsData(); - const schema = JSON.parse(await fs.readFile(schemaFile, 'utf8')); - - const validator = new Validator(); - const result = validator.validate({ icons }, schema); - if (result.errors.length > 0) { - result.errors.forEach((error) => { - console.error(error); - }); - - console.error( - `Found ${result.errors.length} error(s) in simple-icons.json`, - ); - process.exit(1); - } -})(); +const validator = new Validator(); +const result = validator.validate({ icons }, schema); +if (result.errors.length > 0) { + result.errors.forEach((error) => console.error(error)); + console.error(`Found ${result.errors.length} error(s) in simple-icons.json`); + process.exit(1); +} diff --git a/scripts/lint/ourlint.js b/scripts/lint/ourlint.js index 677775a4a7c3..49abcb206b62 100644 --- a/scripts/lint/ourlint.js +++ b/scripts/lint/ourlint.js @@ -1,12 +1,13 @@ -#!/usr/bin/env node /** * @fileoverview * Linters for the package that can't easily be implemented in the existing * linters (e.g. jsonlint/svglint). */ +import process from 'node:process'; +import { URL } from 'node:url'; import fakeDiff from 'fake-diff'; -import { getIconsDataString, normalizeNewlines } from '../utils.js'; +import { getIconsDataString, normalizeNewlines, collator } from '../../sdk.mjs'; /** * Contains our tests so they can be isolated from each other. @@ -18,12 +19,12 @@ const TESTS = { const collector = (invalidEntries, icon, index, array) => { if (index > 0) { const prev = array[index - 1]; - const compare = icon.title.localeCompare(prev.title); - if (compare < 0) { + const comparison = collator.compare(icon.title, prev.title); + if (comparison < 0) { invalidEntries.push(icon); - } else if (compare === 0) { + } else if (comparison === 0) { if (prev.slug) { - if (!icon.slug || icon.slug.localeCompare(prev.slug) < 0) { + if (!icon.slug || collator.compare(icon.slug, prev.slug) < 0) { invalidEntries.push(icon); } } @@ -46,30 +47,51 @@ const TESTS = { }, /* Check the formatting of the data file */ - prettified: async (data, dataString) => { + prettified: (data, dataString) => { const normalizedDataString = normalizeNewlines(dataString); - const dataPretty = `${JSON.stringify(data, null, ' ')}\n`; + const dataPretty = `${JSON.stringify(data, null, 4)}\n`; if (normalizedDataString !== dataPretty) { const dataDiff = fakeDiff(normalizedDataString, dataPretty); return `Data file is formatted incorrectly:\n\n${dataDiff}`; } }, + + /* Check redundant trailing slash in URL */ + checkUrl: (data) => { + const hasRedundantTrailingSlash = (url) => { + const origin = new URL(url).origin; + return /^\/+$/.test(url.replace(origin, '')); + }; + + const allUrlFields = [ + ...new Set( + data.icons + .flatMap((icon) => [icon.source, icon.guidelines, icon.license?.url]) + .filter(Boolean), + ), + ]; + + const invalidUrls = allUrlFields.filter((url) => + hasRedundantTrailingSlash(url), + ); + + if (invalidUrls.length > 0) { + return `Some URLs have a redundant trailing slash:\n\n${invalidUrls.join( + '\n', + )}`; + } + }, }; -// execute all tests and log all errors -(async () => { - const dataString = await getIconsDataString(); - const data = JSON.parse(dataString); +const dataString = await getIconsDataString(); +const data = JSON.parse(dataString); - const errors = ( - await Promise.all( - Object.keys(TESTS).map((test) => TESTS[test](data, dataString)), - ) - ).filter(Boolean); +const errors = ( + await Promise.all(Object.values(TESTS).map((test) => test(data, dataString))) +).filter(Boolean); - if (errors.length > 0) { - errors.forEach((error) => console.error(`\u001b[31m${error}\u001b[0m`)); - process.exit(1); - } -})(); +if (errors.length > 0) { + errors.forEach((error) => console.error(`\u001b[31m${error}\u001b[0m`)); + process.exit(1); +} diff --git a/scripts/release/bump-version.js b/scripts/release/bump-version.js deleted file mode 100644 index d19b7bb0eb5f..000000000000 --- a/scripts/release/bump-version.js +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env node -/** - * @fileoverview - * Updates the version of this package to the CLI specified version. - */ - -import fs from 'node:fs'; -import path from 'node:path'; -import { getDirnameFromImportMeta } from '../utils.js'; - -const __dirname = getDirnameFromImportMeta(import.meta.url); - -const rootDir = path.resolve(__dirname, '..', '..'); -const packageJsonFile = path.resolve(rootDir, 'package.json'); - -const readManifest = (file) => { - const manifestRaw = fs.readFileSync(file, 'utf-8'); - const manifestJson = JSON.parse(manifestRaw); - return manifestJson; -}; - -const writeManifest = (file, json) => { - const manifestRaw = JSON.stringify(json, null, 2) + '\n'; - fs.writeFileSync(file, manifestRaw); -}; - -const main = (newVersion) => { - try { - const manifest = readManifest(packageJsonFile); - - manifest.version = newVersion; - - writeManifest(packageJsonFile, manifest); - } catch (error) { - console.error(`Failed to bump package version to ${newVersion}:`, error); - process.exit(1); - } -}; - -main(process.argv[2]); diff --git a/scripts/release/update-cdn-urls.js b/scripts/release/update-cdn-urls.js index ed311a189dee..f6be9e9ba611 100644 --- a/scripts/release/update-cdn-urls.js +++ b/scripts/release/update-cdn-urls.js @@ -1,13 +1,13 @@ -#!/usr/bin/env node /** * @fileoverview * Updates the CDN URLs in the README.md to match the major version in the * NPM package manifest. Does nothing if the README.md is already up-to-date. */ -import fs from 'node:fs'; +import process from 'node:process'; +import fs from 'node:fs/promises'; import path from 'node:path'; -import { getDirnameFromImportMeta } from '../utils.js'; +import { getDirnameFromImportMeta } from '../../sdk.mjs'; const __dirname = getDirnameFromImportMeta(import.meta.url); @@ -20,31 +20,31 @@ const getMajorVersion = (semVerVersion) => { return parseInt(majorVersionAsString); }; -const getManifest = () => { - const manifestRaw = fs.readFileSync(packageJsonFile, 'utf-8'); +const getManifest = async () => { + const manifestRaw = await fs.readFile(packageJsonFile, 'utf-8'); return JSON.parse(manifestRaw); }; -const updateVersionInReadmeIfNecessary = (majorVersion) => { - let content = fs.readFileSync(readmeFile).toString(); +const updateVersionInReadmeIfNecessary = async (majorVersion) => { + let content = await fs.readFile(readmeFile, 'utf8'); content = content.replace( /simple-icons@v[0-9]+/g, `simple-icons@v${majorVersion}`, ); - fs.writeFileSync(readmeFile, content); + await fs.writeFile(readmeFile, content); }; -const main = () => { +const main = async () => { try { - const manifest = getManifest(); + const manifest = await getManifest(); const majorVersion = getMajorVersion(manifest.version); - updateVersionInReadmeIfNecessary(majorVersion); + await updateVersionInReadmeIfNecessary(majorVersion); } catch (error) { console.error('Failed to update CDN version number:', error); process.exit(1); } }; -main(); +await main(); diff --git a/scripts/release/update-sdk-ts-defs.js b/scripts/release/update-sdk-ts-defs.js new file mode 100644 index 000000000000..c87e87625a82 --- /dev/null +++ b/scripts/release/update-sdk-ts-defs.js @@ -0,0 +1,74 @@ +/** + * @fileoverview + * Updates the SDK Typescript definitions located in the file sdk.d.ts + * to match the current definitions of functions of sdk.mjs. + */ + +import process from 'node:process'; +import fs from 'node:fs/promises'; +import path from 'node:path'; +import { execSync } from 'node:child_process'; +import { getDirnameFromImportMeta } from '../../sdk.mjs'; + +const __dirname = getDirnameFromImportMeta(import.meta.url); +const rootDir = path.resolve(__dirname, '..', '..'); + +const sdkTs = path.resolve(rootDir, 'sdk.d.ts'); +const sdkMts = path.resolve(rootDir, 'sdk.d.mts'); +const sdkMjs = path.resolve(rootDir, 'sdk.mjs'); + +const generateSdkMts = async () => { + // remove temporally type definitions imported with comments + // in sdk.mjs to avoid circular imports + const originalSdkMjsContent = await fs.readFile(sdkMjs, 'utf-8'); + const tempSdkMjsContent = originalSdkMjsContent + .split('\n') + .filter((line) => { + return !line.startsWith(' * @typedef {import("./sdk")'); + }) + .join('\n'); + await fs.writeFile(sdkMjs, tempSdkMjsContent); + try { + execSync( + 'npx tsc sdk.mjs' + + ' --declaration --emitDeclarationOnly --allowJs --removeComments', + ); + } catch (error) { + await fs.writeFile(sdkMjs, originalSdkMjsContent); + console.log( + `Error ${error.status} generating Typescript` + + ` definitions: '${error.message}'`, + ); + process.exit(1); + } + await fs.writeFile(sdkMjs, originalSdkMjsContent); +}; + +const generateSdkTs = async () => { + const fileExists = await fs + .access(sdkMts) + .then(() => true) + .catch(() => false); + fileExists && (await fs.unlink(sdkMts)); + await generateSdkMts(); + + const autogeneratedMsg = '/* The next code is autogenerated from sdk.mjs */'; + const newSdkTsContent = + (await fs.readFile(sdkTs, 'utf-8')).split(autogeneratedMsg)[0] + + `${autogeneratedMsg}\n\n${await fs.readFile(sdkMts, 'utf-8')}`; + + await fs.writeFile(sdkTs, newSdkTsContent); + await fs.unlink(sdkMts); + + try { + execSync('npx prettier -w sdk.d.ts'); + } catch (error) { + console.log( + `Error ${error.status} executing Prettier` + + ` to pretiffy SDK TS definitions: '${error.message}'`, + ); + process.exit(1); + } +}; + +await generateSdkTs(); diff --git a/scripts/release/update-slugs-table.js b/scripts/release/update-slugs-table.js index 250c96d67837..fffe85f7e0c4 100644 --- a/scripts/release/update-slugs-table.js +++ b/scripts/release/update-slugs-table.js @@ -1,4 +1,3 @@ -#!/usr/bin/env node /** * @fileoverview * Generates a MarkDown file that lists every brand name and their slug. @@ -7,7 +6,7 @@ import { promises as fs } from 'node:fs'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; -import { getIconsData, getIconSlug } from '../utils.js'; +import { getIconsData, getIconSlug } from '../../sdk.mjs'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); @@ -26,14 +25,10 @@ update the script at '${path.relative(rootDir, __filename)}'. | :--- | :--- | `; -(async () => { - const icons = await getIconsData(); - - icons.forEach((icon) => { - const brandName = icon.title; - const brandSlug = getIconSlug(icon); - content += `| \`${brandName}\` | \`${brandSlug}\` |\n`; - }); - - await fs.writeFile(slugsFile, content); -})(); +const icons = await getIconsData(); +for (const icon of icons) { + const brandName = icon.title; + const brandSlug = getIconSlug(icon); + content += `| \`${brandName}\` | \`${brandSlug}\` |\n`; +} +await fs.writeFile(slugsFile, content); diff --git a/scripts/release/update-svgs-count.js b/scripts/release/update-svgs-count.js index 4c426254be02..05af0fc17a95 100644 --- a/scripts/release/update-svgs-count.js +++ b/scripts/release/update-svgs-count.js @@ -1,43 +1,39 @@ -#!/usr/bin/env node /** * @fileoverview * Replaces the SVG count milestone "Over Free SVG icons..." located * at README every time the number of current icons is more than `updateRange` * more than the previous milestone. */ -import { promises as fs } from 'node:fs'; + +import process from 'node:process'; +import fs from 'node:fs/promises'; import path from 'node:path'; -import { getDirnameFromImportMeta, getIconsData } from '../utils.js'; +import { getDirnameFromImportMeta, getIconsData } from '../../sdk.mjs'; const regexMatcher = /Over\s(\d+)\s/; const updateRange = 100; const __dirname = getDirnameFromImportMeta(import.meta.url); - const rootDir = path.resolve(__dirname, '..', '..'); const readmeFile = path.resolve(rootDir, 'README.md'); -(async () => { - const readmeContent = await fs.readFile(readmeFile, 'utf-8'); - - let overNIconsInReadme; - try { - overNIconsInReadme = parseInt(regexMatcher.exec(readmeContent)[1]); - } catch (err) { - console.error( - 'Failed to obtain number of SVG icons of current milestone in README:', - err, - ); - process.exit(1); - } +const readmeContent = await fs.readFile(readmeFile, 'utf-8'); - const nIcons = (await getIconsData()).length; - const newNIcons = overNIconsInReadme + updateRange; +let overNIconsInReadme; +try { + overNIconsInReadme = parseInt(regexMatcher.exec(readmeContent)[1]); +} catch (err) { + console.error( + 'Failed to obtain number of SVG icons of current milestone in README:', + err, + ); + process.exit(1); +} - if (nIcons <= newNIcons) { - process.exit(0); - } +const nIcons = (await getIconsData()).length; +const newNIcons = overNIconsInReadme + updateRange; +if (nIcons > newNIcons) { const newContent = readmeContent.replace(regexMatcher, `Over ${newNIcons} `); await fs.writeFile(readmeFile, newContent); -})(); +} diff --git a/scripts/utils.js b/scripts/utils.js index db0fed588c19..dfea7d75a4cf 100644 --- a/scripts/utils.js +++ b/scripts/utils.js @@ -1,155 +1,33 @@ -/** - * @fileoverview - * Some common utilities for scripts. - */ - import path from 'node:path'; -import { promises as fs } from 'node:fs'; -import { fileURLToPath } from 'node:url'; - -const TITLE_TO_SLUG_REPLACEMENTS = { - '+': 'plus', - '.': 'dot', - '&': 'and', - đ: 'd', - ħ: 'h', - ı: 'i', - ĸ: 'k', - ŀ: 'l', - ł: 'l', - ß: 'ss', - ŧ: 't', -}; - -const TITLE_TO_SLUG_CHARS_REGEX = RegExp( - `[${Object.keys(TITLE_TO_SLUG_REPLACEMENTS).join('')}]`, - 'g', -); - -const TITLE_TO_SLUG_RANGE_REGEX = /[^a-z0-9]/g; - -/** - * Get the slug/filename for an icon. - * @param {Object} icon The icon data as it appears in _data/simple-icons.json - */ -export const getIconSlug = (icon) => icon.slug || titleToSlug(icon.title); - -/** - * Extract the path from an icon SVG content. - * @param {Object} svg The icon SVG content - **/ -export const svgToPath = (svg) => svg.match(/ - title - .toLowerCase() - .replace( - TITLE_TO_SLUG_CHARS_REGEX, - (char) => TITLE_TO_SLUG_REPLACEMENTS[char], - ) - .normalize('NFD') - .replace(TITLE_TO_SLUG_RANGE_REGEX, ''); - -/** - * Converts a slug into a variable name that can be exported. - * @param {String} slug The slug to convert - */ -export const slugToVariableName = (slug) => { - const slugFirstLetter = slug[0].toUpperCase(); - const slugRest = slug.slice(1); - return `si${slugFirstLetter}${slugRest}`; -}; +import fs from 'node:fs/promises'; +import { getDirnameFromImportMeta, getIconDataPath } from '../sdk.mjs'; -/** - * Converts a brand title (as it is seen in simple-icons.json) into a brand - * title in HTML/SVG friendly format. - * @param {String} brandTitle The title to convert - */ -export const titleToHtmlFriendly = (brandTitle) => - brandTitle - .replace(/&/g, '&') - .replace(/"/g, '"') - .replace(//g, '>') - .replace(/./g, (char) => { - const charCode = char.charCodeAt(0); - return charCode > 127 ? `&#${charCode};` : char; - }); +const __dirname = getDirnameFromImportMeta(import.meta.url); /** - * Converts a brand title in HTML/SVG friendly format into a brand title (as - * it is seen in simple-icons.json) - * @param {String} htmlFriendlyTitle The title to convert + * Get JSON schema data. + * @param {String} rootDir Path to the root directory of the project. */ -export const htmlFriendlyToTitle = (htmlFriendlyTitle) => - htmlFriendlyTitle - .replace(/&#([0-9]+);/g, (_, num) => String.fromCharCode(parseInt(num))) - .replace( - /&(quot|amp|lt|gt);/g, - (_, ref) => ({ quot: '"', amp: '&', lt: '<', gt: '>' }[ref]), - ); - -/** - * Get contents of _data/simple-icons.json. - * @param {String|undefined} rootDir Path to the root directory of the project. - */ -export const getIconsDataString = (rootDir) => { - if (rootDir === undefined) { - rootDir = path.resolve(getDirnameFromImportMeta(import.meta.url), '..'); - } - const iconDataPath = path.resolve(rootDir, '_data', 'simple-icons.json'); - return fs.readFile(iconDataPath, 'utf8'); +export const getJsonSchemaData = async ( + rootDir = path.resolve(__dirname, '..'), +) => { + const jsonSchemaPath = path.resolve(rootDir, '.jsonschema.json'); + const jsonSchemaString = await fs.readFile(jsonSchemaPath, 'utf8'); + return JSON.parse(jsonSchemaString); }; /** - * Get icons data as object from _data/simple-icons.json. - * @param {String|undefined} rootDir Path to the root directory of the project. + * Write icons data to _data/simple-icons.json. + * @param {Object} iconsData Icons data object. + * @param {String} rootDir Path to the root directory of the project. */ -export const getIconsData = async (rootDir) => { - const fileContents = await getIconsDataString(rootDir); - return JSON.parse(fileContents).icons; +export const writeIconsData = async ( + iconsData, + rootDir = path.resolve(__dirname, '..'), +) => { + await fs.writeFile( + getIconDataPath(rootDir), + `${JSON.stringify(iconsData, null, 4)}\n`, + 'utf8', + ); }; - -/** - * Get the directory name where this file is located from `import.meta.url`, - * equivalent to the `__dirname` global variable in CommonJS. - * @param {String} importMetaUrl import.meta.url - */ -export const getDirnameFromImportMeta = (importMetaUrl) => - path.dirname(fileURLToPath(importMetaUrl)); - -/** - * Replace Windows newline characters by Unix ones. - * @param {String} text The text to replace - */ -export const normalizeNewlines = (text) => { - return text.replace(/\r\n/g, '\n'); -}; - -/** - * Get information about third party extensions. - * @param {String} readmePath Path to the README file - */ -export const getThirdPartyExtensions = async (readmePath) => - normalizeNewlines(await fs.readFile(readmePath, 'utf8')) - .split('## Third-Party Extensions\n\n')[1] - .split('\n\n')[0] - .split('\n') - .slice(2) - .map((line) => { - const [module, author] = line.split(' | '); - return { - module: { - name: /\[(.+)\]/.exec(module)[1], - url: /\((.+)\)/.exec(module)[1], - }, - author: { - name: /\[(.+)\]/.exec(author)[1], - url: /\((.+)\)/.exec(author)[1], - }, - }; - }); diff --git a/sdk.d.ts b/sdk.d.ts new file mode 100644 index 000000000000..9d920813e067 --- /dev/null +++ b/sdk.d.ts @@ -0,0 +1,81 @@ +/** + * @fileoverview + * Types for Simple Icons SDK. + */ + +import type { License } from './types'; + +/** + * The data for a third-party extension. + * + * Includes the module and author of the extension, + * both including a name and URL. + * + * @see {@link https://github.com/simple-icons/simple-icons#third-party-extensions Third-Party Extensions} + */ +export type ThirdPartyExtension = { + module: ThirdPartyExtensionSubject; + author: ThirdPartyExtensionSubject; +}; + +type ThirdPartyExtensionSubject = { + name: string; + url: string; +}; + +/** + * The aliases for a Simple Icon. + * + * Corresponds to the `aliases` property in the *_data/simple-icons.json* file. + * + * @see {@link https://github.com/simple-icons/simple-icons/blob/develop/CONTRIBUTING.md#aliases Aliases} + */ +export type Aliases = { + aka?: string[]; + dup?: DuplicateAlias[]; + loc?: { [key: string]: string }; +}; + +type DuplicateAlias = { + title: string; + hex?: string; + guidelines?: string; +}; + +/** + * The data for a Simple Icon. + * + * Corresponds to the data stored for each icon in the *_data/simple-icons.json* file. + * + * @see {@link https://github.com/mondeja/simple-icons/blob/utils-entrypoint/CONTRIBUTING.md#7-update-the-json-data-for-simpleiconsorg Update the JSON Data for SimpleIcons.org} + */ +export type IconData = { + title: string; + hex: string; + source: string; + slug?: string; + guidelines?: string; + license?: License; + aliases?: Aliases; +}; + +/* The next code is autogenerated from sdk.mjs */ + +export const URL_REGEX: RegExp; +export const SVG_PATH_REGEX: RegExp; +export function getDirnameFromImportMeta(importMetaUrl: string): string; +export function getIconSlug(icon: IconData): string; +export function svgToPath(svg: string): string; +export function titleToSlug(title: string): string; +export function slugToVariableName(slug: string): string; +export function titleToHtmlFriendly(brandTitle: string): string; +export function htmlFriendlyToTitle(htmlFriendlyTitle: string): string; +export function getIconDataPath(rootDir?: string): string; +export function getIconsDataString(rootDir?: string): string; +export function getIconsData(rootDir?: string): IconData[]; +export function normalizeNewlines(text: string): string; +export function normalizeColor(text: string): string; +export function getThirdPartyExtensions( + readmePath?: string, +): Promise; +export const collator: Intl.Collator; diff --git a/sdk.mjs b/sdk.mjs new file mode 100644 index 000000000000..1b07f9f24ef5 --- /dev/null +++ b/sdk.mjs @@ -0,0 +1,222 @@ +/** + * @fileoverview + * Simple Icons SDK. + */ + +import path from 'node:path'; +import fs from 'node:fs/promises'; +import { fileURLToPath } from 'node:url'; + +/** + * @typedef {import("./sdk").ThirdPartyExtension} ThirdPartyExtension + * @typedef {import("./sdk").IconData} IconData + */ + +const TITLE_TO_SLUG_REPLACEMENTS = { + '+': 'plus', + '.': 'dot', + '&': 'and', + đ: 'd', + ħ: 'h', + ı: 'i', + ĸ: 'k', + ŀ: 'l', + ł: 'l', + ß: 'ss', + ŧ: 't', +}; + +const TITLE_TO_SLUG_CHARS_REGEX = RegExp( + `[${Object.keys(TITLE_TO_SLUG_REPLACEMENTS).join('')}]`, + 'g', +); + +const TITLE_TO_SLUG_RANGE_REGEX = /[^a-z0-9]/g; + +/** + * Regex to validate HTTPs URLs. + */ +export const URL_REGEX = /^https:\/\/[^\s"']+$/; + +/** + * Regex to validate SVG paths. + */ +export const SVG_PATH_REGEX = /^m[-mzlhvcsqtae0-9,. ]+$/i; + +/** + * Get the directory name where this file is located from `import.meta.url`, + * equivalent to the `__dirname` global variable in CommonJS. + * @param {String} importMetaUrl import.meta.url + * @returns {String} Directory name in which this file is located + */ +export const getDirnameFromImportMeta = (importMetaUrl) => + path.dirname(fileURLToPath(importMetaUrl)); + +/** + * Get the slug/filename for an icon. + * @param {IconData} icon The icon data as it appears in *_data/simple-icons.json* + * @returns {String} The slug/filename for the icon + */ +export const getIconSlug = (icon) => icon.slug || titleToSlug(icon.title); + +/** + * Extract the path from an icon SVG content. + * @param {String} svg The icon SVG content + * @returns {String} The path from the icon SVG content + **/ +export const svgToPath = (svg) => svg.split('"', 8)[7]; + +/** + * Converts a brand title into a slug/filename. + * @param {String} title The title to convert + * @returns {String} The slug/filename for the title + */ +export const titleToSlug = (title) => + title + .toLowerCase() + .replace( + TITLE_TO_SLUG_CHARS_REGEX, + (char) => TITLE_TO_SLUG_REPLACEMENTS[char], + ) + .normalize('NFD') + .replace(TITLE_TO_SLUG_RANGE_REGEX, ''); + +/** + * Converts a slug into a variable name that can be exported. + * @param {String} slug The slug to convert + * @returns {String} The variable name for the slug + */ +export const slugToVariableName = (slug) => { + const slugFirstLetter = slug[0].toUpperCase(); + return `si${slugFirstLetter}${slug.slice(1)}`; +}; + +/** + * Converts a brand title as defined in *_data/simple-icons.json* into a brand + * title in HTML/SVG friendly format. + * @param {String} brandTitle The title to convert + * @returns {String} The brand title in HTML/SVG friendly format + */ +export const titleToHtmlFriendly = (brandTitle) => + brandTitle + .replace(/&/g, '&') + .replace(/"/g, '"') + .replace(//g, '>') + .replace(/./g, (char) => { + const charCode = char.charCodeAt(0); + return charCode > 127 ? `&#${charCode};` : char; + }); + +/** + * Converts a brand title in HTML/SVG friendly format into a brand title (as + * it is seen in *_data/simple-icons.json*) + * @param {String} htmlFriendlyTitle The title to convert + * @returns {String} The brand title in HTML/SVG friendly format + */ +export const htmlFriendlyToTitle = (htmlFriendlyTitle) => + htmlFriendlyTitle + .replace(/&#([0-9]+);/g, (_, num) => String.fromCodePoint(parseInt(num))) + .replace( + /&(quot|amp|lt|gt);/g, + (_, ref) => ({ quot: '"', amp: '&', lt: '<', gt: '>' }[ref]), + ); + +/** + * Get path of *_data/simpe-icons.json*. + * @param {String} rootDir Path to the root directory of the project + * @returns {String} Path of *_data/simple-icons.json* + */ +export const getIconDataPath = ( + rootDir = getDirnameFromImportMeta(import.meta.url), +) => { + return path.resolve(rootDir, '_data', 'simple-icons.json'); +}; + +/** + * Get contents of *_data/simple-icons.json*. + * @param {String} rootDir Path to the root directory of the project + * @returns {String} Content of *_data/simple-icons.json* + */ +export const getIconsDataString = ( + rootDir = getDirnameFromImportMeta(import.meta.url), +) => { + return fs.readFile(getIconDataPath(rootDir), 'utf8'); +}; + +/** + * Get icons data as object from *_data/simple-icons.json*. + * @param {String} rootDir Path to the root directory of the project + * @returns {IconData[]} Icons data as array from *_data/simple-icons.json* + */ +export const getIconsData = async ( + rootDir = getDirnameFromImportMeta(import.meta.url), +) => { + const fileContents = await getIconsDataString(rootDir); + return JSON.parse(fileContents).icons; +}; + +/** + * Replace Windows newline characters by Unix ones. + * @param {String} text The text to replace + * @returns {String} The text with Windows newline characters replaced by Unix ones + */ +export const normalizeNewlines = (text) => { + return text.replace(/\r\n/g, '\n'); +}; + +/** + * Convert non-6-digit hex color to 6-digit with the character `#` stripped. + * @param {String} text The color text + * @returns {String} The color text in 6-digit hex format + */ +export const normalizeColor = (text) => { + let color = text.replace('#', '').toUpperCase(); + if (color.length < 6) { + color = [...color.slice(0, 3)].map((x) => x.repeat(2)).join(''); + } else if (color.length > 6) { + color = color.slice(0, 6); + } + return color; +}; + +/** + * Get information about third party extensions from the README table. + * @param {String} readmePath Path to the README file + * @returns {Promise} Information about third party extensions + */ +export const getThirdPartyExtensions = async ( + readmePath = path.join( + getDirnameFromImportMeta(import.meta.url), + 'README.md', + ), +) => + normalizeNewlines(await fs.readFile(readmePath, 'utf8')) + .split('## Third-Party Extensions\n\n')[1] + .split('\n\n', 1)[0] + .split('\n') + .slice(2) + .map((line) => { + let [module, author] = line.split(' | '); + module = module.split(' { - const readmePath = path.join(root, 'README.md'); - const thirdPartyExtensions = await getThirdPartyExtensions(readmePath); - assert.ok(thirdPartyExtensions.length > 0); - - const thirdPartyExtensionsNames = thirdPartyExtensions.map( - (ext) => ext.module.name, - ); - - const expectedOrder = thirdPartyExtensionsNames.slice().sort(); - assert.deepEqual( - thirdPartyExtensionsNames, - expectedOrder, - 'Wrong alphabetical order of third party extensions in README.', - ); -}); diff --git a/tests/test-icon.js b/tests/test-icon.js index 3eda19e379a2..c3ade33d430d 100644 --- a/tests/test-icon.js +++ b/tests/test-icon.js @@ -1,14 +1,28 @@ -import fs from 'node:fs'; +import fs from 'node:fs/promises'; import path from 'node:path'; import { strict as assert } from 'node:assert'; import { describe, it } from 'mocha'; +import { + SVG_PATH_REGEX, + URL_REGEX, + getDirnameFromImportMeta, + titleToSlug, +} from '../sdk.mjs'; -const iconsDir = path.resolve(process.cwd(), 'icons'); +const iconsDir = path.resolve( + getDirnameFromImportMeta(import.meta.url), + '..', + 'icons', +); + +/** + * @typedef {import('..').SimpleIcon} SimpleIcon + */ /** * Checks if icon data matches a subject icon. - * @param {import('..').SimpleIcon} icon Icon data - * @param {import('..').SimpleIcon} subject Icon to check against icon data + * @param {SimpleIcon} icon Icon data + * @param {SimpleIcon} subject Icon to check against icon data * @param {String} slug Icon data slug */ export const testIcon = (icon, subject, slug) => { @@ -29,6 +43,7 @@ export const testIcon = (icon, subject, slug) => { it('has the correct "source"', () => { assert.equal(subject.source, icon.source); + assert.match(subject.source, URL_REGEX); }); it('has an "svg" value', () => { @@ -36,7 +51,7 @@ export const testIcon = (icon, subject, slug) => { }); it('has a valid "path" value', () => { - assert.match(subject.path, /^[MmZzLlHhVvCcSsQqTtAaEe0-9-,.\s]+$/g); + assert.match(subject.path, SVG_PATH_REGEX); }); it(`has ${icon.guidelines ? 'the correct' : 'no'} "guidelines"`, () => { @@ -53,18 +68,25 @@ export const testIcon = (icon, subject, slug) => { if (icon.license.type === 'custom') { assert.equal(subject.license.url, icon.license.url); } else { - assert.match(subject.license.url, /^https?:\/\/[^\s]+$/); + assert.match(subject.license.url, URL_REGEX); } } else { assert.equal(subject.license, undefined); } }); - it('has a valid svg value', () => { - const svgFileContents = fs - .readFileSync(svgPath, 'utf8') - .replace(/\r?\n/, ''); + it('has a valid svg value', async () => { + const svgFileContents = await fs.readFile(svgPath, 'utf8'); assert.equal(subject.svg, svgFileContents); }); + + if (icon.slug) { + // if an icon data has a slug, it must be different to the + // slug inferred from the title, which prevents adding + // unnecessary slugs to icons data + it(`'${icon.title}' slug must be necessary`, () => { + assert.notEqual(titleToSlug(icon.title), icon.slug); + }); + } }); }; diff --git a/types.d.ts b/types.d.ts new file mode 100644 index 000000000000..8ce48287b33a --- /dev/null +++ b/types.d.ts @@ -0,0 +1,30 @@ +/** + * The license for a Simple Icon. + * + * @see {@link https://github.com/simple-icons/simple-icons/blob/develop/CONTRIBUTING.md#optional-data Optional Data} + */ +export type License = SPDXLicense | CustomLicense; + +type SPDXLicense = { + type: string; + url?: string; +}; + +type CustomLicense = { + type: 'custom'; + url: string; +}; + +/** + * The data for a Simple Icon as is exported by the npm package. + */ +export interface SimpleIcon { + title: string; + slug: string; + svg: string; + path: string; + source: string; + hex: string; + guidelines?: string; + license?: License; +}