158 lines
6.0 KiB
Markdown
158 lines
6.0 KiB
Markdown
---
|
|
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
|