# GitHub Crowdin Action
> A GitHub action to manage and synchronize localization resources with your Crowdin project
URL: https://store.crowdin.com/github-action
Category: Development
Type: Guide
Author: Crowdin
[](https://github.com/crowdin/github-action/network/dependents?package_id=UGFja2FnZS0yOTQyNTU3MzA0)
[](https://github.com/crowdin/github-action/releases/latest)
[](https://github.com/crowdin/github-action/releases/latest)
[](https://github.com/crowdin/github-action/graphs/contributors)
[](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
## 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).