+++
title = "Developers"
categories = [ "Contribute" ]
summary = "The basics of contributing to KiCad application development"
[menu.main]
    parent = "Contribute"
    name   = "Developers"
    weight = 20
+++

== Contributing to KiCad (application) development
KiCad has been a community driven effort of engineers developing on their limited time.
We welcome anyone to contribute bug fixes, improvements and new features.


=== Developer mailing list
The first thing to do before anything is to join the
link:https://launchpad.net/~kicad-developers[KiCad Developers Mailing List].
Here you can ask broad questions and present your ideas or plans if it's beyond a bug fix.


=== Obtaining the code
KiCad uses link:https://git-scm.com/book/en/v2/Getting-Started-What-is-Git[Git] 
for source control.

If you are new to git, it is highly suggested you 
find and follow the many tutorials available online like
link:http://learngitbranching.js.org/[this one] 
and/or read the git link:https://git-scm.com/doc[documentation].


We also are dedicated to using GitLab as our primary hosting platform for our Git repositories.

All repos can be found https://gitlab.com/kicad/[here].


The repository for the main application can be found https://gitlab.com/kicad/code/kicad/[here]

=== Compiling the code
Follow the instruction in the link:http://docs.kicad-pcb.org/doxygen/md_Documentation_development_compiling.html[documentation]
corresponding to your platform to set up a working build environment
and successfully build KiCad from source.

=== Code Documentation

To familiarize yourself with the code base you can read the
documentation generated by Doxygen. When submitting new code, please
remember to update the documentation descriptions. You can run
`make doxygen-docs` to generate the documentation locally.

The latest version of the same docs are also available on the Jenkins
server, see
link:http://docs.kicad-pcb.org/doxygen/namespaces.html[KiCad Developer Docs for the C++ API].

You can also find various developer notes in the Doxygen docs, see
link:http://docs.kicad-pcb.org/doxygen/pages.html[the
related pages].

=== Before you submit
After you make changes, please ensure your code meets the link:http://docs.kicad-pcb.org/doxygen/md_Documentation_development_coding-style-policy.html[KiCad Coding Style Policy].

it's important for us to keep the codebase readable by
all developers. Your patches will not be accepted until adhere to the rules set forth in the policy.

If you feel like working on the user interface, you may find useful reading the
link:http://docs.kicad-pcb.org/doxygen/md_Documentation_development_ui-policy.html[User Interface Guidelines].

Programming is an iterative process, don't worry if you have to go back and make changes to your patches, we all do.

=== Submitting the code
All patches should be submitted as a *merge request* on GitLab. 
See this https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html[How to create a merge request] for new users on how.

*Note: There is a GitHub mirror of KiCad but all pull requests are ignored, we only accept changes on GitLab*

=== Fix any CI issues
The GitLab repository has Continous Integration (CI) enabled. This means it automatically runs processing steps on incoming commits to do a few tasks from making sure
the code can compile to coding style policy.

You can find the status of the CI job on the merge request page and see its output. If you need help, you may ask in the merge request for a developer to comment on what to do to resolve it.


== Starter / Beginner Patches
Don't have any ideas in general on what to do but want to help?

You might want to look into link:++https://gitlab.com/kicad/code/kicad/issues?scope=all&utf8=%E2%9C%93&state=opened&label_name[]=starter++[issues labeled as 'starter'].

Or for example if you are an macOS user, you might want to check the
following
link:++https://gitlab.com/kicad/code/kicad/issues?scope=all&utf8=%E2%9C%93&state=opened&label_name[]=macos++[issues tagged as 'macos'].


== Internet Relay Chat (_IRC_)

Feel free to join the IRC channel at
irc://irc.freenode.net/#kicad[#kicad@freenode]. A nice bunch of people
are casually hanging around in there, so if you have any questions and
don't know where to ask, you should try asking in here. There are all
kinds of people in all kinds of time zones, both people who develop KiCad
and plain enthusiastic users.