new readme
This commit is contained in:
295
README.md
295
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:
|
||||
<p align="center">
|
||||
<img src="https://tatuchat.weltonmoura.com.br/home/assets/logo.png" height="180" alt="TatuChat">
|
||||
</p>
|
||||
|
||||
- 🌐 [[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)
|
||||
<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>
|
||||
|
||||
<a href='https://ko-fi.com/krille' target='_blank'><img height='36' style='border:0px;height:36px;' src='https://storage.ko-fi.com/cdn/kofi5.png?v=3' border='0' alt='Buy Me a Coffee at ko-fi.com' /></a>
|
||||
> 🌐 **Site, downloads e novidades:** <https://tatuchat.weltonmoura.com.br/home/>
|
||||
|
||||
### 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.
|
||||
|
||||
<img src="https://tatuchat.weltonmoura.com.br/home/assets/logo.png" height="300">
|
||||
## 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 `<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
|
||||
|
||||
* 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: <https://flutter.dev/desktop>
|
||||
|
||||
#### 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).
|
||||
|
||||
* <a href="https://github.com/fabiyamada">Fabiyamada</a> 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.
|
||||
* **[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.
|
||||
|
||||
Reference in New Issue
Block a user