This space is dedicated to Earth Engine users who want to share their knowledge
with the rest of the Earth Engine community. Created by Earth Engine users,
for Earth Engine users, tutorials in this section are intended for all levels,
from beginner to more advanced users.

Tutorials may be submitted as plain text and code formatted using the Markdown
markup language, or as Colab notebooks containing Markdown and executable Python
code. Tutorials built using the Earth Engine JavaScript client libraries are
generally written in Markdown, while Colab is recommended for tutorials based
on the Earth Engine Python client libraries.

## Before you begin

### Code of Conduct

The Earth Engine team is committed to fostering a harassment-free and inclusive
community. Please familiarize yourself with our
[Code of Conduct](https://opensource.google/docs/releasing/template/CODE_OF_CONDUCT/)
before contributing.

### Joining GitHub

Earth Engine community tutorials are shared and reviewed through GitHub. If you don't already have a GitHub account, you must first create one at https://github.com/join.

### Proposing a tutorial

Before investing significant time and effort on a new tutorial, potential
contributors are asked to submit a simple proposal with some basic information.
This allows authors to work with the maintainers of the Earth Engine developer
documentation to focus efforts on tutorials that provide the most value to the
Earth Engine user community. It also saves time by avoiding potential back-and-
forth during the review process.

[Propose a tutorial](https://github.com/google/earthengine-community/issues/new?assignees=gino-m,+tylere&labels=tutorial+proposal&template=propose-a-tutorial.md&title=%5BTutorial+proposal%5D+Your+tutorial+title+here)

### First time setup

If this is the first time you're submitting a tutorial to the Earth Engine
community GitHub repository, be sure to complete these steps *before* starting
work on your tutorial:

1. Accept the Contributor License Agreement (CLA) at:

   https://cla.developers.google.com
2. Read and internalize the [Community Tutorial Style Guide](https://developers.google.com/earth-engine/tutorials/community/styleguide).

## Writing and submitting a tutorial

Once your tutorial proposal is accepted by the maintainers, there several
options for editing the tutorial and for submitting it to the Earth Engine
community repository:

### Markdown quick start

You can fork the GitHub repository and create a new tutorial directly via
the GitHub website to quickly get started without additional tools or
setup:

1. If you haven't already, [sign into GitHub](https://github.com/login).

2. To create and edit a new tutorial file, click *New tutorial*.
   You'll be prompted to fork the repository, if needed.

   [New tutorial](https://github.com/google/earthengine-community/new/master/tutorials?value=---%0Atitle:+Your+tutorial+title%0Adescription:+A+short+description+of+the+tutorial,+all+on+one+line+with+no+carriage+returns.%0Aauthor:+your-github-username%0Atags:+comma-separated,+lowercase,+list,+of,+related,+keywords%0Adate_published:+YYYY-MM-DD%0A---%0A%3C!--%0ACopyright+2023+The+Google+Earth+Engine+Community+Authors%0A%0ALicensed+under+the+Apache+License,+Version+2.0+(the+%22License%22);%0Ayou+may+not+use+this+file+except+in+compliance+with+the+License.%0AYou+may+obtain+a+copy+of+the+License+at%0A%0A++++https://www.apache.org/licenses/LICENSE-2.0%0A%0AUnless+required+by+applicable+law+or+agreed+to+in+writing,+software%0Adistributed+under+the+License+is+distributed+on+an+%22AS+IS%22+BASIS,%0AWITHOUT+WARRANTIES+OR+CONDITIONS+OF+ANY+KIND,+either+express+or+implied.%0ASee+the+License+for+the+specific+language+governing+permissions+and%0Alimitations+under+the+License.%0A--%3E%0A%0AIn+a+few+sentences,+describe+what+the+user+is+going+to+learn.+Be+sure+to+include%0A_concise_+background+information;+only+include+what's+helpful+and+relevant.%0AWhen+in+doubt,+leave+it+out!%0A%0A%23%23+Section+heading+1%0A%0ABreak+up+your+tutorial+into+manageable+sections.%0A%0AWith+one+or+more+paragraphs,+separated+by+a+blank+line.%0A%0AInside+your+sections,+you+can+also:%0A%0A1.+Use+numbered+lists%0A1.+..when+the+order..%0A1.+..of+items+is+important.%0A%0AAnd:%0A%0A-+This+is+a+bulleted+list.%0A-+Use+bulleted+lists+when+items+are+not+strictly+ordered.%0A%0A..and+even:%0A%0AUse+++++%7C+tables+++%7C+to+organize+%7C+content%0A---+%7C+---+%7C+---+%7C+---%0AYour++++%7C+tables+++%7C+can+++++++++%7C+also%0Acontain+%7C+multiple+%7C+rows++++++++%7C+...%0A%0A%23%23+Section+heading+2%0A%0AUse+separate+sections+for+related,+but+discrete,+groups+of+steps.%0A%0AUse+code+blocks+to+show+users+how+to+do+something+after+describing+it:%0A%0A%60%60%60js%0A//+Use+comments+to+describe+details+that+can't+be+easily+expressed+in+code.%0A//+Always+try+making+code+more+self+descriptive+before+adding+a+comment.%0A//+Similarly,+avoid+repeating+verbatim+what's+already+said+in+code%0A//+(e.g.,+%22assign+ImageCollection+to+variable+'coll'%22).%0Avar+coll+%3D+ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');%0A%60%60%60%0A%0A%23%23%23+Use+subsections+if+appropriate%0A%0AConsider+breaking+longer+sections+that+cover+multiple+topics+or+span+multiple%0Apages+into+subsections.)
3. Enter a name for the tutorial file of the form:

   `your-tutorial-name/index.md`

   Where `your-tutorial-name` is the short name of your tutorial in
   all lowercase. Use dashes ("-") to separate words. Do not use
   spaces or any other punctuation in the folder name.
4. Edit your tutorial directly in the GitHub file editor, using
   "Preview" to verify the formatted output (see also [Editing files in
   your repository](https://help.github.com/en/github/managing-files-in-a-repository/editing-files-in-your-repository) in the GitHub documentation).

5. Once ready, commit your changes and open a pull request.

### Colab notebook

Click here to get started writing a tutorial in Colab:

[New Colab tutorial](https://colab.research.google.com/github/google/earthengine-community/blob/master/tutorials/tutorial-template.ipynb)

This will open a notebook containing instructions for authoring and
submitting your tutorial.

### Advanced

If you're already familiar with GitHub, git, and related tools, the
overall process is the same for submitting both Markdown and Colab
tutorials:

1. Fork and clone the [google/earthengine-community](https://github.com/google/earthengine-community) GitHub
   repository.

2. Create a directory under `tutorials` with the slugified short name of
   your tutorial (e.g., `tutorials/my-amazing-tutorial`).

3. Add the appropriate header for [Markdown](https://developers.google.com/earth-engine/tutorials/community/styleguide#markdown) or
   [Colab](https://developers.google.com/earth-engine/tutorials/community/styleguide#colab).

4. Commit the tutorial to the new directory with the filename `index.md`
   (for Markdown) or `tutorial.ipynb` (for Colab). Commit images used in
   the tutorial to the same directory.

5. Push the new content to your fork and [open a pull
   request](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request-from-a-fork).

When creating a pull request, be sure to refer to the original proposal by its
GitHub issue number in the comment section. For example, if the issue was
#123, you would place the text "Closes #123" in the pull request description to
reference the original proposal, and to automatically mark it as done once the
tutorial is published.

Once you've opened a pull request, one or more maintainers will be assigned to
review your submission. The reviewer(s) will work with you to ensure your
submission is complete, correct, and that it is consistent with the [Earth
Engine Community Tutorial Style Guide](https://developers.google.com/earth-engine/tutorials/community/styleguide).

Once your pull request is approved, your tutorial will be published by the
repository maintainers.