Seguridad y verificación
Última actualización: 11 de agosto de 2026
Comoji pide Accesibilidad y Monitorización de entrada. Son los dos permisos más invasivos que tiene macOS, y “confía en nosotros, todo es local” no es una respuesta. Esta página existe para que no tengas que fiarte de nuestra palabra: abajo está cada servidor con el que la app puede contactar, qué activa cada conexión y los comandos exactos para observar Comoji en tu propia máquina mientras escribes.
La versión corta: lo que tecleas nunca sale de tu Mac. Ni hacia nosotros ni hacia nadie. Comoji no tiene cuenta, ni telemetría, ni analítica, ni informes de fallos. Las únicas solicitudes de red que hace son las cuatro que se enumeran abajo, y ninguna lleva nada de lo que escribes fuera del propio cuadro de búsqueda del selector de GIF.
¿Prefieres una guía? Cómo comprobar que Comoji es local, paso a paso lo hace con capturas de pantalla y comandos para copiar y pegar.
Para qué se usa cada permiso
El propio aviso de permisos de macOS te dice qué permiso quiere una app, nunca qué hace la app con él. Así que, con precisión:
Monitorización de entrada
- Se usa para: un event tap de teclado que vigila tokens que empiezan con dos puntos, como
:liz. Los caracteres se acumulan en un pequeño búfer en memoria que se descarta en cuanto termina el token (un espacio, Escape, un clic en otro sitio o la aceptación de una coincidencia). - Nunca se usa para: grabar, guardar ni transmitir lo que escribes. El búfer nunca se escribe en disco, nunca se registra y nunca se envía a ningún sitio. El propio conjunto de pruebas de la app hace fallar la compilación si aparece cualquier API de red o URL remota en el código que maneja las pulsaciones.
- No se vigila en absoluto: los campos de texto seguros (de contraseña), además de una lista de exclusión integrada que cubre gestores de contraseñas, terminales y clientes remotos o de máquinas virtuales, y cualquier app o sitio web que añadas tú en Preferencias › Privacidad.
Accesibilidad
- Se usa para: preguntar a macOS qué campo de texto tiene el foco del teclado y dónde está su cursor en la pantalla, para que la ventana de sugerencias aparezca en el lugar correcto; y escribir el emoji elegido en ese campo (retrocesos sintéticos más un breve pegado desde el portapapeles, tras el cual se restaura tu portapapeles anterior).
- Nunca se usa para: leer el contenido del campo, tus documentos, tus mensajes ni otras ventanas.
La superficie de red completa
Esta es la lista completa. Si alguna vez ves que Comoji se conecta a un servidor que no está en ella, es un error y queremos saberlo en support@comoji.io.
storage.googleapis.com
- Qué: El feed de actualizaciones (un appcast de Sparkle) y el DMG de la nueva versión. Ambos están en el bucket de Firebase Storage de Comoji.
- Cuándo: La búsqueda y descarga de actualizaciones en segundo plano, y el ítem de menú “Buscar actualizaciones…”. Desactiva “Mantener Comoji actualizado” en Preferencias y solo ocurre cuando tú lo pides.
- Qué lleva la solicitud: Un GET simple. El user agent de Sparkle incluye el nombre de la app y la versión que tienes.
fonts.gstatic.com
- Qué: Las ilustraciones de los stickers (Noto Animated Emoji de Google) para los stickers que no vienen ya incluidos en la app.
- Cuándo: Elegir un sticker no incluido en el selector /sticker. Se guarda en caché en tu Mac tras el primer uso, así que ocurre una vez por sticker.
- Qué lleva la solicitud: Un GET simple de un archivo de imagen, con el nombre de su punto de código de emoji.
api.giphy.com
- Qué: Búsqueda de GIF y resultados en tendencia para el selector /gif.
- Cuándo: Abrir /gif y cada búsqueda que escribas en ese selector. Nunca es automático: sin /gif, no hay solicitud.
- Qué lleva la solicitud: Solo el texto que escribes en el campo de búsqueda del selector de GIF, más la clave de la API de GIPHY de Comoji y, si Comoji está en un idioma distinto del inglés, el código de ese idioma (por ejemplo, es) para que los resultados coincidan. Nada de lo que escribes en ningún otro lugar de tu Mac.
*.giphy.com
- Qué: Los propios archivos GIF, desde la CDN de GIPHY (media0–media4.giphy.com).
- Cuándo: Mostrar o insertar un GIF de resultados que ya pediste.
- Qué lleva la solicitud: Un GET simple de la URL exacta del GIF que indicaron los resultados de búsqueda.
Nada más
Ningún endpoint de analítica, ni telemetría, ni informes de errores, ni servidor de licencias, ni sistema de cuentas. Instala Comoji, no abras nunca /gif ni /sticker, desactiva la búsqueda automática de actualizaciones, y la app hace cero solicitudes de red mientras esté abierta.
Esta lista no es solo una descripción de la app. Es una regla que la app cumple. No todas las URL están escritas en el código fuente: los propios archivos GIF los nombra la respuesta de búsqueda de GIPHY. Cada una de esas descargas se comprueba con la lista de arriba antes de hacer la solicitud, y se descarta si no coincide. Las redirecciones se comprueban igual, así que un servidor que responda “ve aquí en su lugar” tampoco puede mandarnos a otra parte. Ni siquiera una respuesta de búsqueda manipulada o secuestrada puede hacer que Comoji contacte con un servidor que esta página no nombre.
Estos nombres de host también aparecen dentro de la app, pero Comoji nunca los descarga. Pasa la URL a macOS y tu navegador carga la página: 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.
Cómo comprobarlo tú mismo
Todos los comandos de abajo son de solo lectura y seguros de ejecutar. Pégalos en Terminal con Comoji abierto. (Si instalaste la versión de desarrollo, el proceso es ComojiDev en lugar de Comoji.)
1. Observa sus conexiones mientras escribes
Primero confirma que Comoji se está ejecutando de verdad y obtén su ID de proceso:
pgrep -x ComojiDeberías obtener un número. Si no obtienes nada, Comoji no se está ejecutando (es una app de la barra de menús, así que búscala en la barra de menús y no en el Dock), y los comandos de abajo no mostrarían conexiones tanto si las hace como si no. Consigue primero un PID, o el resto no demuestra nada.
lsof lista los sockets de red que tiene abiertos un proceso. Abre Mensajes, escribe :fire y pulsa Tab unas cuantas veces, y luego ejecuta:
lsof -nP -i -a -p "$(pgrep -x Comoji)"No esperes ninguna salida. Que no haya salida significa que el proceso no tiene conexiones de red abiertas, que es justo lo que se afirma, comprobado directamente.
Para observarlo de forma continua mientras lo usas, ejecuta esto en otra ventana de Terminal y escribe un rato en otra 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 línea sigue vacía por mucho que escribas. Luego abre /gif y busca algo: verás aparecer api.giphy.com y un servidor CDN de giphy.com, y solo entonces.
2. Bytes totales de entrada y salida
nettop muestra el tráfico acumulado por proceso, así que detecta cualquier conexión breve que lsof podría perderse entre muestreos:
nettop -P -p "$(pgrep -x Comoji)"Escribe durante unos minutos sin tocar los selectores de GIF ni de stickers. Las columnas bytes_in y bytes_out se quedan en cero. Pulsa q para salir.
3. Extrae los nombres de host del binario publicado
Un proceso en ejecución solo puede conectarse a sitios que conoce. Puedes sacar las URL directamente de la app que descargaste:
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.plistDos notas sinceras para que esto coincida con lo que ves en realidad. Primero, api.giphy.com se monta a partir de su nombre de host en lugar de guardarse como URL completa, así que no aparecerá en esa primera lista. Búscalo directamente con strings -a … | grep -Eo '[a-z0-9.-]*giphy\.com'; ese patrón solo encuentra nombres de host, así que no mostrará la clave de la API que también va dentro del paquete. Segundo, el framework de actualizaciones Sparkle incluido lleva sus propias URL de documentación (sparkle-project.org, andymatuschak.org) dentro de Contents/Frameworks/Sparkle.framework; son cadenas de una biblioteca de terceros, no servidores con los que contacte Comoji.
4. Bloquéalo en el cortafuegos y mira qué se rompe
La comprobación más sólida es un cortafuegos de salida. LuLu es gratuito y de código abierto; Little Snitch es el estándar comercial. Configura cualquiera de los dos para que avise de cada conexión saliente y luego bloquea todo lo de Comoji. El autocompletado de emojis sigue funcionando exactamente igual, para siempre, porque nunca necesitó la red. Lo único que deja de funcionar es la búsqueda de actualizaciones y las ilustraciones remotas de stickers o GIF.
5. Confirma que la app es nuestra de verdad y no ha sido modificada
Comoji está firmado con un Apple Developer ID y notarizado por Apple. Estos comandos verifican que la copia de tu disco no ha sido manipulada:
codesign -dv --verbose=4 /Applications/Comoji.app
spctl -a -vvv -t exec /Applications/Comoji.app
codesign -d --entitlements - /Applications/Comoji.appLo que hemos decidido hacer, y no hacer
La pregunta obvia es por qué no publicamos todo el código como open source sin más. Aquí está nuestra posición real, para que puedas juzgar la respuesta en lugar de adivinarla. El razonamiento completo está en el repositorio como un registro de decisión de arquitectura (docs/adr/0001-verifiable-local-processing.md).
- Hecho: publicar la superficie de red exacta. La lista de arriba, que también se muestra en la app en Preferencias › Privacidad, se genera a partir de la misma declaración con la que se compila la app y se aplica en tiempo de ejecución, así que ni una URL que le pase a la app el servidor de otro puede llegar a un servidor no declarado.
- Hecho: instrucciones para verificarlo tú mismo. Esta página y la guía enlazada.
- Hecho: hacer cumplir la afirmación en CI. Cada pull request y cada versión ejecutan el conjunto de pruebas de la app en un runner de macOS (
.github/workflows/app-ci.yml, y otra vez dentro derelease.ymlantes de firmar nada). Ese conjunto analiza el código fuente real y falla si aparece un servidor que esta página no declara, o si aparece cualquier API de red o URL remota en el código que maneja las pulsaciones. Una compilación que incumpla cualquiera de las dos reglas no se puede fusionar ni publicar. - Descartado por ahora: publicar como open source solo la ruta de entrada. Publicar solo el event tap, el búfer de tokens y el buscador de coincidencias sería una señal de confianza real, y es la parte sin valor comercial. No lo hacemos todavía por una razón sincera más que por una buena: un subconjunto publicado del que no se puede demostrar que es el código del binario notarizado prueba menos de lo que parece, y hacerlo bien exige compilaciones reproducibles (abajo). Preferimos ofrecer primero la verificación que puedes hacer sobre el binario que realmente descargaste. Esto se puede reconsiderar, y la ruta de entrada es lo primero que publicaríamos.
- Descartado por ahora: compilaciones reproducibles y una auditoría de seguridad de pago. Ambas son las opciones más creíbles y ambas cuestan más de lo que este proyecto gana ahora mismo. Aplazado, no descartado: una auditoría de pago de terceros con un resumen publicado es el siguiente paso previsto en cuanto los ingresos lo permitan, y se publicaría aquí.
Si compruebas algo de esto y encuentras algo que contradiga lo que dice esta página, escribe a support@comoji.io y corregiremos la página o la app, la que esté mal.
Consulta también la Política de privacidad para saber qué guarda Comoji localmente en tu Mac.