Представлено Proa — Rust-фреймворк із серверним рендерингом і виведенням у різних форматах
На Hacker News представили Proa — вебфреймворк на Rust для серверного рендерингу та виведення компонентів у HTML і Markdown. Автори пропонують випробувати його на одному маршруті чинного проєкту.
15 жовтня 2026 року на Hacker News з’явилася публікація Show HN про Proa — вебфреймворк на Rust для серверного рендерингу та виведення компонентів у різних форматах. Опис можливостей і заяви про швидкість узято із сайту Proa, на який веде публікація. Команді, яку зацікавив фреймворк, автори пропонують почати з одного маршруту, не переносячи відразу весь застосунок.
Один компонент для різних форматів
У Proa інтерфейс описують типізованими компонентами на Rust. У прикладі з карткою товару один компонент виводить назву й посилання на купівлю як HTML для вебсторінки або як Markdown. Дані залишаються спільними, але правила відображення для кожного формату розробник задає окремо. Йдеться саме про формати виведення, а не про роботу одного інтерфейсу на різних платформах.
Компоненти отримують типізований WebContext. Через нього доступні дані поточного запиту, стан маршруту, метадані відповіді та кеш завантаження даних. До компонентної моделі автори також включили маршрути, макети сторінок, статичні файли, форми та зміну даних. Отже, Proa описують як фреймворк для застосунку, а не лише як засіб генерації розмітки.
HTML можна передавати потоком двома способами: зберігаючи порядок елементів документа або надсилаючи готові частини поза цим порядком через межі Suspense. Другий варіант передбачений для випадків, коли окремі дані завантажуються повільно й не мають затримувати решту сторінки. Що саме відвідувач побачить першим, залежить від того, як розробник побудує сторінку.
Інтерактивність і заявлені можливості
За задумом авторів, основою сторінки залишається HTML із сервера. Клієнтську поведінку додають вибірково через RSJS islands: сигнали, прив’язку значень та обробники подій задають на Rust, а компілятор перетворює їх на JavaScript. Кожна така ділянка отримує невеликий модуль і початковий стан. Для спільного runtime вказано розмір близько 1,3 КБ у стисненому форматі gzip.
У наборі Proa UI компоненти постачаються як вихідний код на Rust, який можна зберігати та змінювати у власному репозиторії. Серед прикладів — таблиці, кнопки, поля форм і картки. Акордеон показано без JavaScript: він працює на радіокнопках і CSS. У каталозі заявлено 58 компонентів із прикладами, описом властивостей і кодом для копіювання; частина з них позначена як Pro. Підхід із перевірками ще під час збирання нагадує типобезпечні HTML-шаблони для Zig, хоча це інший інструмент.
Сайт Proa перелічує перевірки доступності під час cargo build, автоматичне екранування виведення, захист запитів між джерелами та захисні заголовки. Це функції фреймворку, але вони не скасовують перевірки готових сторінок, форм і дій користувача.
На сайті також показано незалежні демонстрації інтерфейсів, схожих на GitHub, Sentry та Airbnb; автори зазначають, що ці сервіси не брали участі в їх створенні. Для одного із замірів часу рендерингу вказано сервер із 8 віртуальними ядрами AMD EPYC-Milan. Розділ із графіками окремо позначено Apple M4 Max і вереснем 2026 року. Ці дані описують представлені тести, але не показують, якою буде швидкість конкретного застосунку.
Як перевірити Proa на чинному проєкті
Для розробників в анонсі описано два шляхи: використовувати Proa з Axum для маршрутів і відповідей або викликати його через FFI з Node, Go, Python, Ruby чи Java. Автори пропонують спрямувати на Proa один маршрут, залишивши решту застосунку на попередньому стеку. Потім у робочому середовищі можна порівняти затримку та вартість цього маршруту з поточним рішенням — не ухвалюючи заздалегідь рішення про перенесення всього проєкту.
Власнику сайту чи маркетологу такий пробний маршрут дає привід предметно поговорити з командою: як швидко надходить серверний HTML, скільки JavaScript отримує відвідувач і чи працюють потрібні елементи сторінки. Демонстрації та бенчмарки на сайті Proa не відповідають на запитання про терміни розробки конкретного проєкту чи його пошуковий трафік. Для таких висновків потрібні дані самого проєкту, а не лише показники з анонсу.
Моя думка: почати з однієї сторінки
Мені як вебдизайнерці-початківиці подобається, що приклад з HTML і Markdown спонукає окремо подумати про вміст і його представлення. Але я б перевіряла Proa на одній справжній сторінці: подивилася б на адаптивну шапку, форми та виведення даних, перш ніж обговорювати цифри рендерингу. Базова верстка все одно допомагає побачити, чому охайний макет не завжди добре виглядає на екрані телефона.
На мою думку, новий фреймворк потрібен не кожному проєкту. Для портфоліо чи простого заходу конструктор може бути вдалим вибором. Якщо ж команда вже розвиває застосунок і хоче перевірити серверний рендеринг без повної міграції, експеримент з одним маршрутом здається мені розумним початком.
Джерела
Звідки новина. Текст — переказ своїми словами, факти — з джерела, думка — автора.
Початківиця вебдизайнерка
Створюю перші сайти для невеликих проєктів у Порту й вчуся перетворювати макети на адаптивні сторінки. Минулого тижня вперше сама полагодила зламану мобільну шапку.
Усі публікації автораСхожі статті
Bez генерує браузерний рушій за вебспецифікаціями й тестами
Bez створює браузерний рушій за вебспецифікаціями, звіряючи результат із Chromium, Firefox і WebKit. Проєкт поки на ранній стадії, а опубліковані показники не означають готовності рушія.
PaperPilot представив локальний PDF-рушій на Rust із підтримкою WASM і MCP
PaperPilot об’єднує локальні інструменти для роботи з PDF: браузерний рушій на WASM, CLI, десктопний застосунок, REST API та MCP-сервер. У версії v0.6 доступні операції зі сторінками, стиснення й витягування тексту.
Автор блогу прибрав Next.js і отримав 100 балів у всіх категоріях Lighthouse
Автор Bloffy замінив Next.js на Hono в публічній частині блогу й отримав 100 балів Lighthouse у всіх категоріях. Пояснюємо, чому кешування та оптимізації зображень виявилося недостатньо.
Обговорення 4
Дієго Замора
Не до кінця переконує ідея тягнути Rust-фреймворк заради HTML і Markdown з одного компонента: спільні дані — це зручно, але правила відображення все одно окремі, тож виграш може бути не таким великим. Я б теж почав з одного маршруту, але спершу перевірив би, чи справді в проєкті потрібен Markdown-вивід, а не просто додатковий шар абстракції 😅
Марк Льоренте
Тут ще нюанс: у Proa правила HTML і Markdown справді окремі, але спільними лишаються типізований компонент і дані — тож це не обов’язково лише дублювання шаблонів. @diego_zamora, ти б перевіряв такий маршрут саме на сторінці, де Markdown уже потрібен, наприклад для експорту товарів чи документації?
Беатріш Інеш
@marc.llor спільний типізований компонент — це не автоматично менше роботи: правила HTML і Markdown все одно треба проєктувати й підтримувати окремо, а ще — пояснити команді, навіщо для цього вводити Rust-фреймворк. Я б оцінювала такий маршрут не лише за тим, що Markdown уже потрібен, а й за тим, чи виправдана довгострокова підтримка цієї абстракції: новий токен сам по собі рішенням не стає 🙂
Філіпа Сантуш Автор публікації
@marc.llor, саме на маршруті, де Markdown уже потрібен, це й варто перевіряти: спільні типи й дані можуть прибрати частину розсинхрону, навіть якщо розмітку доведеться описувати окремо. Для початку я б узяла документацію або експорт товару й подивилася, чи така схема спрощує підтримку, а не лише додає абстракцію.