doknyudocs

Arquitetura

Como o doknyu é organizado por dentro.

O doknyu é um único binário em Rust. A interface usa iced e a comunicação com o Docker usa bollard, sobre o runtime assíncrono tokio.

doknyu (1 binário)
├── UI (iced)
│   ├── app.rs        estado + update
│   └── views/        containers · detalhe · volumes · redes · onboarding
├── Core (sem dependência de UI)
│   ├── docker/       trait DockerClient → bollard | fake
│   └── model.rs      structs puros
└── /var/run/docker.sock

Princípios

Núcleo desacoplado da interface

docker::DockerClient é uma trait assíncrona que devolve tipos próprios de model.rs, nunca tipos do bollard. Há duas implementações: a real (bollard) e uma falsa, em memória, usada nos testes e no modo --features fake. Assim, quase toda a lógica é testada sem Docker.

Arquitetura Elm

O iced segue a arquitetura Elm: uma ação do usuário vira uma Message, o update altera o estado e pode disparar uma Task, e o resultado da Task volta como outra Message. O estado fica em um lugar só e cada mudança passa pelo mesmo caminho.

Tempo real sem polling

A interface assina o stream de eventos do Docker (docker events) e recarrega só a lista afetada quando algo muda. Logs e estatísticas também chegam por stream.

Teclado como tabela pura

keymap.rs traduz uma tecla em uma ação com uma função pura, testável sem janela. A mesma tabela de ações alimenta a paleta de comandos.

Terminal sem a CLI do Docker

A aba Terminal roda o próprio binário em modo ponte (doknyu --exec-bridge <container>) dentro de um PTY. A ponte abre um exec pela API do Docker, como docker exec -it, e repassa entrada, saída e tamanho da janela. Por isso o terminal funciona sem a CLI docker, inclusive dentro do sandbox do Flatpak.

Stack

ParteBiblioteca
Interfaceiced 0.14 (tokio, canvas)
API do Dockerbollard
Runtimetokio
Terminaliced_term
Errosthiserror, anyhow
Idiomasrust-i18n, sys-locale
Logs internostracing

O design completo e o histórico de decisões estão em docs/ no repositório.

Nesta página