npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

zark-pincel

v0.3.0

Published

Editor visual local para HTML estático: grava cada ajuste no arquivo fonte, na regra CSS certa e dentro do @media certo.

Readme

ZARK Pincel

Editor visual local para páginas HTML estáticas: você aponta a ferramenta para o arquivo, clica no elemento na própria página e ajusta texto, tipografia, cor e espaçamento. Cada ajuste é gravado no arquivo fonte, na regra CSS que de fato governa aquele elemento e dentro do @media certo — não numa cópia, não num banco de dados, não num style inline.

Ele existe para resolver uma dor específica: ajustar um site gerado por IA custa vários prompts porque a IA não sabe qual elemento você quer mexer. Aqui você mostra clicando.

O que o diferencia

A maioria das ferramentas de edição visual escreve style="font-size: 34px" direto no elemento. Isso funciona na tela e apodrece o arquivo: o CSS deixa de ser a fonte da verdade, o responsivo quebra e ninguém consegue mais editar o projeto à mão.

O ZARK Pincel faz o contrário. Ele lê o CSS da página, descobre qual regra governa o elemento selecionado no breakpoint em que você está olhando, e edita aquela declaração, naquela regra, dentro daquele @media. Isso significa que:

  • clamp(), var(), calc() e afins são preservados quando não são o alvo da edição — a ferramenta não "achata" o valor do arquivo inteiro para um pixel fixo;
  • a formatação do arquivo (indentação, quebras, comentários, ordem das regras) continua igual — o diff de cada edição mostra só a linha que mudou;
  • style inline é o último recurso declarado, nunca a conveniência padrão.

Pré-requisitos

  • Node 20 ou mais novo (node --version).
  • Chrome ou Chromium instalado. É o único navegador suportado.
  • git — opcional, mas fortemente recomendado. É a rede de segurança: com git, cada edição vira um commit e nada é irreversível. Sem git, a ferramenta funciona e avisa, na cara, que suas edições não poderão ser desfeitas.

Instalação e uso

npx zark-pincel caminho/do/index.html

Isso baixa e roda sem instalar nada permanentemente. Se preferir ter o comando sempre à mão:

npm install -g zark-pincel
zark-pincel caminho/do/index.html

Funciona com qualquer HTML estático da sua máquina — não precisa ser um projeto preparado para isso.

O CSS pode estar num bloco <style>, em arquivos .css separados, ou nos dois. Quando um elemento é governado por uma regra do components.css, é nele que a edição é gravada — o index.html não é tocado. Imagens, fontes e as outras páginas do projeto são servidas normalmente, então o que você edita é a sua página como ela é de verdade.

O terminal imprime o endereço local (http://localhost:PORTA) e abre o navegador nele. Deixe o terminal aberto enquanto edita — é ele que grava no arquivo.

Como usar a barra

A barra fica fixa na lateral, fora do fluxo da página, e mostra os controles quando você seleciona algo.

Selecionar. Clique num elemento da página. A barra mostra qual é, qual regra CSS o governa e em qual breakpoint você está.

Navegar pai/filho. Acima dos controles há uma trilha (breadcrumb) com a linhagem do elemento. Clique num ancestral para subir, ou volte para descer. Serve para quando você quer o container e não o texto dentro dele.

Setas ↑ e ↓. Com um elemento selecionado, as setas aumentam e diminuem o valor. Shift dá passo grande (10×), Alt dá passo fino (1/10). Quando as duas vêm juntas, Alt vence.

Ctrl+Z desfaz, Ctrl+Shift+Z refaz. Cada gravação vira um passo; aperte cinco vezes e volte cinco edições. A barra diz o que foi desfeito. Funciona com ou sem git — é a rede de segurança que permite experimentar sem medo.

Uma recusa proposital: se outro programa (um agente de IA, seu editor) mexeu no arquivo depois daquela edição, o desfazer para e avisa em vez de gravar. Voltar ali sobrescreveria o trabalho de quem mexeu. Você perde um desfazer, não perde trabalho — e se desfizer a alteração externa, o Ctrl+Z volta a funcionar sozinho.

Dentro de um campo de texto (a edição direta na página, ou o campo do "Pedir pra IA"), Ctrl+Z é o desfazer normal do navegador. A ferramenta não sequestra a tecla ali.

Duplo-clique para editar texto. Duplo-clique num elemento de texto entra em edição direta na página. Se o elemento contiver outros elementos dentro, a edição é recusada com a explicação — trocar o texto ali apagaria a estrutura interna.

Os grupos. Os controles vêm em quatro blocos colapsáveis: Cor (texto, fundo, borda — já oferecendo as variáveis CSS do próprio projeto como opção), Tipografia, Espaçamento e Pedir pra IA. Um deles abre sozinho conforme o que você clicou: texto abre Tipografia, container abre Espaçamento.

O diálogo de "essa regra atinge N elementos". Se a regra que governa o elemento também governa outros (o caso normal: .card numa página com seis cards), a ferramenta para e pergunta antes de gravar, destacando na tela quem mais seria afetado. Três saídas:

| Saída | Tecla | O que faz | |---|---|---| | mudar todos (N) | 1 | grava na regra original — todos os N elementos mudam juntos | | só este | 2 | cria uma classe modificadora presa a este elemento e grava nela; os outros N−1 ficam intactos | | cancelar | Esc | não grava nada |

Pedir pra IA. Quando o ajuste é maior do que a barra alcança, o botão "Pedir pra IA" gera um contexto cirúrgico do elemento: a linha exata no arquivo fonte, o caminho até ele, o trecho de marcação como está no arquivo (não o outerHTML do DOM) e as regras CSS que o governam. Você recebe o prompt pronto num campo com botão de copiar — cole em qualquer agente. O mesmo pedido também fica gravado em .zark-pincel/pedidos/, o que gasta bem menos token para quem usa um agente na própria pasta do projeto.

A rede de segurança

Com git ligado, cada edição vira um commit, com mensagem descrevendo o que foi mexido (por exemplo pincel: .titulo @(max-width: 640px) font-size). Nada de "salvei dez coisas e agora não sei qual quebrou".

Desfazer uma edição:

git log --oneline     # ache o commit
git revert <hash>     # desfaz só aquele

Se a pasta não for um repositório git, a ferramenta pergunta antes de fazer qualquer coisa:

Esta pasta não é um repositório git.
O ZARK Pincel usa git para você poder desfazer qualquer edição.
Posso rodar "git init" em /caminho/do/projeto? [s/N]

Se você responder não, ele segue funcionando e avisa que as edições não poderão ser desfeitas. Ele nunca cria repositório sem sua confirmação.

Além disso, o servidor guarda um sha do arquivo. Se alguém (você noutro editor, um agente, um git checkout) mudar o arquivo por fora enquanto a barra está aberta, a gravação é recusada com "o arquivo mudou por fora — recarregue a página" em vez de sobrescrever o trabalho do outro.

Limites conhecidos

Estes são limites reais da versão atual, não coisas "que já vão sair":

  • Só HTML estático. Site montado por framework ou por passo de build não é suportado — a ferramenta edita o arquivo que você tem, e num projeto com build o arquivo que você tem não é o que vira a página.
  • CSS remoto não é editável. Uma folha vinda de CDN ou do Google Fonts não é um arquivo seu; a barra diz quantas ela não enxerga em vez de fingir que viu tudo.
  • Folha que não vale para a tela fica de fora. <link media="print"> e afins são servidos ao navegador, mas não recebem edição — mexer ali não mudaria o que você está vendo.
  • Elemento criado por JavaScript não é editável. Ele não existe no arquivo fonte, então não há onde gravar. A barra bloqueia a seleção e explica em vez de fingir que salvou.
  • Só Chrome/Chromium. Outros navegadores não são testados nem suportados.
  • Um arquivo por vez. Não há navegação entre páginas do projeto dentro da ferramenta.

Solução de problemas

O navegador não abriu. A ferramenta pede ao sistema para abrir o endereço no navegador padrão. Se o seu padrão não for o Chrome — ou se nada acontecer —, copie a URL impressa no terminal (http://localhost:PORTA) e cole no Chrome. Funciona igual.

Porta ocupada. O ZARK Pincel escolhe uma porta livre automaticamente a cada execução, então o erro clássico de "porta em uso" não deve aparecer. Se algo parecer travado, é quase sempre uma execução anterior ainda de pé: feche a aba antiga, encerre o processo no terminal (Ctrl+C) e rode de novo — a nova URL será outra.

"conexão perdida com o servidor — recarregue a página". O processo no terminal caiu ou foi encerrado. Nesse estado a barra não grava mais nada (proposital: melhor parar do que fingir que salvou). Confira se o terminal ainda está rodando, suba de novo e recarregue a página.

"o arquivo mudou por fora". Alguém editou o arquivo enquanto a barra estava aberta. Recarregue a página para o servidor reler o arquivo — nenhuma alteração sua ou dele foi perdida.

Créditos

Este projeto vendoriza código de terceiros em third_party/clickdeck/, do projeto ClickDeck, sob licença MIT. A atribuição completa está em third_party/clickdeck/NOTICE.md, junto da licença original em third_party/clickdeck/LICENSE.

Licença

MIT © 2026 ZARK. Ver LICENSE.


Documentação de apoio: como funciona por dentro · por que é assim · contribuindo.