Contribute to Exercism

So you want to contribute to exercism?
That is great news! We welcome all sorts of contributions and will do everything we can to help you get started.

Exercism is a project comprised of several repositories and these can be divided basically into:

  1. The website: Holds the code that people submit. Browse and review solutions, and have conversations.
  2. Command line interface: Used to fetch exercises and submit solutions.
  3. Language track repositories: Contains the exercise implementations for each language.
  4. Problem metadata: Contains the language-specific implementations of exercises. Each language has its own repository.
  5. Problems API: Delivers exercises. Consumed by the Exercism command-line client, as well as the Exercism website.
  6. Rikki- the robot: Provides helpful, friendly, automated feedback on certain exercises.
View the active repositories you can contribute to.


Help Triage Issues

We've got a huge number of old issues that aren't particularly actionable, and new issues come in all the time.

Is an issue no longer relevant? Can it be closed? Do we need more information? If it's a bug, is it reproducible? If it's a discussion and we need to make some sort of decision, then it should be labeled as such.

Help us get our issues under control.

Improve the UX

Want to help people be less frustrated and more successful?

We need help at every level of design. Know how to design icons? Wonderful. Want to make the pages look consistent and line things up? Fantastic. Want to redesign an entire page or feature or section? Open an issue so we can talk through some of the hard-earned learning that we've picked up along the way.

Fix Bugs

Exercism is currently a collection of experiments that grew into an app with the help of duct tape, chewing gum, and chicken wire. It's a mess, and it's got bugs.

Check out the list of open bugs if you want to help us troubleshoot, find reproduction steps, and fix stuff.

Review Pull Requests

We want the quality of the exercises to be as high as possible (and reviewing pull requests is a great way to both learn and teach a programming language).

We look at all sorts of things: style, idiomatic use of language features, naming, missing test cases, and redundant test cases. We also try to avoid forcing the solution to take a particular approach. Subscribe to the language track repositories of your favorite languages so you get notifications about new issues and pull requests. The track maintainers will greatly appreciate your help!

You can search for language track repositories here.

Canonicalize Data

Different implementations of the same exercise often drift apart as people solving them discover different, interesting edge cases. Defining a canonical set of test data helps improve the quality all the implementations, and makes it easier to port the exercise to new languages.

Do a survey of the existing implementations, and decide on a good set of test data. Submit a pull request to the metadata repository suggesting a good set of test data, and the track maintainers will be delighted to discuss it with you.

Help Launch a Track

Sometimes a language track is already planned or even exists, but are not in a state to be released just yet. These tracks can be seen in the lower sections of the languages page.

Check out the section about beta testing in the Contributing Guide.

Didn't find a language? We're always looking to increase our supported language tracks. Email Katrina, she'll be glad to help.

Check out the section about starting a new track in the Contributing Guide.

Make Up Exercises

We're always looking to add new exercises. Have an idea? Suggest it in the metadata repository.

Check out the section about implementing a new exercise in the Contributing Guide.

Translate Exercises

Another great way to add new exercises is port an existing exercise to one of the other languages. This is easier than making up an exercise from scratch, since other people have thought through which test cases are needed.

Track maintainers are more than happy to give you all the support you need to successfully contribute.

Check out the detailed guide if you want to give it a try!

Help Us Think

There's a lot that we haven't quite figured out about how to make Exercism as useful as possible.

If you like to think through usability issues, communication, design, features, roadmap, collaboration, or any other exciting open source stuff, join us in the discussions repository, where we're trying to sort out Exercism's future.

Have a new idea? Open a discussion so we can push things further.