25 pontos por GN⁺ 2025-10-27 | 1 comentários | Compartilhar no WhatsApp
  • oxdraw é uma ferramenta de ‘Diagram as Code’ escrita em Rust, projetada para editar diagramas baseados em código visualmente e mantê-los de forma reproduzível
  • Os diagramas são escritos em sintaxe Mermaid e, pela interface web, é possível ajustar por arraste posições de nós, cores, conexões e mais
  • As modificações visuais são salvas como comentários dentro do arquivo Mermaid, mantendo compatibilidade com outras ferramentas Mermaid
  • É composto por uma CLI e um editor web baseado em React, com suporte tanto a renderização por linha de comando quanto ao modo de edição em tempo real
  • Ao combinar a produtividade dos diagramas gerados por código com a liberdade da edição visual, vem ganhando destaque como alternativa a ferramentas GUI como o Lucidchart

Visão geral do projeto

  • O objetivo do oxdraw é criar e manter diagramas de alta qualidade com facilidade por meio de uma sintaxe declarativa e reproduzível
    • Os diagramas são escritos em sintaxe Mermaid, e os ajustes visuais são feitos na interface web
    • O que o usuário altera visualmente é refletido no código-fonte original, permitindo controle de versão e automação
  • As alterações são registradas na forma de comentários (comments) dentro do arquivo Mermaid, preservando compatibilidade total com outras ferramentas do ecossistema Mermaid
  • O repositório é composto por uma CLI baseada em Rust e uma interface web baseada em React, e a CLI compila arquivos .mmd em imagens

Visão do projeto

  • O desenvolvedor já usava Mermaid no passado para criar diagramas de arquitetura e visualizar codebases, mas, por causa das limitações de edição detalhada, precisava migrar para ferramentas como o Lucidchart
  • O oxdraw tem como objetivo combinar a automação baseada em código do Mermaid com a liberdade visual do Lucidchart
  • Com isso, busca elevar a qualidade visual sem abrir mão da reprodutibilidade, colaboração e automação dos diagramas gerados por código

Como usar

  • Pode ser instalado via Cargo: cargo install oxdraw
  • Renderização de diagrama: oxdraw --input flow.mmd
  • Executar o editor interativo: oxdraw --input flow.mmd --edit
  • A CLI recebe um arquivo Mermaid como entrada e gera saída em SVG ou PNG; com a opção --edit, inicia um editor web local

Explicação das flags da CLI

  • -i, --input : arquivo-fonte Mermaid de entrada
  • -o, --output : define o caminho para salvar o resultado renderizado
  • --png: gera saída em formato PNG
  • --scale : ajusta a escala da renderização PNG (padrão: 10.0)
  • --edit: executa o editor visual
  • --serve-host / --serve-port : definem endereço e porta do servidor do editor (padrão: 127.0.0.1:5151)
  • -b, --background-color : define a cor de fundo (somente SVG)
  • -q, --quiet: suprime mensagens como a de conclusão da renderização

Recursos do frontend

  • Manipulação de nós e arestas
    • Exclusão do nó ou aresta selecionado (com suporte às teclas Delete/Backspace)
    • Definição individual e restauração de cor do nó, borda e cor do texto
    • Configuração de cor da aresta, estilo de linha (contínua/pontilhada) e direção da seta
    • Adição e remoção de pontos de controle (control points) arrastáveis no caminho da aresta
  • Interação com o canvas e o editor
    • Ao arrastar nós, exibe snap na grade e guias de alinhamento
    • Move nós com Shift+setas
    • Arraste as handles da aresta para modificar o caminho; clique duplo para adicionar/remover handles
    • Suporte a movimentação por subgrafo — move junto os nós e arestas do grupo
    • O painel de código-fonte reflete o arquivo Mermaid em tempo real e oferece salvamento automático e indicação de status (salvando/erro etc.)
    • A barra de ferramentas superior mostra o caminho atual do arquivo e o status de salvamento

Stack técnica e licença

  • Composto por Rust 55.7%, TypeScript 40.0%, CSS 3.4% e outros 0.9%
  • Disponibilizado sob a licença MIT, permitindo uso e modificação livres
  • Atualmente conta com 506 estrelas e 10 forks, recebendo atenção ativa da comunidade

Avaliação geral

  • O oxdraw é uma nova abordagem que combina a automação do gerenciamento de diagramas baseado em código com a intuitividade da edição visual
  • Mantém compatibilidade total com o ecossistema Mermaid, aproveitando o desempenho do Rust e a UI interativa do React
  • Vem chamando atenção como uma ferramenta que oferece um fluxo de trabalho colaborativo para diagramas tanto para desenvolvedores quanto para designers

1 comentários

 
GN⁺ 2025-10-27
Comentários do Hacker News
  • Projeto realmente muito legal. Acho que a escolha de se basear em Mermaid.js faz sentido, já que ela é provavelmente a biblioteca declarativa de diagramas mais popular no momento
    Se quiser dar suporte a tipos de diagrama mais complexos, também vale a pena olhar a D2 Language. Ela oferece uma abordagem declarativa bem mais flexível

  • Pessoalmente, estou usando com uma porta do MacPorts que eu mesmo criei
    Se eu acabar usando com frequência, pretendo contribuir com ela para o repositório oficial do MacPorts
    Mas a ausência de tags Git ou releases no GitHub vinculadas às releases do Cargo dificulta o empacotamento
    Por enquanto, estou contornando isso assumindo que um commit específico (9ccd9bf53f9a309ccda42b5c17e9c1056493fb90) corresponde à release 0.1.0
    A porta em questão pode ser vista aqui

  • Este projeto é exatamente o tipo de coisa que eu estava procurando. Há um recurso que eu realmente gostaria de ver em uma solução de diagramas declarativos
    É uma função de popup que mostre informações adicionais ou diagramas aninhados ao passar o mouse

    • Ideia interessante. Fico curioso se esse popup seria para uso pessoal ou para compartilhar com colegas de equipe
      Por exemplo, você quer poder compartilhar um link para que a pessoa veja diretamente o diagrama com popups e elementos aninhados,
      ou bastaria compartilhar só o arquivo .mmd para abrir via CLI?
      A segunda opção seria rápida de implementar, mas a primeira talvez exija algo como self-hosting com ngrok ou uma implantação na nuvem
      Outra possibilidade seria adicionar um recurso de exportar para HTML, para que os popups funcionem sem depender da CLI
  • Parabéns por lançar o projeto. Foi interessante ver como ele usa uma sintaxe declarativa para definir relações e permite um nível de customização detalhada que layouts automáticos existentes normalmente não conseguem oferecer
    Mas no Cargo.toml ele aparece como licenciado em MIT, enquanto no repositório não há arquivo de licença
    Seria bom adicionar isso para ficar visível diretamente no GitHub

    • Para aumentar a adoção da ferramenta, eu recomendaria considerar hospedagem. Como parece depender bastante de código server-side, hospedagem estática gratuita provavelmente não seria suficiente
    • Arquivo de licença adicionado. Obrigado por avisar
  • Projeto muito necessário. Eu uso principalmente PlantUML, mas quando o diagrama passa de 5 componentes, gasto algo como 20% a 30% do tempo ajustando layout
    Achei interessante a abordagem de usar comentários para influenciar o mecanismo de layout. Parece útil ter as coordenadas de certos componentes como restrições fixas e deixar o restante ser organizado automaticamente
    Se o diagrama também entrar no versionamento junto com as mudanças de código, code review e gestão de arquitetura ficam muito mais naturais

    • Eu também uso PlantUML no GitLab, mas no GitHub preciso usar Mermaid, o que é incômodo
      A qualidade de layout do Mermaid é baixa, e é frustrante que o GitHub ignore pedidos de suporte a PlantUML
      Parece que a adoção de diagrams as code acaba sendo determinada pelos formatos que as principais plataformas suportam
      Em vez de criar um novo padrão, acho mais realista investir em melhorias como renderização baseada em peso dos elementos
      Essa discussão também aparece na discussão da comunidade do GitHub
  • Eu realmente queria que o PlantUML resolvesse esse tipo de problema

  • Isso parece uma espécie de versão turbinada da linguagem dot do Graphviz
    Traz variáveis e uma sintaxe mais limpa, mas os conceitos básicos são parecidos
    Veja a documentação do Graphviz

  • O Mermaid.js tem o conceito de mecanismos de layout
    Como o @mermaid-js/layout-elk, por exemplo
    Fico curioso se você já pensou em implementar seu algoritmo como um mecanismo de layout automático para o Mermaid

  • Projeto legal. Vi pelo celular e o botão para adicionar nós não apareceu
    Outra função que eu gostaria de ver é recolher nós descendentes (collapse downstream nodes). Talvez saia um pouco do escopo, mas seria bem útil

    • No momento é preciso editar o texto .mmd manualmente. Mas acho uma ótima sugestão
      A função de recolher nós descendentes também combinaria bem com o recurso de animação que outro usuário pediu