Executando verificação de segurança...
9

Criei uma CLI que converte arquivos .excalidraw para PNG sem precisar de browser

Excalirender

Quem usa o Excalidraw pra criar diagramas sabe que pra exportar precisa abrir no browser. No dia a dia isso não é problema, mas eu precisava automatizar. Tinha um pipeline de CI/CD que gerava documentação e os diagramas ficavam desatualizados porque ninguém lembrava de exportar manualmente. Além disso, às vezes eu queria converter vários arquivos de uma vez e não queria ficar abrindo um por um.

Acabei criando o excalirender. É uma ferramenta de linha de comando que lê o JSON do .excalidraw e renderiza tudo server-side. Sem browser, sem headless Chrome, sem Puppeteer.

O repositório tá aqui: github.com/JonRC/excalirender

Como funciona por baixo

A ideia foi usar as mesmas bibliotecas que o Excalidraw usa no browser, só que rodando no servidor:

. Rough.js cuida dos shapes com aquele estilo hand-drawn
. perfect-freehand faz os traços de desenho livre
. node-canvas (Cairo/Pango) faz a renderização server-side

O que dá pra fazer

Suporta todos os elementos do Excalidraw:

. Retângulos, diamantes, elipses, linhas, setas com labels
. Texto com 7 famílias de fontes (Cyrillic, Greek, Latin Extended)
. Imagens, frames com clipping, freedraw
. Dark mode
. Export pra PNG e SVG (fontes embutidas no SVG)

Como instalar

Binário nativo (apenas linux), sem dependências:

curl -fsSL https://raw.githubusercontent.com/JonRC/excalirender/main/install.sh | sh

Ou se preferir Docker (Linux, Windows, MacOS):

docker run --rm -v "$(pwd):/data" -w /data jonarc06/excalirender diagram.excalidraw

A imagem tá no Docker Hub: hub.docker.com/r/jonarc06/excalirender

Exemplos de uso

excalirender desenho.excalidraw                    # gera desenho.png
excalirender desenho.excalidraw -o output.svg      # exporta como SVG
excalirender desenho.excalidraw -s 2               # 2x resolução
excalirender desenho.excalidraw --dark             # dark mode

O projeto é open source, licença MIT. Se alguém quiser contribuir ou tiver alguma sugestão, tô aberto.

Carregando publicação patrocinada...
2
1

excalidraw-brute-export-cli usa headless browser. Isso significa várias dependências necessárias para o rodar, mais memória usada, o que torna o programa mais pesado. Isso torna o uso em pipelines de CI/CD, uso em servidores e outros pior.

A ideia do meu projeto é fazer a conversão sem precisar de um browser.

Claro que cada abordagem tem diferentes pontos positivos e negativos. O método com brawser consegue ser visualmente mais confiável.