Topcoat — это полноценный фреймворк для Rust, собранный по принципу «всё включено». Он заточен на простоту и продуктивность, хотя пока ещё экспериментальный и ломает совместимость. Его главная фишка — клиентская реактивность без лишнего boilerplate. Вся разметка рендерится на сервере: компоненты асинхронные, могут напрямую ходить в базу данных — никакого отдельного API-слоя. Но интерактивность не требует полного round-trip. Выражения $(...) — это обычный типизированный Rust: Topcoat выполняет его на сервере при первой отрисовке и автоматически переводит в JavaScript, чтобы код работал прямо в браузере. Никакого wasm-бандла, никакого отдельного клиентского билда.
Если сервер всё же нужен (например, для поисковых результатов), компонент помечают #[shard]. Тогда Topcoat перерисовывает его на сервере при изменении аргументов и подменяет HTML на лету.
Шаблоны через макрос view! остаются близкими к обычному HTML и Rust. Внутри можно использовать привычные конструкции вроде for и if. Причём форматировать такие сниппеты помогает команда topcoat fmt.
Отдельно радует маршрутизация: Topcoat умеет автоматически выводить дерево путей из структуры модулей — без шага сборки. Просто раскладываешь файлы по папкам app/about.rs, app/posts/id.rs — и фреймворк сам подхватывает.
Работа с ресурсами тоже упрощена. Макрос asset! сканирует скомпилированный бинарник, копирует или скачивает файлы в локальную директорию и раздаёт их с агрессивным кэшированием по содержательно-хешированным URL. Есть встроенные утилиты для веб-шрифтов и иконок, интеграции с Fontsource и Iconify.
Ещё одна плюшка — встроенная поддержка Tailwind CSS. Достаточно включить фичу tailwind, и фреймворк сам подвяжет стили через свой пайплайн. Всё работает без Node.js.
В целом Topcoat предлагает иерархическую маршрутизацию (страницы, макеты, API), контексты запросов и приложения, мемоизацию для кэширования, удобную работу с куками и сессиями, а также интеграции с htmx для частичной замены HTML через заголовки. Судя по описанию, фреймворк пытается закрыть все типичные потребности full-stack Rust-приложения, убрав лишнюю возню.