FloatTube
Um mini player do YouTube para Mac que fica parado enquanto os desktops deslizam.
- Papel
- Designer & engenheiro — app macOS, extensão do Chrome, ícone & landing page
- Empresa
- FloatTube · own product
- Período
- 2026
- Plataformas
- macOS · Chrome


O contexto
A solução parecia uma flag de janela. Não é: mesmo uma janela marcada para aparecer em todos os desktops continua pertencendo aos Spaces do usuário, então o WindowServer a desliza junto em cada transição e a devolve ao lugar no fim — o tranco que se vê no Chrome. O único jeito de manter a janela realmente parada é tirá-la dos Spaces do usuário, algo que uma extensão não consegue e uma janela comum não faz.
Decisões que foram minhas
01Um Space privado acima dos desktops
A janela do player mora num Space criado pela API privada do SkyLight, num nível absoluto acima dos desktops do usuário e abaixo da tela de bloqueio. Conferir os Spaces da janela no próprio WindowServer mostrou que a flag de todos os desktops a recolocava em cada Space que entrava — o fantasma que chegava deslizando com o desktop novo — então o app remove essa flag enquanto o player está fixado. Se os símbolos sumirem, ele detecta e volta a uma janela flutuante comum.
02Controles nativos em Liquid Glass sobre o player do YouTube
O player incorporado do YouTube, redesenhado, espalha controles pelo vídeo inteiro, o que brigava com arrastar a janela. Escondi esses controles — API do player sem controles, mais CSS injetado no iframe de outra origem por um WKUserScript — e desenhei controles nativos com NSGlassEffectView, comandando o vídeo pela IFrame API. A janela arrasta de qualquer ponto, redimensiona por bordas largas ou pinça e anima entre dois tamanhos; durante anúncios, os cliques passam direto para o Pular continuar funcionando.
03Troca de aba por um WebSocket local
Uma extensão Manifest V3 pausa a aba quando você sai dela e manda para o app, por 127.0.0.1, o id do vídeo, o segundo, a velocidade e o volume; ao voltar, o segundo exato retorna à aba. O app recusa qualquer conexão cujo Origin não seja uma extensão do navegador, e o service worker só mantém o socket vivo enquanto há vídeo no player.
Onde isso chegou
Código aberto no GitHub com build universal para Apple Silicon e Intel, a extensão do Chrome, ícone Liquid Glass no formato do Icon Composer e uma landing page na Vercel com a demonstração lado a lado da troca de Space.
Telas



Próximo case
Don't Idle→
Um app nativo de macOS que mantém o Mac — e o seu status — sempre ativo.