o que muda
| Recurso | Mastodon oficial | Na bolha |
|---|---|---|
| Tamanho do post | 500 caracteres | 1200 caracteres |
| Bio do perfil | 500 caracteres | 1200 caracteres |
| Metadados na bio | 4 campos | 24 campos |
| Opções na enquete | 4 opções de 50 caracteres | 12 opções de 60 caracteres |
| Silenciar por pouco tempo | a partir de 6 horas | 10, 30 ou 60 minutos |
| Markdown nos posts | não tem | títulos, listas e código colorido |
| Post que se apaga sozinho | não tem | de 15 minutos a 24 horas |
| Limite de uso da API | padrão | o dobro |
| Tema | padrão | Tangerine UI, em 5 cores |
detalhes
O compositor ganha um botão para escrever em Markdown. Blocos de código saem coloridos por linguagem (highlight.js, com um conjunto de linguagens comuns) e os títulos de H1 a H6 têm tamanhos diferentes. Instâncias que não entendem Markdown recebem o post já convertido em HTML.
Uma ampulheta no compositor define a validade: 15 ou 30 minutos, 1, 2, 4, 6, 12 ou 24 horas. Na hora marcada o post é excluído como se o autor tivesse apagado: some para todo mundo e a exclusão é enviada às outras instâncias. Cada instância remota decide se obedece, como em qualquer exclusão no fediverso.
Os limites de requisições por conta, por token, de paginação e de mídia foram dobrados. Quem usa clientes com várias colunas (o modo avançado, Phanpy, Elk) esgotava o limite oficial em poucos minutos. Os limites de login, cadastro e troca de senha não mudaram.
A janela de silenciar um perfil ganhou as opções de 10, 30 e 60 minutos, além das durações longas que já existiam.
para quem faz cliente
Os dois recursos novos aparecem na API de criar post. A instância publica as durações aceitas em configuration.statuses.expirations, na resposta de /api/v2/instance.
# post que se apaga em uma hora (expires_in em segundos)
curl -X POST https://{dominio}/api/v1/statuses \
-H "Authorization: Bearer $TOKEN" \
-d "status=some em uma hora" \
-d "expires_in=3600"
# post em markdown
curl -X POST https://{dominio}/api/v1/statuses \
-H "Authorization: Bearer $TOKEN" \
-d "content_type=text/markdown" \
--data-urlencode $'status=# titulo\n\n```python\nprint("oi")\n```'
código-fonte
O código é público, sob a mesma licença AGPL-3.0 do Mastodon. Cada versão é um branch com os commits da bolha aplicados em cima da tag oficial, então dá para ler exatamente o que muda.
imagens docker
As imagens ficam em um registry público, sem login. São duas por versão, como no Mastodon oficial: web (usada também pelo sidekiq) e streaming. Só há build para linux/amd64.
# baixar a versão atual
docker pull registry.gutocarvalho.net/images/mastodon:v4.7.3-web-bolha-tangerine-prod-2
docker pull registry.gutocarvalho.net/images/mastodon:v4.7.3-streaming-prod-1
| Versão | Imagem web | Imagem streaming |
|---|---|---|
| 4.7.3 atual | v4.7.3-web-bolha-tangerine-prod-2 | v4.7.3-streaming-prod-1 |
| 4.7.2 | v4.7.2-web-bolha-tangerine-prod-1 | v4.7.2-streaming-prod-1 |
| 4.7.1 | v4.7.1-web-bolha-tangerine-prod-1 | v4.7.1-streaming-prod-1 |
| 4.7.0 | v4.7.0-web-bolha-tangerine-prod-1 | v4.7.0-streaming-prod-1 |
| 4.6.4 | v4.6.4-web-bolha-tangerine-prod-4 | — |
| 4.5.3 | v4.5.3-web-bolha-tangerine-prod-1 | v4.5.3-streaming-prod-1 |
Ver todas as tags no registry →
docker compose
Parta do docker-compose.yml oficial do Mastodon e troque só as três linhas de image. O resto (banco, Redis, .env.production, volumes) fica igual, e nenhuma variável de ambiente nova é necessária.
Faça backup do banco antes.
Troque as imagens no
docker-compose.yml:services: web: image: registry.gutocarvalho.net/images/mastodon:v4.7.3-web-bolha-tangerine-prod-2 sidekiq: image: registry.gutocarvalho.net/images/mastodon:v4.7.3-web-bolha-tangerine-prod-2 streaming: image: registry.gutocarvalho.net/images/mastodon:v4.7.3-streaming-prod-1Baixe, rode as migrations e suba:
docker compose pull docker compose run --rm web bundle exec rails db:migrate docker compose up -d
Confira a versão e os limites:
curl -s https://{dominio}/api/v2/instance | jq '.version, .configuration.statuses'
- Use a imagem da mesma versão do Mastodon que você já roda, ou siga antes as notas de atualização oficiais da versão de destino.
- As migrations só acrescentam três colunas e um índice. Em uma tabela com 41 milhões de posts, o índice levou cerca de 100 segundos.
- O post que se apaga depende do sidekiq processando as filas
defaultescheduler. Se você separa as filas em vários processos, confira as duas. - Para voltar ao Mastodon oficial basta trocar as imagens de volta. Os posts longos e os metadados extras continuam no banco.
quem usa
Instâncias que rodam esta versão:
Avise o @gutocarvalho@bolha.us que a gente coloca você aqui na lista.