# GitHub Crowdin Action

> A GitHub action to manage and synchronize localization resources with your Crowdin project

URL: https://store.crowdin.com/github-action
Identifier: github-action
Category: Development
Type: Guide
Author: Crowdin

[<img src='https://img.shields.io/static/v1?label=Used%20by&message=13k&color=brightgreen&logo=github&cacheSeconds=10000' class='blank'/>](https://github.com/crowdin/github-action/network/dependents?package_id=UGFja2FnZS0yOTQyNTU3MzA0)
[<img src='https://img.shields.io/github/v/release/crowdin/github-action?cacheSeconds=5000&logo=github' class='blank'/>](https://github.com/crowdin/github-action/releases/latest)
[<img src='https://img.shields.io/github/release-date/crowdin/github-action?cacheSeconds=5000' class='blank'/>](https://github.com/crowdin/github-action/releases/latest)
[<img src='https://img.shields.io/github/contributors/crowdin/github-action?cacheSeconds=5000' class='blank'/>](https://github.com/crowdin/github-action/graphs/contributors)
[<img src='https://img.shields.io/github/license/crowdin/github-action?cacheSeconds=50000' class='blank'/>](https://github.com/crowdin/github-action/blob/master/LICENSE)

## What does this action do?

- Uploads sources to Crowdin.
- Uploads translations to Crowdin.
- Downloads translations from Crowdin.
- Creates a PR with the translations.

:::tip[GitHub Action 3.0 is here! 🚀]

The v3 action runs on **Crowdin CLI 5** - a TypeScript rewrite powered by Bun, with instant startup, a single self-contained binary, and no bundled Java runtime. Commands and config stay the same, so most workflows carry over unchanged when upgrading from v2:

```yaml
- name: Crowdin action
  uses: crowdin/github-action@v3
```

A few CLI options changed in 5.0 - [see the breaking changes](https://crowdin.github.io/crowdin-cli/blog/2026/08/26/cli-v5#breaking-changes) if you pass custom arguments.

:::

## Getting started with Crowdin Action

<div class="video"><iframe style="overflow:hidden; max-width: 68vw; max-height: 37.25vw;" height="100%" width="100%" src="https://www.youtube.com/embed/5b7BMuCoKGg" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen=""></iframe></div>

## Usage

Set up a workflow in *.github/workflows/crowdin.yml* (or add a job to your existing workflows).

Read the [Configuring a workflow](https://help.github.com/en/articles/configuring-a-workflow) article for more details on how to create and set up custom workflows.

```yaml
name: Crowdin Action

on:
  push:
    branches: [ main ]

jobs:
  synchronize-with-crowdin:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v7

    - name: Crowdin action
      uses: crowdin/github-action@v3
      with:
        upload_sources: true
        download_translations: true
      env:
        GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
        CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
        CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
```

For more details and examples, see the [Official Documentation](https://github.com/crowdin/github-action#readme).

## Supported options

The default action is to upload sources. Though, you can set different actions through the “with” options. If you don't want to upload your sources to Crowdin, just set the `upload_sources` option to false.

By default sources and translations are being uploaded to the root of your Crowdin project. Still, if you use branches, you can set the preferred source branch.

You can also specify what GitHub branch you’d like to download your translations to (default translation branch is `l10n_crowdin_action`).

In case you don’t want to download translations from Crowdin (`download_translations: false`), `localization_branch_name` and `create_pull_request` options aren't required either.

For more detailed list of supported options, see the [Official Documentation](https://github.com/crowdin/github-action#readme).

### Crowdin configuration file

If your workflow file specifies the `config` property, you'll need to add the following to your [Crowdin configuration file](https://support.crowdin.com/configuration-file/) (e.g. `crowdin.yml`):

```yml
project_id_env: CROWDIN_PROJECT_ID
api_token_env: CROWDIN_PERSONAL_TOKEN
```

When the workflow runs, the real values of your token and project ID will be injected into the config using the secrets in the environment.

## Contributing

If you would like to contribute, please read the [Contributing](https://github.com/crowdin/github-action/blob/master/CONTRIBUTING.md) guidelines.

## Seeking Assistance

If you find any problems or would like to suggest a feature, please feel free to file an issue on GitHub at [Issues Page](https://github.com/crowdin/github-action/issues).

## Resources

- [Guide](https://github.com/marketplace/actions/crowdin-action)
- [More GH Actions](https://store.crowdin.com/tags/github-action)
- [Examples](https://github.com/crowdin/github-action/blob/master/docs/EXAMPLES.md#crowdin-action-usage-examples)
- [AI Localization](https://github.com/crowdin/github-action/blob/master/docs/AI.md#ai-localization)
- [Configuration File](https://developer.crowdin.com/configuration-file/)
- [GitHub Actions workflows](https://docs.github.com/en/actions/using-workflows)
- [Source Code](https://github.com/crowdin/github-action)
