Эта книга — практическое руководство по созданию полноценных веб-приложений на Rust с использованием библиотеки web_sys — основного инструмента для доступа к браузерному API из WASM-кода.
Вместо сухого пересказа документации мы строим настоящее приложение и последовательно добавляем в него новые возможности: работу с DOM, обработку событий, сетевые запросы, файловую систему, графику, аудио и видео, параллельные вычисления и многое другое. Каждая глава — это законченный, работающий пример, который можно сразу запустить и применить в своём проекте.
Принцип книги — «learning by doing»: минимум теории, максимум кода, который решает реальные задачи.
- Разработчикам, уже знакомым с основами Rust и желающим выйти в веб;
- Frontend-инженерам, которые хотят перенести тяжёлые части приложения на Rust/WASM;
- Тем, кто интересуется WebAssembly и хочет понять, как выглядит «настоящая» веб-разработка на Rust;
- Всем, кто предпочитает учиться на примерах, а не на абстрактных описаниях.
- Настройка окружения:
wasm-pack,wasm-bindgen,trunk, интеграция сweb_sysиjs-sys; - DOM, типизированные элементы, динамическое создание и модификация узлов;
- События: мышь, клавиатура, формы, делегирование,
JsValueкак граница Rust ↔ JavaScript; - Сетевые запросы через
fetch,Request,Response,JsFuture, retry, timeout, CORS; - Streams:
ReadableStream,WritableStream,TransformStream, backpressure; - Файлы:
File API,File System Access API, OPFS,Blob, Object URL, скачивание; - Графика:
Canvas,ImageData,OffscreenCanvas, фильтры на Rust; - Медиа:
WebCodecs,AudioWorklet,MediaStream, MP4/WebM, demuxing/muxing; - Хранение данных:
localStorage,IndexedDB,Cache API; - Service Worker и офлайн-архитектура;
- Параллелизм:
Web Workers,SharedArrayBuffer,Typed Arrays,Scheduling; - API браузера:
Clipboard,Notifications,Geolocation,MediaDevices; - Сеть в реальном времени:
WebSocket,WebTransport,WebRTC; - GPU:
WebGL,WebGPU, compute shaders; - Безопасность и криптография:
WebAuthn, Web Crypto; - Обработка ошибок, паника, восстановление после сбоев.
Все примеры из книги собираются в единое работающее приложение, которое развивается от главы к главе:
🔗 Репозиторий проекта: https://github.com/rustkas/hello-wasm02
Рекомендуется параллельно читать главу и открывать соответствующий коммит в проекте — так вы увидите не только отдельный пример, но и то, как он встраивается в реальную кодовую базу.
- Все главы книги находятся в папке
chapters; - Формат имени файла:
chapter-<номер>.md— глава,chapter-<номер>.<подномер>.md— подглава; - Часть подглав использует отрицательные номера (
chapter-22.-01.md) — это сохраняет порядок вывода в оглавлении; - Оглавление в этом README генерируется автоматически из заголовков
# ...в начале каждого файла.
- Глава 1. Rust получает доступ к Web Platform
- Глава 2. Как устроен
web_sys - Глава 3. Первый Rust +
web_sysпроект - Глава 4. Сборка, оптимизация и деплой
- chapter-05
- Глава 6. Тестирование Rust/WASM
- Глава 7.
Window,Documentи DOM - Глава 8. Типизированный DOM
- Глава 9. События
- Глава 10.
JsValueкак универсальный тип границы - Глава 11.
js_sysи JavaScript objects - Глава 12. JavaScript callbacks из Rust
- Глава 13. Async/await на границе Rust ↔ JavaScript
- Глава 14. Browser navigation и URL
- Глава 15. Storage
- 15.1. Знакомство со Storage
- 15.2. Полный API Storage
- 15.3.
localStoragevssessionStorage - 15.4. Доступность Storage: private mode, исключения
- 15.5. Сериализация: строки, числа, булевы
- 15.6. JSON: структуры в Storage
- 15.7.
StorageEvent— синхронизация вкладок - 15.8. Ограничения Storage и синхронный API
- 15.9. Практический проект: панель управления Storage
- Глава 16. Fetch
- 16.1. Первый GET: Request, Response, JsFuture
- 16.2. HTTP-методы и тело запроса
- 16.3. Заголовки: чтение, запись, case-insensitivity
- Глава 16.4. Аутентификация и авторизация
- Глава 16.5. Ошибки: различение и классификация
- Глава 16.6. Retry и восстановление
- Глава 16.7. Timeout и отмена
- Глава 16.8. Параллельные запросы
- Глава 16.9. Типы ответов и binary data
- Глава 16.11. CORS и cross-origin
- Глава 16.11. CORS и cross-origin
- Глава 16.12. API client: паттерны и архитектура
- Глава 16.13. Fetch в Worker и Service Worker
- Глава 16.14. Практический проект: полноценный Rust API client
- Глава 17. Streams: ручная реализация и
wasm-streams - Глава 18. File API
- Глава 18.1. Базовые типы:
File,Blob,FileList, метаданные - Глава 18.2. Чтение текста:
FileReader,FileReaderSync - Глава 18.3. Бинарные данные:
ArrayBuffer,Uint8Array,Vec<u8> - Глава 18.4. Object URL: превью и скачивание
- Глава 18.5. Data URL, base64 и crate
base64 - Глава 18.6. Drag & Drop: файлы
- Глава 18.7. Drag & Drop папок:
webkitGetAsEntry - Глава 18.8. Валидация файлов: MIME, magic-байты, размер
- Глава 18.9.
Blob.slice: диапазоны и большие файлы - Глава 18.10.
Blob.stream()и потоковое чтение - Глава 18.11. Web Workers для файловой обработки
- Глава 18.12. Хеширование файлов:
sha2,SubtleCryptoи адаптивный пул воркеров - Глава 18.13. Загрузка на сервер:
FormData+fetch - Глава 18.14. Прогресс, отмена и интеллектуальная отправка
- Глава 18.15. File System Access API: открытие, сохранение, папки
- Глава 18.16. Web Share API: поделиться файлом
- Глава 18.17. Хранение: Cache API, IndexedDB, OPFS
- Глава 18.18. Практический проект: конвертер файлов
- Глава 18.1. Базовые типы:
- Глава 19. File System Access API
- Глава 19.1.
FileSystemHandleиFileSystemFileHandle— базовые типы - Глава 19.2. Три picker'а: open / save / directory
- Глава 19.3. Permissions и user gesture
- Глава 19.4. Чтение файлов:
text,arrayBuffer,slice,stream - Глава 19.5. Запись файлов:
FileSystemWritableFileStream - Глава 19.6. Большие файлы:
adaptive chunk, backpressure, копирование - 19.7.
FileSystemDirectoryHandle: обход,resolve, идемпотентность - 19.8. OPFS: приватная файловая система браузера
- 19.9. Квоты и
StorageManager - 19.10.
FileSystemObserver: реакция на изменения - 19.11. Интеграция с WASM-библиотеками
- 19.12. Практический проект: локальный CSV-редактор
- Глава 19.1.
- Глава 20. Blob, Object URL и скачивание
- Глава 21. Canvas и изображения
- Глава 21.1. HtmlCanvasElement: размеры и HiDPI
- Глава 21.2. Drawing API: фигуры, пути, текст
- Глава 21.3. Состояние, трансформации, композиция
- Глава 21.4. ImageData: пиксельный буфер и его границы
- Глава 21.5. Загрузка изображений:
<img>,ImageBitmap, EXIF - Глава 21.6. Фильтры на Rust: чистые функции, SIMD, Worker
- Глава 21.7. Image Processor: полный workflow
- Глава 22. OffscreenCanvas и Workers
- Глава 23. WebCodecs
- Глава 23.1. VideoFrame и EncodedVideoChunk: два представления кадра
- Часть II. Кодеки
- Глава 23.3. VideoEncoder: распакованное → сжатое
- Глава 23.4. Codec negotiation и тюнинг VideoEncoder (side-by-side)
- Глава 23.5. AudioCodecs: AudioDecoder, AudioEncoder, AudioData
- Глава 23.6. ImageDecoder: статика и animated GIF
- Глава 23.7. WebCodecs + WASM/GPU: обработка пикселей
- Глава 23.8. MediaStream: real-time camera pipeline
- Глава 23.9. Структура контейнеров: MP4 и WebM
- Глава 23.10. Demuxing: MP4 → EncodedVideoChunk
- Глава 23.11. Muxing: EncodedVideoChunk → MP4
- Глава 23.12. Практический проект: MP4 → обработка → MP4
- Глава 23.13. AudioWorklet: real-time audio pipeline
- Глава 23.14. Temporal scalability: L1T2, L1T3
- Глава 24. IndexedDB
- Глава 25. Cache API
- Глава 26. Service Worker
- Глава 27. Offline Application Architecture
- Глава 28. Worker и параллельное выполнение
- Глава 29. SharedArrayBuffer и Typed Arrays
- Глава 30. Scheduling
- Глава 31. Performance API
- Глава 32. Clipboard API
- Глава 33. Notifications API
- Глава 34. Geolocation
- Глава 35. MediaDevices: камера и микрофон
- Глава 36. WebSocket
- Глава 37. WebTransport
- Глава 45. WebRTC
- Глава 39. Real-Time Browser Architecture
- Глава 40. Web Crypto API
- Глава 41 Web Authentication
- Глава 42. WebGL
- Глава 43. WebGL 2
- Глава 44. WebGPU: compute shaders в браузере
- Глава 45. Web Bluetooth — переработанная версия
- Глава 46. Где должен находиться Rust
- Глава 47. Обработка ошибок
- Глава 48. Panic и восстановление после сбоев
- Глава 49. Rust/WASM File Converter
Каждую главу можно изучать независимо, но для последовательного освоения материала рекомендуется идти по порядку — от первой главы к последней. Подглавы внутри одной главы логически дополняют друг друга и раскрывают тему шаг за шагом.
Оптимальный режим работы:
- Прочитать главу;
- Открыть соответствующий коммит в сопутствующем проекте;
- Повторить код у себя, внося собственные изменения;
- Использовать пример как основу для своих задач.
Если вы нашли ошибку, опечатку или хотите предложить улучшение — откройте Issue или пришлите Pull Request. Приветствуются:
- исправления опечаток и неточностей;
- уточнения в примерах кода;
- предложения по новым темам;
- переводы глав.
Материалы книги распространяются под лицензией MIT. Подробности — в файле LICENSE.