Segurança e verificação
Última atualização: 11 de agosto de 2026
O Comoji pede Acessibilidade e Monitoramento de Entrada. Essas são as duas permissões mais invasivas do macOS, e “confie em nós, é tudo local” não é resposta. Esta página existe para que você não precise acreditar na nossa palavra: abaixo está cada host que o app pode contatar, o que aciona cada um e os comandos exatos para observar o Comoji na sua própria máquina enquanto você digita.
A versão curta: o que você digita nunca sai do seu Mac. Nem para nós, nem para ninguém. O Comoji não tem conta, telemetria, análise de uso nem relatório de falhas. As únicas requisições de rede que ele faz são as quatro listadas abaixo, e nenhuma delas leva nada do que você digita fora da própria caixa de busca do seletor de GIFs.
Prefere um passo a passo? Como verificar que o Comoji é local, passo a passo faz isso com capturas de tela e comandos para copiar e colar.
Para que cada permissão é usada
O aviso de permissão do próprio macOS diz qual permissão um app quer, nunca o que o app faz com ela. Então, com precisão:
Monitoramento de Entrada
- Usado para: um event tap de teclado que fica atento a um token com prefixo de dois-pontos, como
:liz. Os caracteres se acumulam num pequeno buffer em memória que é descartado no momento em que o token termina (espaço, Esc, um clique em outro lugar ou uma correspondência aceita). - Nunca usado para: gravar, armazenar ou transmitir o que você digita. O buffer nunca é gravado em disco, nunca é registrado em log e nunca é enviado a lugar nenhum. A própria suíte de testes do app reprova o build se qualquer API de rede ou URL remota aparecer no código que lida com as teclas.
- Nem observado: campos de texto seguros (de senha), além de uma lista de exclusão embutida que cobre gerenciadores de senhas, terminais e clientes remotos/de máquinas virtuais, e qualquer app ou site que você mesmo adicionar em Preferências › Privacidade.
Acessibilidade
- Usada para: perguntar ao macOS qual campo de texto tem o foco do teclado e onde está o cursor na tela, para que a janela de sugestões apareça no lugar certo; e digitar o emoji escolhido de volta nesse campo (backspaces sintéticos mais um rápido colar pela área de transferência, depois do qual a área de transferência anterior é restaurada).
- Nunca usada para: ler o conteúdo do campo, seus documentos, suas mensagens ou outras janelas.
A superfície de rede completa
Esta é a lista inteira. Se você algum dia vir o Comoji se conectar a um host que não está nela, é um bug e queremos saber em support@comoji.io.
storage.googleapis.com
- O quê: O feed de atualização (um appcast do Sparkle) e o DMG da nova versão. Os dois ficam no bucket do Firebase Storage do Comoji.
- Quando: A verificação e o download de atualizações em segundo plano, e o item de menu “Verificar atualizações…”. Desligue “Manter o Comoji atualizado” nas Preferências e isso só acontece quando você pedir.
- O que vai na requisição: Um GET simples. O user agent do Sparkle leva o nome do app e a versão que você está usando.
fonts.gstatic.com
- O quê: A arte das figurinhas (Noto Animated Emoji do Google) para figurinhas que ainda não vêm embutidas no app.
- Quando: Escolher uma figurinha que não vem embutida, no seletor /sticker. Fica em cache no seu Mac depois do primeiro uso, então acontece uma vez por figurinha.
- O que vai na requisição: Um GET simples de um arquivo de imagem, nomeado pelo codepoint do emoji.
api.giphy.com
- O quê: Busca de GIFs e resultados em alta para o seletor /gif.
- Quando: Abrir o /gif e cada busca que você digita nesse seletor. Nunca é automático: sem /gif, sem requisição.
- O que vai na requisição: Só o texto que você digita no campo de busca do seletor de GIFs, mais a chave de API do GIPHY do Comoji e, se o Comoji estiver em um idioma diferente do inglês, o código desse idioma (por exemplo, pt) para que os resultados correspondam. Nada do que você digita em qualquer outro lugar do Mac.
*.giphy.com
- O quê: Os próprios arquivos de GIF, da CDN do GIPHY (media0–media4.giphy.com).
- Quando: Exibir ou inserir um GIF de resultados que você já pediu.
- O que vai na requisição: Um GET simples da URL exata do GIF indicada pelos resultados da busca.
Nada mais
Nenhum endpoint de análise, nenhuma telemetria, nenhum relatório de erros, nenhum servidor de licenças, nenhum sistema de contas. Instale o Comoji, nunca abra o /gif ou o /sticker, desligue as verificações automáticas de atualização, e o app faz zero requisições de rede durante todo o tempo em que estiver rodando.
Esta lista não é só uma descrição do app. É uma regra que o app obedece. Nem toda URL está escrita no código-fonte: os próprios arquivos de GIF são nomeados pela resposta de busca do GIPHY. Cada uma dessas requisições é conferida contra a lista acima antes de ser feita, e descartada se não corresponder. Os redirecionamentos são conferidos do mesmo jeito, então um servidor que responde “vá para cá em vez disso” também não consegue nos mandar para outro lugar. Nem mesmo uma resposta de busca adulterada ou sequestrada consegue fazer o Comoji contatar um host que esta página não cita.
Estes nomes de host também aparecem dentro do app, mas o Comoji nunca os acessa. Ele entrega a URL ao macOS e o seu navegador carrega a 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.
Como conferir você mesmo
Todos os comandos abaixo são somente leitura e seguros de executar. Cole-os no Terminal com o Comoji rodando. (Se você instalou o build de desenvolvimento, o processo é ComojiDev em vez de Comoji.)
1. Observe as conexões enquanto você digita
Primeiro confirme que o Comoji está mesmo rodando e pegue o ID do processo:
pgrep -x ComojiVocê deve receber um número de volta. Se não vier nada, o Comoji não está rodando (é um app da barra de menus, então procure na barra de menus e não no Dock), e os comandos abaixo mostrariam nenhuma conexão quer ele faça alguma ou não. Pegue um PID primeiro, ou o resto disto não prova nada.
O lsof lista os sockets de rede que um processo tem abertos. Abra o Mensagens, digite :fire e pressione Tab algumas vezes, depois execute:
lsof -nP -i -a -p "$(pgrep -x Comoji)"Espere nenhuma saída. Nenhuma saída significa que o processo não tem conexões de rede abertas, que é exatamente a afirmação, testada diretamente.
Para observar continuamente enquanto usa, execute isto numa janela extra do Terminal e digite em outro app por um tempo:
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
doneA linha continua vazia não importa o quanto você digite. Depois abra o /gif e busque alguma coisa: você vai ver api.giphy.com e um host de CDN giphy.com aparecerem, e só então.
2. Total de bytes recebidos e enviados
O nettop mostra o tráfego acumulado por processo, então pega qualquer coisa de curta duração que o lsof poderia perder entre uma amostra e outra:
nettop -P -p "$(pgrep -x Comoji)"Digite por alguns minutos sem tocar nos seletores de GIFs e figurinhas. As colunas bytes_in e bytes_out ficam em zero. Pressione q para sair.
3. Leia os nomes de host direto do binário distribuído
Um processo em execução só consegue se conectar a lugares que ele conhece. Você pode extrair as URLs direto do app que baixou:
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.plistDuas observações honestas para que isto corresponda ao que você realmente vê. Primeiro, api.giphy.com é montado a partir do nome de host em vez de ficar guardado como URL completa, então não aparece nessa primeira lista. Procure por ele diretamente com strings -a … | grep -Eo '[a-z0-9.-]*giphy\.com'; esse padrão só encontra nomes de host, então não vai imprimir a chave de API que também vem no pacote. Segundo, o framework de atualização Sparkle embutido traz suas próprias URLs de documentação (sparkle-project.org, andymatuschak.org) dentro de Contents/Frameworks/Sparkle.framework; são strings numa biblioteca de terceiros, não hosts que o Comoji contata.
4. Bloqueie no firewall e veja o que quebra
A verificação mais forte é um firewall de saída. O LuLu é grátis e de código aberto; o Little Snitch é o padrão comercial. Configure qualquer um dos dois para alertar a cada conexão de saída e depois bloqueie tudo do Comoji. O autocompletar de emoji continua funcionando exatamente como antes, para sempre, porque nunca precisou da rede. As únicas coisas que param de funcionar são a verificação de atualizações e a arte remota de figurinhas ou GIFs.
5. Confirme que o app é mesmo nosso e não foi modificado
O Comoji é assinado com um Developer ID da Apple e notarizado pela Apple. Estes comandos verificam que a cópia no seu disco não foi adulterada:
codesign -dv --verbose=4 /Applications/Comoji.app
spctl -a -vvv -t exec /Applications/Comoji.app
codesign -d --entitlements - /Applications/Comoji.appO que decidimos fazer, e não fazer
A pergunta óbvia é por que não abrimos logo o código de tudo. Aqui está onde realmente estamos, para que você possa julgar a resposta em vez de adivinhá-la. O raciocínio completo está registrado no repositório como um registro de decisão de arquitetura (docs/adr/0001-verifiable-local-processing.md).
- Feito: publicar a superfície de rede exata. A lista acima, também mostrada no app em Preferências › Privacidade, gerada a partir da mesma declaração com que o app é compilado e aplicada contra ela em tempo de execução, então uma URL entregue ao app pelo servidor de outra pessoa ainda assim não consegue chegar a um host não divulgado.
- Feito: instruções de autoverificação. Esta página e o passo a passo indicado.
- Feito: garantir a afirmação na CI. Cada pull request e cada release executa a suíte de testes do app num runner macOS (
.github/workflows/app-ci.yml, e de novo dentro dorelease.ymlantes de qualquer coisa ser assinada). Essa suíte varre o código-fonte real e falha se aparecer um host que esta página não divulga, ou se qualquer API de rede ou URL remota aparecer no código que lida com as teclas. Um build que quebre qualquer uma das regras não pode ser mesclado nem lançado. - Recusado por enquanto: abrir o código só do caminho de entrada. Publicar só o event tap, o buffer de tokens e o matcher seria um sinal real de confiança, e é a parte sem valor comercial. Ainda não fazemos isso por um motivo honesto, mais do que por um bom motivo: um subconjunto publicado que não seja comprovadamente o código do binário notarizado prova menos do que parece, e fazer isso direito exige builds reproduzíveis (abaixo). Preferimos entregar primeiro a verificação que você pode fazer no binário que realmente baixou. Isso pode ser revisto, e o caminho de entrada é a primeira coisa que publicaríamos.
- Recusado por enquanto: builds reproduzíveis e uma auditoria de segurança paga. As duas são as opções de maior credibilidade e as duas custam mais do que este projeto ganha hoje. Adiado, não descartado: uma auditoria paga por terceiros com um resumo publicado é o próximo passo pretendido quando a receita permitir, e ela seria publicada aqui.
Se você verificar qualquer coisa disto e encontrar algo que contradiga o que está nesta página, escreva para support@comoji.io e corrigiremos a página ou o app, o que estiver errado.
Veja também a Política de Privacidade para saber o que o Comoji armazena localmente no seu Mac.