Files
tatuchat/README.md
Welton Moura 680669df00
Some checks failed
Main Deploy Workflow / deploy_web (push) Has been cancelled
Main Deploy Workflow / deploy_playstore_internal (push) Has been cancelled
Close stale issues and PRs / stale (push) Has been cancelled
new readme
2026-09-27 17:48:57 -03:00

285 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!--
SPDX-FileCopyrightText: 2019-Present Christian Kußowski
SPDX-FileCopyrightText: 2019-Present Contributors to FluffyChat
SPDX-License-Identifier: AGPL-3.0-or-later
-->
# TatuChat
<p align="center">
<img src="https://tatuchat.weltonmoura.com.br/home/assets/logo.png" height="180" alt="TatuChat">
</p>
<p align="center">
Cliente de mensagens instantâneas <strong>open source</strong>, <strong>sem fins lucrativos</strong> e
multiplataforma, construído sobre o protocolo
<a href="https://matrix.org">Matrix</a> com <a href="https://flutter.dev">Flutter</a>.
TatuChat é um <em>fork</em> do acclaimed
<a href="https://fluffy.chat">FluffyChat</a>, com foco em privacidade, simplicidade e
código aberto.
</p>
> 🌐 **Site, downloads e novidades:** <https://tatuchat.weltonmoura.com.br/home/>
> ⚠️ **Status do projeto: alfa.** O aplicativo está em desenvolvimento ativo e ainda pode
> apresentar erros, perder dados ou mudar de comportamento entre versões. Use com cuidado e
> reporte problemas para ajudar a tornar o TatuChat mais estável.
## O que é o TatuChat
Um mensageiro federado e descentralizado: nenhuma empresa no meio, nenhum servidor único. Você
escolhe o *homeserver* que quiser (ou usa um dos recomendados), conversa com quem está em outros
servidores e continua sendo dono dos seus dados. Tudo com criptografia ponta a ponta
(Olm/Megolm via [Vodozemac](https://github.com/matrix-org/vodozemac) em WebAssembly).
- 🔐 Criptografia ponta a ponta, com verificação por emoji e *cross-signing*
- 💾 Backup de conversas criptografado
- 📩 Texto, imagens, áudio, vídeo, arquivos, stickers, emotes e localização
- 🤙 Videochamadas pelo Matrix RTC (LiveKit)
- 🎙️ Mensagens de voz
- 🔔 Notificações push, com ou sem Google (UnifiedPush / ntfy)
- 🌌 Espaços para navegar hierarquias inteiras de salas
- 🎨 Design Material You, com cores dinâmicas do Android
## 🚀 Inovações do TatuChat
O TatuChat reescreveu a forma de navegar e de consumir conteúdo dentro do Matrix. As seções
abaixo descrevem os módulos desenvolvidos sobre o FluffyChat.
### Abas e barra lateral
O app não usa mais a *navigation rail* do FluffyChat. A navegação principal virou uma
**barra lateral** (desktop e tablet) com as entradas *Criar grupo*, *Definir status*,
*Convidar contato*, *Arquivo*, **Apps** e *Configurações*, além do seletor de contas.
A tela inicial foi dividida em **quatro abas**, com barra superior em telas largas e barra
inferior em telas compactas:
| Aba | O que mostra |
| --- | --- |
| **Conversas** | Apenas conversas normais |
| **Canais** | Apenas canais |
| **Espaços** | Os espaços em que você entrou, como tela inicial |
| **Murais** | Apenas murais |
Canais e murais **não aparecem** na lista de conversas, e vice-versa: cada tipo tem sua própria
aba, com busca própria — e os murais mostram ainda o número de inscritos de cada um.
### 📣 Canais
Um canal é uma sala pública de distribuição, no estilo de um feed, não de um chat. O tipo é
gravado no estado compartilhado da sala (`tatuchat.room_type = "canal"`), com uma tag pessoal
(`tatuchat_canal`) para identificação local.
A sala usa a página de chat normal, mas em **modo feed**:
- 🗞️ Publicações viram **cartões de largura total**, em vez de balões
- ✍️ O nome do autor aparece **sempre**, inclusive nas suas próprias publicações, para que o
feed nunca pareça anônimo
- ⬅️ Tudo alinhado à esquerda, com balões totalmente arredondados
- 🖼️ Imagens ocupam a largura total, mantendo a proporção original
- 🔐 **Somente administradores publicam no nível principal**; dentro das threads, qualquer
participante comenta
- 💬 Cada publicação abre uma **thread de comentários**, com reações, respostas, edição,
exclusão e denúncia
### 🖼️ Murais
Um mural é uma página dedicada — não uma variante da timeline. O tipo é gravado em
`tatuchat.room_type = "mural"` (tag pessoal `tatuchat_mural`), e abrir o mural **nunca** mostra
a lista de mensagens: mostra um **grid visual**.
- 🟦 Grade responsiva de 3 colunas alimentada apenas por **imagens, vídeos e stickers**
- 🎨 Cabeçalho com capa, avatar, nome, descrição, autor e número de inscritos
- 👆 **Toque simples** abre o visualizador do post, com painel de comentários e campo de
resposta
- 🤏 **Toque longo** abre a imagem em tela cheia, com *pinch-to-zoom* e deslize entre as mídias
do mural
- 💬 Comentários são **threads Matrix reais**, com árvore aninhada, reações, resposta,
exclusão do próprio comentário e denúncia
- 🧹 A timeline carrega em blocos conforme você desce, para não travar em murais grandes
### 🌌 Espaços
Matrix costuma tratar espaços como um recurso de segunda classe. No TatuChat eles viraram uma
**tela inicial** completa:
- 🧭 A aba **Espaços** é a porta de entrada: explorer a hierarquia inteira de uma conta sem sair
do app
- 🔎 Busca e filtro dentro do espaço, com capa do espaço e destaque da sala ativa
- ➕ Ingresso rápido em salas filhas públicas, direto da hierarquia
- 🛠️ Edição das salas filhas a partir do próprio explorador
- ↔️ A sala ativa é carregada na coluna lateral e preservada entre navegações
### 🧩 Mini Apps
O TatuChat é **extensível pela comunidade**: qualquer pessoa pode escrever um mini app e
instalá-lo no próprio app, sem loja, sem build e sem publishing.
Um mini app é **um único arquivo `.html`**, executado em um *web view* isolado:
- 📥 Instalação **por arquivo** ou **por URL**
- 🔐 Cada app tem seu próprio armazenamento chave-valor, persistido no *account data* do Matrix
(ou seja, o app sincroniza entre os seus dispositivos)
- 🎨 A ponte expõe a paleta e o brilho do tema atual, para o app acompanhar o Material You
- 👤 A ponte expõe o perfil do usuário (id, nome, avatar e homeserver)
- 📦 Dois mini apps já vêm embutidos: **`tasks`** (lista de tarefas) e **`accountdata`**
(editor de *account data*)
As ações disponíveis na ponte são:
| Ação | O que faz |
| --- | --- |
| `io.tatuchat.storage.load` | Lê o armazenamento do app |
| `io.tatuchat.storage.save` | Sobrescreve o armazenamento do app |
| `io.tatuchat.identity.get` | Perfil do usuário + avatar como data URI |
| `io.tatuchat.theme.get` | Paleta e brilho do tema em hex CSS |
| `io.tatuchat.accountdata.list` | Lista todas as chaves de *account data* |
| `io.tatuchat.accountdata.get` | Lê uma chave de *account data* |
| `io.tatuchat.accountdata.set` | Escreve uma chave de *account data* |
**📖 Documentação completa:** [`docs/miniapps.md`](docs/miniapps.md) — manifesto em `<meta>`,
protocolo da ponte, exemplo de HTML e limitações.
> 🔐 **Segurança — leia antes de instalar apps de terceiros.** As ações de `accountdata.*` não
> são restritas por app: um mini app pode ler e escrever qualquer chave de *account data* da
> conta, incluindo as chaves de outros mini apps. Não existe modelo de permissões nem pedido de
> consentimento. Instale apenas apps cujo código você auditou. O app **não** expõe salas,
> mensagens, arquivos nem envio de mensagens pela ponte.
### Outros detalhes
- 🎨 **Identidade visual própria:** cor primária esmeralda `#00D084`, paleta de sementes
customizada, ícone, splash e ícone de notificação próprios
- ⏱️ **Status personalizado aparece na hora:** a atualização de status é aplicada no cache local
imediatamente, sem esperar o *sync* do homeserver
- 🖼️ **Papel de parede e tema sincronizados:** via *account data* da conta Matrix, o tema segue
entre dispositivos; há também a opção de suavizar a cor primária
- 🔗 Deep links próprios (`im.tatuchat://chat/`) e convites com `client=im.tatuchat`
## 📲 Instalação
Downloads para Android, iOS, Linux, Windows, macOS e Web (PWA), além de notas de versão:
- <https://tatuchat.weltonmoura.com.br/home/>
## ⚙️ Configuração e MDM
O TatuChat aceita configuração gerenciada em Android e iOS (via MDM) e por um arquivo
`config.json` na versão web.
- **Android:** as restrições declaradas ficam em
`android/app/src/main/res/xml/app_restrictions.xml`, com as chaves `defaultHomeserver`,
`presetHomeserver` e `welcomeText`. O restante das chaves é lido de `ManagedConfigurations`.
- **Web:** sirva um `config.json` no mesmo caminho do app. O exemplo completo está em
[`config.sample.json`](config.sample.json).
⚠️ Passe **somente os valores que você realmente precisa alterar**. Todas as chaves são
opcionais; por exemplo, para trocar o homeserver padrão, altere apenas `defaultHomeserver`.
## 🛠️ Como compilar
1. Para compilar o TatuChat você precisa do [Flutter](https://flutter.dev) (3.47.3, Dart
`>=3.11.1 <4.0.0`); para a versão web, também do [Rust](https://www.rust-lang.org/tools/install),
usado para compilar o Vodozemac.
2. Clone o repositório:
```bash
git clone https://gitea.weltonmoura.com.br/welton/tatuchat.git
cd tatuchat
```
3. Escolha a plataforma alvo abaixo e habilite o suporte a ela.
4. Opcionalmente, habilite o Google Firebase Cloud Messaging:
```bash
./scripts/add-firebase-messaging.sh
```
5. Debug com `flutter run`.
### Android
```bash
flutter build apk --release
# ou, por arquitetura (APKs bem menores):
flutter build apk --release --split-per-abi
```
Para assinar, preencha `android/key.properties` (já ignorado pelo Git) com `storeFile`,
`keyAlias`, `storePassword` e `keyPassword`; o script `prepare-android-release.sh` faz isso a
partir do segredo `$FDROID_KEY` em CI.
### iOS / iPadOS
* Um Mac com Xcode instalado, configurado para o *app signing* gerenciado pelo Xcode
* Se quiser instalar automaticamente nos dispositivos conectados, tenha o Apple Configurator com
as ferramentas de automação (`cfgutil`) habilitadas
* Defina algumas variáveis de ambiente:
* `FLUFFYCHAT_NEW_TEAM`: o time de Apple Developer que deve emitir os certificados
* `FLUFFYCHAT_NEW_GROUP`: o grupo onde os App IDs vivem (ex.: `com.example.tatuchat`)
* `FLUFFYCHAT_INSTALL_IPA`: defina como `1` para fazer o *deploy* do IPA nos dispositivos
conectados após o build
* Execute `./scripts/build-ios.sh`
### Web
```bash
./scripts/prepare-web.sh # compila o Vodozemac para WebAssembly
flutter build web --release
```
### Desktop (Linux, Windows, macOS)
Habilite o suporte a desktop do Flutter: <https://flutter.dev/desktop>
Dependências no Linux:
```bash
sudo apt install libjsoncpp1 libsecret-1-dev libsecret-1-0 librhash0 libwebkit2gtk-4.0-dev lld
```
```bash
flutter build linux --release
flutter build windows --release
flutter build macos --release
```
## 🧪 Testes de integração
Os testes completos precisam de Docker (Synapse) rodando localmente. Antes de cada execução:
```bash
./scripts/prepare_integration_test.sh
flutter test integration_test/mobile_test.dart
```
## 📜 Licença
TatuChat é software livre, licença **AGPL-3.0-or-later**. Ele é derivado do FluffyChat, também
AGPL-3.0-or-later, Copyright de Christian Kußowski e colaboradores. O arquivo `LICENSES/` traz as
licenças de todas as dependências (REUSE).
## 🔗 Links
- 🌐 [Site do TatuChat](https://tatuchat.weltonmoura.com.br/home/)
- 💻 [Código-fonte](https://gitea.weltonmoura.com.br/welton/tatuchat)
- 🐞 [Issues e bugs](https://gitea.weltonmoura.com.br/welton/tatuchat/issues)
- 🧩 [Documentação dos Mini Apps](docs/miniapps.md)
- 🌍 [[Weblate] Traduza o TatuChat](https://hosted.weblate.org/projects/fluffychat/)
- 🦊 [Código do FluffyChat, o projeto original](https://github.com/krille-chan/fluffy-chat)
- 📄 [Política de privacidade](PRIVACY.md) · [Segurança](SECURITY.md) · [Contribuindo](CONTRIBUTING.md) · [Changelog](CHANGELOG.md)
## 🙏 Agradecimentos
* **[Fabiyamada](https://github.com/fabiyamada)** é designer gráfico e criou o logo e o banner do
TatuChat. Muito obrigado pelos belos designs.
* A todos os tradutores e testadores! Com a ajuda de vocês o TatuChat já está disponível em mais
de 12 idiomas.
* À **Matrix Foundation**, por manter e licenciar (Apache 2.0) as
[traduções de emoji](https://github.com/matrix-org/matrix-spec/blob/main/data-definitions/sas-emoji.json)
usadas na verificação por emoji.
* A **MTRNord**, **Sorunome** e **Advocatux**.
* Ao **FluffyChat** e a toda a comunidade Matrix — o TatuChat existe graças a esse trabalho.