Thank you for helping. Bug reports, ideas, translations, documentation and code are all welcome.
- Questions and bugs: open an issue. For a security problem, read SECURITY.md instead — please do not open a public issue.
- A larger change: open an issue first and describe what you want to do, so we can agree on the approach before you spend time on it.
- Everyone taking part follows the code of conduct.
Signal Lab is a React/TypeScript interface over a Rust engine, run as a Tauri
desktop app or as a server for browsers. You need Node 22.18 or newer (CI uses
24), Rust (the version in rust-toolchain.toml) and, on Windows, the MSVC build
tools and WebView2.
npm install
npm run tauri dev # the desktop app with live reloadThe contributors' documentation explains the architecture, building, the checks, localization and how the documentation is written. CLAUDE.md lists the invariants the code keeps — read the ones near what you change.
-
Work on a branch of your fork; keep a pull request to one subject.
-
Follow the code around you: its naming, comments and idioms.
-
Add or change tests with the behaviour. Every engine error has a translated text; every visible text comes from the dictionaries in
src/lib/locales/(English is the source; the build fails on a missing key in any language). -
Change the documentation in
docs/in the same pull request when what users see changes — English first; see Writing the documentation. -
Note user-visible changes under Unreleased in CHANGELOG.md.
-
Run the checks before you push:
npm run check # what CI runs: unit tests, types and build, clippy, Rust tests npm run e2e # the end-to-end tour of every screen
- Never add a default target that points at a host you do not own. Storm, Scanner and Broadcast send real traffic; defaults stay on loopback (a test checks the URLs), except Broadcast's broadcast, multicast and sweep modes, which start on the local segment.
- The engine never builds sentences: it fails with an error code the interface translates.
- Every clickable thing is a real
<button>; every field has a name; help goes in tooltips, not captions on screen. - The server is safe by default: no token means loopback only.
The interface speaks eleven languages; the documentation is complete in eight
(Portuguese, Japanese and Arabic still have untranslated pages). To correct a
translation, edit src/lib/locales/<code>.ts (the interface) or
docs/<code>/… (the documentation) and open a pull request. Adding a language
is described in Localization.
By contributing you agree that your contribution is licensed under the MIT License, like the rest of the project.