diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index c19316b..c67ba08 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -14,7 +14,7 @@ updates:
prefix: "chore"
include: "scope"
# @types/node major versions track the Node.js runtime (see shared CI default).
- # Bump TemplateSingleSim and repos together when CI node-version changes.
+ # Bump SceneryStackTemplate and repos together when CI node-version changes.
ignore:
- dependency-name: "@types/node"
update-types: ["version-update:semver-major"]
diff --git a/CLAUDE.md b/CLAUDE.md
index 8f9d766..a6dc1c9 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -1,10 +1,10 @@
-# CLAUDE.md — Sim Template
+# CLAUDE.md — SceneryStack Template
Sim-specific context for AI assistants. General SceneryStack guidance: [OpenPhysics/.github/CLAUDE.md](https://github.com/OpenPhysics/.github/blob/main/CLAUDE.md).
## Project
-Reusable single-screen SceneryStack template and **canonical accessibility reference** for
+Reusable SceneryStack template (one or N screens) and **canonical accessibility reference** for
OpenPhysics sims. Prefer `Baton/scripts/create-sim.sh` (or GitHub **Use this template** +
`npm run rename` + `npm run scaffold-screens`) to fork it. For multi-screen sims, see
[`doc/multi-screen.md`](doc/multi-screen.md).
@@ -166,7 +166,7 @@ owns screen folders (fleet naming: `src/intro/`, not `intro-screen/`).
### Manual checklist (if not using the scripts)
-1. **Rename** — replace `sim-template` / `Sim Template` / `Sim` prefix in `init.ts`, `brand.ts`, `package.json`, Colors/Namespace/Preferences
+1. **Rename** — replace `scenerystack-template` / `SceneryStack Template` / `Sim` prefix in `init.ts`, `brand.ts`, `package.json`, Colors/Namespace/Preferences
2. **Screens** — run `scaffold-screens` or mirror `sim-screen/` into kebab folders
3. **Locale** — add `strings_XX.json`, register in `StringManager`, add locale to `init.ts` `availableLocales`
4. **Icon** — edit `public/icons/icon.svg`, run `npm run icons`; match theme color in `index.html` / `vite.config.ts`
diff --git a/CREDITS.md b/CREDITS.md
index 11acd84..6c59172 100644
--- a/CREDITS.md
+++ b/CREDITS.md
@@ -1,6 +1,6 @@
-# Credits — TemplateSingleSim
+# Credits — SceneryStackTemplate
-Reusable single-screen SceneryStack simulation template with Vite, TypeScript, Biome, PWA support, and i18n scaffolding.
+Reusable SceneryStack simulation template (one or N screens) with Vite, TypeScript, Biome, PWA support, and i18n scaffolding.
## License
diff --git a/README.md b/README.md
index 86dbeca..92bb61e 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,11 @@
-# Sim Template
+# SceneryStack Template
-A reusable single-screen simulation template built with [SceneryStack](https://scenerystack.org/),
-Vite 8, TypeScript 7, and Biome 2.
+A reusable SceneryStack simulation template for one or N screens, built with
+[SceneryStack](https://scenerystack.org/), Vite 8, TypeScript 7, and Biome 2.
## Features
-- Single-screen SceneryStack scaffold with model/view separation
+- SceneryStack scaffold with model/view separation (`rename` + `scaffold-screens` for one or N screens)
- English, Spanish, and French localization via `StringManager`
- Default and projector color profiles
- Progressive Web App (installable, offline-capable)
diff --git a/doc/implementation-notes.md b/doc/implementation-notes.md
index 4d07181..62c36c3 100644
--- a/doc/implementation-notes.md
+++ b/doc/implementation-notes.md
@@ -1,12 +1,12 @@
-# Implementation Notes - Sim Template
+# Implementation Notes - SceneryStack Template
-Developer-facing notes on the **TemplateSingleSim** scaffold. **Replace and expand this file when
+Developer-facing notes on the **SceneryStackTemplate** scaffold. **Replace and expand this file when
forking** to describe your sim's real architecture (see Stern Gerlach or Light Propagation for
target quality). Until then, this documents what the template provides out of the box.
## Architecture Overview
-TemplateSingleSim is the fleet-canonical starting point for new single-screen SceneryStack sims.
+SceneryStackTemplate is the fleet-canonical starting point for new SceneryStack sims (one or N screens).
It demonstrates Model–View separation, color profiles, localization, reset behavior, accessibility
reference wiring, and reusable common components — **without** domain physics.
diff --git a/doc/model.md b/doc/model.md
index e450065..b00964e 100644
--- a/doc/model.md
+++ b/doc/model.md
@@ -1,4 +1,4 @@
-# Model - Sim Template
+# Model - SceneryStack Template
This document describes the model (the underlying physics, math, and behavior) for the simulation, in
terms appropriate for an educator. It is the companion to
diff --git a/doc/multi-screen.md b/doc/multi-screen.md
index 24bb09c..4ace6d0 100644
--- a/doc/multi-screen.md
+++ b/doc/multi-screen.md
@@ -421,7 +421,7 @@ To pull template improvements back into an existing fork:
```sh
# One-time: add the template as a remote
-git remote add template https://github.com/OpenPhysics/TemplateSingleSim.git
+git remote add template https://github.com/OpenPhysics/SceneryStackTemplate.git
# Pull template changes into a branch for review
git fetch template
diff --git a/index.html b/index.html
index e0e2903..6f6bf0f 100644
--- a/index.html
+++ b/index.html
@@ -15,7 +15,7 @@
-
Sim Template
+ SceneryStack Template
diff --git a/package-lock.json b/package-lock.json
index 9cea1a0..1eb4063 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,11 +1,11 @@
{
- "name": "sim-template",
+ "name": "scenerystack-template",
"version": "0.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
- "name": "sim-template",
+ "name": "scenerystack-template",
"version": "0.0.0",
"license": "AGPL-3.0-or-later",
"dependencies": {
diff --git a/package.json b/package.json
index bd59af2..fed2360 100644
--- a/package.json
+++ b/package.json
@@ -1,5 +1,5 @@
{
- "name": "sim-template",
+ "name": "scenerystack-template",
"private": true,
"version": "0.0.0",
"type": "module",
@@ -7,7 +7,7 @@
"license": "AGPL-3.0-or-later",
"repository": {
"type": "git",
- "url": "https://github.com/OpenPhysics/TemplateSingleSim.git"
+ "url": "https://github.com/OpenPhysics/SceneryStackTemplate.git"
},
"keywords": [
"template",
diff --git a/scripts/rename-sim.ts b/scripts/rename-sim.ts
index d9f3b06..415df29 100644
--- a/scripts/rename-sim.ts
+++ b/scripts/rename-sim.ts
@@ -79,14 +79,14 @@ const REPLACEMENTS: ReadonlyArray<[string, string]> = [
// camelCase identifier
["simQueryParameters", `${newCamel}QueryParameters`],
// Display strings (all locales + PWA)
- ["Sim Template", newName],
+ ["SceneryStack Template", newName],
["Plantilla de Simulación", newName],
["Modèle de Simulation", newName],
["SimTemplate", newPrefix],
- ["A SceneryStack single-screen simulation template.", `A SceneryStack simulation: ${newName}.`],
- ["A single-screen SceneryStack simulation template", `A SceneryStack simulation: ${newName}`],
+ ["A SceneryStack simulation template for one or N screens.", `A SceneryStack simulation: ${newName}.`],
+ ["A SceneryStack simulation template for one or N screens", `A SceneryStack simulation: ${newName}`],
// Kebab package id
- ["sim-template", newId],
+ ["scenerystack-template", newId],
];
// ── Utilities ─────────────────────────────────────────────────────────────────
@@ -158,8 +158,8 @@ function collectRenames(dir: string, renameOps: RenameOp[]): void {
// ── Main ──────────────────────────────────────────────────────────────────────
console.log("\nRenaming sim template →", newName);
-console.log(` id: sim-template → ${newId}`);
-console.log(` name: Sim Template → ${newName}`);
+console.log(` id: scenerystack-template → ${newId}`);
+console.log(` name: SceneryStack Template → ${newName}`);
console.log(` prefix: Sim → ${newPrefix}`);
console.log(` camel: sim → ${newCamel}`);
console.log(" (screen packages left as sim-screen/ for scaffold-screens)");
diff --git a/scripts/scaffold-screens.ts b/scripts/scaffold-screens.ts
index 5b629ad..3f0e50a 100644
--- a/scripts/scaffold-screens.ts
+++ b/scripts/scaffold-screens.ts
@@ -84,14 +84,14 @@ function parseScreens(raw: string | undefined): ScreenSpec[] {
name?: string;
description?: string;
};
- const id = pkg.name && pkg.name !== "sim-template" ? pkg.name : "sim";
+ const id = pkg.name && pkg.name !== "scenerystack-template" ? pkg.name : "sim";
const titleGuess =
// Prefer vite/html title already rewritten by rename
(() => {
try {
const html = readFileSync(join(ROOT, "index.html"), "utf8");
const m = html.match(/([^<]+)<\/title>/);
- if (m?.[1] && m[1] !== "Sim Template") {
+ if (m?.[1] && m[1] !== "SceneryStack Template") {
return m[1].trim();
}
} catch {
diff --git a/src/SimNamespace.ts b/src/SimNamespace.ts
index 5d00c71..f319a89 100644
--- a/src/SimNamespace.ts
+++ b/src/SimNamespace.ts
@@ -11,6 +11,6 @@
*/
import { Namespace } from "scenerystack/phet-core";
-const SimNamespace = new Namespace("sim-template");
+const SimNamespace = new Namespace("scenerystack-template");
export default SimNamespace;
diff --git a/src/i18n/strings_en.json b/src/i18n/strings_en.json
index 248e4cc..e0ef6f6 100644
--- a/src/i18n/strings_en.json
+++ b/src/i18n/strings_en.json
@@ -1,5 +1,5 @@
{
- "title": "Sim Template",
+ "title": "SceneryStack Template",
"screens": {
"sim": "Sim"
},
diff --git a/src/init.ts b/src/init.ts
index a1a54bf..f4882a3 100644
--- a/src/init.ts
+++ b/src/init.ts
@@ -20,7 +20,7 @@ import { init, madeWithSceneryStackSplashDataURI } from "scenerystack/init";
init({
// Internal identifier used by SceneryStack for URL parameters and phetmarks.
// Use kebab-case matching the package.json "name" field.
- name: "sim-template",
+ name: "scenerystack-template",
// Displayed in the About dialog (Help menu → About).
version: "0.0.0",
diff --git a/src/sim-screen/view/SimScreenView.ts b/src/sim-screen/view/SimScreenView.ts
index a6c191b..835b543 100644
--- a/src/sim-screen/view/SimScreenView.ts
+++ b/src/sim-screen/view/SimScreenView.ts
@@ -51,7 +51,7 @@ export class SimScreenView extends ScreenView {
// ── Placeholder label ─────────────────────────────────────────────────────
// Replace this with your actual simulation content.
- const placeholderText = new Text("Sim Template", {
+ const placeholderText = new Text("SceneryStack Template", {
font: "bold 36px sans-serif",
fill: SimColors.textColorProperty,
center: this.layoutBounds.center,
diff --git a/tests/fuzz/fuzz.spec.ts b/tests/fuzz/fuzz.spec.ts
index e6a0bdf..098c1c3 100644
--- a/tests/fuzz/fuzz.spec.ts
+++ b/tests/fuzz/fuzz.spec.ts
@@ -1,5 +1,5 @@
/**
- * Optional Playwright fuzz smoke for the single-sim template.
+ * Optional Playwright fuzz smoke for the SceneryStack template.
*
* Usage:
* npm run test:fuzz
diff --git a/tests/memory-leak.test.ts b/tests/memory-leak.test.ts
index 081013e..22b5eaa 100644
--- a/tests/memory-leak.test.ts
+++ b/tests/memory-leak.test.ts
@@ -1,5 +1,5 @@
/**
- * Fleet-standard memory-leak regression suite (TemplateSingleSim / QubitSketch pattern).
+ * Fleet-standard memory-leak regression suite (SceneryStackTemplate / QubitSketch pattern).
*
* Creates a disposable model object inside a function boundary, disposes it, forces
* garbage collection via global.gc (--expose-gc in vitest.config.ts), then asserts via
diff --git a/tests/setup.ts b/tests/setup.ts
index 34c405e..104bbdc 100644
--- a/tests/setup.ts
+++ b/tests/setup.ts
@@ -157,7 +157,7 @@ import { init, madeWithSceneryStackSplashDataURI } from "scenerystack/init";
init({
// Change to match your package.json "name" when forking the template.
- name: "sim-template",
+ name: "scenerystack-template",
version: "1.0.0-test",
brand: "made-with-scenerystack",
locale: "en",
diff --git a/vite.config.ts b/vite.config.ts
index 6d8709b..5a629da 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -152,10 +152,10 @@ export default defineConfig(({ mode }) => {
registerType: "autoUpdate",
includeAssets: ["favicon.ico", "icons/apple-touch-icon.png"],
manifest: {
- name: "Sim Template",
+ name: "SceneryStack Template",
// biome-ignore lint/style/useNamingConvention: Web App Manifest spec requires snake_case keys
short_name: "SimTemplate",
- description: "A single-screen SceneryStack simulation template",
+ description: "A SceneryStack simulation template for one or N screens",
// biome-ignore lint/style/useNamingConvention: Web App Manifest spec requires snake_case keys
theme_color: "#1a1a2e",
// biome-ignore lint/style/useNamingConvention: Web App Manifest spec requires snake_case keys