Language: English · 한국어
pyproc is a reusable browser Python runtime (processes, parallelism, restore-based reactivity on top of Pyodide). Thanks for your interest. This document is the contract for participating in the repository.
pyproc is licensed under the Mozilla Public License 2.0, the same license as Pyodide. By submitting a contribution you agree it is provided under the same license: under MPL-2.0 a contributor grants the copyright and patent licenses for their contribution by contributing it (Section 2.1), so inbound = outbound holds and no separate CLA is required. If you cannot agree to that, do not submit code.
What this means in practice: you may embed pyproc in a closed-source app freely, but changes to pyproc's own files are published as source under MPL-2.0.
Also welcome besides code: bug reports, browser measurements (please include Chrome/Edge version and hardware), reproduction pages, documentation fixes, design discussion.
- Chromium / Edge only. pyproc requires JSPI, SharedArrayBuffer, and
crossOriginIsolated. Firefox/Safari support is out of scope by design; PRs adding compatibility shims will be declined. - No product UI or domain logic. pyproc ships runtime primitives and capability contracts only. Products build their own surface on top.
- No build step, ever. Native ESM
.jsplus a hand-maintainedindex.d.ts. Bundlers and transpilers will not be introduced.
- New capabilities start in
tests/attempts/<category>/, never directly insrc/. A category is one question with a hypothesis and an explicit graduation gate, proven by browser measurements. See tests/attempts/README.md. - Graduated learnings become a plan in
mainPlan/<initiative>/(numbered docs + progress ledger). Finished initiatives move tomainPlan/_done/. - Only then does code land in
src/, where folder = layer and imports only ever point downward:runtime/(engine core) <-capabilities/(things that attach to a runtime) <-composition/(installs the capability registry, exposes the public surface) <-session/andprocessOs/. Every edge lowers the rank, so a cycle is impossible. Engine internals stay behind capability contracts.
Operating details live in docs/.
git clone <repo> && cd pyproc
git config core.hooksPath .githooks # activates the repository's guard hooks
npm test # Node structure gate, zero dependencies
npm run serve # COOP/COEP static server for browser validationBrowser validation: open http://localhost:8788/examples/basic.html and processOs.html in Chrome/Edge. The page must report crossOriginIsolated === true. Real verification of this WASM runtime only happens in a browser; see docs/operations/testing.md.
npm testmust be green before every commit.- main only. No local branches in this repository; hooks block non-main refs. External contributions come from forks targeting
main. - No em dash (U+2014) in any
*.mdor*.js. Use a hyphen, a comma, or rewrite the sentence. The pre-commit hook blocks it. - Commit message rules (partially machine-enforced by hooks):
- State the nature of the change plus what actually changed. Korean is the repository convention; clear English is accepted for external contributions.
- Write subject-neutral messages (no first-person self-reference).
- If one piece of work mixes intents (new feature plus signature change plus cleanup), split it into one commit per intent.
- No tool or generation traces: no model names, tool names, generation markers, or co-author trailers in commit messages, comments, or docs. The commit-msg hook blocks them.
- Version stays on the
0.0.xline; only releases bump it, and the tag must matchpackage.json. See docs/operations/release.md.
-
npm testgreen. - Runtime-behavior changes include browser measurements (page, numbers, environment) in the PR description.
- Public surface changes update
index.d.tsand README usage in the same change. - No engine internals (
HEAPU8, stack pointers) exposed outside capability contracts. - Docs that the change contradicts are updated in the same change.
- New capability? It graduated through
tests/attempts/first.
Include: what you ran (code or page), expected vs actual, browser + version, whether crossOriginIsolated was true, and console output. Performance reports should state hardware (cores, RAM) since parallel speedup claims depend on it.