# Contributing to the iNaturalist codebase

**URL:** <https://forum.inaturalist.org/t/contributing-to-the-inaturalist-codebase/26081>\
**Category:** Tutorials\
**Created:** [September 3, 2021, 9:38am UTC](https://forum.inaturalist.org/t/contributing-to-the-inaturalist-codebase/26081 "2021-09-03T09:38:13Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![agoranomos](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.inaturalist.org/agoranomos/32/14607_2.png) [@agoranomos](https://forum.inaturalist.org/u/agoranomos)\
**Post date:** [September 3, 2021, 9:38am UTC](https://forum.inaturalist.org/t/contributing-to-the-inaturalist-codebase/26081/1 "2021-09-03T09:38:13Z")

</div>

I’ve recently been spending a bit of my spare time contributing bug fixes to the iNaturalist codebase. This has been a rewarding way to contribute to iNaturalist, and setting it up has given me something else to do during the New Zealand winter months.

The path to setup a development environment before beginning coding took a bit of time, and isn’t super straightforward. I ended up scripting my setup almost completely - in order to share with others and so I could rebuild it quickly if I needed to.

I reckon there’s a few others out there who might also be able to contribute, so I thought I’d share how I’ve set things up to make the path smoother for others to join me.

### Before you begin you should take a look at:

- [The iNaturalist Development Setup Guide](https://github.com/inaturalist/inaturalist/wiki/Development-Setup-Guide)
- [The Official Contributing Guidelines](https://github.com/inaturalist/inaturalist/blob/main/CONTRIBUTING.md)
- [The general development guide](https://www.inaturalist.org/pages/developers)
- [All the open issues in github](https://github.com/inaturalist/inaturalist/issues)

### My setup scripts

[My setup scripts and instructions are here](https://github.com/seanclifford/inat-dev-setup). These will probably only work on Ubuntu - but could probably be used as a additional guide to assist with setup on macOS. They are mostly scripted versions of what’s already in the setup guide linked above.

### How I’ve setup everything else

I’m running Windows 10, so ended up installing Ubuntu (lubuntu distro) on a VM (VirtualBox). I guess I could have attempted using [WSL](https://ubuntu.com/wsl), but I don’t trust it to work flawlessly.  
The VM is also handy to create snapshots, so when I’ve hosed my environment, I can revert to a known good version.  
I’m currently using up about 35GB of disk space with this setup.

For an IDE, I run Visual Studio Code in Windows with the [Remote extension](https://code.visualstudio.com/docs/remote/remote-overview). This allows me to remotely develop on code running in the VM - after setting up a ssh key for the connection.  
I have got debugging working remotely, but that took a bit of fiddling around - I can elaborate further if anyone is interested.

As well as being able to use a browser in the VM, I’ve also opened up the 3000 (web) and 4000 (api) ports on my VM so I can browse to my development site from Windows.

If you’ve got some coding skills, and some spare time, I recommend trying it out!

---

<div class="post-metadata">

**Author:** ![cthawley](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.inaturalist.org/cthawley/32/1445_2.png) [@cthawley](https://forum.inaturalist.org/u/cthawley)\
**Post date:** [September 3, 2021, 12:05pm UTC](https://forum.inaturalist.org/t/contributing-to-the-inaturalist-codebase/26081/2 "2021-09-03T12:05:29Z")

</div>

Seems great (though I don’t have the coding expertise to do this myself!). There is a forum category for tutorials (like [this example](https://forum.inaturalist.org/t/using-identify-to-annotate-observations/1417)) and this post seems appropriate for that, so maybe this post could go there?

---

<div class="post-metadata">

**Author:** ![optilete](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.inaturalist.org/optilete/32/1908_2.png) [@optilete](https://forum.inaturalist.org/u/optilete)\
**Post date:** [September 3, 2021, 1:25pm UTC](https://forum.inaturalist.org/t/contributing-to-the-inaturalist-codebase/26081/3 "2021-09-03T13:25:28Z")

</div>

👍 👍

---

<div class="post-metadata">

**Author:** ![jdmore](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.inaturalist.org/jdmore/32/1116_2.png) [@jdmore](https://forum.inaturalist.org/u/jdmore)\
**Post date:** [September 3, 2021, 8:07pm UTC](https://forum.inaturalist.org/t/contributing-to-the-inaturalist-codebase/26081/4 "2021-09-03T20:07:24Z")

</div>

> [@cthawley](#):
>
> There is a forum category for tutorials (like [this example](https://forum.inaturalist.org/t/using-identify-to-annotate-observations/1417)) and this post seems appropriate for that, so maybe this post could go there?

I went ahead and re-categorized this topic.

---

<div class="post-metadata">

**Author:** ![agoranomos](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.inaturalist.org/agoranomos/32/14607_2.png) [@agoranomos](https://forum.inaturalist.org/u/agoranomos)\
**Post date:** [September 3, 2021, 9:58pm UTC](https://forum.inaturalist.org/t/contributing-to-the-inaturalist-codebase/26081/5 "2021-09-03T21:58:34Z")

</div>

I guess it does read like a tutorial, even though I didn’t really set out to create one!

I am interested in hearing if anyone tries this out, and happy to try to help anyone who gets stuck setting up a development environment.  
Feel free to direct message me, especially if this topic is closed after a couple of months.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex016/uploads/inaturalist/original/2X/7/7831452cf7f0d653ff1ffd34176334b7ef1b6a17.png) [@system](https://forum.inaturalist.org/u/system)\
**Post date:** [November 2, 2021, 9:59pm UTC](https://forum.inaturalist.org/t/contributing-to-the-inaturalist-codebase/26081/6 "2021-11-02T21:59:27Z")

</div>

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.
