# Contributing to Discourse development

**URL:** https://meta.discourse.org/t/contributing-to-discourse-development/3823
**Category:** Contributing
**Tags:** reference
**Created:** [February 23, 2013, 5:46am UTC](https://meta.discourse.org/t/contributing-to-discourse-development/3823 "2013-02-23T05:46:11Z")
**Posts on this page:** 1
**Showing post:** 1

<div class="post-metadata">

### Author: ![Discourse](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/discourse/32/148734_2.png) [@Discourse](https://meta.discourse.org/u/Discourse)
#### Post date: [February 23, 2013, 5:46am UTC](https://meta.discourse.org/t/contributing-to-discourse-development/3823/1 "2013-02-23T05:46:11Z")

</div>

> 🔖 This guide is designed for those who wish to contribute to the Discourse open-source project, detailing the setup and conventions necessary for effective collaboration.
> 
> 🙋 Required user level: While anyone can contribute code, you will need to be familiar with Ruby and JavaScript.

## Summary

This documentation will cover the following:

- Setting up your development environment
- Understanding where to begin contributing
- Creating and working with Discourse plugins
- Contributing to the Discourse core
- Coding conventions to follow
- Submitting your contributions on GitHub

## Setting up the development environment

Before you start contributing, ensure your development environment is properly set up. Follow the appropriate guide for your platform:

- All platforms: [Install Discourse for Development using Docker](https://meta.discourse.org/t/install-discourse-for-development-using-docker/102009)
- Mac OS X: [Beginner’s Guide to Install Discourse on macOS for Development](https://meta.discourse.org/t/beginners-guide-to-install-discourse-on-macos-for-development/15772)
- Linux (Ubuntu): [Beginner’s Guide to Install Discourse on Ubuntu for Development](https://meta.discourse.org/t/beginners-guide-to-install-discourse-on-ubuntu-for-development/14727)
- Windows: [Beginner’s Guide to Install Discourse on Windows 10 for Development](https://meta.discourse.org/t/beginners-guide-to-install-discourse-on-windows-10-for-development/75149)

## Knowing where to begin

Discourse is a large project, and understanding its underlying technologies such as Ruby and JavaScript is essential. For guidance on how to start, refer to the [newbie guide](https://meta.discourse.org/t/how-to-start-building-stuff-for-discourse-if-youre-newbie-like-myself/45954).

## Creating and working with plugins

Plugins offer a way to understand Discourse internals in manageable portions and allow you to start contributing code easily. Begin with:

- [Developing Discourse Plugins - Part 1 - Create a basic plugin](https://meta.discourse.org/t/beginners-guide-to-creating-discourse-plugins/30515?silent=true)
- [(deprecated) Plugin outlet locations theme component](https://meta.discourse.org/t/plugin-outlet-locations-theme-component/100673?silent=true)

For inspiration, explore popular ideas in #Contribute > Feature and #Customization > Extras.

## Contributing to Discourse core

Discourse core code is managed in [the core repository on GitHub](https://github.com/discourse/discourse).

### Signing the CLA

Before contributing, read and sign the [Electronic Discourse Forums Contribution License Agreement](http://www.discourse.org/cla). The team cannot legally accept pull requests (PRs) from users who haven’t signed the CLA.

### Warming up with starter tasks

Explore the #pr-welcome tag for good tasks to begin.

### Work through the bugs list

Fix bugs from the [list of open bugs ordered by likes](https://meta.discourse.org/c/bug?order=op_likes&status=open). Leave a note if you’re working on a bug - if you don’t complete it, leave any relevant notes for someone else to continue your work.

### Help with feature topics

Contribute details and mockups to [feature requests](https://meta.discourse.org/c/feature?order=op_likes&status=open) to aid their approval process. Remember, [not every feature will be included in core](https://meta.discourse.org/t/how-do-we-decide-what-goes-into-each-release-of-discourse/20870).

### Improve performance

We welcome pull requests that enhance the client or server-side performance, focusing on high-impact areas like the initial load of the front page or topic view.

### Improve Discourse maintained projects

Contribute to other open-source projects maintained by Discourse. Some notable projects include:

- [Logster](https://github.com/discourse/logster) - web GUI log viewer
- [Message Bus](https://github.com/discourse/message_bus) - engine for live site interactions
- [Rack Mini Profiler](https://github.com/MiniProfiler/rack-mini-profiler) - diagnostics tool
- [Discourse API](https://github.com/discourse/discourse_api) - API consumer
- [Discourse Docker](https://github.com/discourse/discourse_docker) - Discourse distribution engine
- [WP Discourse](https://github.com/discourse/wp-discourse) - WordPress plugin
- [Memory Profiler](https://github.com/SamSaffron/memory_profiler) - profiler for Ruby
- [Ember Performance](https://github.com/eviltrout/ember-performance) - Ember performance test suite

## Coding conventions

### Naming is CRITICAL

Aim for 100% parity between terms used on the site and names of classes and columns in the database (e.g., “posts”).

### Compatibility with the latest versions of dependencies is CRITICAL

Ensure compatibility with the latest stable releases of libraries like Rails, Ruby, and Ember. Test for regressions when updating dependencies.

### Test-only contributions are welcome

Test contributions are welcomed, especially for untested processes and controller actions. Avoid mocking unless absolutely necessary.

### Refactor-only contributions are NOT welcome

Avoid submitting refactor-only pull requests. Instead, fix a bug or implement a feature while improving the code.

## Submitting code on GitHub

### Step-by-step workflow

1. **Clone the Discourse repository:**

2. **Create a new branch:**

3. **Code:**

4. **Follow coding conventions:**

5. **Commit:**

6. **Update your branch:**

7. **Fork:**

8. **Push to your remote:**

9. **Issue a [pull request](https://help.github.com/articles/proposing-changes-to-a-project-with-pull-requests/):**

```plaintext
git fetch origin
git checkout new_discourse_branch
git rebase origin/main
git rebase -i

< the editor opens and allows you to change the commit history >
< follow the instructions on the bottom of the editor >

git push -f mine new_discourse_branch

```

1. **Respond to feedback:**
  - Be responsive to feedback and ready to implement suggested changes.
  - Remember, feedback means your work is valued and intended for inclusion.

Thank you for contributing to the Discourse open-source project!

> Last edited by @southpaw 2025-11-25T14:29:28Z
> 
> Last checked by @hugh 2024-06-20T01:46:07Z
> 
> > **Check document**
> >
> > Perform check on document:

---

_[View the full topic](https://meta.discourse.org/t/contributing-to-discourse-development/3823)._
