serv

Маленький дев-сервер для статики, SPA и markdown.

Ещё один дев-сервер на HTTP. Не потому, что чего-то не хватало: захотелось — и написал.

Один бинарник на hyper и tokio. Запускаешь serv в папке — она уже на http://127.0.0.1:8010. Ни конфига, ни требований к структуре проекта.

Он ничего не кеширует. Каждый запрос заново открывает файл и читает его с диска, так что отдаётся всегда то, что лежит там сейчас. Браузеру при этом уходит ETag, и пока файл не менялся, приходит 304 — перезагрузки не тормозят.

/about отдаёт about.html, а /about.html редиректит обратно, чтобы у страницы был один адрес. Флаг -s включает фолбэк для SPA, но только на переходах: пропавший .js по-прежнему отвечает 404. Range-запросы поддерживаются, так что перемотка видео работает. Текст сжимается в gzip, большие файлы стримятся.

С флагом -m он читает ещё и markdown, по тем же самым правилам: /about находит about.md, если рядом нет about.html, /about.md редиректит на чистый адрес, а папка без index.html открывается своим index.md или README.md вместо списка файлов — так что serv, показанный на проект, показывает его документацию. Расширения GitHub включены, ссылки между документами переписываются на те адреса, по которым сервер их и отдаёт, а блок ```mermaid рисуется диаграммой. Подсветка кода живёт за --features highlight: syntect весит около полутора мегабайт — многовато по умолчанию и нормально по требованию.

Страница 404 и индекс папки — компоненты damask, вкомпилированные в бинарник вместе со стилями, так что работают и без сети. Отрендеренная markdown-страница тоже — с одним исключением: страница с диаграммой mermaid тянет саму библиотеку с CDN, потому что mermaid существует только как браузерная библиотека и аналога на Rust у неё нет.

Rust, MIT. Готовый бинарник под macOS или Linux:

brew install jwo1f/tap/serv

Или сборка из исходников:

cargo install --git https://github.com/JWo1F/serv