From 680669df008ae1e2b111a7aa367526d57e89faa6 Mon Sep 17 00:00:00 2001 From: Welton Moura Date: Sun, 27 Sep 2026 17:48:57 -0300 Subject: [PATCH] new readme --- README.md | 295 ++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 221 insertions(+), 74 deletions(-) diff --git a/README.md b/README.md index 97a6272..7bb602e 100644 --- a/README.md +++ b/README.md @@ -5,133 +5,280 @@ SPDX-FileCopyrightText: 2019-Present Contributors to FluffyChat SPDX-License-Identifier: AGPL-3.0-or-later --> -[TatuChat](https://tatuchat.weltonmoura.com.br/home/) is an open source, nonprofit and cute [[matrix](https://matrix.org)] client written in [Flutter](https://flutter.dev). The goal of the app is to create an easy to use instant messenger which is open source and accessible for everyone. +# TatuChat -### Links: +

+ TatuChat +

-- 🌐 [[Weblate] Translate TatuChat into your language](https://hosted.weblate.org/projects/fluffychat/) -- 🌍 [[m] Join the community](https://matrix.to/#/#fluffy-space:matrix.org) -- 📰 [[Mastodon] Get updates on social media](https://troet.cafe/@krille) -- 💝 [[Liberapay] Support TatuChat development](https://de.liberapay.com/KrilleChritzelius) +

+ Cliente de mensagens instantâneas open source, sem fins lucrativos e + multiplataforma, construído sobre o protocolo + Matrix com Flutter. + TatuChat é um fork do acclaimed + FluffyChat, com foco em privacidade, simplicidade e +código aberto. +

-Buy Me a Coffee at ko-fi.com +> 🌐 **Site, downloads e novidades:** -### Screenshots: +> ⚠️ **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 -# Features +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). -- 📩 Send all kinds of messages, images and files -- 🤙 Video calls with Matrix RTC -- 🎙️ Voice messages -- 📍 Location sharing -- 🔔 Push notifications -- 💬 Unlimited private and public group chats -- 📣 Public channels with thousands of participants -- 🛠️ Feature rich group moderation including all matrix features -- 🔍 Discover and join public groups -- 🎨 Material You design -- 😄 Custom emotes and stickers -- 🌌 Spaces -- 🔐 End to end encryption -- 🔒 Encrypted chat backup -- 😀 Emoji verification & cross signing -... and much more. +- 🔐 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 -# Installation +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. -Please visit the website for installation instructions: +### Abas e barra lateral -- https://tatuchat.weltonmoura.com.br/home/ +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. -# Configuration and Mobile Device Management (MDM) +A tela inicial foi dividida em **quatro abas**, com barra superior em telas largas e barra +inferior em telas compactas: -TatuChat supports configuration via MDM on Android&iOS (since v2.10.0) and via a config.json file on web. You can see the populated configuration for MDM on Android in this file under `/android/app/src/main/res/xml/app_restrictions.xml`. -An example configuration can be found in the `config.sample.json` file. +| 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 | -# How to build +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. -1. To build TatuChat you need [Flutter](https://flutter.dev) and [Rust](https://www.rust-lang.org/tools/install) +### 📣 Canais -2. Clone the repo: -``` -git clone https://gitea.weltonmoura.com.br/welton/tatuchat.git -cd tatuchat -``` -3. Choose your target platform below and enable support for it. -3.1 If you want, enable Googles Firebase Cloud Messaging: +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. -`./scripts/add-firebase-messaging.sh` +A sala usa a página de chat normal, mas em **modo feed**: -4. Debug with: `flutter run` +- 🗞️ 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 ``, +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: + +- + +## ⚙️ 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 -* Build with: `flutter build apk` +```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 -* Have a Mac with Xcode installed, and set up for Xcode-managed app signing -* If you want automatic app installation to connected devices, make sure you have Apple Configurator installed, with the Automation Tools (`cfgutil`) enabled -* Set a few environment variables - * FLUFFYCHAT_NEW_TEAM: the Apple Developer team that your certificates should live under - * FLUFFYCHAT_NEW_GROUP: the group you want App IDs and such to live under (ie: com.example.fluffychat) - * FLUFFYCHAT_INSTALL_IPA: set to `1` if you want the IPA to be deployed to connected devices after building, otherwise unset -* Run `./scripts/build-ios.sh` +* 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 -* Build with: ```bash -./scripts/prepare-web.sh # To install Vodozemac +./scripts/prepare-web.sh # compila o Vodozemac para WebAssembly flutter build web --release ``` -* Optionally configure by serving a `config.json` at the same path as fluffychat. - An example can be found at `config.sample.json`. All values there are optional. - **Please only the values, you really need**. If you e.g. only want - to change the default homeserver, then only modify the `defaultHomeserver` key. - ### Desktop (Linux, Windows, macOS) -* Enable Desktop support in Flutter: https://flutter.dev/desktop +Habilite o suporte a desktop do Flutter: -#### Install custom dependencies (Linux) +Dependências no Linux: ```bash sudo apt install libjsoncpp1 libsecret-1-dev libsecret-1-0 librhash0 libwebkit2gtk-4.0-dev lld ``` -* Build with one of these: ```bash flutter build linux --release flutter build windows --release flutter build macos --release ``` -## How to run integration tests +## 🧪 Testes de integração -You need to have docker installed locally! Run the preparation script before every test run: +Os testes completos precisam de Docker (Synapse) rodando localmente. Antes de cada execução: -```sh +```bash ./scripts/prepare_integration_test.sh -``` - -Then run all tests with: - -```sh flutter test integration_test/mobile_test.dart ``` +## 📜 Licença -# Special thanks +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). -* Fabiyamada is a graphics designer and has made the tatuchat logo and the banner. Big thanks for her great designs. +## 🔗 Links -* Also thanks to all translators and testers! With your help, tatuchat is now available in more than 12 languages. +- 🌐 [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) -* The Matrix Foundation for making and maintaining the [emoji translations](https://github.com/matrix-org/matrix-spec/blob/main/data-definitions/sas-emoji.json) used for emoji verification, licensed Apache 2.0 +## 🙏 Agradecimentos -* Special thanks to MTRNord, Sorunome and Advocatux. \ No newline at end of file +* **[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.