{"_id":"@demokrit/skap","_rev":"3-7f15eecb652ba22a259e210b73916e53","name":"@demokrit/skap","dist-tags":{"latest":"0.1.4"},"versions":{"0.1.0":{"name":"@demokrit/skap","version":"0.1.0","keywords":["cli","scaffold","docker","dev","project","skap"],"license":"MIT","_id":"@demokrit/skap@0.1.0","maintainers":[{"name":"demokrit","email":"luca.versen@icloud.com"}],"homepage":"https://github.com/DemokritAtom/skap#readme","bugs":{"url":"https://github.com/DemokritAtom/skap/issues"},"os":["linux"],"bin":{"skap":"bin/skap"},"cpu":["x64"],"dist":{"shasum":"ce103af27cb5f535936ff21e4841658cb7fd6e8f","tarball":"https://registry.npmjs.org/@demokrit/skap/-/skap-0.1.0.tgz","fileCount":4,"integrity":"sha512-YOkBIw1JkT9S4EmW28TCVF791nL/h7lxH7JKcacP0OnduM2XPCair/5tKHR5Qi9PBy+mXn14ZPwIOgymVehv0g==","signatures":[{"sig":"MEQCICXHZKoJLk5VCMxlSqDo1touVhu/BAn0bVHy7dSICFQIAiBxMZ2BrXBd9lSL2uqm/F1d7uyt3IWZjEhln3mWGxadzQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10544874},"gitHead":"d2b813a603e27229d5b5d6a170da5a2b3a9bda58","_npmUser":{"name":"demokrit","email":"luca.versen@icloud.com"},"repository":{"url":"git+https://github.com/DemokritAtom/skap.git","type":"git"},"_npmVersion":"11.11.0","description":"A lean, fast Linux/macOS CLI for managing dev projects","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/skap_0.1.0_1777963540891_0.34323933839657705","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@demokrit/skap","version":"0.1.3","keywords":["cli","scaffold","docker","dev","project","skap"],"license":"MIT","_id":"@demokrit/skap@0.1.3","maintainers":[{"name":"demokrit","email":"luca.versen@icloud.com"}],"homepage":"https://github.com/DemokritAtom/skap#readme","bugs":{"url":"https://github.com/DemokritAtom/skap/issues"},"os":["linux","darwin"],"bin":{"skap":"bin/skap"},"cpu":["x64","arm64"],"dist":{"shasum":"0c942ab9f82530a41fcd1c3a9d61e527260606e9","tarball":"https://registry.npmjs.org/@demokrit/skap/-/skap-0.1.3.tgz","fileCount":4,"integrity":"sha512-bJUcWEBkx4SInnLD+BcaGU+1BjwoD68FoXWDHre0j5J6+W0ukBJPpzqp5hJl04laW3UMh9pL5tpHazmygHxJQw==","signatures":[{"sig":"MEUCIQCOsgFZ0Oi6/YpJZ0M8lZBH+v9VXQEsWFRtHH+cbRn0dwIgH47SPn05jwhQwHsbNQz3ROehiKPdMJY/LAj2aNYULk4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19744},"gitHead":"178afdd8c1f848b36a46ce20e81d457ef4d1f731","_npmUser":{"name":"demokrit","email":"luca.versen@icloud.com"},"repository":{"url":"git+https://github.com/DemokritAtom/skap.git","type":"git"},"_npmVersion":"10.8.2","description":"A lean, fast Linux/macOS CLI for managing dev projects","directories":{},"_nodeVersion":"20.20.2","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/skap_0.1.3_1784709834073_0.27736102252829875","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@demokrit/skap","version":"0.1.4","description":"A lean, fast Linux/macOS CLI for managing dev projects","bin":{"skap":"bin/skap"},"scripts":{"postinstall":"node install.js"},"repository":{"type":"git","url":"git+https://github.com/DemokritAtom/skap.git"},"homepage":"https://github.com/DemokritAtom/skap#readme","license":"MIT","keywords":["cli","scaffold","docker","dev","project","skap"],"os":["linux","darwin"],"cpu":["x64","arm64"],"_id":"@demokrit/skap@0.1.4","gitHead":"2db01f9d296acb8b54aa91399b19b64e4c507e93","bugs":{"url":"https://github.com/DemokritAtom/skap/issues"},"_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-CEClXEz3CPu1s0M84/QTUR3VJfr9eEWAP8hZbkXEchg/LIvi3dCdwcl4nNOaXaM/MXavQzKpf6KEMGWWidSedw==","shasum":"9018811c5d9443e370a6c04b265bd046982d2a32","tarball":"https://registry.npmjs.org/@demokrit/skap/-/skap-0.1.4.tgz","fileCount":5,"unpackedSize":23229,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDfeD/IZ1E6WBXck9ZGrObhpf2L0WYXjopjQykPc6eXTQIgKp0qrpCmNSMkHkmKL7MQ6woYwo6obk+Jvi81Irwx+7s="}]},"_npmUser":{"name":"demokrit","email":"luca.versen@icloud.com"},"directories":{},"maintainers":[{"name":"demokrit","email":"luca.versen@icloud.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/skap_0.1.4_1784710526211_0.9293506716442426"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-05T06:45:40.796Z","modified":"2026-07-22T08:55:26.545Z","0.1.0":"2026-05-05T06:45:41.180Z","0.1.3":"2026-07-22T08:43:54.192Z","0.1.4":"2026-07-22T08:55:26.350Z"},"bugs":{"url":"https://github.com/DemokritAtom/skap/issues"},"license":"MIT","homepage":"https://github.com/DemokritAtom/skap#readme","keywords":["cli","scaffold","docker","dev","project","skap"],"repository":{"type":"git","url":"git+https://github.com/DemokritAtom/skap.git"},"description":"A lean, fast Linux/macOS CLI for managing dev projects","maintainers":[{"name":"demokrit","email":"luca.versen@icloud.com"}],"readme":"# skap\n\n> **Ein Befehl reicht um loszulegen.**\n\n`skap` ist ein schlankes, schnelles CLI-Tool zur Verwaltung von Dev-Projekten unter Linux und macOS – geschrieben in Rust, distribuiert als einzelnes Binary.\n\n```bash\nskap new myapp react          # Projekt erstellen\nskap start myapp              # Docker starten\nskap list                     # Alle Projekte\nskap add github myapp         # GitHub Remote anlegen\n```\n\n---\n\n## Philosophie\n\n| Prinzip | Bedeutung |\n|---|---|\n| **Zero friction** | Kein Wizard, keine Pflicht-Fragen beim Erstellen |\n| **Sane defaults** | `skap new myapp` → sofort fertig, alles optional |\n| **Erweiterbar** | Alles kann später nachträglich per `skap add` hinzugefügt werden |\n| **Portabel** | Einzelnes Binary, keine Systemabhängigkeiten |\n| **Schnell** | Port-Checks via `TcpListener::bind`, keine externen Tools nötig |\n\n---\n\n## Installation\n\n```bash\nnpm install -g @demokrit/skap\n```\n\n> Erfordert Node.js ≥ 14. Das passende Binary für deine Plattform wird automatisch heruntergeladen.\n\n**Unterstützte Plattformen:**\n\n| Platform    |\n|-------------|\n| Linux x64   |\n| Linux arm64 |\n| macOS x64   |\n| macOS arm64 |\n\n---\n## Hilfe & Übersicht\n\nMit `skap help` oder `skap <Befehl> --help` erhältst du eine vollständige Übersicht aller verfügbaren Befehle, Subcommands und Optionen. Es werden nicht nur die Hauptbefehle angezeigt, sondern auch, welche Argumente und Flags nach jedem Befehl möglich sind. Beispiel:\n\n```bash\nskap help\nskap add --help\nskap new --help\n```\n\nSo findest du schnell heraus, was du nach jedem Befehl noch angeben kannst (z.B. weitere Subcommands, Flags oder Argumente).\n\n---\n\n## Shell-Integration (`skap open`)\n\nDa ein Kindprozess das `cwd` des Parent-Shells nicht ändern kann, legt man\neinmalig eine Funktion in `.bashrc` / `.zshrc` an:\n\n```bash\nfunction skap() {\n  if [[ \"$1\" == \"open\" ]]; then\n    dir=$(command skap open --print-path \"$2\")\n    if [ -n \"$dir\" ]; then cd \"$dir\" && command skap open --editor-only \"$2\"; fi\n  else\n    command skap \"$@\"\n  fi\n}\n```\n\n---\n\n## Globale Konfiguration\n\nAlle Konfigurationsdateien liegen unter `~/.config/skap/` und werden beim\nersten Start automatisch angelegt.\n\n| Datei | Inhalt |\n|---|---|\n| `config.toml` | Editor, Defaults für Git/Docker, Tokens, Base-Port |\n| `registry.toml` | Alle registrierten Projekte |\n| `ports.toml` | Reservierte Ports je Service |\n\nKonfiguration verwalten:\n\n```bash\nskap config set editor vim\nskap config set github_token ghp_xxxx\nskap config set default_license Apache\nskap config set base_port 4000\nskap config get editor\nskap config list\n```\n\n---\n\n## Befehle\n\n### `skap new <name> [template]`\n\nErstellt ein neues Projekt. Keine interaktiven Fragen – alles läuft mit Defaults durch.\n\n```bash\nskap new myapp                        # docker-only Template\nskap new myapp react                  # React + Vite\nskap new api fastapi --no-docker      # FastAPI ohne Docker\nskap new tool rust-cli --no-git --no-docker\nskap new shop next --git-remote --private --tag client\nskap new service express --port 5000  # Custom Base-Port\n```\n\n**Was passiert automatisch:**\n- Port-Scan + konfliktfreie Port-Vergabe\n- Template-Dateien rendern (Tera Engine)\n- `git init` + initialer Commit (konfigurierbar)\n- `docker-compose.yml` + `Dockerfile` generieren (konfigurierbar)\n- `LICENSE` schreiben (MIT by default)\n- Projekt in `registry.toml` registrieren\n\n**Flags:**\n\n| Flag | Bedeutung |\n|---|---|\n| `--template / -t <name>` | Template explizit wählen |\n| `--no-git` | Git überspringen |\n| `--no-docker` | Docker überspringen |\n| `--git-remote` | Remote auf konfigurierten Provider anlegen |\n| `--private` | Private Repo (nur mit `--git-remote`) |\n| `--license <name>` | MIT \\| Apache \\| GPL \\| none |\n| `--tag <tag>` | Tag vergeben (wiederholbar) |\n| `--editor` | Editor nach Erstellung öffnen |\n| `--port <n>` | Basis-Port manuell setzen |\n\n**Output:**\n```\n✓ Projekt \"myapp\" erstellt  (/home/user/dev/myapp)\n✓ Template: react\n· Lizenzdatei: MIT\n✓ Git initialisiert (initial commit)\n✓ Docker Compose generiert (Ports: frontend:3000, backend:8000)\n· Registriert in skap registry\n\n→ Starten mit: skap start myapp\n```\n\n---\n\n### `skap add <feature> [project]`\n\nFügt einem bestehenden Projekt nachträglich Features hinzu. Wird kein Projektname angegeben, wird das aktuelle Verzeichnis erkannt.\n\n| Feature | Was passiert |\n|---|---|\n| `git` | `git init` + `.gitignore` + initialer Commit |\n| `docker` | `Dockerfile` + `docker-compose.yml` generieren |\n| `github` | GitHub-Remote anlegen (braucht `github_token` in config; `--private` für privates Repo) |\n| `gitlab` | GitLab-Remote anlegen (braucht `gitlab_token` in config; `--private` für privates Repo) |\n| `env` | `.env` + `.env.example` anlegen |\n| `lint` | Linter-Config (ESLint / Clippy / Ruff je nach Stack) |\n| `ci` | `.github/workflows/ci.yml` generieren |\n| `precommit` | `.pre-commit-config.yaml` anlegen |\n| `license` | Lizenzdatei hinzufügen (fragt einmalig welche) |\n| `readme` | `README.md` generieren |\n| `makefile` | `Makefile` mit Standard-Targets |\n| `devcontainer` | VS Code Devcontainer Config |\n| `db` | Datenbank-Container hinzufügen (fragt einmalig: postgres / mysql / mongo / redis) |\n| `ssl` | Self-signed Cert für lokales HTTPS |\n\n```bash\nskap add docker myapp\nskap add github myapp\nskap add github myapp --private\nskap add db                   # fragt welche DB\nskap add ci myapp\n```\n\n---\n\n### `skap fix <problem> [project]`\n\nDiagnostiziert und repariert häufige Probleme.\n\n| Problem | Was passiert |\n|---|---|\n| `ports` | Konflikte erkennen, neue freie Ports vorschlagen, `docker-compose.yml` updaten |\n| `env` | Fehlende `.env`-Einträge aus `.env.example` auffüllen |\n| `git` | Git-State prüfen |\n| `docker` | Compose-Stack neu bauen |\n| `permissions` | Dateiberechtigungen normalisieren (world-write entfernen) |\n| `deps` | Fehlende Dependencies nachinstallieren (npm / pip / cargo / go) |\n| `all` | Alle obigen Checks nacheinander |\n\n```bash\nskap fix ports myapp          # fragt einmalig um Bestätigung\nskap fix env                  # inferred vom cwd\nskap fix all myapp\n```\n\n**Port-Fix Ablauf:**\n1. Liest `docker-compose.yml` des Projekts\n2. Prüft jeden Host-Port (live `TcpListener::bind`)\n3. Zeigt Konflikte an + schlägt neue Ports vor\n4. Fragt einmalig: `Ports ändern? [Y/n]`\n5. Patched `docker-compose.yml` + `ports.toml` + `registry.toml`\n6. Startet Container neu falls sie liefen\n\n---\n\n### `skap list`\n\nAlle registrierten Projekte in einer übersichtlichen Tabelle.\n\n```\nNAME          TEMPLATE    DOCKER    GIT         PORTS        TAGS\n───────────────────────────────────────────────────────────────────\nmyapp         react       🟢 UP     ✓ remote    3000,8000    client\napi-server    fastapi     🔴 ERR    ✓ local     8001\nrust-tool     rust-cli    ─          no          ─            intern\nold-project   next        ⚪ OFF     ✓ remote    3002\n```\n\nDie **GIT**-Spalte zeigt drei klar unterscheidbare Zustände:\n\n| Anzeige (Emoji) | ASCII | Bedeutung |\n|---|---|---|\n| `✓ remote` | `yes+remote` | Git initialisiert + Remote registriert |\n| `✓ local`  | `yes`        | Git initialisiert, kein Remote |\n| `no`        | `no`         | Kein Git in diesem Projekt |\n\n```bash\nskap list                     # alle aktiven\nskap list --tag client        # nach Tag filtern\nskap list --running           # nur laufende\nskap list --archived          # archivierte einschließen\n```\n\n---\n\n### `skap status [project]`\n\nDetailansicht eines einzelnen Projekts.\n\n```\nProjekt:    myapp\nPfad:       /home/user/dev/myapp\nTemplate:   react\nErstellt:   2026-04-22\n\nGit:        ✓ sauber  (branch: main, remote: github.com/user/myapp)\nDocker:     🟢 läuft\nPorts:      3000, 8000\nTags:       client\n\nDisk Usage: 245 MB\n```\n\n---\n\n### `skap start / stop / restart [project]`\n\n```bash\nskap start myapp              # docker compose up -d\nskap stop myapp               # docker compose down\nskap restart myapp            # docker compose restart\n```\n\nFehlt Docker im Projekt: Hinweis mit `skap add docker`.\n\n---\n\n### `skap logs [project]`\n\n```bash\nskap logs myapp               # letzte 50 Zeilen + follow\nskap logs myapp --tail 100\nskap logs myapp --service frontend\n```\n\n---\n\n### `skap shell [project]`\n\nÖffnet eine Shell in einem laufenden Container. Gibt es mehrere Services, erscheint eine Auswahl.\nLäuft das Projekt aktuell **nicht**, fragt skap interaktiv:\n\n```\n⚠ Container von 'myapp' laufen aktuell nicht.\n? Jetzt starten? [Y/n]\n```\n\nBei `Y` wird `docker compose up -d` ausgeführt und anschließend die Shell geöffnet.\n\n```bash\nskap shell myapp\nskap shell myapp --service backend\n```\n\n---\n\n### `skap run <project> <cmd...>`\n\nFührt einen Befehl im Kontext des Projekts aus – entweder via `docker compose exec` (wenn Container läuft) oder direkt im Projektverzeichnis.\nIst das Projekt als Docker-Projekt registriert, der Container läuft aber nicht, wird der Befehl auf dem Host ausgeführt – mit explizitem Hinweis:\n\n```\n⚠ Container läuft nicht – führe Befehl direkt im Projektverzeichnis aus.\n```\n\n```bash\nskap run myapp npm run build\nskap run api python manage.py migrate\nskap run tool cargo test\n```\n\n---\n\n### `skap rename <old> <new>`\n\nBenennt ein Projekt vollständig um:\n\n- stoppt laufende Container,\n- benennt das Verzeichnis um (`mv old new`),\n- aktualisiert den Eintrag in `registry.toml`,\n- benennt alle Schlüssel `old-*` in `ports.toml` zu `new-*`,\n- aktualisiert `.skap.toml` im Projektordner,\n- startet die Container danach wieder, falls sie vorher liefen.\n\n```bash\nskap rename myapp my-renamed\n```\n\n---\n\n### `skap move <project> <new-path>`\n\nVerschiebt ein Projekt an einen anderen Ort im Dateisystem.\nFehlt das Zielverzeichnis, wird der Elternpfad automatisch angelegt.\nLaufende Container werden vorher gestoppt und am Zielort neu gestartet.\n\n```bash\nskap move api ~/work/backends/api\n```\n\n---\n\n### `skap ports list [--used|--free]`\n\nListet alle in `ports.toml` reservierten Ports und zeigt den **aktuellen** Belegungsstatus auf der Maschine:\n\n```\nService                             Port     Status\n────────────────────────────────────────────────────────────\napi-api                             3000     🟢 aktiv\nweb-frontend                        3001     ⚪ frei\n```\n\nMit `--used` werden nur belegte, mit `--free` nur freie Ports angezeigt.\nIst Emoji deaktiviert (`--no-emoji` oder `skap config set emoji false`), werden `USED` / `FREE` ausgegeben.\n\n---\n\n### `skap clone <url> [name]`\n\nKlont ein bestehendes Repo und registriert es bei skap.\nFindet sich im Repo eine `.skap.toml`, wird Template- und Port-Information daraus übernommen.\nAndernfalls erkennt skap den Stack heuristisch (Next, Vite, FastAPI, Django, Rust, Go, Express, …) und liest – falls vorhanden – Host-Ports aus `docker-compose.yml`.\n\n```bash\nskap clone https://github.com/me/cool-app.git\nskap clone git@gitlab.com:org/api.git api-prod\n```\n\nIst der abgeleitete Name (Repo-Basename) bereits in der Registry vergeben, **bricht** der Befehl ab und verlangt explizit einen anderen Namen – nichts wird stillschweigend überschrieben:\n\n```\nError: a project named 'cool-app' is already registered –\n       pass a different name: `skap clone https://github.com/me/cool-app.git <name>`\n```\n\n---\n\n### `skap tag <add|remove|list> ...`\n\nVerwaltet Projekt-Tags nach der Erstellung. Tags werden in `registry.toml` gespeichert und von `skap list --tag <tag>` zur Filterung verwendet.\n\n```bash\nskap tag add myapp client            # Tag hinzufügen (idempotent)\nskap tag remove myapp client         # Tag entfernen\nskap tag list myapp                  # Tags eines Projekts\nskap tag list                        # Tags aller Projekte\n```\n\n---\n\n### `skap open [project]`\n\nWechselt ins Projektverzeichnis und öffnet den Editor (siehe Shell-Integration).\n\n```bash\nskap open myapp\nskap open myapp --editor vim\nskap open myapp --no-editor\n```\n\n---\n\n### `skap doctor`\n\nVollständige Systemdiagnose.\n\n```\nSYSTEM\n  ✓  Docker     29.4.1\n  ✓  Git        2.43.0\n  ✓  Node       20.11.0\n  ✗  Go         not installed\n  ✓  Rust       1.95.0\n\nPROJEKTE\n  ✓  myapp           alles ok\n  ·  rust-tool       stopped\n  ✗  old-project     path missing\n\nPORT-KONFLIKTE\n  keine\n\nEMPFEHLUNGEN\n  → skap archive old-project  (path missing)\n```\n\n---\n\n### `skap clean [project]`\n\n```bash\nskap clean myapp --images     # Docker Images entfernen\nskap clean myapp --volumes    # Docker Volumes entfernen\nskap clean myapp --all        # beides\n```\n\n---\n\n### `skap archive [project]`\n\nMarkiert ein Projekt als archiviert: stoppt laufende Container, blendet es aus `skap list` aus (außer mit `--archived`).\n\n```bash\nskap archive old-project\nskap list --archived          # zeigt auch archivierte\n```\n\n---\n\n### `skap update`\n\nPrüft GitHub Releases auf eine neuere Version und gibt einen Hinweis – das Binary wird **nicht** automatisch ersetzt.\n\n```bash\nskap update\n# ✓ skap ist aktuell (0.1.0)\n```\n\n```bash\nskap update\n# → Neue Version verfügbar: 0.2.0  (du hast 0.1.1)\n#   • npm i -g @demokrit/skap\n#   • curl -fsSL https://raw.githubusercontent.com/DemokritAtom/skap/main/install.sh | sh\n#\n# · Release: https://github.com/DemokritAtom/skap/releases/tag/v0.2.0\n```\n\n---\n\n### `skap config init [--force]`\n\nLegt eine frische `~/.config/skap/config.toml` mit den Default-Werten an.\nExistiert die Datei bereits, wird ohne `--force` nachgefragt.\n`registry.toml` und `ports.toml` werden **nie** angefasst.\n\n```bash\nskap config init\nskap config init --force\n```\n\n---\n\n## Templates\n\nAlle Templates sind ins Binary kompiliert (kein separater Download nötig).\n\n| Template | Sprache | Services |\n|---|---|---|\n| `docker-only` | beliebig | app |\n| `react` | JavaScript | frontend, backend |\n| `next` | TypeScript | app |\n| `vue` | JavaScript | frontend |\n| `svelte` | JavaScript | frontend |\n| `express` | JavaScript | api |\n| `fastapi` | Python | api |\n| `django` | Python | web |\n| `axum` | Rust | api |\n| `go-api` | Go | api |\n| `rust-cli` | Rust | – (kein Docker) |\n| `go-cli` | Go | – (kein Docker) |\n\n**Tera Template-Variablen:**\n\n| Variable | Beispiel |\n|---|---|\n| `{{ project_name }}` | `my-app` |\n| `{{ project_name_pascal }}` | `MyApp` |\n| `{{ project_name_snake }}` | `my_app` |\n| `{{ frontend_port }}` | `3000` |\n| `{{ api_port }}` | `8001` |\n| `{{ year }}` | `2026` |\n| `{{ author }}` | aus `git config user.name` |\n| `{{ license }}` | `MIT` |\n\n---\n\n## Port-Management\n\nPorts werden automatisch zugewiesen – konfliktfrei:\n\n1. Liest `~/.config/skap/ports.toml` (bereits vergebene Ports)\n2. Prüft per `TcpListener::bind` ob der Port frei ist (kein `ss` / `netstat` nötig)\n3. Startet bei `base_port` (default: 3000) und inkrementiert bis ein freier Port gefunden wird\n4. Jeder Service bekommt seinen eigenen Port\n\n```bash\nskap config set base_port 4000        # anderen Startport setzen\nskap new myapp react --port 5000      # einmalig überschreiben\nskap fix ports myapp                  # Konflikte auflösen\n```\n\n### Live-Status & Emoji\n\n`skap ports list` zeigt zusätzlich an, ob der Port aktuell auf der Maschine belegt ist (🟢 `aktiv`) oder nicht (⚪ `frei`).\nIn Terminals ohne UTF-8-Locale, in CI-Umgebungen oder mit explizitem Flag wird automatisch ASCII verwendet:\n\n```bash\nskap --no-emoji list           # einmalig ASCII\nskap config set emoji false    # dauerhaft ASCII (UP/OFF/ERR, USED/FREE)\n```\n\n---\n\n## Konfigurationsdateien\n\n### `~/.config/skap/config.toml`\n```toml\n[defaults]\neditor = \"code\"\ngit = true\ndocker = true\nlicense = \"MIT\"\ngit_provider = \"github\"\ngithub_token = \"\"\ngitlab_token = \"\"\ngitlab_url = \"https://gitlab.com\"\nemoji = true                  # auf false setzen für ASCII-only Output\n\n[ports]\nbase_port = 3000\n```\n\n### `~/.config/skap/registry.toml`\n```toml\n[projects.myapp]\npath = \"/home/user/dev/myapp\"\ntemplate = \"react\"\ncreated = \"2026-04-22T10:00:00Z\"\ntags = [\"client\"]\ndocker = true\ngit = true\ngit_remote = \"git@github.com:user/myapp.git\"\nports = [3000, 8000]\narchived = false\n```\n\n### `~/.config/skap/ports.toml`\n```toml\n[ports]\nmyapp-frontend = 3000\nmyapp-backend  = 8000\n```\n\n### `<projekt>/.skap.toml`\n\nProjektlokales Marker-File, das beim `skap new` und `skap add` automatisch geschrieben wird.\nEs gehört **ins Repo** (nicht in `.gitignore`), damit Mitentwickler·innen nach `git clone` direkt `skap doctor` und Co. nutzen können.\n`skap clone` liest diese Datei und kennt damit Template + Ports ohne Heuristik.\n\n```toml\n[project]\nname = \"myapp\"\ntemplate = \"react\"\ncreated = \"2026-04-22T10:00:00Z\"\n\n[ports]\nfrontend = 3000\nbackend  = 8000\n```\n\n---\n\n## Distribution\n\n| Kanal | Befehl |\n|---|---|\n| crates.io | `cargo install skap` |\n| npm | `npm install -g @demokrit/skap` |\n| Shell | `curl -fsSL …/install.sh \\| sh` |\n| GitHub Release | Binary direkt herunterladen |\n\n**Unterstützte Plattformen:**\n\n| Platform | Target |\n|---|---|\n| Linux x64 | `x86_64-unknown-linux-gnu` |\n| Linux arm64 | `aarch64-unknown-linux-gnu` |\n| macOS x64 | `x86_64-apple-darwin` |\n| macOS arm64 | `aarch64-apple-darwin` |\n\n---\n\n## CI/CD Pipeline\n\nTrigger: `git tag v*`\n\n1. Cross-compile für alle 4 Targets via `cross`\n2. Binaries als GitHub Release Assets hochladen\n3. `cargo publish` → crates.io\n4. `npm publish` → npm-Registry\n\n---\n\n## Roadmap\n\nNoch **nicht** implementiert (geplant):\n\n- TUI Dashboard (`ratatui`)\n- Secrets-Management / verschlüsselte `.env`\n- Community Template Registry\n- Tmux / Zellij Integration\n- Automatisches Background-Fetching\n- PR/MR Status via API\n\nAusdrücklich **nicht** geplant:\n\n- **Windows Support** – skap geht stark auf Unix-Tooling (POSIX-Shells, `docker compose`, `~/.config`, Symlinks, Signal-Handling) zurück. Eine native Windows-Portierung ist aktuell nicht vorgesehen. WSL2 funktioniert wie ein normales Linux.\n\n","readmeFilename":"README.md"}