Files
2026-06-09 18:40:21 +02:00

158 lines
6.2 KiB
Markdown

---
title: Kinto
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, cloud-storage, python, json, sync, mozilla, api, minimal]
confidence: medium
contested: false
sources: [https://selfh.st/apps/?tag=Self-hosted+Cloud, https://github.com/Kinto/kinto]
---
# 🗄️ Kinto
> **Stockage JSON synchronisable et versionné** : un service HTTP minimaliste pour stocker, synchroniser et partager des données structurées entre clients, conçu par Mozilla pour offrir un « Parse Server open source » ou un « Firebase-like self-hosted ».
## 📋 Informations Générales
| Métadonnée | Valeur |
| :--- | :--- |
| **Site web** | [kinto.readthedocs.io](https://kinto.readthedocs.io/) |
| **GitHub** | [Kinto/kinto](https://github.com/Kinto/kinto) |
| **License** | Apache-2.0 |
| **Langage** | Python (Pyramid) |
| **Étoiles** | 4 300 ⭐ |
| **Dernière MAJ** | 2026-05-08 |
| **Catégorie** | [[cat-cloud-storage]] |
## 📝 Description
**Kinto** est un projet de la fondation Mozilla (initialement par Mozilla Services puis piloté par la communauté) qui propose un **magasin de données JSON** exposé via une API REST simple, conçu pour être répliqué et synchronisé entre plusieurs clients ou instances. L'idée est proche de CouchDB ou Firebase, mais avec une approche plus stricte (validation de schéma, permissions fines, journal d'événements intégré).
Chaque ressource Kinto est un document JSON identifié par un ID et un numéro de version : `last_modified` est incrémenté à chaque écriture, ce qui permet la **synchronisation optimiste** entre clients sans conflit majeur. Les « buckets » et « collections » organisent les données à la manière de buckets S3 ou de collections MongoDB. Les permissions (read/write/collection:create) sont déclarables par utilisateur ou groupe.
Bien que moins connu que [[app-nextcloud]] dans le grand public, Kinto brille dans les contextes où l'on veut **stocker des données structurées** (préférences utilisateur, bookmarks, contacts, notes) avec une API propre, plutôt que des fichiers. Il sert typiquement de backend à des applications mobiles/web (Kinto.js côté client gère la synchronisation offline-first) ou de brique interne pour des produits B2B.
Le projet n'a pas vocation à être un clone de Dropbox : il n'y a pas d'UI web riche pour visualiser des fichiers. Sa force est dans la **couche de persistance et de synchronisation** — un peu comme un Firebase auto-hébergé en Python.
## 🚀 Installation
### Option 1 : Docker Compose (recommandé)
```yaml
# docker-compose.yml
version: '3.8'
services:
postgresql:
image: postgres:16-alpine
container_name: kinto-db
restart: unless-stopped
environment:
POSTGRES_USER: kinto
POSTGRES_PASSWORD: ${DB_PASS}
POSTGRES_DB: kinto
volumes:
- db_data:/var/lib/postgresql/data
kinto:
image: kinto/kinto-server:17.1.0
container_name: kinto
restart: unless-stopped
depends_on:
- postgresql
ports:
- "8888:8888"
environment:
KINTO_INI: /etc/kinto/kinto.ini
volumes:
- ./kinto.ini:/etc/kinto/kinto.ini:ro
volumes:
db_data:
```
```ini
# kinto.ini
[app:main]
use = egg:kinto
kinto.storage_backend = kinto.core.storage.postgresql
kinto.storage_url = postgresql://kinto:${DB_PASS}@postgresql:5432/kinto
kinto.cache_backend = kinto.core.cache.postgresql
kinto.permission_backend = kinto.core.permission.postgresql
kinto.user_hmac_secret = change-me-in-production
kinto.project_name = Kinto
kinto.project_version = 17.1.0
[server:main]
use = egg:waitress#main
host = 0.0.0.0
port = 8888
```
### Option 2 : Installation pip
```bash
pip install kinto
kinto init
kinto migrate
pserve kinto.ini
```
## ⚙️ Configuration
- **Authentification** : support natif des basicauth, hmac, OpenID Connect (via plugin `kinto-oidc`).
- **Plugins** : `kinto-signer` (signature crypto des collections), `kinto-attachment` (stockage binaire), `kinto-emailer`.
- **Validation de schéma** : plugin `kinto-schema` permet de typer fortement les records.
- **Quota** : configurable par bucket.
- **Soft-delete** : les records sont marqués `deleted=true` puis purgés par un cron configurable.
- **Réplication** : plusieurs instances Kinto peuvent répliquer entre elles via le mécanisme de pull/refresh.
## 🔄 Alternatives
### Open Source
- [[app-nextcloud]] — Plus généraliste (fichiers + agenda + contacts)
- [[app-cloudreve]] — Cloud storage pur, multi-backend
- [[app-opencloud]] — Go, fork d'OCIS
- [[app-oxicloud]] — Rust
- [[app-sync-in]] — Node.js
- [[app-mydrive]] — Node.js
- **CouchDB** — Document store avec sync native, en Erlang
- **PouchDB + CouchDB** — Combo historique pour le offline-first
- **Parse Server** — Plateforme BaaS auto-hébergeable
- **Strapi** — CMS headless JSON
### Propriétaires (ce que cette app remplace)
- **Firebase Realtime Database / Firestore** — backend BaaS de Google
- **Supabase** — alternative open-source à Firebase (PG + API auto)
- **AWS AppSync** — GraphQL managé
- **Pusher** — sync temps réel
## 🔐 Sécurité
- **Permissions fines** : lecture/écriture par utilisateur, groupe, ou anonyme.
- **CORS** : configurable finement pour autoriser uniquement vos frontends.
- **HMAC** : signature des requêtes possible via le plugin officiel.
- **Headers** : forcez HSTS, X-Content-Type-Options via votre reverse-proxy.
- **Backups** : un simple `pg_dump` suffit pour sauvegarder l'état complet.
- **Mises à jour** : le rythme a ralenti depuis 2020 mais reste sous maintenance active (versions mineures régulières sur l'upstream communautaire).
- **Attention** : `confidence: medium` reflète l'activité ralentie du dépôt principal.
## 📚 Ressources
- [Documentation](https://kinto.readthedocs.io/)
- [GitHub Kinto/kinto](https://github.com/Kinto/kinto)
- [Kinto.js client](https://github.com/Kinto/kinto.js)
- [Tutoriel Mozilla](https://developer.mozilla.org/en-US/docs/Mozilla/Project_Kinto)
- [Wiki communauté](https://github.com/Kinto/kinto/wiki)
## Pages Liées
- [[cat-cloud-storage]] — Catégorie Cloud Storage
- [[recettes-docker-compose]] — Templates Docker
- [[app-nextcloud]] — Plus généraliste
- [[securisation-home-lab]] — Sécurité
- [[Catalogue-Self-Hosted]] — Hub