SwissKnife Docs
Comprendre SwissKnife

Architecture

Comment SwissKnife est assemblé, servi et déployé.

SwissKnife est un client unique. Il n'y a pas d'API applicative, pas de base de données et pas de service d'authentification.

Navigateur
  → application React
    → images : Canvas 2D
    → audio / vidéo : FFmpeg WASM (un thread, file d'attente)
    → core FFmpeg : /ffmpeg/ffmpeg-core.js et /ffmpeg/ffmpeg-core.wasm

En production Docker :

Nginx non privilégié (port 8080)
  → fichiers statiques issus de dist/
  → repli SPA vers index.html
  → en-têtes COOP / COEP / CSP (SharedArrayBuffer)

Stack observée

CoucheChoix actuel
InterfaceReact 19, TypeScript strict
BuildVite 6, Tailwind CSS 4
ImagesAPI Canvas
Audio / vidéo@ffmpeg/ffmpeg 0.12 et @ffmpeg/core 0.12.6, copie locale
ConteneurNode 20 Alpine pour le build, Nginx unprivileged 1.27 Alpine à l'exécution
ContrôlesESLint, Vitest (npm test), tsc --noEmit

Deux artefacts distincts

ArtefactCommandeUsage
Produit normalnpm run buildDocker, GHCR, npm run dev
Démonstration publiquenpm run build:demoprojet Vercel de démo uniquement

Le Dockerfile appelle npm run build. vercel.json du produit appelle npm run build:demo. Les deux ne doivent pas être inversés.

Compose du dépôt

FichierImage
docker-compose.ymlghcr.io/lucas-lepajollec/swissknife:latest
docker-compose.build.ymlconstruction locale depuis le Dockerfile

Contrairement à un Compose qui builderait toujours le checkout, l'installation homelab par défaut tire l'image publiée.

On this page