The SvelteKit web UI for IRIS, an open-source collaborative platform for incident response teams.
Want to run IRIS? Go to dfir-iris/iris-web and use its
docker compose. This repository is a submodule of it and cannot run on its own — it is a UI with no backend, no database and no reverse proxy.
Node 22 — that is what CI pins (.github/workflows/ci.yml:20). On Node 26,
src/lib/stores/__tests__/auth.store.test.ts fails.
You need a running backend to point at. Bring the stack up in iris-web/ first, then:
cp .env.example .env # set PUBLIC_EXTERNAL_API_URL and PUBLIC_INTERNAL_API_URL
npm install
npm run devBoth URLs are required: PUBLIC_INTERNAL_API_URL is what the server-side code calls
(src/lib/config/api.config.ts), PUBLIC_EXTERNAL_API_URL is the browser-facing fallback used
by the SSR proxy (src/hooks.server.ts).
npm run build produces the adapter-node bundle; npm run preview serves it.
The three CI gates, in the order ci.yml runs them:
npm run lint # prettier --check + eslint
npm run check # svelte-check
npm run test:unit -- --run # vitestUnit tests are src/**/*.{test,spec}.ts, configured in vitest.config.ts (not
vite.config.ts). Run one with npx vitest run src/lib/stores/__tests__/auth.store.test.ts.
Playwright, in e2e/. These run against a live stack — bring one up in iris-web/ first.
npx playwright install chromium
npm run test:e2e:localtest:e2e:local supplies the base URL and credentials (https://localhost, administrator)
as defaults. Plain npm run test:e2e does not — use it only when you set
PLAYWRIGHT_BASE_URL, IRIS_E2E_USERNAME and IRIS_E2E_PASSWORD yourself. See
e2e/README.md.
src/routes/(app)/ the authenticated app, one directory per nav entry
src/lib/services/ one module per API resource, all built on ApiService
src/lib/stores/ .store.ts (classic) and .store.svelte.ts (runes)
src/hooks.server.ts the SSR proxy — owns session cookies and token handling
e2e/ Playwright specs
Pull requests go to develop — GitHub defaults to master, so change it. Please run the three
checks above before opening one.
AGPL v3 or later — this repository only.