NIP-30 : Emoji personnalisés
NIP-30 définit comment les clients affichent des emoji personnalisés dans les événements Nostr. Les emoji personnalisés sont référencés dans le contenu de l’événement à l’aide de shortcodes (:shortcode:) et résolus via des tags emoji associant chaque shortcode à une URL d’image.
Fonctionnement
Un événement utilisant des emoji personnalisés inclut des tags emoji aux côtés des références de shortcode dans le contenu :
{
"content": "Hello :gleam: world :nostrich:",
"tags": [
["emoji", "gleam", "https://example.com/gleam.png"],
["emoji", "nostrich", "https://example.com/nostrich.png"]
]
}
Les clients remplacent :gleam: et :nostrich: dans le contenu rendu par des images en ligne provenant des URLs spécifiées. Les shortcodes doivent être alphanumériques (avec des séparateurs underscore autorisés), et les URLs d’image devraient pointer vers de petites images carrées adaptées à l’affichage en ligne.
Ensembles d’emoji
Les emoji personnalisés peuvent être organisés en ensembles nommés publiés sous forme d’événements remplaçables paramétrés de kind 30030. Chaque ensemble regroupe des emoji apparentés sous un identifiant de tag d :
{
"kind": 30030,
"tags": [
["d", "nostr-animals"],
["emoji", "nostrich", "https://example.com/nostrich.png"],
["emoji", "nostrcat", "https://example.com/nostrcat.png"]
]
}
Une mise à jour de mars 2026 (PR #2247) a ajouté des références optionnelles d’adresse d’ensemble d’emoji dans les tags emoji, permettant aux clients d’ouvrir l’ensemble d’origine pour la navigation ou la mise en favoris lorsqu’un utilisateur clique sur un emoji.
Notes d’interopérabilité
Les emoji personnalisés sont une fonction de présentation, pas une garantie de transport. Si un client ne comprend pas NIP-30 ou ne peut pas récupérer l’URL de l’image, il devrait afficher le texte brut :shortcode:. Ce repli est la raison pour laquelle les shortcodes lisibles sont importants.
Le tag est local à l’événement sauf s’il référence un ensemble. Réutiliser :fire: dans deux événements différents n’implique pas une signification globale partagée, sauf si les deux pointent vers la même image ou le même ensemble. Les clients devraient résoudre la définition de l’emoji à partir de l’événement courant en priorité.
Réactions
Les emoji personnalisés NIP-30 fonctionnent également dans les événements de réaction de kind 7. Une réaction dont le content est défini sur un shortcode avec un tag emoji correspondant s’affiche comme une réaction emoji personnalisée sur l’événement référencé :
{
"kind": 7,
"content": ":fire:",
"tags": [
["emoji", "fire", "https://example.com/fire.gif"],
["e", "<event-id>"]
]
}
Sources principales :
- Spécification NIP-30
- PR #2247 - Adresse d’ensemble d’emoji dans les tags
Mentionné dans :