Eir Journal

Eir EHR

An open-source clinical workspace. Sweden first, built to adapt across Europe.

Try a real, early implementation: write and sign a note, record observations, review an AI draft and switch chart renderers. The code, plugin contracts and delivery plan are open under Apache-2.0.

Development release. Not for patient care. Use made-up information only. National services, prescribing and laboratory order delivery are not connected. This is not a certified or complete production EHR.

Try the workflow

The clinical workspace is in Swedish. This guide maps the controls to the workflow.

  1. Öppna journalen (open workspace). Each session creates a separate workspace with four fictional patients: Anna Lindberg, Johan Bergström, Sara Haddad and Erik Nyström. Each has an open consultation, diagnoses, measurements and follow-up tasks.
  2. Översikt (overview). Inspect the record and earlier measurements. Choose Lägg till under diagnoses to search the official ICD-10-SE 2026 catalogue by code, name or published synonym. Select a result and save it to the chart.
  3. Anteckningar (notes). Open a draft or choose Ny anteckning. Save, then Signera to attest it. Signed notes cannot be overwritten; create a linked amendment instead.
  4. AI-granskning (AI review). Choose Skapa journalförslag. Inspect the quoted sources, edit the proposal and save a reviewed draft. Signing remains a separate clinical action. The public provider performs deterministic extraction, not language-model inference; local installations can use Ollama.
  5. Journal (chart). Change Visning from timeline to table. Both render the same records through interchangeable UI modules. Download the FHIR export from the patient toolbar.
  6. Moduler (modules). Inspect the running service graph. National connections are marked Ej ansluten, never simulated as connected.

Refresh to start fresh. Use Logga ut to immediately destroy your workspace. Copying a demo link does not share your records or session.

Replace the parts, keep the contracts

The server resolves plugins by their declared services and dependencies. Storage, country rules, identity, access policy, clinical workflows, AI providers, AI review and FHIR export have explicit contracts. Chart renderers are separately selectable browser modules.

Clinical workspace / alternate chart renderer
             | authenticated clinical API
Clinical workflows + access checks + audit
             | typed service contracts
Storage · Country · Identity · AI · FHIR

An AI provider returns a proposal with evidence. It cannot sign a note through that interface. Review validates cited source versions and checks access again; stale proposals must be regenerated. Source validation does not establish medical correctness.

Server plugins are trusted operator-installed code, not a sandbox for untrusted uploads. The current storage contract is synchronous SQLite; scalable async storage and isolated extension execution are planned, not claimed.

Plugin authoring guide · Architecture and boundaries · API contract

Build with us

Eir EHR is an open, collaborative project for Swedish healthcare, not just a product demo. Contributions through pull requests, clinical feedback, design work and documentation are welcome.

  1. Read the delivery plan and open an issue to discuss substantial workflow or contract changes.
  2. Fork the repository and create a branch for one focused improvement.
  3. Implement the behavior, add regression tests, and run the type checks and browser workflow.
  4. Open a pull request explaining the user problem, safety implications and verification. Maintainer review is required before merging.

Clinicians, patients, designers and engineers can contribute. Begin with a concrete workflow, its failure modes and a testable acceptance criterion. Do not submit real patient records, credentials or licensed terminology datasets.

git clone https://github.com/Eir-Space/eir-ehr.git
cd eir-ehr
npm ci
npm run terminology:import
EIR_DEMO=1 npm start
# Open http://127.0.0.1:4180 with the printed local token
npm run check

Requires Node 22.13 or later. Local mode persists synthetic records in SQLite; public-demo mode deliberately does not.

Contribution process · Issues and proposals · Delivery plan and clinical-pilot gates

Report security issues privately using the security policy, not a public issue.

What happens to demo data?

Each session has a separate SQLite database in server memory, a random bearer token and a 30-minute lifetime. The token stays in page memory, not local storage or a URL. Closing or refreshing the page loses the token; the server removes expired workspaces on cleanup or the next request. A server restart removes all workspaces immediately.

Application code does not log note bodies or tokens and does not call an external AI service. Hosting infrastructure can retain ordinary request metadata such as IP addresses, paths and timestamps. Never put real information in the demo, including in free text or URLs. There are no analytics scripts or advertising cookies.

Capacity and request limits protect this small public service. A busy or restarted service may ask you to start again. Use a local installation for longer development sessions. This temporary public setup is not a clinical hosting architecture.