> For the complete documentation index, see [llms.txt](https://mastodon.gitbook.io/mastodon/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mastodon.gitbook.io/mastodon/dev/code.md).

# Code structure

{% hint style="danger" %}
This page is under construction.
{% endhint %}

### Code structure <a href="#code-structure" id="code-structure"></a>

The following overview should not be seen as complete or authoritative, but as a rough guidance to help you find your way in the application.

#### Ruby <a href="#ruby-1" id="ruby-1"></a>

| Path              | Description                                              |
| ----------------- | -------------------------------------------------------- |
| `app/controllers` | Code that binds business logic to templates              |
| `app/helpers`     | Code that can be used from views, i.e. common operations |
| `app/lib`         | Code that doesn’t fit in the other categories            |
| `app/models`      | Code that represents data entities                       |
| `app/serializers` | Code that generates JSON from models                     |
| `app/services`    | Complex logical operations involving multiple models     |
| `app/views`       | Templates for generating HTML or other output            |
| `app/workers`     | Code that executes outside the request-response cycle    |
| `spec`            | Automated test suite                                     |

#### JavaScript <a href="#javascript-1" id="javascript-1"></a>

| Path                      | Description                                    |
| ------------------------- | ---------------------------------------------- |
| `app/javascript/mastodon` | Code for the multi-column React.js application |
| `app/javascript/packs`    | Code for non-React.js pages                    |

#### CSS and other assets <a href="#css-and-other-assets" id="css-and-other-assets"></a>

| Path                    | Description                       |
| ----------------------- | --------------------------------- |
| `app/javascript/images` | Images                            |
| `app/javascript/styles` | Code that turns into CSS via Sass |

#### Localizations <a href="#localizations" id="localizations"></a>

| Path                              | Description                                  |
| --------------------------------- | -------------------------------------------- |
| `config/locales`                  | Server-side localizations in the YML format  |
| `app/javascript/mastodon/locales` | Client-side localizations in the JSON format |

### Localization maintenance <a href="#localization-maintenance" id="localization-maintenance"></a>

All locale files are normalized to ensure consistent formatting and key order, which minimizes changesets in version control.

| Command                        | Description                        |
| ------------------------------ | ---------------------------------- |
| `i18n-tasks normalize`         | Normalize server-side translations |
| `yarn run manage:translations` | Normalize client-side translations |
