HAPPYGEMINI =========== HappyGemini is my Gemini protocol server written in C# and .NET 10. It grew out of the same general idea as HappyGopher: build a small, understandable server for an old or alternative Internet protocol without dragging in a giant framework. HappyGemini runs on top of JoyfulReaperLib's reusable TCP server and listens on the standard Gemini port, TCP 1965. CURRENT FEATURES - TLS 1.2 and TLS 1.3 - SNI certificate selection - IPv4/IPv6 dual-stack support - Multiple virtual hosts - Static file serving - Strict Gemini request validation - Gemini status and response handling - Dynamic pages through IGeminiPage - Pages scoped to specific virtual hosts - External plugins loaded at startup Dynamic pages can be compiled directly into the server or supplied by plugins. Plugins have their own assembly loading context and can add Gemini pages without requiring HappyGemini itself to know anything about the application using them. This has already proven useful for SmolSearch, which provides its Gemini search interface as a HappyGemini plugin rather than baking search functionality into the server. HappyGemini intentionally remains fairly small. It is not trying to become Apache for Geminispace. CURRENT STATUS HappyGemini is functional and under active development. It currently serves my Gemini capsule at: gemini://gemini.kgivler.com/ There is still plenty I can add, but the basic server, TLS, virtual hosting, static content, dynamic page, and plugin infrastructure are all working. TECHNOLOGY C# ..NET 10 JoyfulReaperLib.TcpServer TLS Gemini Protocol SOURCE https://github.com/JoyfulReaper/HappyGemini LICENSE MIT License .