# Suave 3

- URL: <https://krymtkts.github.io/posts/2025-12-14-suave-3.html.md>
- Date: 2025-12-14
- Author: krymtkts
- Tags: dotnet, fsharp

[krymtkts/blog-fable](https://github.com/krymtkts/blog-fable) は開発時の preview や snapshot testing の web server に [Suave](https://github.com/SuaveIO/suave) を使っている。
Suave は F# で書かれた軽量な Web server で、 2023 年に出た [2.7.0-beta1](https://www.nuget.org/packages/Suave/2.7.0-beta1) 以降リリースは止まっていた。開発はポツポツ進んでいたみたいなのだけど。
でもつい先日 dev server での preview ができなくなったので調べてみたら、なんと [2025-11 頃から 3 系 preview が NuGet で公開](https://www.nuget.org/packages/Suave/3.1.0-beta)され出してた。
2025-12-11 の時点で preview でない [3.2.0](https://www.nuget.org/packages/Suave/3.2.0) まで来てる。

活動再開を目にできるなんて実に喜ばしいことだ。
[Bulma](https://github.com/jgthms/bulma) の時もそうだったが、そもそも活動再開でもなくてそういう開発スタイルとスパンなのかも知れんな。
何にせよ利用者としては嬉しい限り。

Suave の 2 -> 3 ではごっそり書き換えが必要なレベルの設計変更はなかった。
パフォーマンス最適化がメインで、内部で [`Task`](https://learn.microsoft.com/en-us/dotnet/fsharp/language-reference/task-expressions) がより多く使われるようになってる。
他は [`ArrayPool`](https://learn.microsoft.com/en-us/dotnet/api/system.buffers.arraypool-1?view=net-10.0), [`Memory`](https://learn.microsoft.com/en-us/dotnet/api/system.memory-1?view=net-10.0) とかね。

あと今のところは `Logging` module がなくなって `logger` が使えなくなってた。
`Logging` がなくなったのは読み込まれたファイルのログが出なくなって dev server 的には地味に痛いのだが、ひょっとしたら別の方法で実現できたり復活の可能性もあるので、経過観測する。

blog-fable で一番影響があったのは一部 signature の変更かな。でも build error を直すだけ。
`socket` CE の中で使ってた `use` が使えなくなったのと `defaultMimeTypesMap` の signature 変更あたりが細かな修正点。
これら blog-fable で影響のあった点を [#422](https://github.com/krymtkts/blog-fable/pull/422) でいい感じに対応した。
実測した訳では無いのと target framework が `net10.0` になってるのもあるだろうが、体感かなり速くなった気がする。

久しぶりに dev server 周りいじったので、この機会に他にも細かな改善などしていっていいかも知れんな。
その間 [krymtkts/pocof](https://github.com/krymtkts/blog-fable) の方が放置されてしまうが、
 blog-fable の修正は大した事ない物が多いからそんなに時間もかからないだろう。
