{"id":50553874,"url":"https://github.com/matthiaskopeinigg/testrix","last_synced_at":"2026-06-04T05:04:53.452Z","repository":{"id":362091791,"uuid":"1241782197","full_name":"matthiaskopeinigg/testrix","owner":"matthiaskopeinigg","description":"An open-source desktop application for API development and testing","archived":false,"fork":false,"pushed_at":"2026-06-02T14:13:31.000Z","size":2682,"stargazers_count":0,"open_issues_count":4,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-02T15:26:53.066Z","etag":null,"topics":["angular","api-testing","desktop-app","electron","local-first","regression-testing"],"latest_commit_sha":null,"homepage":"","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/matthiaskopeinigg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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":"2026-05-17T20:07:40.000Z","updated_at":"2026-06-02T14:22:45.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/matthiaskopeinigg/testrix","commit_stats":null,"previous_names":["matthiaskopeinigg/testrix"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/matthiaskopeinigg/testrix","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matthiaskopeinigg%2Ftestrix","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matthiaskopeinigg%2Ftestrix/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matthiaskopeinigg%2Ftestrix/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matthiaskopeinigg%2Ftestrix/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/matthiaskopeinigg","download_url":"https://codeload.github.com/matthiaskopeinigg/testrix/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matthiaskopeinigg%2Ftestrix/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33890052,"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-06-04T02:00:06.755Z","response_time":64,"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":["angular","api-testing","desktop-app","electron","local-first","regression-testing"],"created_at":"2026-06-04T05:04:52.129Z","updated_at":"2026-06-04T05:04:53.437Z","avatar_url":"https://github.com/matthiaskopeinigg.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Testrix\n\nLocal-first scaffold pairing **Angular 21**, **Electron 42**, SVG branding sync, splash boot sequencing, strict TypeScript (`shared/config` + `shared/errors`), and **electron-builder** targets for Windows (NSIS), macOS (stock DMG), and Linux (`deb` + AppImage hooks).\n\n### Prerequisites\n\n- Node **20+** (`.nvmrc` pins **`22.12.0`**)\n- npm **11+** (`package.json` → `packageManager`)\n\n### Setup\n\n```bash\nnpm install\n```\n\n### Scripts\n\n| Command | What it does |\n| --- | --- |\n| `npm start` | `sync:brand` + `ng serve` + Electron esbuild `--watch` + Electron loading `localhost:4720` (default splash; no auto DevTools) |\n| `npm run dev` | Same as **`npm start`**, plus Electron **dev toolkit** (`TESTRIX_DEV=1`: auto-detach DevTools, verbose logging) |\n| `npm run start:dist` | Runs Electron against a **prior** production build in `dist/` (fails fast if Angular/Electron bundles are missing; no Angular dev server) |\n| `npm run splash` | Splash window only (`dist/electron/splash-only.main.js`) |\n| `npm run error:preview` | Static Electron **error** page (`electron/error/error.html`). Words after `--` become the body text; launcher sets **`TESTRIX_ERROR_PREVIEW_MESSAGE`** for the Electron process |\n| `npm run sync:brand` | Copies canonical SVG branding + emits ICO/BMP assets |\n| `npm run build` | `sync:brand` → production `ng build` → esbuild Electron bundles |\n| `npm run electron:bundle` | esbuild outputs `dist/electron/main.js`, `preload/main.preload.js`, `splash-only.main.js` |\n| `npm run electron:pack` | `npm run build` + `electron-builder -c electron-builder.yml` |\n\nDisable splash locally (Electron boot iterations only):\n\n```powershell\n$env:TESTRIX_NO_SPLASH='1'; npm run dev\n\n```\n\n### Config vs binaries\n\nInstallers lay down binaries/resources wherever the OS-specific flow dictates. Runtime JSON (`settings.json`, `session.json`) lives under an **anchor-derived config directory**, never inside the installer path. Defaults:\n\n| OS | Default config root |\n| --- | --- |\n| Windows | `%USERPROFILE%\\Documents\\Testrix` |\n| macOS | `~/Documents/Testrix` |\n| Linux | `$XDG_CONFIG_HOME/testrix` or `~/.config/testrix` |\n\n### Renderer bridge\n\nPreload publishes `window.testrix` (`notifyReady`, `config.*`, version metadata). Browser-only dev (`ng serve` without Electron) intentionally lacks the bridge — `ConfigService` falls back to Zod defaults for UI previews.\n\n### Security / CSP / single-instance\n\n- `sandbox` + `contextIsolation` for BrowserWindows; static splash/error pages stay preload-free.\n- `session.defaultSession.webRequest` sets CSP — dev mode permits the configured dev origin (default `localhost:4720`) + WS; production is stricter (`script-src 'self'` with limited `'unsafe-inline'` parity for Angular bundles).\n- `app.requestSingleInstanceLock()` avoids double boots and raises thefirst window.\n\n### Logs\n\nMain-process logging writes beside Electron `userData` (`electron/errors/logger.ts`).\n\n### Tests \u0026 CI\n\n- `npm test` → Angular Vitest runner in Node/jsdom (no `--browsers` needed).\n- `.github/workflows/ci.yml` mirrors plan §11b: Ubuntu build+test, Win/macOS build smoke.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatthiaskopeinigg%2Ftestrix","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmatthiaskopeinigg%2Ftestrix","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatthiaskopeinigg%2Ftestrix/lists"}