Thanks for taking the time to contribute! This guide gets you from zero to a merged pull request.
- Everything runs in the browser. Pull requests that add a backend, a third-party API call, analytics, or remote fonts will not be merged. If a feature needs the network, the user must initiate it explicitly (like the Socket Console).
- Keep the core pure. Logic belongs in
src/libas framework-free TypeScript with unit tests. Components insrc/toolsshould mostly wire that logic to the UI. - Code explains itself. Prefer precise names and strict types over comments. Comment only non-obvious algorithms or deliberate workarounds — no step-by-step narration, no boilerplate JSDoc.
- Be kind. Everyone here follows the Code of Conduct.
git clone https://github.com/zzoraemon043/dev-workbench.git
cd dev-workbench
npm install
npm run devRequires Node.js 22.13+ (nvm use picks it up from .nvmrc).
Before pushing, make sure all checks pass — CI runs exactly these:
npm run lint
npm test
npm run build| Path | What lives there |
|---|---|
src/lib/ |
Pure TypeScript core. Every module has a sibling *.test.ts. |
src/tools/<tool>/ |
One folder per tool. The default export is the tool's root component. |
src/tools/registry.ts |
The single list of tools. Navigation, palette and shortcuts derive from it. |
src/components/ |
Shared design-system components (Panel, Button, CodeEditor, …). |
src/store/ |
Zustand stores. Per-tool state lives in workbench.ts. |
src/hooks/ |
Cross-cutting hooks: hotkeys, theme, smart paste, share links. |
- Write the logic in
src/lib/<your-tool>/with tests. - Add the tool's persisted state shape and defaults in
src/store/workbench.ts, and list which fields are safe to put in share links inSHAREABLE_FIELDS(never secrets). - Create
src/tools/<your-tool>/<YourTool>.tsxcomposed from the components insrc/components/. - Register it in
src/tools/registry.tswith a name, tagline, icon and keywords. - Optionally teach
src/lib/detect.tsto recognize pasted content for your tool.
We use Conventional Commits:
feat(regex): add sticky flag explanation
fix(jwt): handle tokens with padding characters
docs: clarify self-hosting under a sub-path
- Keep PRs focused — one feature or fix per PR.
- Include screenshots or a short clip for UI changes, in both light and dark mode.
- Add or update tests for any logic change.
- Fill in the pull request template; it doubles as the review checklist.
Use the issue templates. For security issues, follow SECURITY.md instead of opening a public issue.