---
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
