# Onze linhas de JavaScript partiram a internet. Uma despublicação.

Published: 2026-09-13

22 de março de 2016, 21:30 UTC: um desenvolvedor despublica todos os seus 273 pacotes npm depois que o npm entrega o nome do pacote "kik" ao Kik, o aplicativo de mensagens, cujo agente de patentes havia prometido "advogados à porta". Um dos 273 é left-pad: onze linhas que colocam espaços na frente de uma string, baixado 2,5 milhões de vezes por mês. Em minutos, as compilações do Babel, React e Node falham em todo o mundo, centenas por minuto. Uma bifurcação aparece em dez minutos e não muda nada, porque o Babel puxa o left-pad através de números de linha, que fixa exatamente o 0.0.3. Às 23:55, o npm restaura a versão excluída de um backup – a primeira "des-despublicação" na história do registro – e uma semana depois envia a regra de despublicação de 24 horas. Post-mortem, da própria conta do npm e do tópico de e-mail que o Kik publicou: o registro que permitia a qualquer autor excluir qualquer versão sem verificação de dependentes, a árvore transitiva resolvida ao vivo em cada instalação, sem lockfile por padrão. Culpa do Git: 60 npm / 25 Kik / 15 o hábito da dependência. Veredito sobre a correção: SHIP IT.

Canonical: https://thedailydiff.dev/pt-PT/video/2026-09-13-left-pad/

## O que este vídeo aborda

- 11 de março: o agente de patentes do Kik pede a Azer Koçulu para renomear \`kik\`; uma hora depois: advogados "à porta e a encerrar as vossas contas"; Azer: 30.000$; o Kik envia um e-mail para o suporte npm
- 18–20 de março: o CEO do npm transfere o nome para o Kik ("razoavelmente esperaria que estivesse relacionado com kik.com"); Azer pede para todos os seus módulos serem apagados
- 22 de março, 21:30–23:55 UTC: 273 pacotes despublicados; left-pad@0.0.3 404s em projetos Babel, Atom, Node; fork 1.0.0 às 21:42; o CTO do npm twitta "des-despublicando" às 23:03; 0.0.3 de volta do backup às 23:55 — 2,5 horas
- 23 e 29 de março: o post-mortem do npm ("falhámos") e a nova política: despublicar apenas dentro de 24 horas, placeholders de segurança para nomes removidos (72 h desde 2020)

## Transcrição traduzida

Traduzido da narração original em inglês. Áudio e legendas disponíveis são controlados pelo YouTube.

0:00 Um desenvolvedor apaga onze linhas de JavaScript, e em minutos o Babel, as compilações do React e Node estão a falhar em todo o mundo, centenas por minuto. A função é left-pad. Preenche uma string com espaços, e ao fim da noite o npm faz a única coisa que diz que não pode fazer: republicar uma versão apagada. Como acontece, por que é possível e quem é o culpado. Isto é The Daily Diff, post-mortem. 11 de março. Um agente de patentes do Kik, a aplicação de mensagens,

0:26 envia um e-mail a Azer Koçulu: renomeia o teu pacote npm, kik é a nossa marca. Azer diz não. Uma hora depois: os nossos advogados de marcas vão estar à vossa porta e a encerrar as vossas contas. Azer indica um preço, trinta mil dólares, e o Kik encaminha o tópico para o npm suporte. 18 de março. O CEO do npm decide que qualquer pessoa que escreva npm install kik espera a aplicação de

0:48 mensagens, e entrega o nome. Azer pede para que tudo o que é seu seja apagado. Dois dias depois, ele próprio o faz: duzentos e setenta e três pacotes. 22 de março, 21:30 UTC. Cada compilação que procura left-pad recebe um 404. Dez minutos depois, um estranho republica-o como 1.0.0, e nada muda, porque o Babel e o Atom carregam-no através de um pacote chamado line-numbers, que quer exatamente o 0.0.3.

1:13 Às 23:03 o CTO do npm twitta: un-un-publishing. Às 23:55, o 0.0.3 está de volta de um backup. Duas horas e meia. Por que pode uma pessoa fazer isto? Três razões. Qualquer versão no npm pode ser apagada pelo seu autor, instantaneamente, sem verificação de quem dela depende. Segundo, as dependências são transitivas: o Babel não sabe que o left-pad existe, sabe o line-numbers, e toda a árvore é resolvida ao vivo em cada instalação.

1:36 Terceiro, em 2016 nada fixa essa árvore por padrão; os lockfiles são opcionais, por isso cada execução de CI volta a perguntar à internet como são onze linhas de código. Um registo, gerido por ninguém que dele dependa. culpa do git. npm, sessenta por cento: o seu próprio post-mortem diz que a despublicação irrestrita causou a dor, e, citação, falhámos. Kik, vinte e cinco: um agente de patentes, não um advogado, a prometer advogados à porta por um nome que o Kik já tinha decidido não usar. O hábito da dependência, quinze: todos os que instalaram onze linhas com npm em vez

2:06 de as digitar. Incluindo o Kik, cujas compilações também falham. Raio de explosão: duzentos e setenta e três pacotes removidos, um deles descarregado dois milhões e meio de vezes por mês. A correção leva duas horas e meia; a função leva onze linhas. No Hacker News, um post a perguntar se nos esquecemos de como programar atinge mil e setecentos pontos, principalmente de pessoas cujas compilações ainda estão vermelhas. Veredito, post-mortem: SHIP IT.

2:26 O npm restaura do backup, publica o post-mortem no dia seguinte, e dentro de uma semana envia a regra que ainda se mantém: podes despublicar por vinte e quatro horas, depois disso falas com um humano. Segunda-feira: comita o teu lockfile, e se uma função tem onze linhas, é um parágrafo, não uma dependência. Envia-me o incidente sobre o qual ainda não te é permitido falar, nos comentários, ou em the daily diff dot dev. E essa é a diferença de hoje.

2:48 Eu sou o Niko da Axrisi. Faz a fusão com responsabilidade.

## Fontes

- [npm, Inc., "kik, left-pad, and npm" (Mar 23, 2016)](https://blog.npmjs.org/post/141577284765/kik-left-pad-and-npm) — blog.npmjs.org
- [npm, Inc., "changes to npm's unpublish policy" (Mar 29, 2016)](https://blog.npmjs.org/post/141905368000/changes-to-npms-unpublish-policy) — blog.npmjs.org
- [Azer Koçulu, "I've Just Liberated My Modules" (Mar 22, 2016; archive copy)](https://web.archive.org/web/20160323201305/https://medium.com/@azerbike/i-ve-just-liberated-my-modules-9045c06be67c) — web.archive.org
- [Mike Roberts (Kik), "A discussion about the breaking of the Internet" — the full e-mail thread (Mar 23, 2016; archive copy)](https://web.archive.org/web/20170112194445/https://medium.com/@mproberts/a-discussion-about-the-breaking-of-the-internet-3d4d2a83aa4d) — web.archive.org
- [Laurie Voss (npm CTO) on X, Mar 22, 2016, 23:03 UTC](https://x.com/seldo/status/712414400808755200) — x.com
- [left-pad 0.0.3 on the npm registry (the eleven lines)](https://registry.npmjs.org/left-pad/0.0.3) — registry.npmjs.org
- [Hacker News, Mar 22, 2016 — "I've Just Liberated My Modules" (1,573 points)](https://news.ycombinator.com/item?id=11340510) — news.ycombinator.com
- [Hacker News, Mar 23, 2016 — "NPM and Left-Pad: Have We Forgotten How to Program?" (1,725 points)](https://news.ycombinator.com/item?id=11348798) — news.ycombinator.com
- [Hacker News, Mar 29, 2016 — "Changes to Npm's unpublish policy" (320 points)](https://news.ycombinator.com/item?id=11382885) — news.ycombinator.com
- [The Register, Mar 23, 2016 — "How one developer just broke Node, Babel and thousands of projects in 11 lines of JavaScript"](https://www.theregister.com/2016/03/23/npm_left_pad_chaos/) — www.theregister.com
