Contributing to Devicon

First of all, thanks for taking the time to contribute! This project can only grow and live by your countless contributions. To keep this project maintable we developed some guidelines for contributions.

Table of Content


Terms

Here are some terms that we will use in this repo:

  1. "Icon" refers to the set of svgs/icons of a technology/tool. Ex: We might refer to the React svgs and React icons as the React Icon
  2. "SVG/.svg" refers to the svg versions of the Icons.
  3. "icons" (lowercase) refers to the font icon versions of the Icons.

Overview on Submitting Icons

Here is an overview of what you have to do to submit your icons to the repo.

  1. Create the svgs for each svg versions that you have
  2. Put the svgs of each Icon into its own folders in /icons
  3. Update the devicon.json to include the new Icon
  4. Create a separated pull request (PR) for each Icon.
  5. Include the name of the Icon in the pull request title in this format: new icon: Icon name (versions)
  6. Optional: Add images of the new svg(s) to the description of the pull request. This would help speed up the review process
  7. Optional: Reference the issues regarding the new icon.
  8. Wait for a maintainer to review your changes. They will run a script to check your icons.
  9. If there are no issue, they will accept your PR into the repo. Else, they will let you know and give you a chance to fix it.

Versions and Naming Conventions

Each icon/svg can come in different versions. So far, we have:

Notes


SVG Standards

Before you submit your logos/svgs, please ensure that they meet the following standard:


Organizational Guidelines


Updating the devicon.json

Before you open a PR into Devicon, you must update the devicon.json. This is essential for our build script to work and to document your work.

Here is the object that each of your Icon must have:

  
    {
        "name": string, // the official name of the technology. Must be lower case, no space and don't have the dash '-' character.
        "tags": string[], // list of tags relating to the technology for search purpose
        "versions": {
            "svg": VersionString[], // list the svgs that you have 
            "font": VersionString[] // list the fonts acceptable versions that you have
        },
        "color": string, // the main color of the logo. Only track 1 color
        "aliases": AliasObj[] // keeps track of the aliases for the font versions ONLY
    }
  

Here is what VersionString means:

  1. It's the version part of an svg file's name
  2. If you have "html5-original", the version string would be "original"
  3. If you have "react-line-wordmark", the version string would be "line-wordmark"
  4. See naming conventions section for more details

Here is the AliasObj interface:

     
    {
        "base": VersionString, // the base version
        "alias": VersionString // the alias version that's similar to the base version
    }
  

Example

As an example, let's assume you have created the svgs for Redhat and Amazon Web Services logos.

For the Redhat svg, you have the "original", "original-wordmark", "plain", and "plain-wordmark" versions.

For the Amazon Web Services svgs, you have the "original", "original-wordmark", "plain-wordmark" versions. The "original" version is simple enough to be a "plain" version as well. Note that we are not using the acronym AWS.

  1. Put the svgs for each logo that you have into its own folders in /icons
  2. Update the devicon.json
  3. Create a separate pull request (PR) for each Icon.
  4. Include the name of the icon in the pull request. Follow this format: "new icon: Icon name (versions}})"
  5. For the rest of the steps, you can follow Overview on Submitting Icon

Requesting an Icon

To request an icon, you can create an issue in the repo. Please follow these simple guidelines:


Regarding The Build Script

To make adding icons easier for repo maintainers, we rely on GitHub Actions, Python, Selenium, and Gulp to automate our tasks.

So far, the tasks in the build script are:

There are also other tasks that we are automating, such as: