mirror of
https://github.com/Shik3i/KoalaSync.git
synced 2026-07-26 12:08:15 +00:00
169 lines
6.5 KiB
Markdown
169 lines
6.5 KiB
Markdown
# Contributing to KoalaSync
|
|
|
|
Thanks for your interest in improving KoalaSync. All contributions are welcome — from bug reports and translations to core protocol changes.
|
|
|
|
Please note that by participating in this project, you agree to abide by our [Code of Conduct](CODE_OF_CONDUCT.md).
|
|
|
|
---
|
|
|
|
## Ways to Contribute
|
|
|
|
| Area | Description |
|
|
|------|-------------|
|
|
| **Bug Reports** | Found a bug? Open an issue with repro steps (see template below). |
|
|
| **Code** | Fix bugs, add features, or improve the extension / server / website. |
|
|
| **Translations** | Help localize the extension and website into more languages. See [TRANSLATION.md](docs/TRANSLATION.md). |
|
|
| **Documentation** | Improve docs, fix typos, or add missing examples. |
|
|
| **Security** | Found a vulnerability? See [SECURITY.md](SECURITY.md) — do NOT open a public issue. |
|
|
|
|
---
|
|
|
|
## Development Setup
|
|
|
|
### Prerequisites
|
|
|
|
- **Node.js** v18+
|
|
- **Docker** (for local relay server testing)
|
|
|
|
### Quick Start
|
|
|
|
```bash
|
|
git clone https://github.com/Shik3i/KoalaSync.git
|
|
cd KoalaSync
|
|
npm install
|
|
node scripts/build-extension.cjs
|
|
```
|
|
|
|
---
|
|
|
|
## Project Structure
|
|
|
|
| Directory | Purpose |
|
|
|-----------|---------|
|
|
| `extension/` | Browser extension (Manifest V3, Chrome & Firefox) |
|
|
| `server/` | Node.js + Socket.IO relay server (Dockerized) |
|
|
| `website/` | Landing page, invitation bridge, and marketing site |
|
|
| `shared/` | Protocol constants — single source of truth |
|
|
| `scripts/` | Build and sync utilities |
|
|
| `docs/` | Architecture, sync protocol, and deep-dive guides |
|
|
|
|
---
|
|
|
|
## Testing Locally
|
|
|
|
### Extension
|
|
|
|
1. Load `dist/chrome/` as an unpacked extension in Chrome (`chrome://extensions/` → Developer Mode → **Load unpacked**).
|
|
2. For Firefox: load `dist/firefox/` via `about:debugging` → **Load Temporary Add-on**.
|
|
3. Start the relay server: `docker compose up --build`.
|
|
4. Use **two different browser profiles** (or Chrome + Firefox) to test multi-peer sync.
|
|
5. Use the extension's **Dev tab** to inspect real-time video element state (`readyState`, `currentTime`, `paused`).
|
|
|
|
### Website
|
|
|
|
```bash
|
|
node website/build.cjs # Compile static site → www/
|
|
python3 -m http.server 8080 -d website/www # Serve locally
|
|
```
|
|
|
|
Then open `http://localhost:8080`. For multi-language testing: `http://localhost:8080/de/`.
|
|
|
|
---
|
|
|
|
## Protocol Constants
|
|
|
|
KoalaSync uses a **single source of truth** for all protocol constants in `shared/constants.js`.
|
|
|
|
> [!IMPORTANT]
|
|
> After modifying `shared/constants.js`, you **must** run the build script to sync changes to the extension:
|
|
> ```bash
|
|
> node scripts/build-extension.cjs
|
|
> ```
|
|
> This automatically injects constants into `content.js` and regenerates browser bundles in `dist/`.
|
|
|
|
---
|
|
|
|
## Code Standards
|
|
|
|
- **Vanilla JS**: The extension must remain dependency-free. No npm packages in `extension/`.
|
|
- **Privacy-first**: Zero external requests — no CDNs, fonts, analytics, or trackers. All assets self-hosted.
|
|
- **System font stack**: `-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, ...` — never `@import` external fonts.
|
|
- **Room IDs**: Restricted to `[a-zA-Z0-9-]` (alphanumeric + hyphens only). Enforced server-side.
|
|
- **Comments**: Document complex sync logic. The codebase uses inline comments for protocol reasoning.
|
|
|
|
---
|
|
|
|
## Version Numbers
|
|
|
|
> [!CAUTION]
|
|
> **Never manually bump version numbers.** The CI pipeline injects the version from the git tag into `manifest.base.json`, `shared/constants.js`, and `package.json` during release builds. Manual bumps cause conflicts.
|
|
|
|
---
|
|
|
|
## Open Source Workflow & Pull Requests
|
|
|
|
If you are new to open-source contributions, follow these steps to propose your changes:
|
|
|
|
1. **Fork the Repository**: Click the "Fork" button at the top right of this repository to create your own copy of KoalaSync.
|
|
2. **Clone your Fork**: `git clone https://github.com/YOUR-USERNAME/KoalaSync.git`
|
|
3. **Create a Branch**: `git checkout -b my-new-feature` (e.g. `feature/dark-mode` or `fix/translation-de`)
|
|
4. **Make your Changes**: Edit the files, then verify them locally.
|
|
- *Extension/Server changes*: Test on Chrome/Firefox and check `npm run lint`.
|
|
- *Website/Translation changes*: Run `node website/build.cjs` and check the output in `www/`.
|
|
5. **Commit and Push**: `git commit -m "Add my feature"` and `git push origin my-new-feature`
|
|
6. **Open a Pull Request (PR)**: Go to the original KoalaSync repository on GitHub and click "New Pull Request".
|
|
|
|
### PR Code Requirements
|
|
- **Lint**: Ensure `npm run lint` passes with zero errors and warnings.
|
|
- **Syntax**: Run `node -c` on every modified `.js` file.
|
|
- **Protocol changes**: Update relevant documentation in `docs/`.
|
|
|
|
---
|
|
|
|
## Bug Report Template
|
|
|
|
When filing a bug, the easiest way is to use the **Copy Logs** button in the extension's **Status** tab. It copies a fully formatted Markdown report to your clipboard containing:
|
|
|
|
- System info (version, protocol, peer ID, browser)
|
|
- Connection status (server, room, peers, reconnect state)
|
|
- Video debug info (playback state, readyState, network state, dimensions, error codes, shadow DOM detection, platform)
|
|
- Action history (last 20 events)
|
|
- Log entries (last 50)
|
|
|
|
Simply paste the clipboard contents into your GitHub issue and add:
|
|
|
|
| Field | Example |
|
|
|-------|---------|
|
|
| **Steps to Reproduce** | 1. Create room → 2. Join from second browser → 3. Play video |
|
|
| **Expected Behavior** | Both peers play simultaneously |
|
|
| **Actual Behavior** | Peer B remains paused |
|
|
|
|
If you cannot access the Status tab, include as much of the following manually:
|
|
|
|
| Field | Example |
|
|
|-------|---------|
|
|
| **Browser** | Chrome 125, Firefox 128 |
|
|
| **Extension Version** | v1.9.3 (visible at bottom of Settings tab) |
|
|
| **Website/Platform** | Netflix, YouTube, Twitch, Jellyfin, etc.
|
|
|
|
---
|
|
|
|
## Translation Contributions (Translators Welcome!)
|
|
|
|
We welcome native speakers to help translate KoalaSync! You **do not** need deep programming knowledge to contribute translations.
|
|
|
|
KoalaSync supports multiple languages. To add or improve translations:
|
|
1. Read the **[Translation Guide](docs/TRANSLATION.md)** first. It explains how our localization system works.
|
|
2. Edit the `.json` files in `website/locales/` (for the website) and `extension/locales/` (for the extension).
|
|
3. Test your translations locally by running:
|
|
- `node scripts/test-locales.cjs` (for extension)
|
|
- `node scripts/test-website-locales.mjs` (for website)
|
|
- `node website/build.cjs` (to build the site)
|
|
4. Follow the **Open Source Workflow** above (Fork -> Branch -> Edit -> PR) to submit your translations.
|
|
|
|
---
|
|
|
|
## Security
|
|
|
|
If you discover a security vulnerability, **do not open a public issue**. Report it privately as described in [SECURITY.md](SECURITY.md).
|