Skip to content

Contributing

Michael Dohmen edited this page Aug 13, 2026 · 1 revision

Contributing

This is a hobby project maintained in spare time — expect slow replies and no support commitment. Issues and pull requests are welcome regardless.

Ground rules for changes

The value of openToolbox is that the output is one file that runs anywhere without a server. Anything that erodes that will not be merged:

  • No runtime network dependencies — no CDN links, no web fonts, no external images.
  • No localStorage or IndexedDB for the data.
  • No second HTML entry point.
  • No weakening of the SVG sanitiser or the validation of AI-proposed changes.

See Architecture and Building Your Own Tool for the reasoning behind each of these, not just the rule.

Before opening a pull request

npm install
npm run build
npm test          # downloads a Chromium browser on first run

npm test drives a real headless browser against the built file over file:// — see Testing for exactly what it covers. If your change touches persistence, encryption, the AI client, or branding, add an assertion to test/smoke.mjs rather than relying on manual clicking. A feature without a test tends to break silently three commits later, because nobody clicks through a single-file app by hand every time.

Style

  • Comments explain why, not what. German is fine, English is fine — mixing within one file is not. The convention across the current codebase: source comments are German, the interface (user-facing strings, see Interface Languages) is English/German, documentation (this wiki, the README) is US English.
  • No formatter is enforced. Match the surrounding code.
  • Keep the built file small. Every dependency ends up inlined in every file every user receives — there's no lazy-loading or code-splitting to hide the cost of a heavy addition.

Reporting a problem

Include:

  • Browser and version.
  • Whether the file was opened via file:// (double-click) or served over HTTP.
  • The built file's size — a ~9 KB build means the inlining went wrong (see Limits and Troubleshooting) and is a different class of bug from anything behavioural.
  • What happened, and what you expected instead.

License

Apache License 2.0. Source files carry an SPDX-License-Identifier header. Dependencies: Preact (MIT), Vite (MIT), Playwright for tests only (Apache 2.0) — none of them ship in the runtime file itself except Preact, inlined.

Clone this wiki locally