Современная браузерная читалка для книг в формате FB2. Книга обрабатывается локально: файл не загружается на сервер и может быть открыт как в обычном .fb2, так и в .fb2.zip.
- Открытие FB2 и FB2.ZIP через диалог или drag-and-drop.
- Поддержка UTF-8, UTF-16 и распространённых однобайтовых кодировок, включая Windows-1251.
- Адаптивный режим одной или двух страниц.
- Навигация кнопками, стрелками клавиатуры, Page Up/Page Down и свайпом.
- Масштаб текста, светлая/тёмная тема и два режима сносок.
- Обложки и иллюстрации, встроенные в FB2.
- Сохранение настроек и позиции чтения в
localStorage. - Оценка времени до конца книги.
- Vite — разработка и production-сборка.
- TypeScript без UI-фреймворка — интерфейс и доменная логика.
- fflate — распаковка ZIP в браузере.
- Vitest + jsdom — модульные и интеграционные тесты.
- GitHub Actions — проверка тестов и сборки.
Минимальная версия Node.js — 22.22.2. Для локальной разработки рекомендуется Node.js 24.
npm install
npm run devVite выведет локальный адрес приложения. По умолчанию открывается демонстрационная «Анна Каренина»; другую книгу можно выбрать кнопкой в шапке.
npm test
npm run build
npm run previewsrc/
├── fb2/ загрузка, декодирование, разбор и DOM-рендеринг FB2
├── reader/ пагинация и безопасное локальное хранение
├── app.ts пользовательские сценарии и управление интерфейсом
├── settings.ts типы и значения настроек
├── main.ts точка входа
└── style.css адаптивный интерфейс и книжная типографика
books/
├── Anna-Karenina.fb2 демонстрационная книга
└── Anna-Karenina.fb2.zip архивная версия для проверки поддержки ZIP
FB2 преобразуется в DOM напрямую. Текст добавляется через безопасные DOM API, внешние ссылки ограничены протоколами HTTP, HTTPS и mailto, а исполняемый HTML из книги не вставляется в страницу.