We welcome contributions to Crossbar.io! This guide explains how to get involved.
- GitHub Issues: Report bugs or request features at https://github.com/crossbario/crossbar/issues
- GitHub Discussions: Ask questions and discuss at https://github.com/crossbario/crossbar/discussions
We track issues in the GitHub issue tracker here.
An issue is either a bug (an unexpected / unwanted behavior of the software or incorrect documentation) or a feature (a desire for new functionality / behavior in the software or new documentation).
A question though is not an issue - please use GitHub Discussions for questions.
When reporting issues, please include:
- Crossbar.io version (
crossbar version) - Python version (
python --version) - Operating system and version
- Crossbar.io node configuration (sanitized)
- Minimal steps to reproduce the issue
- Full traceback if applicable
When proposing a new feature, please provide:
- Your actual use case and your goals
- Why this is important for you
- Optionally, a proposed solution
- File or find an issue first, and get agreement that the change is wanted
- Fork the repository on GitHub
- Create a feature branch from
master - Make your changes following the code style
- Add tests that prove your change (see Bug Fix Workflow (Test-Driven))
- Run the test suite locally to ensure nothing is broken
- Add an AI-assistance disclosure audit file (see AI-Assistance Disclosure)
- Submit a pull request referencing the originating issue
We use the Fork & Pull Model. This means that you fork the repo, make changes to your fork, and then make a pull request here on the main repo.
Every pull request must include an audit file declaring whether AI-assistance tools (e.g. GitHub Copilot, Claude, ChatGPT, Cursor) were used to help create it.
Add a file at .audit/<github-username>_<branch>.md (for example
.audit/jane_fix-1234.md) containing:
- [ ] I did **not** use any AI-assistance tools to help create this pull request.
- [x] I **did** use AI-assistance tools to *help* create this pull request.
- [x] I have read, understood and followed the project's [AI Policy](https://github.com/crossbario/autobahn-python/blob/main/AI_POLICY.md) when creating code, documentation etc. for this pull request.
Submitted by: @<github-username>
Date: <YYYY-MM-DD>
Related issue(s): #<issue-number>
Branch: <github-username>:<branch>Tick the box that applies. The Related issue(s): line must reference the
issue the PR addresses.
Filename: use
<github-username>_<branch>.mdwith an underscore, and only cross-platform-safe characters (A-Z a-z 0-9 . _ -). Do not copy the GitHubowner:branchlabel literally — a:(or/) in the filename breaksgit checkouton Windows. The:belongs only inside the file, on theBranch:line.
Before you can contribute any changes to the Crossbar.io project, we need a CAA (Contributor Assignment Agreement) from you.
The CAA gives us the rights to your code, which we need e.g. to react to license violations by others, for possible future license changes and for dual-licensing of the code.
- Download the Individual CAA (PDF).
- Fill in the required information that identifies you and sign the CAA.
- Scan the CAA to PNG, JPG or TIFF, or take a photo of the box on page 2.
- Email the scan or photo to
contact@crossbario.comwith the subject line "Crossbar.io project contributor assignment agreement"
If you write contributions as part of your work for a company, you also need to send us an Entity CAA (PDF) signed by somebody responsible in the company.
You only need to do this once - all future contributions are covered!
When fixing a bug, follow this test-driven workflow to create a convincing, reviewable PR that proves both the bug and the fix, and guards against regressions:
- File a GitHub issue describing the bug.
- Discuss and reach agreement: "yes, the current behavior is wrong".
- Reference any related issues or user reports.
- Create a feature branch.
- Write a test that demonstrates the bug (the test must FAIL).
- Include any audit/fixture files needed.
- Push the PR.
- Run the tests locally → verify they FAIL.
- Let GitHub Actions run → verify CI FAILS.
- Leave a PR comment with your local failure output and a link to the failing CI run.
- Fix the bug.
- Push the fix to the same PR.
- Run the tests locally → verify they PASS.
- Let GitHub Actions run → verify CI PASSES.
- Leave a PR comment with your local success output and a link to the passing CI run.
- Comment: "Ready for review & merge!" and ping a maintainer if needed.
It leaves maintainers with a completely convincing PR, because:
- there is a behavior considered incorrect (the bug);
- the test proves the current implementation behaves incorrectly;
- the fix proves the new implementation resolves it;
- the test stays in the suite, so we won't regress later.
The same red→green discipline applies to features: write the test for the new behavior first (red), then implement until it passes (green).
After step 3 (bug confirmed):
## Bug confirmed
Local test run:
```
$ just test
...
FAILED test_foo.py::test_bar - AssertionError: expected X, got Y
```
CI also fails: https://github.com/crossbario/crossbar/actions/runs/<id>After step 5 (fix verified):
## Fix verified
Local test run:
```
$ just test
...
PASSED test_foo.py::test_bar
```
CI passes: https://github.com/crossbario/crossbar/actions/runs/<id>
Ready for review & merge!Crossbar.io uses just to drive development
tasks (run just to list all recipes):
git clone https://github.com/crossbario/crossbar.git
cd crossbar
# create a managed virtualenv and install crossbar + dev/test tooling
just install-dev# Run the full test suite
just test
# Run tests for a specific Python (e.g. CPython 3.12, PyPy 3.11)
just test cpy312
just test pypy311Crossbar.io must run on both CPython and PyPy - run the relevant tests on both before submitting.
- Follow PEP 8
- Use meaningful variable and function names
- Add docstrings for public APIs
- Keep lines under 100 characters
By contributing to Crossbar.io, you agree that your contributions will be licensed under the EUPL-1.2 License. See the LICENSE file for details.