Sécurité et vérification
Dernière mise à jour : 11 août 2026
Comoji demande l’Accessibilité et la Surveillance de l’entrée. Ce sont les deux autorisations les plus intrusives de macOS, et « faites-nous confiance, tout est local » n’est pas une réponse. Cette page existe pour que vous n’ayez pas à nous croire sur parole : vous y trouverez chaque serveur que l’app peut contacter, ce qui déclenche chaque connexion, et les commandes exactes pour observer Comoji sur votre propre machine pendant que vous tapez.
En bref : vos frappes ne quittent jamais votre Mac. Ni vers nous, ni vers personne. Comoji n’a ni compte, ni télémétrie, ni statistiques, ni outil de rapport de plantage. Les seules requêtes réseau qu’il effectue sont les quatre listées ci-dessous, et aucune ne transmet ce que vous tapez, hormis dans le champ de recherche du sélecteur de GIF lui-même.
Vous préférez un guide ? Comment vérifier que Comoji reste local, pas à pas fait tout cela avec des captures d’écran et des commandes à copier-coller.
À quoi sert chaque autorisation
La demande d’autorisation de macOS vous dit quelle autorisation une app veut, jamais ce qu’elle en fait. Alors, précisément :
Surveillance de l’entrée
- Sert à : une interception des événements clavier qui guette un code précédé d’un deux-points, comme
:liz. Les caractères s’accumulent dans un petit tampon en mémoire, effacé dès que le code se termine (espace, Échap, un clic ailleurs ou l’acceptation d’une correspondance). - Ne sert jamais à : enregistrer, stocker ou transmettre ce que vous tapez. Le tampon n’est jamais écrit sur le disque, jamais journalisé et jamais envoyé nulle part. La suite de tests de l’app fait échouer la compilation si une API réseau ou une URL distante apparaît dans le code qui traite les frappes.
- Pas du tout surveillé : les champs de texte sécurisés (mots de passe), ainsi qu’une liste d’exclusion intégrée couvrant les gestionnaires de mots de passe, les terminaux et les clients de bureau à distance ou de machines virtuelles, et toute app ou tout site que vous ajoutez vous-même dans Préférences › Confidentialité.
Accessibilité
- Sert à : demander à macOS quel champ de texte a le focus clavier et où se trouve son curseur à l’écran, pour que la fenêtre de suggestions apparaisse au bon endroit ; et taper l’emoji choisi dans ce champ (retours arrière simulés plus un bref collage via le presse-papiers, après quoi votre presse-papiers précédent est restauré).
- Ne sert jamais à : lire le contenu du champ, vos documents, vos messages ou d’autres fenêtres.
La surface réseau complète
Voici la liste complète. Si vous voyez un jour Comoji se connecter à un serveur qui n’y figure pas, c’est un bug et nous voulons en être informés à support@comoji.io.
storage.googleapis.com
- Quoi : Le flux de mises à jour (un appcast Sparkle) et le DMG de la nouvelle version. Tous deux sont hébergés dans le bucket Firebase Storage de Comoji.
- Quand : La vérification et le téléchargement des mises à jour en arrière-plan, et l’élément de menu « Rechercher des mises à jour… ». Désactivez « Garder Comoji à jour » dans les Préférences et cela ne se produit que lorsque vous le demandez.
- Contenu de la requête : Un simple GET. L’agent utilisateur de Sparkle indique le nom de l’app et votre version.
fonts.gstatic.com
- Quoi : Les illustrations des stickers (Noto Animated Emoji de Google) pour les stickers qui ne sont pas déjà inclus dans l’app.
- Quand : Le choix d’un sticker non inclus dans le sélecteur /sticker. Mis en cache sur votre Mac après la première utilisation : cela n’arrive qu’une fois par sticker.
- Contenu de la requête : Un simple GET pour un seul fichier image, nommé d’après le point de code de son emoji.
api.giphy.com
- Quoi : La recherche de GIF et les résultats tendance du sélecteur /gif.
- Quand : L’ouverture de /gif, et chaque recherche que vous tapez dans ce sélecteur. Jamais automatique : pas de /gif, pas de requête.
- Contenu de la requête : Uniquement le texte que vous tapez dans le champ de recherche du sélecteur de GIF, plus la clé d’API GIPHY de Comoji et, si Comoji est dans une autre langue que l’anglais, le code de cette langue (par exemple fr) pour que les résultats y correspondent. Rien de ce que vous tapez ailleurs sur votre Mac.
*.giphy.com
- Quoi : Les fichiers GIF eux-mêmes, depuis le CDN de GIPHY (media0–media4.giphy.com).
- Quand : L’affichage ou l’insertion d’un GIF parmi des résultats que vous avez déjà demandés.
- Contenu de la requête : Un simple GET pour l’URL exacte du GIF indiquée par les résultats de recherche.
Rien d’autre
Aucun point de collecte statistique, aucune télémétrie, aucun rapport d’erreurs, aucun serveur de licences, aucun système de comptes. Installez Comoji, n’ouvrez jamais /gif ni /sticker, désactivez la vérification automatique des mises à jour, et l’app n’effectue aucune requête réseau tant qu’elle tourne.
Cette liste n’est pas qu’une description de l’app. C’est une règle à laquelle l’app obéit. Toutes les URL ne sont pas écrites dans le code source : les fichiers GIF eux-mêmes sont désignés par la réponse de recherche de GIPHY. Chacune de ces requêtes est comparée à la liste ci-dessus avant d’être envoyée, et abandonnée si elle n’y correspond pas. Les redirections sont vérifiées de la même façon : un serveur qui répond « allez plutôt ici » ne peut pas non plus nous envoyer ailleurs. Même une réponse de recherche altérée ou détournée ne peut pas amener Comoji à contacter un serveur que cette page ne nomme pas.
Ces noms d’hôte apparaissent aussi dans l’app, mais Comoji ne les contacte jamais. Il transmet l’URL à macOS et c’est votre navigateur qui charge la page : www.comoji.io, www.mattsenter.com, www.senter.net, www.stockcar.app, www.premail.pro, www.burly.click, www.beeready.buzz, www.highwire.news, www.orga.bot, www.weatherling.app, www.seedmatrix.com.
Comment le vérifier vous-même
Toutes les commandes ci-dessous sont en lecture seule et sans risque. Collez-les dans Terminal pendant que Comoji tourne. (Si vous avez installé la version de développement, le processus s’appelle ComojiDev et non Comoji.)
1. Observez ses connexions pendant que vous tapez
Vérifiez d’abord que Comoji tourne bien, et récupérez son identifiant de processus :
pgrep -x ComojiVous devriez obtenir un nombre. Si rien ne s’affiche, Comoji ne tourne pas (c’est une app de barre des menus : regardez la barre des menus plutôt que le Dock), et les commandes ci-dessous n’indiqueraient aucune connexion, qu’il en ouvre ou non. Obtenez d’abord un PID, sinon la suite ne prouve rien.
lsof liste les sockets réseau ouverts par un processus. Ouvrez Messages, tapez :fire et appuyez plusieurs fois sur Tab, puis exécutez :
lsof -nP -i -a -p "$(pgrep -x Comoji)"Attendez-vous à aucune sortie. Aucune sortie signifie que le processus n’a aucune connexion réseau ouverte : c’est l’affirmation, testée directement.
Pour observer en continu pendant que vous l’utilisez, exécutez ceci dans une autre fenêtre de Terminal et tapez un moment dans une autre app :
while :; do
printf '%s ' "$(date +%T)"
lsof -nP -i -a -p "$(pgrep -x Comoji)" | tail -n +2 | awk '{print $9}' | paste -sd' ' -
echo
sleep 2
doneLa ligne reste vide, quoi que vous tapiez. Ouvrez ensuite /gif et lancez une recherche : vous verrez apparaître api.giphy.com et un serveur CDN giphy.com, et seulement à ce moment-là.
2. Total des octets entrants et sortants
nettop affiche le trafic cumulé par processus, il repère donc les connexions éphémères que lsof pourrait manquer entre deux relevés :
nettop -P -p "$(pgrep -x Comoji)"Tapez pendant quelques minutes sans toucher aux sélecteurs de GIF et de stickers. Les colonnes bytes_in et bytes_out restent à zéro. Appuyez sur q pour quitter.
3. Lisez les noms d’hôte dans le binaire distribué
Un processus ne peut se connecter qu’aux adresses qu’il connaît. Vous pouvez extraire les URL directement de l’app que vous avez téléchargée :
strings -a /Applications/Comoji.app/Contents/MacOS/Comoji \
| grep -Eo 'https?://[A-Za-z0-9._-]+' | sort -u
/usr/libexec/PlistBuddy -c 'Print :SUFeedURL' \
/Applications/Comoji.app/Contents/Info.plistDeux remarques honnêtes pour que cela corresponde à ce que vous verrez. D’abord, api.giphy.com est construit à partir de son nom d’hôte plutôt que stocké sous forme d’URL complète : il n’apparaîtra donc pas dans cette première liste. Cherchez-le directement avec strings -a … | grep -Eo '[a-z0-9.-]*giphy\.com' ; ce motif ne correspond qu’aux noms d’hôte, il n’affichera donc pas la clé d’API également présente dans le paquet. Ensuite, le framework de mise à jour Sparkle inclus contient ses propres URL de documentation (sparkle-project.org, andymatuschak.org) dans Contents/Frameworks/Sparkle.framework ; ce sont des chaînes d’une bibliothèque tierce, pas des serveurs que Comoji contacte.
4. Bloquez-le au pare-feu et voyez ce qui casse
La vérification la plus solide est un pare-feu sortant. LuLu est gratuit et open source ; Little Snitch est la référence commerciale. Réglez l’un ou l’autre pour être alerté à chaque connexion sortante, puis refusez tout ce qui vient de Comoji. L’autocomplétion d’emoji continue de fonctionner exactement comme avant, pour toujours, car elle n’a jamais eu besoin du réseau. Seules la vérification des mises à jour et les illustrations distantes de stickers ou de GIF cessent de fonctionner.
5. Confirmez que l’app est bien la nôtre et n’a pas été modifiée
Comoji est signé avec un certificat Apple Developer ID et notarisé par Apple. Ces commandes vérifient que la copie sur votre disque n’a pas été altérée :
codesign -dv --verbose=4 /Applications/Comoji.app
spctl -a -vvv -t exec /Applications/Comoji.app
codesign -d --entitlements - /Applications/Comoji.appCe que nous avons décidé de faire, et de ne pas faire
La question évidente : pourquoi ne pas simplement publier tout le code en open source ? Voici où nous en sommes réellement, pour que vous puissiez juger la réponse plutôt que la deviner. Le raisonnement complet est consigné dans le dépôt sous forme d’enregistrement de décision d’architecture (docs/adr/0001-verifiable-local-processing.md).
- Fait : publier la surface réseau exacte. La liste ci-dessus, également affichée dans l’app sous Préférences › Confidentialité, générée à partir de la même déclaration que celle avec laquelle l’app est compilée, et appliquée à l’exécution : une URL transmise à l’app par le serveur de quelqu’un d’autre ne peut toujours pas atteindre un serveur non déclaré.
- Fait : des instructions d’auto-vérification. Cette page et le guide associé.
- Fait : faire respecter l’affirmation dans la CI. Chaque pull request et chaque version exécutent la suite de tests de l’app sur un runner macOS (
.github/workflows/app-ci.yml, puis de nouveau dansrelease.ymlavant toute signature). Cette suite analyse le code source réel et échoue si un serveur apparaît sans être déclaré sur cette page, ou si une API réseau ou une URL distante apparaît dans le code qui traite les frappes. Une compilation qui enfreint l’une de ces règles ne peut être ni fusionnée ni publiée. - Écarté pour l’instant : publier en open source le seul chemin de saisie. Publier uniquement l’interception des événements, le tampon de saisie et le moteur de correspondance serait un vrai gage de confiance, et c’est la partie sans valeur commerciale. Nous ne le faisons pas encore, pour une raison honnête plutôt que bonne : un extrait publié dont on ne peut pas prouver qu’il correspond au code du binaire notarisé prouve moins qu’il n’y paraît, et le faire correctement suppose des compilations reproductibles (voir ci-dessous). Nous préférons d’abord proposer la vérification que vous pouvez effectuer sur le binaire que vous avez réellement téléchargé. Cette décision peut être revue, et le chemin de saisie serait la première chose que nous publierions.
- Écarté pour l’instant : les compilations reproductibles et un audit de sécurité payant. Ce sont les deux options les plus crédibles, et toutes deux coûtent plus que ce que le projet rapporte actuellement. Reporté, pas abandonné : un audit indépendant payant, avec un résumé publié, est la prochaine étape prévue dès que les revenus le permettront, et il serait publié ici.
Si vous vérifiez tout cela et trouvez quelque chose qui contredit cette page, écrivez à support@comoji.io et nous corrigerons la page ou l’app, selon celle qui se trompe.
Consultez aussi la Politique de confidentialité pour savoir ce que Comoji stocke localement sur votre Mac.