Он превращает целый сайт в один запускаемый файл — а спорят про README

Наведите Kage на сайт — headless Chrome отрендерит каждую страницу, вырежет весь JavaScript и упакует всё в один исполняемый файл, который запускаешь офлайн двойным кликом. Полтреда спорило, означает ли README, написанный ИИ, что и код такой же.

Вкратце

Kage запускает headless Chrome, рендерит страницу так, как её видит человек, снимает устоявшийся DOM, удаляет все скрипты, скачивает CSS, картинки и шрифты локально, а затем собирает зеркало в отдельный бинарник или ZIM-архив.

Первый же ответ указал на SingleFile, который пакует страницу в один самодостаточный HTML-файл без всякого сервера. Безопасник заметил, что Chrome запущен с --no-sandbox; другие назвали README мусором от ИИ и решили, что код такой же.

Сайт, который можно отправить письмом одним файлом — без всяких скриптов

Демо Kage в терминале
Демо Kage в терминале

Kage (404 голоса, 91 комментарий) — инструмент на Go, который делает то, чего не может wget --mirror: архивирует сайты, рендерящиеся только через JavaScript. Конвейер продуман. Headless Chrome грузит страницу и ждёт, пока та устаканится, DOM снимается таким, каким его увидел бы человек, затем вырезаются все скрипты, а CSS, картинки и шрифты скачиваются в локальные пути с переписанными ссылками. kage clone <url> обходит сайт с лимитами по глубине и числу страниц; kage serve поднимает локальный HTTP-сервер над папкой; kage pack сжимает зеркало в ZIM-архив (читается через Kiwix) или в самодостаточный бинарник, который отдаёт сайт без зависимостей.

Позиционирование — чтение офлайн: клонируй paulgraham.com и возьми его с собой в самолёт. Эта рамка и завела весь тред в спор: новое ли это, безопасно ли и место ли сайту вообще внутри исполняемого файла.

«Это разве не просто wget, SingleFile или curl?»

Сравнения посыпались сразу. Верхний ответ выдвинул альтернативу поострее:

«SingleFile кажется мне куда более надёжной версией этого. Он тоже вырезает весь JavaScript, но ещё и пакует всё в один HTML-файл… Бинарные ресурсы… упаковываются как строки base64». — комментатор, указавший на gildas-lormeau/SingleFile

Другие тянулись за более старыми инструментами: httrack, pandoc-to-EPUB для читалок, wget --mirror. Один ответ был просто «curl это умеет». README самого автора заранее оговаривает разрыв с JavaScript, а rahimnathwani (15k кармы) выдал самое чистое однострочное резюме того, в чём Kage реально отличается:

«То есть это как wget --mirror, только работает на страницах, которым нужен javascript, верно?»

Вот настоящее отличие. wget копирует байты; Kage сначала прогоняет страницу, а потом замораживает результат.

Повторяющийся вопрос: зачем статичному зеркалу сервер?

Несколько читателей споткнулись об одно и то же. Если на выходе статика, зачем kage serve, а не просто открыть файл?

«Если результат статичный, зачем ему сервер? Нельзя ли сделать так, чтобы файл просто открывался в браузере?» — комментатор, которому нужна работа на машинах без установленного kage

Основатель стартапа поддержал желание иметь бессерверную прослойку — «единую HTML-точку входа… которая индексировала бы архив контента сайта». Упаковка «сайт как бинарник» вызвала открытую враждебность из одного угла: «Никто и никогда не захочет запускать бинарник, которым с ним поделились или который он нашёл в сети». Пользователь Windows подтвердил трение на практике — Windows Security пометила вложенный leakless.exe как вирус.

Безопасник ловит --no-sandbox

Самое полезное техническое замечание пришло от основателя швейцарской security-фирмы:

«вы запускаете Chrome с --no-sandbox. Есть ли для этого веская причина? С точки зрения безопасности это, пожалуй, плохая идея». — dimiprasakis, основатель Minoan Security

Один из основателей чехословацкого архива видеоигр хотел противоположной крайности — архивной точности: спарить Kage с mitmproxy, чтобы рядом с отрендеренным видом сохранять ровно те байты, что отдал сервер, как замену WARC. А Simon Willison полез копаться в репозитории и обнаружил, что демо-GIF из README сгенерирован ещё одним проектом автора — обёрткой ascii-gif вокруг charmbracelet/vhs.

README стал приговором коду

Самый острый разворот не имел отношения к обходу сайтов. Несколько читателей с высокой кармой отказались оценивать инструмент по существу из-за того, как читается его README:

«README — это ИИ-мусор, читать его невыносимо. Отвращение, которое я ощутил при чтении, едва не отбило у меня желание пробовать проект. Код тоже ИИ-мусор?» — комментатор о тоне README

«README — мусор от LLM. Из-за этого я предполагаю, что и код такой же». — sneak, 25k кармы

Вот тихий урок. По-настоящему толковый инструмент — архивирование «отрендерь, потом заморозь», которого wget не умеет, — потратил изрядную часть своего топ-треда на вопрос, отравляет ли доверие ко всему проекту README, написанный машиной. Краулер тут лёгкая часть. В 2026 году README стал поверхностью доверия, и инструмент, вытянувший трудную инженерию, всё равно может проиграть зал на прозе.

Получайте такие разборы каждый день

Главные истории Hacker News — на email, в Telegram или RSS.

Следующая новость · 18 из 27 Читать дальше
🚀Tech

Соло-разработчик сделал ER-диаграммы, не отправляющие SQL никуда — а инженер сказал, что это не ER

Вставьте свои CREATE TABLE, растащите таблицы, переименуйте колонку — и SQL переписывается сам, всё в браузере, ничего не загружается на сервер. Старший дата-инженер вежливо заметил: из одного SQL настоящую ER-диаграмму получить нельзя.

★ 340 · 💬 72 · sqltoerdiagram.com · 5 мин