
Selbst gehostetes Informationssicherheits-Managementsystem — ISO 27001, NIS2, GDPR/DSGVO, BSI IT-Grundschutz
<!-- © 2026 Claude Hecker — ISMS Builder V 1.76 — AGPL-3.0 -->

# ISMS Builder
**Selbst gehostetes Informationssicherheits-Managementsystem — Open Source, keine Cloud erforderlich**
[](https://github.com/coolstartnow/isms-builder/actions/workflows/ci.yml)
[](https://github.com/coolstartnow/isms-builder/actions)
[](LICENSE)
[](https://nodejs.org)
[](CHANGELOG.md)
📖 **[Wiki](https://github.com/coolstartnow/isms-builder/wiki)** — Docker-Image-Nutzung &
Umgebungsvariablen, Architektur & Module, FAQ, Mitwirken (DE/EN)
<!-- DSGVO-HINWEIS: Die vier obigen Badges (CI, Tests, License, Node.js) laden Ressourcen
von externen Servern (github.com, shields.io/Cloudflare, img.shields.io).
Wenn diese README in einem Browser gerendert wird, übertragen diese Anfragen die
IP-Adresse des Betrachters an Dritte (einschließlich Servern in den USA — DSGVO Art. 44 ff.).
Für eine 100 % DSGVO-konforme selbst gehostete Dokumentation ersetzen Sie diese vier Badge-
Zeilen durch ihre lokalen Entsprechungen aus docs/badges/ oder entfernen Sie sie vollständig. -->
---
> ## ⚠️ Sicherheitswarnung: Gefälschte Repositories und Kopien, die Malware verbreiten
> ISMS Builder hat **keine paketierten „Releases“, Installer oder herunterladbaren ZIP-Dateien** — die einzige
> legitime Quelle ist dieses Repository, direkt von GitHub als reiner
> Quellcode geklont oder heruntergeladen. Uns ist mindestens ein **bösartiges Repository bekannt, das dieses Projekt imitiert**
> (gefälschte README, gefälschter „Download“-Button, der auf eine als Screenshot getarnte ZIP-Datei verlinkt, die einen
> Windows-Malware-Loader enthält — `.cmd` → `.exe` → Lua-DLL-Payload-Kette). **Laden Sie keine
> „isms_builder“-ZIP/Installer/EXE von irgendwo anders als diesem Repository herunter und führen Sie sie nicht aus.**
> Wenn Sie ein verdächtiges Repository oder eine Website finden, die dieses Projekt imitiert, öffnen Sie bitte ein
> [Issue](https://github.com/coolstartnow/isms-builder/issues) oder eine
> [Diskussion](https://github.com/coolstartnow/isms-builder/discussions), damit wir es melden können.
---
> **Status: Aktive Entwicklung — noch kein fertiges Produkt.**
> Die Kernmodule sind funktionsfähig und im Einsatz, aber einige Funktionen sind unvollständig
> und die Plattform wächst noch. Beiträge, Feedback und Tests aus der Praxis
> sind sehr willkommen — genau deshalb wurde dieses Projekt als Open Source veröffentlicht.
---
> 🛡️ **Verwandtes Projekt: [NIS2 Quick-Check](https://github.com/coolstartnow/nis2-quickcheck)** —
> ein kostenloser, eigenständiger NIS2-Selbsttest (10 Domänen × 5 Fragen, alle 27 EU-Mitgliedstaaten, alle 24
> EU-Amtssprachen). Läuft vollständig im Browser, kein Backend, keine Installation. Nicht Teil von
> ISMS Builder und nicht erforderlich, um es zu nutzen — nur ein Begleitwerkzeug für eine schnelle erste Orientierung.
---
## Was ist ISMS Builder?
ISMS Builder ist eine **selbst gehostete Webplattform** zur Verwaltung eines Informationssicherheits-Managementsystems (ISMS).
Sie deckt den gesamten Compliance-Lebenszyklus ab — von der Erstellung von Richtlinien bis hin zu Auditnachweisen — für ISO 27001:2022, NIS2, DSGVO, BSI IT-Grundschutz und andere Frameworks.
**Keine Cloud. Keine SaaS-Gebühren. Ihre Daten bleiben auf Ihrem Server.**
> Konzipiert für KMU, IT-Teams und Berater, die ein echtes ISMS-Werkzeug ohne einen fünfstelligen Anbietervertrag benötigen.
---
## Verwendungszweck und Geltungsbereich
Dieses Projekt begann als Arbeitswerkzeug für einen einzelnen ISMS-Praktiker und wuchs von dort aus. Es ist
Open Source, weil die Arbeit für andere nützlich sein kann — nicht, weil es ein kommerzielles Produkt unter
falschem Deckmantel ist. Dies offen zu sagen, hilft Ihnen zu entscheiden, ob es zu Ihrer Situation passt.
**Wofür es gebaut ist.** Ein kleines ISMS-Team – oft eine Person, manchmal eine Handvoll –, das die Dokumentation eines Managementsystems erstellt und pflegt: Richtlinien, Risiken, Assets, Kontrollen, Nachweise. Die Zahl der Personen, die *ein Konto benötigen*, soll klein bleiben. Ein großes Publikum erreicht man ohne Konten: Richtlinienbestätigungen werden als tokenbasierte Links versendet, sodass Empfänger ein Dokument lesen und bestätigen können, ohne sich jemals anzumelden und ohne in einer Benutzerliste aufzutauchen.
**Was es von Ihnen erwartet.** ISMS Builder wird selbst gehostet, und alles, was daraus folgt, liegt bei Ihnen: Bereitstellung, TLS, Härtung, Backups, Updates, Zugriffskontrolle und die Datenschutzpflichten für alles, was Sie darin speichern. Das Projekt liefert eine sinnvolle Standardkonfiguration, keinen Managed Service.
**Was es nicht ist.** Es gibt kein gehostetes SaaS-Angebot, keinen kommerziellen Supportvertrag und keine Service-Level-Vereinbarung. Es ist kein Multi-Tenant-Hosting-Produkt. Es zertifiziert Sie nicht nach irgendeinem Standard und es ist keine Rechtsberatung – es hilft Ihnen, die Arbeit zu organisieren und zu belegen, aber die Bewertung bleibt Ihre und die Ihres Auditors.
**Wer es pflegt.** Eine Person, neben einer Vollzeitstelle. Issues und Diskussionen werden gelesen und beantwortet, in der Regel innerhalb von Tagen; Sicherheitsmeldungen werden priorisiert. Funktionswünsche sind willkommen und prägen die Roadmap tatsächlich, konkurrieren aber um begrenzte Abende. Wenn Ihre Organisation von einem festen Zeitplan oder einer garantierten Reaktion abhängt, ist ein kommerzieller Anbieter die ehrliche Empfehlung – und das ist kein Grund, das Projekt zu meiden, sondern nur ein Grund, realistisch zu planen.
---
## Screenshots
| Anmeldung | Dashboard |
|---|---|
|  |  |
| Erklärung zur Anwendbarkeit | Risikomanagement |
|---|---|
|  |  |
| GDPR & Datenschutz | Asset Management |
|---|---|
|  |  |
| Guidance & Dokumentation | Berichte |
|---|---|
|  |  |
| Maßnahmenregister | Maßnahmen für eine Kontrolle |
|---|---|
|  |  |
> Führen Sie `npm start` aus und öffnen Sie `https://localhost:3000`, um den vollständigen Demo-Datensatz lokal zu erkunden.
---
## Funktionsübersicht
| Modul | Beschreibung | Standards |
|---|---|---|
| **Richtlinienverwaltung** | Vorlagen-CRUD, Versionierung, Lebenszyklus (Entwurf → Prüfung → genehmigt → archiviert), Bereichshierarchie, Anhänge | ISO 27001 §5 |
| **Erklärung zur Anwendbarkeit** | 147 integrierte Controls über 5 Frameworks (BSI IT-Grundschutz, EU NIS2, EUCS, EU AI Act, CRA) plus ISO 27001 / 9000 / 9001 Controls, die Sie selbst importieren (werden nie mitgeliefert), Inline-Bearbeitung, Gap-Analyse, Cross-Mapping | ISO 27001 A / BSI / NIS2 / EUCS / EUAI / ISO 9001 / CRA |
| **Maßnahmenregister** | Ein Register für Risikobehandlungen, Maßnahmen zu Auditfeststellungen, Governance-Maßnahmen und TOMs — verantwortliche Person, Fälligkeitsdatum, Status, Nachweise; zuweisbar zu SoA-Controls, Feststellungen und Risiken; angezeigt in SoA, Risiken, Feststellungen, Governance und DSGVO, automatisch aus früheren Versionen aktualisiert ([Dokumentation](https://github.com/coolstartnow/isms-builder/blob/main/docs/module-measures.en.md)) | ISO 27001 §6.1.3 / DSGVO Art. 32 |
| **Risikomanagement** | Risikoregister, Behandlungspläne (geführt im Maßnahmenregister), Auditor-Rolle | ISO 27001 §6.1 |
| **Sicherheitsziele** | KPI-Tracking mit Fortschrittsbalken, Kalenderintegration | ISO 27001 §6.2 |
| **DSGVO & Datenschutz** | VVT, AV-Verträge, DSFA, TOMs, DSAR-Warteschlange, 72h-Timer, Löschprotokoll mit E-Mail-Benachrichtigungen | DSGVO Art. 13–35 |
| **Asset-Management** | Asset-Register, bearbeitbare Asset-Typen, Schutzziele (CIA + Authentizität) mit Abhängigkeitsvererbung, Klassifizierungsstufen, EoL-Tracking | ISO 27001 A.5.9–5.12 |
| **BCM / BCP** | Business Impact Analyse, Kontinuitätspläne, Übungen | ISO 27001 A.5.29–5.30 / NIS2 |
| **Schulungsnachweise** | Schulungskatalog, Abschlussverfolgung, Zertifikat-Upload | ISO 27001 A.6.3 |
| **Lieferantenmanagement** | Lieferantenregister, Audit-Planung, Risikobewertung | ISO 27001 A.5.19–5.22 |
| **Recht & Verträge** | Verträge, NDAs, Datenschutzrichtlinien, Ablaufkalender | |
| **Vorfall-Postfach** | CISO-Postfach + **öffentliches Meldeformular** (keine Anmeldung erforderlich) | NIS2 / BSI |
| **Governance** | Managementbewertungen, Sitzungsprotokolle, Governance-Maßnahmen (geführt im Maßnahmenregister) | ISO 27001 §9.3 |
| **Berichte** | Compliance-Matrix (Control × Entität), Gap-Bericht, Überprüfungszyklen, CSV-Export | |
| **Auditfeststellungen** | Feststellungsregister (IST→SOLL→Risiko→Empfehlung), Aktionspläne, Schweregrad-/Statusverfolgung, FIND-YYYY-NNNN-Referenz | ISO 27001 §9.2 |
| **Auditmanagement** | Audits mit Checklisten, aus Nichtkonformitäten erstellte Feststellungen, jährliches Auditprogramm (Quartalsplan, Genehmigung), Kalender- und Dashboard-Integration, CSV/PDF-Export | ISO 27001 §9.2, ISO 19011 |
| **Richtlinienbestätigungen** | Nachweisbare Verteilung von Richtlinien an Mitarbeitende und Bestätigung des Verständnisses, zentrale Auditnachweise ([Dokumentation](https://github.com/coolstartnow/isms-builder/blob/main/docs/module-policy-acknowledgements.en.md)) | ISO 27001 7.3, A.6.3 |
| **NIS2** | Governance-Checkliste zu Art. 21 (30 Punkte) und Meldefristen zu Art. 23 mit automatischen Benachrichtigungen | NIS2 Art. 21 / 23 |
| **Kalender** | Ein Kalender für Fälligkeitsdaten über alle Module hinweg: Maßnahmen, Risikobehandlungen, Audits, Überprüfungen, Verträge, Schulungen, Fristen | |
| **Leitfaden** | Integriertes Handbuch und Wissensdatenbank (Modulanleitungen, Rollenleitfäden, eigene Dokumente) mit Suche, in fünf Sprachen | |
| **Mobile App (Android)** | Separate Android-App, die offline mit einem eigenen Datensatz arbeitet und über WLAN oder ein Dateibündel mit dem Server synchronisiert: Sync-Konten mit Rechten pro Modul, Einrichtung per QR-Code, Vorlagen, SoA, Risiken, Assets, Feststellungen und Leitfaden (schreibgeschützt); erfordert `STORAGE_BACKEND=json` ([Dokumentation](https://github.com/coolstartnow/isms-builder/blob/main/docs/module-mobile-sync.en.md)). Noch nicht öffentlich veröffentlicht: Wenn Sie sie vorab ausprobieren möchten, nehmen Sie Kontakt über die [Projektwebsite](https://www.isms-builder.com/#contact) auf | |
| **Nachverfolgbarkeit** | Jeder Datensatz verlinkt mit SoA-Controls + Richtliniendokumenten — bidirektional | |
| **Semantische Suche** | Lokale KI-Suche über Ollama (nomic-embed-text) mit Keyword-Fallback | |
| **Mehrere Entitäten** | Unternehmensstrukturbaum, Anwendbarkeit pro Entität für Controls und Richtlinien | |
| **Mehrsprachige UI & Demo-Daten** | Vollständige UI, Demo-Inhalte und Moduldokumentation in 🇩🇪 DE / 🇬🇧 EN / 🇫🇷 FR / 🇳🇱 NL / 🇭🇺 HU; Admin-Steuerung der verfügbaren Sprachen | |
### ⚠ WICHTIG: ISO-Controls erfordern eine manuelle Installation durch den Administrator
> **ISO 27001:2022, ISO 9000:2015 und ISO 9001:2015** sind urheberrechtlich geschützte Normen, die von
> der International Organization for Standardization (ISO, © ISO) veröffentlicht werden. Die Control-Definitionen
> (Titel, Beschreibungen, Anforderungstexte) sind **nicht** in dieser Software enthalten und dürfen **nicht**
> ohne eine gültige ISO-Lizenz weiterverbreitet werden.
**Was das in der Praxis bedeutet:**
Die SoA-Module für ISO 27001, ISO 9000 und ISO 9001 werden ohne Control-Inhalte ausgeliefert.
Der Administrator **muss die Controls manuell importieren**, bevor diese Frameworks nutzbar sind:
1. Besorgen Sie sich eine lizenzierte Kopie der Norm von [iso.org](https://www.iso.org/) oder einer autorisierten nationalen Stelle
2. Erstellen Sie eine JSON-Datei mit Ihren Control-Definitionen (Format dokumentiert in `scripts/import-iso-controls.sh`)
3. Führen Sie das Importskript aus:
```bash
bash scripts/import-iso-controls.sh path/to/iso-controls.json
```
4. Starten Sie den ISMS Builder-Server neu
> **Out-of-the-box enthaltene Frameworks (keine ISO-Lizenz erforderlich):**
> BSI IT-Grundschutz, EU NIS2, EUCS, EU AI Act und CRA basieren auf öffentlich verfügbaren
> EU-Rechtsvorschriften und deutschen Bundesveröffentlichungen und sind vollständig vorinstalliert.
Der Betrieb der ISO-Framework-Module ohne gültige Lizenz für den jeweiligen Standard liegt in der
alleinigen Verantwortung des Betreibers. Das ISMS Builder-Projekt und seine Mitwirkenden übernehmen keine
Haftung für die unlizenzierte Nutzung ISO-geschützter Inhalte.
---
## Schnellstart
```bash
git clone https://github.com/coolstartnow/isms-builder.git
cd isms-builder
npm install
cp .env.example .env # set JWT_SECRET to a long random string
npm start # http://localhost:3000
```
Melden Sie sich mit **`[email protected]` / `adminpass`** an. Bei der ersten Anmeldung werden Sie aufgefordert, Ihre **Demo-Datensprache** (🇩🇪 DE / 🇬🇧 EN / 🇫🇷 FR / 🇳🇱 NL / 🇭🇺 HU) zu wählen oder mit einem leeren System zu beginnen. Ändern Sie das Admin-Passwort unmittelbar danach.
Für den Produktiveinsatz mit HTTPS:
```bash
# .env
JWT_SECRET=<output of: openssl rand -hex 32> # required; production refuses a missing, short or placeholder secret
STORAGE_BACKEND=json
SSL_CERT_FILE=/etc/ssl/certs/your.crt
SSL_KEY_FILE=/etc/ssl/private/your.key
```
**Live gehen?** Produktion ist immer eine **Neuinstallation** – Demo und Produktion werden niemals vermischt.
Verwandeln Sie keine Demo-Instanz (oder deren Daten) in ein Produktionssystem: Installieren Sie eine neue Instanz
(`STORAGE_BACKEND=json` ist der empfohlene Standard, siehe `.env.example`), erstellen Sie Ihren eigenen Administrator
und legen Sie Ihre eigenen Secrets fest. Die In-App-Funktionen *Demo Reset* und *Demo Import* sind Funktionen der
Demo-Instanz: Sie sind kein Backup-, Wiederherstellungs- oder Migrationswerkzeug, und *Demo Import* funktioniert nur mit
`STORAGE_BACKEND=json`.
Die integrierten SoA-Frameworks (BSI IT-Grundschutz, EU NIS2, EUCS, EU AI Act, CRA) werden
automatisch auf jedem Storage-Backend erstellt. Die Kontrolltexte von ISO 27001 / 9000 / 9001 sind
urheberrechtlich geschützt durch ISO und werden **niemals** mitgeliefert – stellen Sie diese selbst in `data/iso-controls.json`
bereit (siehe `scripts/import-iso-controls.sh`).
---
## Docker
Jede Version wird als GitHub Package in der GitHub Container Registry veröffentlicht, für
`linux/amd64` und `linux/arm64` — getaggt mit `:latest` und `:<version>` (z. B. `:1.37.5.2`):
```bash
docker compose up -d
# App runs at http://localhost:3000
```
Oder ohne Compose (`data/` muss ein Bind-Mount sein — Daten werden niemals in das Image eingebettet):
```bash
docker run -d --name isms-builder -p 3000:3000 \
-e JWT_SECRET="$(openssl rand -hex 32)" \
-v "$PWD/data:/app/data" \
ghcr.io/coolstartnow/isms-builder:latest
```
Das ist die Standardeinstellung, bei der Daten als einfache JSON-Dateien in `./data` gespeichert werden — es wird überhaupt kein Datenbank-Container benötigt. Es ist die empfohlene Einrichtung für kleine Teams und wird von den beiden oben genannten Befehlen verwendet.
**PostgreSQL (oder MariaDB) anstelle von JSON verwenden.** Das Image unterstützt dies von Haus aus, aber — anders als bei der oben beschriebenen JSON-Einrichtung — benötigt es einen zweiten Container (die eigentliche Datenbank) sowie eine Handvoll Umgebungsvariablen, die der Anwendung mitteilen, wie sie diese erreichen kann. Wenn Sie nur das Image selbst gepullt haben (`docker pull ghcr.io/coolstartnow/isms-builder`), ohne jemals dieses Repository zu klonen, sind diese Variablennamen standardmäßig nirgends sichtbar — `docker-compose.yml` und `.env.example`, wo sie dokumentiert sind, sind Dateien in diesem Git-Repository, nicht Teil des Images. Dieser Abschnitt existiert, damit diese Informationen kein reines Repo-Geheimnis bleiben.
Das Image `isms-builder` selbst bündelt niemals einen Datenbankserver — `postgres:17` (oder `mariadb:11`) ist eine völlig generische, leere Datenbank-Engine von Docker Hub ohne jegliche Kenntnis der Tabellen dieses Projekts. Diese Tabellen (Risiken, Assets, SoA-Kontrollen und so weiter) werden automatisch von der Anwendung selbst erstellt, sobald sie startet und eine leere Datenbank vorfindet — kein manueller SQL-Import, kein separater Migrationsschritt, den Sie ausführen müssen. Siehe „Wie wird das Datenbankschema erstellt?" unten, wenn Sie die vollständigen Mechanismen erfahren möchten.
Zwei Container, ein gemeinsames Docker-Netzwerk, dann wird der App mitgeteilt, wo sie die Datenbank findet:
```bash
# 1) An isolated network so the two containers can reach each other by name
docker network create isms-net
# 2) The database — empty until the app first connects and creates its tables
docker run -d --name isms-postgres --network isms-net \
-e POSTGRES_DB=isms_builder \
-e POSTGRES_USER=isms \
-e POSTGRES_PASSWORD="$(openssl rand -hex 16)" \
-v isms-postgres-data:/var/lib/postgresql/data \
postgres:17-alpine
# 3) The app, pointed at that database by container name (isms-postgres) via
# Docker's built-in DNS on the shared network — no host/port juggling needed
docker run -d --name isms-builder --network isms-net -p 3000:3000 \
-e JWT_SECRET="$(openssl rand -hex 32)" \
-e STORAGE_BACKEND=postgres \
-e DB_HOST=isms-postgres \
-e DB_PORT=5432 \
-e DB_USER=isms \
-e DB_PASS="<same password as POSTGRES_PASSWORD above>" \
-e DB_NAME=isms_builder \
ghcr.io/coolstartnow/isms-builder:latest
```
Was die einzelnen Variablen bedeuten:
| Variable | Zweck |
|---|---|
| `STORAGE_BACKEND` | `postgres` (oder `pg`) für PostgreSQL, `mariadb` für MariaDB/MySQL. Unset lassen (oder `json`) für das Standard-JSON-Setup. |
| `DB_HOST` | Hostname des Datenbank-Containers. In einem gemeinsam genutzten Docker-Netzwerk ist dies einfach der `--name` des Containers — Docker löst ihn automatisch auf. |
| `DB_PORT` | `5432` für PostgreSQL, `3306` für MariaDB. |
| `DB_USER` / `DB_PASS` / `DB_NAME` | Müssen mit dem übereinstimmen, was du auf dem Datenbank-Container festgelegt hast (`POSTGRES_USER`/`POSTGRES_PASSWORD`/`POSTGRES_DB` oben oder die MariaDB-Äquivalente). |
Für MariaDB tausche `postgres:17-alpine` gegen `mariadb:11`, verwende in Schritt 2 dessen Variablen `MARIADB_DATABASE` /
`MARIADB_USER` / `MARIADB_PASSWORD` und in Schritt 3 `STORAGE_BACKEND=mariadb` /
`DB_PORT=3306`. Die vollständige, querverwiesene Liste aller Umgebungsvariablen, die dieses
Projekt versteht — einschließlich der hier nicht behandelten (SSL, Reverse-Proxy-Vertrauen, SMTP,
2FA, …) — befindet sich in [`.env.example`](https://github.com/coolstartnow/isms-builder/blob/main/.env.example) in diesem Repository.
Compose-Nutzer bekommen das kostenlos: `docker-compose.yml` enthält bereits die Service-Profile
`mariadb` und `postgres` (standardmäßig auskommentiert, zusammen mit den entsprechenden
Erläuterungen zu den Umgebungsvariablen) —
`docker compose --profile postgres up -d` startet beide Container automatisch miteinander
verbunden, ohne manuelles Netzwerk-Setup oder Kopieren von Passwörtern.
**Wie wird das Datenbankschema erstellt?** Weder das Image `postgres:17` noch `mariadb:11`
weiß irgendetwas über dieses Projekt — sie sind generische, leere Datenbank-Engines direkt von
Docker Hub. Es gibt keine SQL-Dump-Datei zum Importieren und keinen separaten Migrationsbefehl,
der manuell ausgeführt werden muss. Stattdessen erstellt der eigene Anwendungscode (nicht das
Datenbank-Image) in dem Moment, in dem der `isms-builder`-Container startet und sich mit einer
leeren Datenbank verbindet, jede benötigte Tabelle direkt vor Ort — siehe
[`server/db/knexDatabase.js`](https://github.com/coolstartnow/isms-builder/blob/main/server/db/knexDatabase.js): eine Liste von Tabellendefinitionen, die
jeweils mit `hasTable()` geprüft und bei Fehlen mit `createTable()` erstellt werden, und zwar
bevor die App beginnt, HTTP-Anfragen anzunehmen. Das macht den Vorgang idempotent — der allererste
Start baut das vollständige Schema aus dem Nichts auf, und jeder spätere Neustart gegen dieselbe
Datenbank ist ein stiller No-op, weil die Tabellen bereits existieren. Dies ist derselbe
Mechanismus, unverändert, der live gegen SQLite, MariaDB 11 und PostgreSQL 17 verifiziert wurde
(siehe [#70](https://github.com/coolstartnow/isms-builder/issues/70)).
Um stattdessen aus dem Quellcode zu bauen, kommentiere den `build:`-Block in `docker-compose.yml`
aus und führe `docker compose up -d --build` aus.
Images tragen eine signierte Build-Provenienz-Attestierung:
```bash
gh attestation verify oci://ghcr.io/coolstartnow/isms-builder:latest --owner coolstartnow
```
---
## Voraussetzungen
- **Node.js 18+** (getestet: 18, 20, 22)
- npm 9+
- (Optional) Docker + Docker Compose
- (Optional) [Ollama](https://ollama.ai) für lokale KI-gestützte semantische Suche
---
## Konfiguration (`.env`)
| Variable | Standard | Beschreibung |
|---|---|---|
| `JWT_SECRET` | *(erforderlich)* | Geheimnis für die JWT-Signierung — mindestens 32 zufällige Zeichen (`openssl rand -hex 32`). Mit `NODE_ENV=production` (immer der Fall im Docker-Image) startet der Server nicht mit einem fehlenden, zu kurzen oder Platzhalter-Geheimnis |
| `PORT` | `3000` | HTTP/HTTPS-Listen-Port |
| `STORAGE_BACKEND` | `json` | `json` (Entwicklung/Demo) oder `sqlite` (Produktion) |
| `SSL_CERT_FILE` | — | Pfad zum TLS-Zertifikat → aktiviert HTTPS |
| `SSL_KEY_FILE` | — | Pfad zum TLS-Privatschlüssel |
| `DATA_DIR` | `./data` | Datenverzeichnis überschreiben (Docker-Volumes) |
| `SMTP_HOST` | — | SMTP-Server für E-Mail-Benachrichtigungen |
| `SMTP_PORT` | `587` | SMTP-Port |
| `SMTP_USER` | — | SMTP-Benutzername |
| `SMTP_PASS` | — | SMTP-Passwort |
| `SMTP_FROM` | — | Absenderadresse für Benachrichtigungen |
---
## Architektur
```
server/
index.js — Express app setup, router mounts
auth.js — JWT auth, RBAC ranks, session
routes/ — 17 Express route modules (one per domain)
db/ — Data stores (jsonStore / sqliteStore / orgSettingsStore / …)
ai/ — Semantic search (embedder, embeddingStore, lexicalSearch)
reports.js — Report generation logic
ui/
index.html — SPA shell (Atlassian Dark Theme)
app.js — All render functions, ~6000 lines vanilla JS
style.css — CSS variables, dark theme
data/ — JSON files / SQLite DB (gitignored)
docs/
ISMS-build-documentation.md — Full architecture reference
architecture/ — C4 diagrams, data model, OpenAPI 3.0.3 spec
tests/ — Jest + Supertest (176 tests, --runInBand)
```
- **Auth:** JWT-Cookie (`sm_session`), bcrypt-Passwörter, TOTP-2FA (organisationsweit erzwingbar)
- **RBAC:** `reader` → `editor` / `dept_head` → `contentowner` / `auditor` → `admin`
- **Persistenz:** JSON-Dateien (Standard/Demo) oder SQLite über `better-sqlite3`
- **KI:** Optionales lokales Ollama (nomic-embed-text); Stichwortsuche immer als Fallback verfügbar
- **Audit-Log:** Jede Erstellungs-/Aktualisierungs-/Lösch-/Anmeldeaktion wird aufgezeichnet, filterbar, exportierbar
Siehe [`docs/architecture/`](https://github.com/coolstartnow/isms-builder/blob/main/docs/architecture) für C4-Diagramme, das vollständige Datenmodell und die OpenAPI-3.0.3-Spezifikation (80+ Endpunkte).
---
## Tests ausführen
> **Hinweis:** Die Testsuite unter `tests/` sind die persönlichen Entwicklungstests des Autors und werden
> zusammen mit dem Projekt aus Transparenzgründen ausgeliefert. Sie ist **nicht** Teil der Anwendung selbst
> und **nicht erforderlich**, um die App auszuführen. Die Tests decken internes API-Verhalten ab und verwenden
> fest codierte Test-Zugangsdaten, die nur in der isolierten Testumgebung existieren — sie stehen in keiner
> Beziehung zu Produktions- oder Demo-Daten.
```bash
npm test # runs all 423 tests
npm run preflight # exactly what CI gates on (tests + pinning + audit)
npm test -- --verbose # with test names
```
Tests verwenden ein isoliertes temporäres Verzeichnis — es werden keine Produktionsdaten berührt.
---
## Mitwirken
Beiträge sind sehr willkommen! Siehe [CONTRIBUTING.md](https://github.com/coolstartnow/isms-builder/blob/main/CONTRIBUTING.md) für:
- Entwicklungsumgebung (5 Minuten bis zum ersten Testlauf)
- Code-Stil und Konventionen
- Wie man ein gutes Issue oder einen guten PR eröffnet
**Ein Sicherheitsproblem gefunden?** Bitte eröffnen Sie kein öffentliches Issue — nutzen Sie
[private Schwachstellenmeldung](https://github.com/coolstartnow/isms-builder/security/advisories/new).
[SECURITY.md](https://github.com/coolstartnow/isms-builder/blob/main/SECURITY.md) beschreibt den Umfang, den Safe Harbour und was realistischerweise zu erwarten ist.
**Good first issues** sind im Issue-Tracker mit [`good first issue`](https://github.com/coolstartnow/isms-builder/issues?q=label%3A%22good+first+issue%22) gekennzeichnet.
---
## Roadmap
| Status | Funktion |
|---|---|
| ✅ Erledigt | Semantische Suche (Ollama / nomic-embed-text) |
| ✅ Erledigt | SQLite-Backend, Docker, CI/CD |
| ✅ Erledigt | E-Mail-Benachrichtigungen zum DSGVO-Löschprotokoll |
| ✅ Erledigt | Mehrsprachige Demo-Bundles (DE / EN / FR / NL / HU) |
| ✅ Erledigt | Audit-Findings-Modul mit Maßnahmenplänen (V 1.37.2.0) |
| ✅ Erledigt | FR/NL-Übersetzungen der Guidance + Admin-Sprachkonfiguration (V 1.37.2.0) |
| ✅ Erledigt | MariaDB/MySQL-Backend (`STORAGE_BACKEND=mariadb`, V 1.37.2.1) |
| ✅ Erledigt | Scanner → Risikoentwurf (Greenbone/OpenVAS XML + PDF-Import, V 1.37.2.0) |
| ✅ Erledigt | Richtlinien-Bestätigung — Mitarbeitende bestätigen Richtlinien digital mit Audit-Trail (V 1.37.2.0) |
| ✅ Erledigt | Guidance-CRUD — eigene Dokumentation erstellen, bearbeiten und hochladen (V 1.37.2.0) |
| ✅ Erledigt | Guidance-Suche — kategorieübergreifende Volltextsuche mit Auszug (V 1.37.2.0) |
| ✅ Erledigt | Schutzziele von Assets — CIA + Authentizität (1–4), Abhängigkeiten und Vererbung des BSI-Maximumprinzips (V 1.37.2.0) |
| ✅ Erledigt | NIS2 Art. 21 Governance-Checkliste (30 Punkte) und Art. 23 Meldefristen mit automatischen Warnungen (V 1.37.2.0) |
| ✅ Erledigt | PostgreSQL-Backend (`STORAGE_BACKEND=pg`) — dieselbe Knex-Store-Schicht wie MariaDB, verifiziert gegen eine echte PostgreSQL-17-Instanz inkl. vollständigem `docker compose`-Pfad (V 1.37.5) |
| ✅ Erledigt | ownCloud / Nextcloud-Integration — genehmigte Richtlinien werden automatisch als PDF via WebDAV veröffentlicht, optionale Favoriten-/öffentliche Link-Sichtbarkeit, live verifiziert gegen eine echte NextcloudPi-Instanz (#66, V 1.37.5.1) |
| ✅ Erledigt | Docker-Image nach jedem Release in der GitHub Container Registry veröffentlicht (`ghcr.io/coolstartnow/isms-builder`, `linux/amd64` + `linux/arm64`, signierte Build-Provenienz) — beigetragen von @bucherfa (#71, V 1.40.0). Wartungsaufwand-Test: wird wieder entfernt, falls sich herausstellt, dass der Aufwand höher ist als erwartet. |
| ✅ Erledigt | KI-Richtlinien-Assistent — Ollama entwirft Inhalte für jeden Dokumenttyp (Policy, Procedure, Risk Policy, SoA, Incident, Release) aus Titel + Typ + Sprache (#87, V 1.60.0) |
| ✅ Erledigt | Android-App mit Offline-Nutzung und Datensynchronisierung — Sync-Konten, QR-Code-Einrichtung, Rechte pro Modul (V 1.76.0) |
| ✅ Erledigt | Audit-Management — Audits mit Checklisten, Findings aus Nichtkonformitäten, jährliches Auditprogramm |
| ✅ Erledigt | Maßnahmenregister — ein Datensatz für Risikobehandlungen, Finding-Maßnahmen, Governance-Maßnahmen und TOMs (V 1.80.0) |
| 🔜 Als Nächstes | Revisionssichere Löschung — gelöschte Datensätze werden dauerhaft aufbewahrt, DSGVO-Löschungen anonymisieren statt zu entfernen, Integritätsprüfung des Audit-Logs |
| 🔜 Als Nächstes | Geplante Berichte — wöchentlicher/monatlicher Compliance-Bericht per E-Mail |
| 🔜 Als Nächstes | Anomalieerkennung im Audit-Log (LLM-Batch) |
| 🚀 Später | Quantitative Risikobewertung (€-Werte, FAIR-inspiriert) |
| 🚀 Später | Auditor-Kollaborationsportal — externer Lesezugriff für Auditoren |
| 🚀 Später | Richtlinien-Lückenanalyse (LLM) |
| 🏁 V 2.x | Konfigurierbare Guidance-Kategorien — Admins definieren eigene Kategorien (z. B. Workflows, Org-Dokumente) |
---
## Über den Autor
**Claude Hecker** ist seit über 35 Jahren in der IT tätig. Nach etwa 15 Jahren als CIO wechselte er in die Rollen des CISO und Datenschutzbeauftragten (DSO/DSB). Im Laufe seiner Karriere hat er unternehmensweite IT-Infrastrukturen und Weitverkehrsnetz-Anbindungen (VPN, MPLS) für einen großen europäischen Konzern entworfen und implementiert — verantwortlich für zuverlässigen, sicheren Betrieb über mehrere Standorte und Rechtsordnungen hinweg.
ISMS Builder ist direkt aus dieser Erfahrung entstanden: ein konformes ISMS in der Praxis aufzubauen und zu pflegen, über reale Audits hinweg, unter realem regulatorischem Druck. Das Tool spiegelt wider, was Praktiker tatsächlich brauchen — nicht, was ein Produktmanager für nötig hält.
**Warum Open Source?**
KMU verdienen Zugang zu einer ordentlichen ISMS-Plattform ohne fünfstellige Lizenzgebühren. Der Onboarding-Aufwand ist real, unabhängig davon, für welches Tool man sich entscheidet — aber diese Kosten sollten nicht durch Vendor-Lock-in oder dadurch, dass Daten die eigene Infrastruktur verlassen, noch verschärft werden. Dieses Projekt steht für Softwarefreiheit und für das Prinzip, dass Ihre Compliance-Daten Ihnen gehören.
---
## Hinweis zu Standards-Referenzen
Diese Software referenziert Control-Identifikatoren und Kurztitel aus veröffentlichten Standards ausschließlich zu Zwecken der Interoperabilität und des Compliance-Managements.
---
[Read more](https://github.com/coolstartnow/isms-builder)