Guide Complet des Kinds Nostr
mai 18, 2025
Guide Complet des Kinds Nostr : Tout Savoir sur les Types d’Événements
Si vous explorez l'univers des réseaux sociaux décentralisés, vous avez sûrement entendu parler des "kinds" Nostr. Ces simples numéros sont la pierre angulaire du protocole Nostr, définissant la nature de chaque événement (ou "event") échangé. Que vous soyez développeur, utilisateur curieux ou passionné de décentralisation, comprendre les kinds est essentiel pour saisir le fonctionnement et la flexibilité de Nostr.
Les types de "kind" de Nostr constituent une liste en constante évolution, façonnée par la communauté à travers les NIPs (Nostr Implementation Possibilities). Ces entiers indiquent aux relais (serveurs) et aux clients (applications) la nature d'un événement : une mise à jour de profil, un message public, un message direct chiffré, une réaction, un paiement "zap", ou même une annonce sur une place de marché.
Chaque événement Nostr est un paquet de données doté d'un numéro de "kind". Ce numéro agit comme une étiquette : "Ceci est une mise à jour de profil", "Ceci est un message de chat", "Ceci est un paiement zap". Les kinds s'étendent de 0 à la série des 40000, avec différentes plages numériques assignées à des usages spécifiques. C'est cette simplicité qui confère à Nostr sa puissance et son extensibilité.
Puisque Nostr est un protocole vivant, de nouveaux kinds émergent continuellement. Cet article offre un instantané des kinds les plus courants et standardisés.
Les Kinds Fondamentaux : Interactions de Base
Ces kinds forment le socle des interactions sociales sur Nostr.
Kind 0 : Métadonnées du Profil
- Usage : Contient les informations de votre profil public : nom d'utilisateur, biographie, image de profil, lien vers une bannière, adresse Lightning (LNURL), etc.
- Caractéristiques : C'est un événement remplaçable, signifiant que seule la version la plus récente est conservée par les relais. Votre identité Nostr reste ainsi toujours à jour.
- Exemple (simplifié) :
{ "kind": 0, "pubkey": "votre_clé_publique_hexadécimale", "created_at": 1670000000, "tags": [], "content": "{\"name\":\"AliceNostr\", \"about\":\"Exploratrice du web décentralisé. Fan de #Bitcoin et #Nostr.\", \"picture\":\"https://example.com/alice.jpg\", \"nip05\":\"alice@nostr.example.com\", \"lud16\":\"alice@getalby.com\"}" }
Kind 1 : Note Texte Courte (Publication)
- Usage : L'équivalent d'un tweet, d'un statut ou d'une publication courte. C'est le principal moyen de partager des pensées, des liens, ou de répondre à d'autres notes.
- Caractéristiques : Événement régulier, stocké indéfiniment par les relais (sauf suppression explicite via un Kind 5).
- Exemple :
{ "kind": 1, "pubkey": "votre_clé_publique_hexadécimale", "created_at": 1670000001, "tags": [ ["t", "nostr"], // Hashtag #nostr ["e", "id_autre_note", "wss://relay.damus.io", "reply"], // Réponse à une autre note ["p", "clé_publique_mentionnée"] // Mention d'un utilisateur ], "content": "Je découvre Nostr et c'est fascinant ! #décentralisation" }
Kind 3 : Liste de Suivis (Contacts) et Relais
- Usage : Définit la liste des clés publiques (utilisateurs) que vous suivez. Peut aussi inclure des recommandations de relais pour aider les autres clients à savoir où trouver les notes de ces contacts.
- Caractéristiques : Événement remplaçable. Permet de mettre à jour facilement votre graphe social.
- Exemple :
{ "kind": 3, "pubkey": "votre_clé_publique_hexadécimale", "created_at": 1670000002, "tags": [ ["p", "clé_publique_ami1", "wss://relay.nostr.band", "Ami Un"], ["p", "clé_publique_ami2", "wss://relay.damus.io", "Ami Deux"] ], "content": "" // Le contenu est souvent vide, l'information est dans les tags. // Certains clients peuvent stocker ici une version chiffrée de la liste de relais des contacts (NIP-02) }
Kind 4 : Message Direct Chiffré (DM)
- Usage : Pour les conversations privées entre deux utilisateurs. Le contenu est chiffré de bout en bout (généralement selon NIP-04 ou NIP-17).
- Caractéristiques : Événement régulier. Seuls l'expéditeur et le destinataire (identifié par un tag "p") peuvent déchiffrer le message.
- Exemple :
{ "kind": 4, "pubkey": "votre_clé_publique_hexadécimale", "created_at": 1670000003, "tags": [ ["p", "clé_publique_destinataire"] ], "content": "message_chiffré_selon_nip04_ou_nip17" }
Kind 5 : Suppression d'Événement
- Usage : Permet de demander aux relais de supprimer un ou plusieurs événements que vous avez publiés précédemment.
- Caractéristiques : Événement régulier. Les relais peuvent choisir d'honorer ou non cette demande.
- Exemple :
{ "kind": 5, "pubkey": "votre_clé_publique_hexadécimale", "created_at": 1670000004, "tags": [ ["e", "id_evenement_a_supprimer1"], ["e", "id_evenement_a_supprimer2"] ], "content": "Demande de suppression pour faute de frappe." // Le contenu est optionnel }
Kind 6 : Repost (Partage)
- Usage : Équivalent d'un retweet ou d'un partage. Permet de rediffuser la note (Kind 1) d'un autre utilisateur.
- Caractéristiques : Événement régulier.
- Exemple :
{ "kind": 6, "pubkey": "votre_clé_publique_hexadécimale", "created_at": 1670000005, "tags": [ ["e", "id_note_originale_repostee", "wss://relay.où.trouver.la.note"], ["p", "clé_publique_auteur_original"] ], "content": "" // Le contenu est souvent vide. Certains clients insèrent ici l'événement original sous forme de chaîne JSON. }
Kind 7 : Réaction
- Usage : Permet de réagir à une autre note. Typiquement un "+" pour "like", un "-" pour "dislike", ou un emoji.
- Caractéristiques : Événement régulier.
- Exemple (like) :
{ "kind": 7, "pubkey": "votre_clé_publique_hexadécimale", "created_at": 1670000006, "tags": [ ["e", "id_note_ciblee_par_reaction", "wss://relay.damus.io"], ["p", "clé_publique_auteur_note_ciblee"] ], "content": "+" // Peut être "-", "👍", "😂", etc. }
Kind 1984 : Signalement (Report)
- Usage : Permet de signaler un contenu ou un utilisateur jugé inapproprié (selon NIP-56). Utile pour la modération communautaire ou personnelle.
- Caractéristiques : Événement régulier.
- Exemple (signalement d'une note) :
{ "kind": 1984, "pubkey": "votre_clé_publique_hexadécimale", "created_at": 1670000010, "tags": [ ["e", "id_note_signalée", "spam"], // Le dernier élément du tag 'e' peut être le type de signalement ["p", "clé_publique_auteur_note_signalée"] ], "content": "Cette note contient du spam." // Explication optionnelle }
Kinds pour les Canaux de Discussion (Chats Publics)
Ces kinds permettent de créer et d'interagir dans des salons de discussion publics, à la manière de Discord ou Telegram, mais sur Nostr.
Kind 40 : Création de Canal
- Usage : Crée un nouveau canal de discussion public, en définissant son nom, sa description, et son image.
- Caractéristiques : Événement régulier (l'ID de cet événement devient l'identifiant du canal).
- Exemple :
{ "kind": 40, "pubkey": "clé_publique_createur_canal", "created_at": 1670000100, "tags": [], "content": "{\"name\":\"Nostr Francophone\", \"about\":\"Canal de discussion pour les nostriches parlant français.\", \"picture\":\"https://example.com/nostr_fr.png\"}" }
Kind 41 : Métadonnées de Canal
- Usage : Permet de mettre à jour les informations (nom, description, image) d'un canal existant.
- Caractéristiques : Événement remplaçable, lié à l'identifiant du canal (l'ID de l'événement Kind 40 de création) et à la clé publique du créateur.
- Exemple :
{ "kind": 41, "pubkey": "clé_publique_createur_canal", // Doit être le même que pour le Kind 40 "created_at": 1670000101, "tags": [ ["e", "id_evenement_kind_40_creation_canal"] // Référence au canal à mettre à jour ], "content": "{\"name\":\"Nostr Francophone [Officiel]\", \"about\":\"Le canal officiel pour la communauté Nostr francophone.\", \"picture\":\"https://example.com/nostr_fr_v2.png\"}" }
Kind 42 : Message dans un Canal
- Usage : Envoie un message dans un canal de discussion public existant.
- Caractéristiques : Événement régulier.
- Exemple :
{ "kind": 42, "pubkey": "clé_publique_auteur_message", "created_at": 1670000102, "tags": [ // L'ID de l'événement Kind 40 est souvent utilisé comme "root" pour le canal. ["e", "id_evenement_kind_40_creation_canal", "wss://relay.recommended.com", "root"] ], "content": "Bonjour tout le monde ! Quelqu'un a testé le nouveau client Amethyst ?" }
Kinds 9 & 43 : Masquer un Message (Modération Client)
- Usage : Permet à un utilisateur de masquer un message spécifique dans un canal, pour sa propre vue (modération côté client). Le Kind 9 est l'ancien, le Kind 43 est une version plus spécifique pour les canaux.
- Caractéristiques : Ces événements sont généralement des listes d'événements à masquer, interprétées par le client.
- Exemple (simplifié pour l'idée) :
// Plutôt qu'un événement par message masqué, c'est souvent une liste (Kind 10000 par ex.) // Mais un Kind 43 pourrait être : { "kind": 43, // Ou 9 pour un usage plus général "pubkey": "votre_clé_publique", "created_at": 1670000103, "tags": [ ["e", "id_message_de_canal_a_masquer"] ], "content": "Message masqué car hors-sujet." }Note : La gestion du masquage est souvent implémentée via des listes (Kind 10000) plutôt que des événements individuels de masquage.
Kinds 10 & 44 : Rendre un Utilisateur Muet (Modération Client)
- Usage : Permet à un utilisateur de rendre muet un autre utilisateur dans un canal (ou globalement), pour sa propre vue. Le Kind 10 est l'ancien, le Kind 44 plus spécifique aux canaux.
- Caractéristiques : Similaire au masquage, souvent géré via des listes (Kind 10000).
- Exemple (simplifié pour l'idée) :
{ "kind": 44, // Ou 10 pour un usage plus général "pubkey": "votre_clé_publique", "created_at": 1670000104, "tags": [ ["p", "clé_publique_utilisateur_a_rendre_muet"] ], "content": "Utilisateur rendu muet." }Note : Le Kind 10000 est plus couramment utilisé pour les listes de "mute".
Kinds pour les "Zaps" (Micro-paiements Lightning)
Les "zaps" sont une fonctionnalité populaire de Nostr permettant d'envoyer de petites quantités de Bitcoin (satoshis) via le Lightning Network pour récompenser des créateurs ou des notes.
Kind 9734 : Demande de Zap (Zap Request)
- Usage : Un événement créé par le client de l'utilisateur qui envoie le zap. Il spécifie le destinataire, le montant (optionnel), la note à zapper (optionnel), et les relais du destinataire. Ce n'est pas la facture Lightning elle-même.
- Caractéristiques : Événement régulier.
- Exemple :
{ "kind": 9734, "pubkey": "clé_publique_envoyeur_zap", "created_at": 1670000200, "tags": [ ["p", "clé_publique_destinataire_zap"], // Qui reçoit le zap ["e", "id_note_zappee"], // Optionnel: la note qui reçoit le zap ["amount", "21000"], // Optionnel: montant en millisatoshis (ici 21 sats) ["relays", "wss://relay.damus.io", "wss://relay.nostr.band"] // Relais où trouver le profil du destinataire ], "content": "Zap pour cette super note !" // Commentaire optionnel de l'envoyeur }
Kind 9735 : Reçu de Zap (Zap Receipt)
- Usage : Un événement créé par le portefeuille Lightning du destinataire (ou un service de zap) pour confirmer qu'un paiement a été reçu en réponse à une demande de zap (Kind 9734). Il inclut la facture Lightning payée.
- Caractéristiques : Événement régulier. Fait le lien entre une demande de zap et un paiement Lightning.
- Exemple :
{ "kind": 9735, "pubkey": "clé_publique_du_service_de_zap_ou_portefeuille_destinataire", "created_at": 1670000201, "tags": [ ["p", "clé_publique_destinataire_original_zap"], // Le vrai destinataire ["e", "id_note_zappee_originale"], // Si une note était zappée ["bolt11", "lnbc210n1p..."], // La facture Lightning payée ["description", "{\"pubkey\":\"clé_publique_envoyeur_zap\",\"content\":\"Zap pour cette super note !\",\"id\":\"id_event_zap_request_kind_9734\",...}"] // L'événement Kind 9734 original en JSON ], "content": "" // Souvent vide }
Kinds pour les Listes Personnalisées (Remplaçables)
Ces kinds, typiquement dans la plage 10000-19999, sont remplaçables et permettent aux utilisateurs de gérer des collections personnalisées.
Kind 10000 : Liste de Personnes Muettes (Mute List)
- Usage : Une liste de clés publiques dont l'utilisateur ne souhaite plus voir le contenu. Interprétée côté client.
- Exemple :
{ "kind": 10000, "pubkey": "votre_clé_publique", "created_at": 1670000300, "tags": [ ["p", "clé_publique_utilisateur_muet1"], ["p", "clé_publique_utilisateur_muet2", "spam"] // Raison optionnelle ], "content": "" }
Kind 10001 : Notes Épinglées (Pinned Notes)
- Usage : Une liste d'ID de notes que l'utilisateur souhaite épingler sur son profil.
- Exemple :
{ "kind": 10001, "pubkey": "votre_clé_publique", "created_at": 1670000301, "tags": [ ["e", "id_note_epinglee1"], ["e", "id_note_epinglee2"] ], "content": "" }
Kind 10002 : Liste de Relais (Relay List Metadata)
- Usage : Définit les relais préférés d'un utilisateur pour la lecture et l'écriture (NIP-65). Aide les autres clients à savoir où trouver les notes de cet utilisateur et où lui envoyer des événements.
- Exemple :
{ "kind": 10002, "pubkey": "votre_clé_publique", "created_at": 1670000302, "tags": [ ["r", "wss://relay.damus.io"], // Lecture et écriture par défaut ["r", "wss://relay.nostr.band", "read"], // Lecture seule ["r", "wss://nostr.pleb.network", "write"] // Écriture seule ], "content": "" }
Kind 10003 : Signets (Bookmarks)
- Usage : Une liste d'événements (notes, articles, etc.) que l'utilisateur souhaite sauvegarder pour une consultation ultérieure.
- Exemple :
{ "kind": 10003, "pubkey": "votre_clé_publique", "created_at": 1670000303, "tags": [ ["e", "id_note_sauvegardee1"], ["e", "id_article_long_sauvegarde", "https://relay.example.com"] // Peut inclure un relais ], "content": "" }
Kind 10015 : Intérêts (Interests)
- Usage : Permet aux utilisateurs de déclarer leurs centres d'intérêt sous forme de hashtags.
- Exemple :
{ "kind": 10015, "pubkey": "votre_clé_publique", "created_at": 1670000304, "tags": [ ["t", "bitcoin"], ["t", "decentralization"], ["t", "photography"] ], "content": "" }
Kinds Éphémères (20000-29999)
Ces kinds sont conçus pour des événements éphémères que les relais ne sont pas censés stocker sur le long terme. Ils sont typiquement utilisés pour des interactions en temps réel.
- Usage : Chats en direct, mises à jour de statut temporaires, événements de jeu, etc.
- Exemple (Kind 20000 - Message de chat éphémère) :
{ "kind": 20000, // Ou un autre kind dans cette plage "pubkey": "votre_clé_publique", "created_at": 1670000400, "tags": [ ["chat_room_id", "live_event_XYZ"] // Tag spécifique à l'application ], "content": "Le direct commence dans 5 minutes !" }
Kinds Paramétrés Remplaçables (30000-39999)
Ces événements sont remplaçables, mais leur unicité n'est pas seulement basée sur la pubkey de l'auteur et le kind, mais aussi sur un identifiant unique fourni dans un tag d (identifiant). Cela permet à un utilisateur de publier plusieurs événements de ce type qui peuvent être mis à jour indépendamment.
Kind 30023 : Contenu Long Format (Long-form Content)
- Usage : Pour les articles de blog, les essais, et autres contenus textuels longs (NIP-23). Le contenu est généralement en Markdown.
- Exemple :
{ "kind": 30023, "pubkey": "votre_clé_publique", "created_at": 1670000500, "tags": [ ["d", "mon-premier-article-nostr"], // Identifiant unique pour cet article ["title", "Mon Premier Article sur Nostr"], ["published_at", "1670000500"], ["t", "nostr"], ["t", "blogging"] ], "content": "# Mon Premier Article sur Nostr\n\nNostr est un protocole fascinant...\n\n## Sous-titre\n\nPlus de détails ici." }
Kinds 30008 & 30009 : Badges (NIP-58)
- Kind 30008 : Définition de Badge
- Usage : Permet à un utilisateur de définir un type de badge (nom, description, image).
- Exemple :
{ "kind": 30008, "pubkey": "clé_publique_emetteur_badge", "created_at": 1670000510, "tags": [ ["d", "nostr-early-adopter"], // ID unique du type de badge ["name", "Nostr Early Adopter"], ["description", "Décerné aux pionniers de Nostr"], ["image", "https://example.com/badge_early.png", "128x128"], ["thumb", "https://example.com/badge_early_thumb.png", "32x32"] ], "content": "" }
- Kind 30009 : Attribution de Badge
- Usage : Permet à l'émetteur d'un badge (défini par un Kind 30008) de l'attribuer à un autre utilisateur.
- Exemple :
{ "kind": 30009, "pubkey": "clé_publique_emetteur_badge", // Doit correspondre à celui du Kind 30008 "created_at": 1670000511, "tags": [ // "a" tag pointe vers la définition du badge : kind:pubkey:d_tag ["a", "30008:clé_publique_emetteur_badge:nostr-early-adopter", "wss://relay.badge.com"], ["p", "clé_publique_receveur_badge"] // L'utilisateur qui reçoit le badge ], "content": "" }
Kinds 30017 & 30018 : Marché (Marketplace - NIP-15)
- Kind 30017 : Définition de Stand (Stall)
- Usage : Permet à un utilisateur de créer un "stand" ou une "boutique" sur le marché.
- Exemple :
{ "kind": 30017, "pubkey": "clé_publique_vendeur", "created_at": 1670000520, "tags": [ ["d", "ma-super-boutique"], // ID unique du stand ["name", "Ma Super Boutique Nostr"], ["description", "Produits artisanaux et uniques"], ["currency", "BTC"] // Devise acceptée ], "content": "" }
- Kind 30018 : Listing de Produit
- Usage : Permet à un vendeur de lister un produit spécifique à vendre dans son stand.
- Exemple :
{ "kind": 30018, "pubkey": "clé_publique_vendeur", "created_at": 1670000521, "tags": [ ["d", "produit-exceptionnel-001"], // ID unique du produit ["stall_id", "ma-super-boutique"], // Référence au Kind 30017 ["name", "Chapeau Nostr Tricoté Main"], ["description", "Un chapeau chaud et stylé pour l'hiver nostrichien."], ["price", "0.001", "BTC"], // Prix et devise ["image", "https://example.com/chapeau.jpg"] ], "content": "Fabriqué avec amour et des satoshis." }
Kinds 30066 & 30067 : Événements de Calendrier (Calendar Events - NIP-52)
- Usage : Bien que le NIP-52 concerne les "Live Activities", l'article source mentionne ces kinds pour planifier des événements basés sur une date ou une heure. Il pourrait y avoir un chevauchement ou une interprétation spécifique. Généralement, les événements de calendrier sont plutôt gérés par NIP-51 (Kinds 31922, 31923, 31924). Pour suivre l'article :
- Kind 30066 (Supposons : Définition d'événement de calendrier)
- Exemple :
{ "kind": 30066, "pubkey": "clé_publique_organisateur", "created_at": 1670000530, "tags": [ ["d", "nostr-meetup-paris-2024"], // ID unique de l'événement ["name", "Nostr Meetup Paris"], ["description", "Rencontre de la communauté Nostr à Paris."], ["start", "1735689600"], // Timestamp Unix de début ["end", "1735696800"], // Timestamp Unix de fin (optionnel) ["location", "Café de la Place, Paris"], ["t", "meetup"], ["t", "paris"] ], "content": "Venez discuter Nostr autour d'un verre !" }
- Exemple :
- Kind 30067 (Supposons : RSVP ou mise à jour d'événement de calendrier)
- Usage : Pourrait être utilisé pour que les participants indiquent leur présence (RSVP) à un événement défini par un Kind 30066.
- Exemple (RSVP) :
{ "kind": 30067, "pubkey": "clé_publique_participant", "created_at": 1670000531, "tags": [ // "a" tag pour référencer l'événement de calendrier ["a", "30066:clé_publique_organisateur:nostr-meetup-paris-2024"], ["status", "accepted"] // ou "declined", "tentative" ], "content": "J'y serai !" }
Résumé des Plages de Kinds
Les numéros de kind Nostr ne sont pas attribués au hasard ; ils sont organisés en plages avec des rôles spécifiques :
- 0-999 & 1000-9999 : Événements Réguliers Stockés potentiellement pour toujours par les relais (ex. : publications, messages directs, réactions).
- 10000-19999 : Événements Remplaçables Seule la dernière version d'un événement de ce type (par clé publique et kind) est conservée (ex. : métadonnées de profil, listes).
- 20000-29999 : Événements Éphémères Conçus pour être temporaires et transitoires, les relais ne sont pas censés les stocker longtemps (ex. : chats en direct, mises à jour rapides).
- 30000-39999 : Événements Remplaçables Paramétrés Remplaçables, mais leur unicité est définie par la clé publique, le kind, ET un tag "d" (identifiant), permettant plusieurs instances indépendantes par utilisateur (ex. : articles de blog, définitions de badges).
Conclusion
Comprendre les kinds Nostr revient à découvrir l'ingrédient secret qui rend ce protocole si polyvalent et puissant. C'est un cadre simple capable de gérer une multitude d'interactions, des simples messages aux places de marché complètes, en passant par les systèmes de réputation et de monétisation.
Étant donné que Nostr est un protocole communautaire, de nouveaux kinds peuvent émerger à tout moment, dès qu'un développeur ingénieux propose un NIP et que la communauté l'adopte. La flexibilité est au cœur de Nostr.
Ressources Utiles :
- Dépôt des NIPs Nostr (Nostr NIPs Repository)
- Nostr.how - Une excellente ressource pour apprendre Nostr.
Restez décentralisés et continuez à explorer ! 🚀