Votre stockage · Un code · La réponse du client
Livrez. Faites valider.
colis dépose votre livrable dans un bucket qui vous appartient, sous un code de huit caractères. Votre client l’ouvre, le prévisualise, puis le valide ou demande des corrections. Vous savez quand il l’a ouvert et ce qu’il a répondu, et chaque étape peut lancer une automatisation.
- ✓ envoyé
- ✓ ouvert
- ✓ validé
- colis-site.vercel.app
- Votre bucket
- Aucun compte pour le client
- Aperçu
- Valider ou demander des corrections
- Webhooks signés
- n8n
- Gros fichiers, envoi reprenable
- AWS S3
- Cloudflare R2
- MinIO
- Scaleway
- Wasabi
- Une CLI en français
- MIT
01Envoyé. Ouvert. Validé.
Une livraison en trois temps.
Le fichier va de votre machine à votre bucket, puis de votre bucket à votre client. Personne d’autre ne le stocke, et personne ne crée de compte.
- envoi
Vous l’envoyez dans votre bucket.
Déposez le fichier sur votre page de livraison, ou envoyez-le d’un terminal avec colis envoyer. Il arrive dans votre bucket sous un code tout neuf, avec une durée de vie et, si vous le voulez, un mot de passe, une note, ou une suppression au premier téléchargement.
- ouvert
Votre client l’ouvre.
Un lien, un QR code, ou huit caractères tapés sur la page, fautes de frappe réparées. Il voit le fichier avant de télécharger quoi que ce soit : image, PDF, vidéo, audio, texte.
- validé
Il valide, ou demande des corrections.
Un clic pour valider, ou un commentaire sur ce qui doit changer. La réponse est définitive et horodatée ; elle s’affiche sur votre page d’envoi, dans colis statut et dans un webhook.
02Trois entrées
Une page pour votre client, un terminal pour vous, un webhook pour le reste.
Un seul protocole sous les trois. La page de livraison détient les clés de votre bucket ; le terminal et les automatisations lui parlent.
La page de livraison
templates/dropUn template Next.js à déployer sur votre bucket : la page d’envoi, la page de retrait avec son aperçu et ses deux réponses, et votre suivi.
https://drop.example.com/K7QP2M4X
maquette-v2.pdf · 1.8 MB · PDF
« La version avec le logo corrigé »
[ the PDF, previewed in the page ]
Le fichier correspond à ce qui était attendu ?
[ Valider la livraison ✓ ] [ Demander des corrections → ]Depuis un terminal
@mdemb/colisenvoyer, recevoir, statut, annuler, verifier : les commandes sont en français, seul le code sort sur stdout pour s’enchaîner, et statut dit où en est une livraison.
# colis.config.json points at your delivery page (colis init --provider remote)
$ colis envoyer ./maquette-v2.pdf
maquette-v2.pdf · 1.8 MB · expires in 1 day
K7QP2M4X
# later: where does it stand?
$ colis statut K7QP2M4X
validé
envoyé 2026-09-22 10:00
ouvert 2026-09-22 11:00
validé 2026-09-22 12:00Les automatisations
n8n-nodes-colisUn webhook signé à chaque étape, de parcel.sent à parcel.approved, et un nœud n8n qui lance un workflow sur chacun d’eux.
// app/api/colis/route.ts, on your side
import { verifyWebhook } from '@colis/protocol'
export async function POST(request: Request) {
const body = await request.text() // the raw body, before any JSON.parse
const result = await verifyWebhook(process.env.DROP_WEBHOOK_SECRET!, request.headers, body)
if (!result.valid) return new Response(null, { status: 401 })
const event = JSON.parse(body)
if (event.type === 'parcel.approved') await sendInvoice(event.data.code) // your code
return new Response(null, { status: 204 })
}03Votre stockage
Personne au milieu.
colis est une fine couche au-dessus d’un stockage objet que vous payez déjà. Les fichiers restent dans votre bucket, et la page tourne sur votre déploiement.
Le fichier va de vous à votre bucket, puis de votre bucket à votre client. Rien d’autre sur le schéma.
Votre bucket
S3, R2, MinIO, Scaleway, Wasabi, ou tout stockage compatible S3. Votre fournisseur, votre région, votre facture.
Aucun compte client
Un code ou un lien suffit. Un mot de passe sur le colis quand vous en voulez un.
Droit dans le bucket
Au-delà de quelques mégaoctets, le navigateur envoie le fichier au bucket lui-même, par morceaux, et reprend si la connexion coupe.
Expire tout seul
Chaque colis a une durée de vie, vérifiée à chaque lecture. Une règle de cycle de vie supprime l’objet, et colis verifier contrôle qu’elle existe.
04Le code
Un code que votre client peut taper.
Huit caractères imprimés sur une étiquette d’expédition. Dicté au téléphone, tapé sur un mobile, scanné sur un QR code : il retrouve toujours le colis.
Complet. Séparateurs retirés, casse unifiée, et O, I et L lus comme 0, 1 et 1, puisque la base32 de Crockford n’a ni O, ni I, ni L avec lesquels les confondre.
Alphabet 0123456789ABCDEFGHJKMNPQRSTVWXYZ · 8 caractères · 40 bits
Huit caractères en base32 de Crockford : ni I, ni L, ni O, ni U, pour qu’un code survive au papier, au clavier d’un téléphone et à un appel. Ce que le client tape reste tel quel ; seule la recherche est corrigée.
Le code est aussi le lien : /K7QP2M4X sur votre page de livraison, c’est la page de retrait, et elle en affiche un QR code pour un téléphone.
Un code vaut accès. Quand le fichier est sensible, donnez au colis une courte durée de vie, un mot de passe, ou supprimez-le au premier téléchargement.
05Automatisations
Chaque étape peut en déclencher une autre.
La page de livraison publie un événement signé quand un colis est envoyé, ouvert, validé, renvoyé pour corrections ou supprimé. n8n, ou n’importe quelle route qui accepte un POST, le reçoit.
webhook · type
- parcel.sent
- Un colis a été créé, depuis la page ou depuis la CLI.
- parcel.opened
- Le client l’a ouvert. La première fois seulement.
- parcel.approved
- Le client l’a validé.
- parcel.changes_requested
- Le client demande des corrections ; data.comment dit lesquelles.
- parcel.deleted
- Le code a été supprimé.
Signés selon Standard Webhooks
HMAC-SHA256 sur l’identifiant, l’horodatage et le corps. verifyWebhook de @colis/protocol le vérifie avec le code même qui signe, et refuse tout ce qui date de plus de cinq minutes.
Un nœud n8n
Colis Trigger lance un workflow sur les événements choisis et vérifie la signature pour vous. Le nœud Colis envoie, lit et supprime des colis.
06Cas d’usage
Ce que les freelances livrent avec.
Livrer
Automatiser
07Comparaisons
Pourquoi pas une pièce jointe, ou un site d’envoi ?
Parfois, ils suffisent. Chaque page dit quand, et ce que colis ajoute.
08Questions
Celles qui reviennent.
01Qu’est-ce que colis ?
Un outil de livraison pour freelances. Vous envoyez un fichier dans un stockage qui vous appartient (S3, R2, MinIO…) sous un code de huit caractères ; votre client ouvre une page de livraison, prévisualise le fichier, puis le valide ou demande des corrections avec un commentaire. Chaque étape peut déclencher un webhook signé. Il y a une page de livraison à déployer, une CLI en français et un nœud n8n. Comment ça marche
02Mon client doit-il créer un compte ?
Non. Il reçoit un lien, ou tape le code sur la page de livraison, fautes de frappe comprises : minuscules, tirets et O à la place de 0 sont corrigés. S’il y a un mot de passe sur le colis, il le tape une fois. C’est tout. Côté expéditeur aussi, le compte est facultatif : il rattache vos envois à votre adresse, connexion par lien e-mail.
03Où sont stockés les fichiers ?
Dans votre bucket, et nulle part ailleurs. La page de livraison tourne sur votre déploiement, avec vos identifiants ; les gros fichiers vont même directement du navigateur au bucket. colis n’a pas de service hébergé au milieu. Fournisseurs de stockage
04Comment savoir si le client a ouvert ou validé ?
La page de livraison tient un accusé pour chaque colis : envoyé, ouvert (la première ouverture par quelqu’un d’autre que vous), puis validé ou à corriger, avec l’heure et le commentaire. Vous le voyez sur votre page d’envoi, avec colis statut dans un terminal, ou dans les webhooks parcel.opened, parcel.approved et parcel.changes_requested. Webhooks et n8n
05Le client peut-il changer d’avis ?
Non : un colis reçoit une seule réponse, qui ne s’écrase jamais. Pour une nouvelle version, envoyez un nouveau colis ; il aura son propre code et son propre accusé.
06Quelle taille peut faire un fichier ?
Depuis la page de livraison, jusqu’à DROP_MAX_UPLOAD_MB, 2 Go par défaut : au-delà de DROP_MAX_SIZE_MB (4 Mo par défaut, à cause de la limite de requête de Vercel), le navigateur envoie directement au bucket, par morceaux de 8 Mio, avec reprise. Il faut alors une règle CORS sur le bucket. Depuis la CLI ou le nœud n8n, l’envoi passe en une requête par la fonction et doit tenir sous DROP_MAX_SIZE_MB. Livrer des fichiers lourds
07Un code, c’est sûr ?
Un code est un jeton au porteur : quiconque l’a peut ouvrir ce colis tant qu’il vit. Pour un livrable sensible, ajoutez un mot de passe (haché avec scrypt, jamais récupérable), une durée courte, ou la destruction au premier téléchargement. Les mauvais mots de passe sont limités : dix depuis un client, ou cinquante sur un code, le verrouillent quinze minutes. Un livrable confidentiel
08Que se passe-t-il à l’expiration ?
Le colis n’est plus jamais remis : l’expiration est vérifiée à chaque lecture, et un code expiré répond comme un code qui n’a jamais existé. L’objet lui-même est supprimé par une règle de cycle de vie sur votre bucket, dont colis verifier vérifie la présence. L’accusé de réception, lui, survit au fichier.
09Est-ce que je peux l’installer avec npm ?
Oui pour la commande : npm i -g @mdemb/colis, qui fonctionne sans rien configurer grâce au service public de colis. Le nœud n8n-nodes-colis s’installe depuis n8n. Les paquets @colis/* ne sont pas encore publiés : ceux-là se construisent depuis le dépôt (bun install, puis bun run build), et la page de livraison se déploie sur Vercel en important le dépôt entier. Installer la CLI
10Combien ça coûte ?
colis est libre, sous licence MIT : sur votre propre déploiement, la seule facture est celle de votre stockage et de votre hébergement. Le service public, lui, a deux formules. Gratuite : sans compte, des fichiers jusqu’à 100 Mo, des liens de 24 h, 20 envois par heure. Pro, 6 € par mois ou 60 € par an, avec un compte : jusqu’à 2 Go, des liens de 30 jours, 200 envois par heure. Sans période d’essai, résiliable à tout moment. L’abonnement Pro
Vous envoyez. Ils valident. Vous le savez.
Votre stockage, une page de livraison à votre nom, un webhook à chaque étape. Rien d’hébergé chez un tiers.