feat: NPM-Package Distribution als Docker-Alternative #261

Closed
opened 2026-01-25 11:16:38 +00:00 by jack · 1 comment
Owner

Beschreibung

Backend und Worker sollen auch als eigenständige NPM-Packages installierbar sein, für User die kein Docker nutzen möchten.

Aktueller Stand

Docker-Distribution:

  • Dockerfile.backend
  • Dockerfile.worker
  • docker-compose.yml / docker-compose.dev.yml

Package-Struktur bereits vorhanden:

  • @claude-mem/backend
  • @claude-mem/worker
  • @claude-mem/database
  • etc.

Anforderungen

1. Publishable Packages

  • @claude-mem/backend als eigenständiges NPM-Package
  • @claude-mem/worker als eigenständiges NPM-Package
  • Optional: @claude-mem/cli als Wrapper für einfache Installation

2. CLI-Befehle

# Installation
npm install -g @claude-mem/backend
# oder
pnpm add -g @claude-mem/backend

# Starten
claude-mem-backend start
claude-mem-backend start --port 37777 --db ~/.claude-mem/claude-mem.db

# Worker
npm install -g @claude-mem/worker
claude-mem-worker start --backend ws://localhost:37777

3. Kombiniertes Package (Optional)

# All-in-one Installation
npm install -g @claude-mem/server

# Startet Backend + Worker
claude-mem-server start

4. Konfiguration

Beide Varianten (Docker & NPM) sollten dieselben Konfigurationsoptionen unterstützen:

# Umgebungsvariablen
CLAUDE_MEM_PORT=37777
CLAUDE_MEM_DB_PATH=~/.claude-mem/claude-mem.db
CLAUDE_MEM_LOG_LEVEL=info

# Oder Config-Datei
claude-mem-backend start --config ~/.claude-mem/config.json

Technische Umsetzung

Package.json Anpassungen

// packages/backend/package.json
{
  "name": "@claude-mem/backend",
  "bin": {
    "claude-mem-backend": "./dist/cli.js"
  },
  "files": ["dist", "README.md"],
  "publishConfig": {
    "access": "public"
  }
}

CLI Entry Point

// packages/backend/src/cli.ts
#!/usr/bin/env node
import { program } from 'commander';
import { BackendService } from './backend-service.js';

program
  .command('start')
  .option('-p, --port <port>', 'Port number', '37777')
  .option('-d, --db <path>', 'Database path', '~/.claude-mem/claude-mem.db')
  .action(async (options) => {
    const service = new BackendService(options);
    await service.start();
  });

program.parse();

Native Dependencies

Problem: better-sqlite3 benötigt native Compilation.

Lösungen:

  1. Prebuilt binaries via prebuild-install
  2. Dokumentation für Build-Tools (Python, C++ Compiler)
  3. Optional: Pure-JS SQLite Alternative (langsamer)

Vorteile

Docker NPM
Isolation Komplett Shared Node
Setup Docker installieren Node.js reicht
Updates Image pullen npm update
Ressourcen Mehr Overhead Leichtgewichtiger
Dev-Friendly Eher Ops Eher Devs

Dokumentation

  • Installation Guide für NPM-Variante
  • Systemanforderungen (Node.js Version, Build-Tools)
  • Migration von Docker zu NPM (und umgekehrt)
  • Troubleshooting für native Dependencies

Abhängigkeiten

  • Könnte von #251 (Dev-Mode Logging) profitieren für CLI-Ausgaben
## Beschreibung Backend und Worker sollen auch als eigenständige NPM-Packages installierbar sein, für User die kein Docker nutzen möchten. ## Aktueller Stand **Docker-Distribution:** - `Dockerfile.backend` - `Dockerfile.worker` - `docker-compose.yml` / `docker-compose.dev.yml` **Package-Struktur bereits vorhanden:** - `@claude-mem/backend` - `@claude-mem/worker` - `@claude-mem/database` - etc. ## Anforderungen ### 1. Publishable Packages - [ ] `@claude-mem/backend` als eigenständiges NPM-Package - [ ] `@claude-mem/worker` als eigenständiges NPM-Package - [ ] Optional: `@claude-mem/cli` als Wrapper für einfache Installation ### 2. CLI-Befehle ```bash # Installation npm install -g @claude-mem/backend # oder pnpm add -g @claude-mem/backend # Starten claude-mem-backend start claude-mem-backend start --port 37777 --db ~/.claude-mem/claude-mem.db # Worker npm install -g @claude-mem/worker claude-mem-worker start --backend ws://localhost:37777 ``` ### 3. Kombiniertes Package (Optional) ```bash # All-in-one Installation npm install -g @claude-mem/server # Startet Backend + Worker claude-mem-server start ``` ### 4. Konfiguration Beide Varianten (Docker & NPM) sollten dieselben Konfigurationsoptionen unterstützen: ```bash # Umgebungsvariablen CLAUDE_MEM_PORT=37777 CLAUDE_MEM_DB_PATH=~/.claude-mem/claude-mem.db CLAUDE_MEM_LOG_LEVEL=info # Oder Config-Datei claude-mem-backend start --config ~/.claude-mem/config.json ``` ## Technische Umsetzung ### Package.json Anpassungen ```json // packages/backend/package.json { "name": "@claude-mem/backend", "bin": { "claude-mem-backend": "./dist/cli.js" }, "files": ["dist", "README.md"], "publishConfig": { "access": "public" } } ``` ### CLI Entry Point ```typescript // packages/backend/src/cli.ts #!/usr/bin/env node import { program } from 'commander'; import { BackendService } from './backend-service.js'; program .command('start') .option('-p, --port <port>', 'Port number', '37777') .option('-d, --db <path>', 'Database path', '~/.claude-mem/claude-mem.db') .action(async (options) => { const service = new BackendService(options); await service.start(); }); program.parse(); ``` ### Native Dependencies **Problem:** `better-sqlite3` benötigt native Compilation. **Lösungen:** 1. Prebuilt binaries via `prebuild-install` 2. Dokumentation für Build-Tools (Python, C++ Compiler) 3. Optional: Pure-JS SQLite Alternative (langsamer) ## Vorteile | | Docker | NPM | |---|--------|-----| | Isolation | ✅ Komplett | ❌ Shared Node | | Setup | Docker installieren | Node.js reicht | | Updates | Image pullen | npm update | | Ressourcen | Mehr Overhead | Leichtgewichtiger | | Dev-Friendly | Eher Ops | Eher Devs | ## Dokumentation - [ ] Installation Guide für NPM-Variante - [ ] Systemanforderungen (Node.js Version, Build-Tools) - [ ] Migration von Docker zu NPM (und umgekehrt) - [ ] Troubleshooting für native Dependencies ## Abhängigkeiten - Könnte von #251 (Dev-Mode Logging) profitieren für CLI-Ausgaben
Author
Owner

Ergänzung: Forgejo Package Registry

Die Packages sollen in der Forgejo Package Registry landen, nicht auf npmjs.com.

Konfiguration

# .npmrc für Forgejo Registry
@claude-mem:registry=https://git.customable.local/api/packages/customable/npm/
//git.customable.local/api/packages/customable/npm/:_authToken=${FORGEJO_TOKEN}

Package.json

{
  "name": "@claude-mem/backend",
  "publishConfig": {
    "registry": "https://git.customable.local/api/packages/customable/npm/"
  }
}

Publish-Workflow

# Manuell
pnpm publish --registry https://git.customable.local/api/packages/customable/npm/

# Oder via CI/Forgejo Actions

Installation für User

# User müssen Registry konfigurieren
npm config set @claude-mem:registry https://git.customable.local/api/packages/customable/npm/

# Dann normal installieren
npm install -g @claude-mem/backend
## Ergänzung: Forgejo Package Registry Die Packages sollen in der **Forgejo Package Registry** landen, nicht auf npmjs.com. ### Konfiguration ```bash # .npmrc für Forgejo Registry @claude-mem:registry=https://git.customable.local/api/packages/customable/npm/ //git.customable.local/api/packages/customable/npm/:_authToken=${FORGEJO_TOKEN} ``` ### Package.json ```json { "name": "@claude-mem/backend", "publishConfig": { "registry": "https://git.customable.local/api/packages/customable/npm/" } } ``` ### Publish-Workflow ```bash # Manuell pnpm publish --registry https://git.customable.local/api/packages/customable/npm/ # Oder via CI/Forgejo Actions ``` ### Installation für User ```bash # User müssen Registry konfigurieren npm config set @claude-mem:registry https://git.customable.local/api/packages/customable/npm/ # Dann normal installieren npm install -g @claude-mem/backend ```
jack closed this issue 2026-01-25 11:22:16 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
customable/claude-mem#261
No description provided.