# Contributing to LocalSend
LocalSend is an open-source project, and we welcome contributions from anyone who is interested in helping improve the app. Whether you're a developer, a translator, or a documentation writer, there are many ways to get involved.
## Getting Started
If you're interested in contributing code to LocalSend, you'll need to follow these steps:
## Run
After you have installed [Flutter](https://flutter.dev), then you can start this app by typing the following commands:
```shell
flutter pub get
flutter pub run build_runner build -d
flutter run
```
## Translation
You can help in translating this app to other languages!
1. Fork this repository
2. Choose one
- Add missing translations in existing languages: Only update `_missing_translations_.json` in [assets/i18n](https://github.com/localsend/localsend/tree/main/app/assets/i18n)
- Fix existing translations: Update `strings_.i18n.json` in [assets/i18n](https://github.com/localsend/localsend/tree/main/app/assets/i18n)
- Add new languages: Create a new file, see also: [locale codes](https://saimana.com/list-of-country-locale-code/).
3. Optional: Re-run this app
1. Make sure you have [run](#run) this app once.
2. Update translations via `flutter pub run slang`
3. Run the app via `flutter run`
4. Open a pull request
**_Take note:_ Fields decorated with `@` are not meant to be translated, they are not used in the app in any way, being merely informative text about the file or to give context to the translator.**
Thanks to all [translators](https://github.com/localsend/localsend/tree/main/app/lib/pages/about/translators.dart)!
## Contributing Guidelines
Before you submit a pull request to LocalSend, please ensure that you have followed these guidelines:
- Code should be well-documented and formatted according to the [Dart Style Guide](https://dart.dev/guides/language/effective-dart/style).
- All changes should be covered by tests.
- Commits should be well-written and descriptive, with a clear summary of the changes made and any relevant context.
- Pull requests should target the `main` branch and include a clear summary of the changes made.
## Bug Reports and Feature Requests
If you encounter a bug in LocalSend or have a feature request, please submit an issue to the [issue tracker](https://github.com/localsend/localsend/issues). Please be sure to provide a clear description of the problem or feature request, along with any relevant context or steps to reproduce the issue.
## Security Issues
If you discover a security issue in LocalSend, please do not submit an issue to the public issue tracker. Instead, please email us directly at [[email protected]](mailto:[email protected]) so that we can address the issue as quickly and effectively as possible.
## Distribution
Git based distribution:
| Channel | Repository | Maintainer |
|----------------|---------------------|----------------------------------------------------|
| [Winget][] | [Winget Repo][] | [@sitiom][], [@Tienisto], Github Actions |
| [Scoop][] | [Scoop Repo][] | [@sitiom][], [@Tienisto], Github Actions |
| [Chocolatey][] | [Chocolatey Repo][] | [@brogers5][] |
| [Homebrew][] | [Homebrew Repo][] | [@Tienisto][], Github Actions |
| [Flathub][] | [Flathub Repo][] | [@proletarius101][], [@Tienisto][], Github Actions |
| [AUR][] | [AUR Repo][] | [@Nixuge][] |
| [Nixpkgs][] | [Nixpkgs Repo][] | [@sikmir][], [@linsui][] |
| [F-Droid][] | [F-Droid Repo][] | [@linsui][], [@Tienisto][], [F-Droid CI][] |
| [Snap][] | [Snap Repo][] | [@thatLeaflet][] |
[winget]: https://github.com/microsoft/winget-pkgs/tree/master/manifests/l/LocalSend/LocalSend
[winget repo]: https://github.com/microsoft/winget-pkgs/tree/master/manifests/l/LocalSend/LocalSend
[scoop]: https://scoop.sh/#/apps?s=0&d=1&o=true&q=localsend&id=fb88113be361ca32c0dcac423cb4afdeda0b0c66
[scoop repo]: https://github.com/ScoopInstaller/Extras/blob/master/bucket/localsend.json
[chocolatey]: https://community.chocolatey.org/packages/localsend
[chocolatey repo]: https://github.com/brogers5/chocolatey-package-localsend/tree/main
[homebrew]: https://formulae.brew.sh/cask/localsend
[homebrew repo]: https://github.com/Homebrew/homebrew-cask/blob/master/Casks/l/localsend.rb
[flathub]: https://flathub.org/apps/details/org.localsend.localsend_app
[flathub repo]: https://github.com/flathub/org.localsend.localsend_app
[aur]: https://aur.archlinux.org/packages/localsend-bin
[aur repo]: https://aur.archlinux.org/localsend-bin.git
[nixpkgs]: https://search.nixos.org/packages?show=localsend
[nixpkgs repo]: https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/networking/localsend/default.nix
[f-droid]: https://f-droid.org/packages/org.localsend.localsend_app
[f-droid repo]: https://gitlab.com/fdroid/fdroiddata/-/blob/master/metadata/org.localsend.localsend_app.yml
[snap]: https://snapcraft.io/localsend
[snap repo]: https://github.com/localsend/snap
Manual distribution:
| Channel | Maintainer |
|----------------|------------------------------------------|
| [App Store][] | [@Tienisto](https://github.com/Tienisto) |
| [Play Store][] | [@Tienisto](https://github.com/Tienisto) |
| [Amazon][] | [@Tienisto](https://github.com/Tienisto) |
[app store]: https://apps.apple.com/us/app/localsend/id1661733229
[play store]: https://play.google.com/store/apps/details?id=org.localsend.localsend_app
[amazon]: https://www.amazon.com/dp/B0BW6MP732
Binary distribution:
| Type | Maintainer | Credits |
|-------------|---------------|------------------------------|
| Windows ZIP | [@Tienisto][] | |
| MSIX | [@Tienisto][] | |
| EXE | [@Tienisto][] | |
| APK | [@Tienisto][] | |
| TAR | [@Tienisto][] | |
| DEB | [@Tienisto][] | |
| AppImage | [@Tienisto][] | [@TheGB0077][] |
| DMG | [@Tienisto][] | |
[@Tienisto]: https://github.com/Tienisto
[@TheGB0077]: https://github.com/TheGB0077
[@sitiom]: https://github.com/sitiom
[@Nixuge]: https://github.com/Nixuge
[@proletarius101]: https://github.com/proletarius101
[@brogers5]: https://github.com/brogers5
[@sikmir]: https://github.com/sikmir
[@linsui]: https://github.com/linsui
[@thatLeaflet]: https://github.com/thatLeaflet
[F-Droid CI]: https://gitlab.com/fdroidci
TODO:
You can help in publishing LocalSend on more platforms. Please create an issue to notify us!
- Traditional Linux distributions (Debian, Fedora, etc.)
- (Your idea here)
## Notes
Useful notes.
### Compile production APK
You will need the signing keys to generate an APK.
Either generate one or use the debug signing options:
```groovy
// File: android/app/build.gradle
buildTypes {
release {
signingConfig signingConfigs.debug // using debug signing
}
}
```
### Bump Flutter
Suppose we want to update flutter to `3.7.8` (see https://github.com/localsend/localsend/commit/7b95a7a5600db2742a9e05b956d0415d871239d5):
1. Update flutter from fvm: `fvm use 3.7.8`
2. Update flutter from submodule:
1. `git submodule update --init`
2. `cd submodules/flutter`
3. `git fetch`
4. `git checkout 3.7.8`
5. `cd ../..`
6. `git add submodules/flutter`
3. Update flutter constraints:
1. In CI: `.github/workflows/ci.yml`
2. In pubspec: `pubspec.yaml`
### Release
Make sure to set up the self-hosted runner to compile arm64 linux binaries.
To set up the runner, follow the following instructions:
Install Flutter
```bash
sudo apt install git
git clone https://github.com/flutter/flutter.git $HOME/flutter
nano $HOME/.bashrc
```
Add the following to the end of the file:
```bash
export PATH="$PATH:$HOME/flutter/bin"
```
Restart the terminal.
```bash
flutter doctor
```
Next, follow the instructions to set up the GitHub runner.
Start the "Release Draft" workflow from the "Actions" tab: https://github.com/localsend/localsend/actions/workflows/release.yml
Finally, compile binaries not yet supported by the pipeline.