--- title: bknd created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, development, backend, typescript, supabase-alternative, api, low-code] confidence: high contested: false sources: [https://selfh.st/apps/?tag=Development, https://github.com/bknd-io/bknd] --- # 💻 bknd > **Le backend TypeScript léger et typé** : créez une API REST, une base de données et de l'authentification en quelques minutes, sans la lourdeur de Supabase ou Firebase. ## 📋 Informations Générales | Champ | Valeur | | :--- | :--- | | **Site web** | [bknd.io](https://bknd.io/) | | **GitHub** | [bknd-io/bknd](https://github.com/bknd-io/bknd) | | **License** | MIT | | **Langage** | TypeScript | | **Étoiles GitHub** | 3,7k ⭐ | | **Dernière MAJ** | 2026-06-07 | | **Catégorie** | [[cat-development\|Development]], Backend-as-a-Service | ## 📝 Description **bknd** est un **backend TypeScript moderne, léger et typé de bout en bout**, pensé comme une **alternative simple à Supabase** pour les développeurs qui veulent **garder le contrôle** de leur stack. Le projet mise sur une philosophie radicale : *un seul runtime, zéro dépendance cachée, configuration en code*. L'idée directrice est de proposer un **BaaS (Backend-as-a-Service) minimaliste** qui se déploie en quelques lignes : API REST auto-générée, ORM intégré avec support SQLite/PostgreSQL/MySQL, authentification par sessions ou JWT, validation Zod, et un **Data UI** intégré pour administrer les données. Tout est **typé** : les schémas se déclarent en TypeScript, l'API héritée automatiquement du typage, et le client SDK est généré pour vos frontends React/Next.js/Svelte. Contrairement à Supabase (qui embarque PostgREST, GoTrue, Realtime, Storage…), bknd fait le pari de la **simplicité** : un seul binaire, une seule config, et des performances excellentes. Le code reste 100% lisible et modifiable, le projet étant jeune (2024) et écrit en TypeScript strict. **Public cible** : **développeurs TypeScript, makers, startups, projets personnels** qui veulent un backend solide sans la complexité d'un Firebase/Supabase, et qui apprécient un stack 100% type-safe. ### Fonctionnalités principales - ✅ **API REST auto-générée** depuis le schéma TypeScript - ✅ **ORM intégré** : SQLite, PostgreSQL, MySQL, libSQL/Turso - ✅ **Authentification** : sessions, JWT, OAuth, magic links - ✅ **Validation Zod** des payloads - ✅ **Data UI** : interface d'administration des données - ✅ **Realtime** via WebSocket (subscriptions) - ✅ **CLI** : scaffolding, migrations, déploiement - ✅ **SDK frontend** : React, Next.js, Svelte, Vue, Solid - ✅ **Storage** : fichiers locaux ou S3-compatible - ✅ **Permissions granulaires** par rôle - ✅ **Hooks** : logique custom avant/après requêtes ## 🚀 Installation ### Via npm (recommandé pour intégrations) ```bash # Créer un nouveau projet npx create-bknd@latest mon-backend cd mon-backend npm install npm run dev ``` ### Via Docker (auto-hébergé) ```yaml # docker-compose.yml version: '3.8' services: bknd: image: ghcr.io/bknd-io/bknd:latest container_name: bknd restart: unless-stopped ports: - "3000:3000" environment: BKNd_CONFIG: "/app/config.ts" DATABASE_URL: "postgresql://bknd:password@db:5432/bknd" JWT_SECRET: "changez-moi-en-production-50-chars-min" volumes: - ./config:/app/config depends_on: - db labels: - "traefik.enable=true" - "traefik.http.routers.bknd.rule=Host(`api.example.com`)" - "traefik.http.routers.bknd.entrypoints=websecure" - "traefik.http.routers.bknd.tls.certresolver=letsencrypt" db: image: postgres:16-alpine container_name: bknd-db restart: unless-stopped environment: POSTGRES_USER: bknd POSTGRES_PASSWORD: changez-moi POSTGRES_DB: bknd volumes: - bknd_db:/var/lib/postgresql/data volumes: bknd_db: ``` ### Installation manuelle ```bash git clone https://github.com/bknd-io/bknd.git cd bknd pnpm install pnpm build pnpm start ``` ## ⚙️ Configuration 1. **Définir le schéma** dans `config.ts` : tables, champs, relations, auth, permissions 2. **Choisir la base de données** : SQLite par défaut (zéro-setup), PostgreSQL en prod 3. **Configurer l'authentification** : providers OAuth (Google, GitHub), sessions cookies 4. **Définir les permissions** : règles par rôle (admin, user, anon) 5. **Hooks custom** : TypeScript functions avant/après chaque opération 6. **CLI** : `npx bknd migrate` pour les migrations versionnées ## 🔗 Alternatives - **Supabase** — BaaS complet (PostgreSQL + Auth + Realtime + Storage), plus lourd, plus de features - **Appwrite** — Alternative open source BaaS, PHP backend, écosystème mature - **PocketBase** — BaaS Go/SQLite ultra-léger, fichier unique, idéal pour petits projets - **Directus** — Headless CMS sur base SQL existante, orienté contenu - **Firebase** — Propriétaire Google, lock-in fort - **Nhost** — Alternative Supabase (GraphQL + Hasura + Auth) ## 🔒 Sécurité - **🔐 JWT_SECRET robuste** obligatoire en production : `openssl rand -hex 64` - **🛡️ HTTPS obligatoire via [[app-traefik]]** : tous les payloads d'auth transitent chiffrés - **🔒 Rate limiting** : configurer un reverse proxy (Traefik, Caddy) ou middleware - **🛡️ Validation Zod** systématique des inputs (anti-injection) - **🛡️ CORS** : whitelister les origines frontend autorisées - **🛡️ Permissions par rôle** : ne jamais exposer `/admin` à `anon` ## 📚 Ressources - [Site officiel](https://bknd.io/) - [Documentation](https://docs.bknd.io/) - [GitHub bknd-io/bknd](https://github.com/bknd-io/bknd) - [Démo en ligne](https://demo.bknd.io/) ## 🔗 Pages Liées - [[cat-development]] — Catégorie Development - [[app-supabase]] — BaaS de référence (alternative plus complète) - [[app-appwrite]] — BaaS open source concurrent - [[app-pocketbase]] — BaaS Go ultra-léger - [[app-traefik]] — Reverse proxy HTTPS - [[securisation-home-lab]] — Bonnes pratiques - [[recettes-docker-compose]] — Templates Docker