{"id":51481390,"url":"https://github.com/scenetest/scenetest-js","last_synced_at":"2026-07-07T02:00:42.653Z","repository":{"id":326946920,"uuid":"1106638852","full_name":"scenetest/scenetest-js","owner":"scenetest","description":"Scene-based multi-actor E2E testing for modern JS applications","archived":false,"fork":false,"pushed_at":"2026-06-22T08:15:37.000Z","size":3464,"stargazers_count":12,"open_issues_count":35,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-22T09:13:24.326Z","etag":null,"topics":["local-first","playwright","react","testing","testing-tools","typescript-library","vite"],"latest_commit_sha":null,"homepage":"https://scenetest.msnook.xyz","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/scenetest.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-29T16:40:14.000Z","updated_at":"2026-06-22T07:22:16.000Z","dependencies_parsed_at":null,"dependency_job_id":"ff3b1474-9697-499c-b3fa-409b85d58899","html_url":"https://github.com/scenetest/scenetest-js","commit_stats":null,"previous_names":["mhsnook/scenetest-js","scenetest/scenetest-js"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/scenetest/scenetest-js","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scenetest%2Fscenetest-js","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scenetest%2Fscenetest-js/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scenetest%2Fscenetest-js/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scenetest%2Fscenetest-js/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/scenetest","download_url":"https://codeload.github.com/scenetest/scenetest-js/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scenetest%2Fscenetest-js/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35211553,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-07T02:00:07.222Z","response_time":90,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["local-first","playwright","react","testing","testing-tools","typescript-library","vite"],"created_at":"2026-07-07T02:00:36.501Z","updated_at":"2026-07-07T02:00:42.636Z","avatar_url":"https://github.com/scenetest.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# Scenetest\n\n\u003c/div\u003e\n\n_Evaluate your product, not your tests. A Javascript testing framework with inline assertions and scene-based browser orchestration._\n\n**Note: Scenetest is currently quite experimental. You're welcome to check it out, but until version 1.0, the API will be breaking every once in a while. We'll include notices of breaking changes in release notes and often include instructions for LLMs to update your scenes/specs, but until we get to 1.0, I'd consider it a working experiment.**\n\n---\n\n## Installation\n\n```bash\npnpm add @scenetest/checks @scenetest/vite-plugin @scenetest/scenes\n```\n\nFramework bindings ship as subpaths of `@scenetest/checks` — import from\n`@scenetest/checks/react`, `/vue`, `/solid`, or `/svelte`.\n\n## Quick Start\n\n**1. Add the Vite plugin:**\n\n```typescript\n// vite.config.ts\nimport scenetest from '@scenetest/vite-plugin'\n\nexport default defineConfig({\n  plugins: [react(), scenetest()],\n})\n```\n\n**2. Write inline assertions in components:**\n\n```tsx\nimport { should, failed } from '@scenetest/checks/react'\n\nfunction ProfileForm({ user }) {\n  should('user should be available', user !== undefined)\n  if (user?.error) failed('unexpected error state', { error: user.error })\n  return \u003cform\u003e...\u003c/form\u003e\n}\n```\n\n**3. Write scene specs:**\n\nChoose your style — TypeScript or plain markdown:\n\n```typescript\n// scenes/profile.spec.ts\nimport { scene } from '@scenetest/scenes'\n\nscene('user can update their name', ({ actor }) =\u003e {\n  const user = actor('user')\n\n  user.openTo('/')\n  user\n    .see('name-input')\n    .typeInto('name-input', 'New Name')\n    .click('submit-button')\n  user.seeText('New Name')\n})\n```\n\nOr write specs as **human-readable markdown** — GitHub-renderable and executable:\n\n```markdown\n\u003c!-- scenes/profile.spec.md --\u003e\n# user can update their name\nuser:\n- openTo /\n- see name-input\n- typeInto name-input New Name\n- click submit-button\n- seeText New Name\n```\n\n**4. Run tests:**\n\n```bash\nnpx scenetest\n```\n\n## Documentation\n\n**Guides**\n- [Writing Scene Specs](./docs/public/guides/writing-scene-specs.md) — three styles: declarative (ts), text DSL (md), classic driver (ts)\n- [Writing Inline Assertions](./docs/public/guides/writing-inline-assertions.md)\n- [Building Good Teams of Actors](./docs/public/guides/building-teams.md)\n\n**Reference**\n- [Actor API Reference](./docs/public/reference/actor-api.md) — complete method list and selector resolution\n- [Writing Tests (Design Reference)](./docs/public/design/writing-tests.md) — both execution models, full DSL reference, macros\n\n**FAQ**\n- [Comparing to Playwright](./docs/public/faq/vs-playwright.md)\n- [Comparing to Vitest](./docs/public/faq/vs-vitest.md)\n- [Comparing to Cypress](./docs/public/faq/vs-cypress.md)\n- [Note on Security](./docs/public/faq/security.md)\n\n**Design Docs**\n- [TypeScript Scenes \u0026 Playwright Specs](./docs/public/reference/concurrent-and-classic.md) — the two TypeScript execution models side-by-side\n- [Actors API Design](./docs/public/design/actors-api.md)\n- [CLI Design](./docs/public/design/cli-v2.md) — text DSL grammar, selector resolution, warnings\n- [Server Actions Design](./docs/public/design/server-actions.md)\n- [Reporting System Design](./docs/public/design/dashboard.md)\n\n## Packages\n\n| Package | Description |\n|---------|-------------|\n| `@scenetest/vite-plugin` | Vite plugin for production stripping and dev panel |\n| `@scenetest/scenes` | CLI runner for scene specs |\n| `@scenetest/checks` | Core `should()`, `failed()`, `serverCheck()` functions |\n| `@scenetest/checks/react` | React subpath with `useCheck` hook |\n| `@scenetest/checks/vue` | Vue subpath with `watchCheck` composable |\n| `@scenetest/checks/solid` | Solid subpath with `createCheck` primitive |\n| `@scenetest/checks/svelte` | Svelte subpath with `checkEffect` helper |\n\n## FAQ\n\n### Is it safe to run scenetest in production?\n\nMmmm, the short answer is \"No.\" Scenetest's Vite plugin strips all the server\nassertions from the production bundle without deploying them to the server, and it doesn't inject the observer or serve the middleware that powers the collector -- and we do have (some) tests in place for this. And server assertions never have a return value anyway so data access is less of a concern.\n\nSo the attack surface is pretty small, but a security audit has not been done. Further the data collection doesn't proactively filter out\nthings like personal data and passwords so it is best used on sample or seed data rather than in production systems.\n\nIn the future it might be nice to evolve Scenetest into a production tool for event analytics, observalibility, etc., but for now: it only runs on the dev server 😇\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscenetest%2Fscenetest-js","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fscenetest%2Fscenetest-js","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscenetest%2Fscenetest-js/lists"}