Thank you for your interest in contributing! Here is how to get involved.
Please use GitHub Issues and include:
- Platform and version (e.g. "Linux Mint 21.3" or "Windows 11")
- Python version (
python3 --version) - What you were trying to do
- The error message from the terminal (if any)
Issues in Danish are also welcome — the project was created in Denmark and Danish bug reports are perfectly fine.
Open a GitHub Issue with the label enhancement and describe what you would like and why. Screenshots or mockups are very helpful.
Before submitting a pull request, please open a GitHub Issue describing what you'd like to contribute — even for small changes. This lets us:
- Confirm the change fits the project's direction and current roadmap
- Avoid duplicate or overlapping work (check existing issues and milestones first — it might already be planned or in progress)
- Agree on scope and approach before you invest time in an implementation
If an issue already exists for what you want to work on, leave a comment saying you'd like to pick it up, and wait for a maintainer to confirm before starting.
Pull requests opened without a linked issue may be asked to have one created retroactively before review begins.
OpenSAK uses a two-branch workflow:
beta— active development branch. All pull requests should target this branch.main— stable release branch only. Changes land here exclusively through maintainer-managed release merges, never directly from external PRs.
Note that main is GitHub's default branch for this repo, so a plain git clone or fork will check out main unless you explicitly select beta. Please make sure both your local branch and your pull request's base branch are set to beta — PRs opened against main will fail our version/changelog CI checks and will need to be retargeted before review.
- Fork the repository
- Clone your fork and check out
beta:git clone --branch beta https://github.com/YOUR_USERNAME/opensak.git - Create a branch off
beta:git checkout -b feature/my-feature - Make your changes
- Run the test suite:
pytest -v tests/ - Commit with a clear message:
git commit -m "Add: description of change" - Push:
git push origin feature/my-feature - Open a Pull Request — double-check the base branch is set to
beta, notmain
Please keep pull requests focused — one feature or fix per PR makes review much easier.
git clone --branch beta https://github.com/OpenSAK-Org/opensak.git
cd opensak
python3 -m venv .venv
source .venv/bin/activate # Linux / macOS
# .venv\Scripts\activate # Windows
pip install -e ".[dev]" # runtime + test deps (single source: pyproject.toml)
pytest -v tests/ # run tests
python run.py # start the applicationWant to translate OpenSAK into a new language, or update an existing one? It only takes one file.
Creating a new language file:
-
Copy
src/opensak/lang/en.pyto e.g.src/opensak/lang/de.py -
Translate the string values on the right-hand side — do not change the keys
-
Register the language in
src/opensak/lang/__init__.py:AVAILABLE_LANGUAGES = { "da": "Dansk", "en": "English", "fr": "Français", "nl": "Nederlands", "pt": "Português", "cs": "Čeština", "se": "Svenska", "de": "Deutsch", "fi": "Suomi", # ← add this line }
-
Test by selecting the new language in Tools → Settings and restarting
-
Verify the integrity of labels, values, and missing content by running:
opensak-test # or pytest tests- Submit your translation — see below for how
The language files contain around 570 strings. A rough machine translation that a native speaker then reviews is a perfectly good starting point.
Just email your updated language file to the maintainer. This is perfectly fine and just as welcome as a GitHub contribution. No GitHub knowledge required.
This is the standard open source workflow and gives you credit on GitHub.
Why you get a 403 error if you try to push directly: The repository belongs to the maintainer — nobody else has write access. The correct approach is to fork the repository first (make your own copy on GitHub), push your changes there, and then open a Pull Request.
Step by step:
-
Go to https://github.com/OpenSAK-Org/opensak and click Fork (top-right corner). GitHub creates a copy at
https://github.com/YOUR_USERNAME/opensak. -
Clone your fork and check out
beta(development happens onbeta, notmain— see Branch Workflow above):git clone --branch beta https://github.com/YOUR_USERNAME/opensak.git cd opensak -
(Optional but recommended) Add the original as
upstreamso you can sync later:git remote add upstream https://github.com/OpenSAK-Org/opensak.git
-
Create a branch off
beta:git checkout -b update-french-translation
-
Copy your updated language file into
src/opensak/lang/and commit:git add src/opensak/lang/fr.py git commit -m "Update French translation" git push origin update-french-translation -
Go to your fork on GitHub — click "Compare & pull request" and submit. The maintainer will review and merge it.
Keeping your fork up to date for future contributions:
git checkout beta
git pull upstream beta
git push origin beta- Python 3.11+, PySide6 for the GUI
- Use
pathlib.Pathfor all file paths (cross-platform) - Background work runs in
QThreadsubclasses — never block the main thread - All user-visible strings go through
tr("key")fromopensak.lang - New UI strings need a matching key in
lang/en.pyfile
opensak-test # or pytest -v tests/The test suite covers the database layer, importer, filter engine, dialogs, GPS/export, and language completeness. New features should include tests where practical.
Open an issue or start a discussion on GitHub. Contributions of any size are welcome — from fixing a typo to adding a whole new feature.