Explore absorption, spontaneous and stimulated emission, optical pumping, and laser operation with one atom or many. A SceneryStack port of PhET's retired Java Lasers simulation. Built with SceneryStack; runs offline as a Progressive Web App.
TypeScript/SceneryStack port of PhET Lasers: one atom and multiple atoms, absorption, spontaneous and stimulated emission, adjustable energy levels and lifetimes, optical pumping, mirrors, photon/beam/wave views, population readouts, keyboard controls, English/French/Spanish, and projector mode.
Use Node 26. Run npm ci, then npm start. For a local production preview, run npm run build followed by npm run preview. Live build: openlyceum.github.io/Lasers.
npm run lint, npm run check, npm test, npm run build, npm run test:fuzz, and npx playwright test tests/browser. Set FUZZ_PORT when other simulations are running.
SceneryStack 3, TypeScript 7, Vite 8, Biome 2, Vitest, and Playwright. Source provenance, feature inventory, and numerical differences: doc/upstream.md.
Port infrastructure is AGPL-3.0-or-later. PhET source-derived behavior and the upstream photograph retain University of Colorado attribution and the upstream GPL notice in doc/licenses/PhET-GPL-2.txt. See doc/upstream.md. This is an OpenLyceum adaptation, not an official PhET product.
Follow AGENTS.md and the organization conventions in OpenLyceum/.github. Issues and pull requests welcome.