Brevier — браузер, созданный только для чтения

У меня очень давно в «идеях» лежала запись о том, что нужно создать браузер, который предназначен исключительно для чтения. Каждый раз я вспоминал о ней, когда натыкался на очередной сайт, где контент сложно прочитать из-за отвратительной вёрстки или обилия рекламы. И вот время настало: недельный лимит токенов не был израсходован, и мы с товарищем Клодом напряглись и создали браузер для чтения Brevier. Тот факт, что я уже много лет занимаюсь фронтенд-разработкой, дал свои плоды — я решил сделать браузер без JavaScript и без CSS.

Пролог
Когда-то интернет был тихой ламповой библиотекой. Каждая страница была свитком-папирусом. Вы брали нужный свиток, разворачивали и читали. Учёные мужи бережно писали эти свитки, любопытные читали, и никто не был обязан брать печенье для входа в библиотеку.
Худые стороны у этой библиотеки тоже имелись. Свитки было сложно читать: они были написаны разными почерками, разного качества чернилами и совершенно непредсказуемых цветов. Деды помнят, что даже видели свитки, написанные ярко-зелёными чернилами на фиолетовом папирусе. В любом случае, текст присутствовал, и если желание было, то его можно было прочесть.
Затем появились драконы.
1. Драконы грядут
Они появились не сразу, но первая ласточка была с вежливым сообщением: не желаете ли подписаться? Затем видео, которое никто не заказывал, часто еще и со звуком! Немного погодя вся библиотека была заполнена ими:
На входе вас всегда поджидает Печеньковый змей. Он не сдвинется ни на миллиметр, пока вы не передвинете 42 переключателя и не согласитесь с ним;
Как только вы сосредоточитесь на чтении, поп-ап Василиск выскакивает, обращает вас в камень и просит подписаться на канал да нажать колокольчик, пока вы не очнётесь и не найдёте едва заметный крестик в правом верхнем углу;
Стоит только закрыть одно видео, как в углу запускается еще два — это Гидра автовоспроизведения;
Вы никогда не увидите футер сайта, так как он пожран Змеем Бесконечного Свитка.

Но это всё слуги самого главного владыки — Великого JavaScript Дракона. На заре веков он был крохотным помощником и служил людям верой и правдой. Но сейчас он стал невероятно могущественным и жестоким. Теперь он даже не приносит свитки, как делал это раньше. Теперь он привозит телегу с кирпичами, глиной и палками и строит свитковый замок прям на ваших глазах, пока ваш ноутбук воет от натуги. Читатели по-прежнему приходили за свитками. Просто им приходилось несладко.
2. Карманная книга
В первые годы книгопечатания «бревьер» было названием шрифта небольшого размера — настолько маленького, что целая книга ежедневных чтений помещалась в карман путешественника. Людям удобно было брать такие книги с собой. Браузер Brevier — это карманная книга для интернета. Он делает одно: читает. Он проскальзывает мимо драконов, хватает свиток и приносит его вам на чистой бумаге.
Brevier никогда не впускает дракона, потому что никогда не запускает JavaScript — ни для какого-то конкретного сайта, ни для маленького меню, никогда. Он берёт страницу, извлекает из неё статью, превращает её в Markdown на вашем компьютере и отображает её в соответствии с вашими типографическими требованиями. Сайт определяет текст. Вы определяете, как он будет выглядеть.

3. Читальный зал
Каждый развёрнутый вами свиток переносит вас в одну и ту же спокойную комнату:
Ваш шрифт на каждом сайте — Noto Sans, книжный Book или ещё два готовых стиля, также вы можете точно настроить шрифт, размер, длину строки и межстрочный интервал — один раз для всех сайтов.
Бумага цвета слоновой кости, а для ночного дозора выбрана теплая темная цветовая гамма.
Мы уделили внимание переносу текста, чтобы даже правая часть текста смотрелась аккуратно.
Масштабирование макета устроено так, что в строке по-прежнему помещается около 65 символов.
Стихи сохраняют свои строки и строфы. Странствующие барды также приветствуются, но чеканную монету мы не обещаем.

Тёмная тема

4. Библиотечная башня
Некоторые из лучших веб-страниц находятся в Git-репозиториях: руководства, книги, справочники. Введите адрес gh:owner/repo в адресной строке, и Brevier откроет файл README, gl: работает и с GitLab.

Одна из самых крутых фич — это панель справа. Там могут находиться 3 важные вещи для навигации:
Оглавление страницы. Оно базируется на заголовках, а в случае длинных или неструктурированных страниц — на процентах;
Навигационные ссылки из футера или хедера сайта.
Заметки к тексту. Да-да, можно добавлять какие-то заметки к странице.
Также сейчас в эпоху ИИ удобно открывать сохранённые markdown-файлы прям в Brevier для комфортного чтения — везде, кроме Flatpak: из песочницы файлы с диска не открываются.
5. Вороны с далёких башен
Ленты новостей — это вороны интернета: RSS, Atom и JSON Feed. Brevier открывает их как списки записей с датой, автором и кратким описанием. Поддерживаются ссылки вида feed://. Ветки комментариев уже поддерживаются — Хабр, Hacker News, Lobsters и форумы, построенные на Discourse: каждый ответ с указанием автора и дня, ответы размещаются под вопросами.

С Хабром отдельная история: в самой странице статьи комментариев нет, их потом догружает скрипт. Brevier делает тот же запрос сам, один раз, и ставит комментарии под статью — с авторами, датами и ветками ответов. Ссылки вида #comment_… из ленты ведут прямо к нужному комментарию, а на месте удалённого стоит та самая фраза про НЛО.

Всё, что вы введёте в адресную строку, если это не адрес, будет использовано для поиска в DuckDuckGo, и результаты будут представлены в виде простого списка ссылок. Ни один ворон не пострадал. Может, позже будут и другие поисковики, а может, и нет.
6. Рукописи не горят
Каждый прочитанный вами свиток хранится в сжатом виде в формате Markdown, один файл == один свиток. Ctrl+Shift+F запускает поиск по всему архиву. Даже если сайт исчезнет, ваша копия останется у вас в архиве. А если страницы больше нет, Brevier предложит достать последнюю копию из Wayback Machine — но только по кнопке: до неё archive.org ничего не знает о том, что вы читаете.

Свиток, который вы читали дольше десяти минут, помнит, на каком месте вы закончили читать. Откройте страницу заново, и Brevier предложит «Continue from 42%». А внизу экрана тонкая линия с полосой прогресса, точками заголовков и добавленных пометок.

7. Когда ворота остаются закрытыми
Не каждый замок открыт для посещений: одни сайты полностью созданы на JavaScript, у других высокая стена от ботов, а на ней Гэндальф: «Ты не пройдёшь!» Brevier вежливо стучит, называет своё честное имя и никогда не лезет через стену. Если ворота остаются закрытыми, он ясно об этом сообщает и предлагает открыть в браузере. Также всегда можно просто нажать Ctrl+O, и страница откроется в обычном браузере.
Мы протестировали в сентябре Brevier на 108 живых страницах, и 80 из них (74%) читаются хорошо. Честно скажем: правила оценки мы смягчили, уже зная результат, — по строгим выходило 56%. На отдельном замере по 295 новостным сайтам хорошо читаются 94% статей, до которых Brevier смог добраться. Не каждая миссия заканчивается победой, но мы всё равно показываем итоговый результат и то, как мы его подсчитали.
8. Для строителей замков
Мы добавили специальный инструмент для разработчиков, схожий с Lighthouse, который может проверить, как ваш сайт будет выглядеть для читателя, не использующего скрипты. Команда brevier --check https://your.site/ выдаст оценку от 0 до 100 и подскажет, что нужно изменить. Это очень удобно, можно даже добавить проверку в GitHub Action, чтобы он прервал сборку, если оценка ниже определенного уровня.
- uses: gurov/brevier@main # или тег релиза
with:
urls: |
https://example.com/
min: 80
9. Что авантюрист оставляет дома
Хороший путешественник берет с собой минимум вещей. Brevier не будет брать с собой:
JavaScript. Никогда, ни в какой форме. В этом суть, в этом наша стратегия.
CSS сайта. Стили только ваши.
Формы, авторизация и файлы cookie. Веб у нас только для чтения, и это сделано намеренно.
Видео, аудио и расширения.
Мы не используем ИИ для разбора страниц, они читаются простыми правилами, поэтому смысл не искажается. Если же в будущем мы добавим ИИ для вспомогательного парсинга — это будет совершенно отдельный модуль, который вызывается по запросу (может, и вообще без него обойдёмся).
И одно честное ограничение: программы чтения с экрана пока работают только в Linux. На Windows доступность GTK ещё не добралась, а на Android TalkBack должен читать нативный текст, но этого пока никто не проверял.
10. Ваше сокровище у вас в сундуке
Brevier прячет ваше добро так: в домашнем каталоге папка, в папке текстовый файл, в файле строка, а в строке — закладка, запись истории или открытая вкладка. Сотрёте строку — и страница забыта. Прочитанные статьи лежат рядом в архиве: папка, а внутри Markdown ужатый в LZ4. Ни базы данных, ни учёток в Brevier нету.
Сам Brevier ничего не трекает и никуда ничего не отправляет. Сайты, правда, по-прежнему видят, что вы к ним заходили: Brevier — читалка, а не шапка-невидимка.
11. Кого запрягаем
Brevier есть для Linux, Windows и Android, а командная строка — ещё и для macOS. Интерфейс везде пока только на английском.
Linux
Flatpak можно поставить из собственного подписанного репозитория Brevier. Это работает в любом дистрибутиве (deb и rpm нету, потом, может, заведём, а пока не стали, так как обновления автоматом не подтянутся). GNOME Software и Discover ставят его по ссылке в один щелчок, а в консоли:
flatpak install --user https://brevier.bizibah.com/flatpak/brevier.flatpakrefНовую версию подтянуть командой flatpak update. Сам Brevier весит около 5 МБ, но если рантайма GNOME в системе ещё нет, Flatpak скачает и его — это около 400 МБ, общих для всех Flatpak-приложений. Кому это много, для того есть архив tar.gz на 11 МБ (нужен GTK 4 в системе, ставится в ~/.local без root) и сборка с crates.io (Rust 1.88+, GTK 4.10+ с заголовками):
cargo install --locked brevier --features uiWindows 10 и 11
Установщик ставит Brevier для конкретного юзера, без прав администратора. Есть также версия в zip, которую можно запустить из любого места. Установщик пока без подписи, поэтому SmartScreen ругнётся «Система Windows защитила ваш компьютер» — жмём «Подробнее» → «Выполнить в любом случае».

Android 7 и новее (64-битный ARM)
Это не очередная поделка на WebView, а нативное приложение на том же ядре, и статью оно рисует настоящим текстом. Ставится из F-Droid, там обновляется само (по ощущениям задержка на неделю в сравнении с гитхабом), или тем же APK со страницы релизов. F-Droid публикует APK, только если его сборка побайтно совпала с нашей, поэтому обновляться можно хоть откуда. В Google Play пока нету, но планирую!

Все шаги одной картинкой

Командная строка
Для маководов это единственный вариант: окна пока не подвезли. Пользоваться просто: brevier https://example.com/article сконвертирует статью в Markdown. Каждый релиз поставляет утилиту одним файлом для Linux (x86_64 и ARM64), macOS (Apple silicon и Intel) и Windows. Дополнительных зависимостей не нужно, включая GTK. Файл для macOS не подписан: если скачали браузером, то нужно разок выполнить xattr -d com.apple.quarantine brevier. Или собрать: cargo install --locked brevier --features save.
Сертификаты Минцифры
Если корневой сертификат Минцифры установлен в систему, сайты с ним открываются в Linux вне Flatpak (проверено на sberbank.ru). Во Flatpak и на Android — пока нет: в песочнице Brevier видит только корни рантайма, а на Android — только системные, без установленных пользователем. В Windows должен работать через системное хранилище, но пока не тестировал.
Эпилог. Присоединяйтесь к квесту!
Brevier — это свободное программное обеспечение под лицензией MIT или Apache-2.0, разрабатываемое в открытом доступе на GitHub. Категорически приветствуются сообщения от пользователей в разделе Issues, а также патчи (пожалуйста, не прикрепляйте драконов). Манифест описывает обещания Brevier, а дорожная карта показывает, куда проект движется дальше. Новые релизы доставляет ворон: лента релизов.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.