[{"data":1,"prerenderedAt":335},["ShallowReactive",2],{"news":3,"content-query-oIplngGQum":40},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":5,"title":7,"description":8,"hero":9,"posts":16,"_id":34,"_type":35,"_source":36,"_file":37,"_stem":38,"_extension":39},"/news","",false,"Hummingbird - News","Hummingbird 2 is a cross-platform web server framework for Swift.",{"title":10,"description":11,"headline":12},"News","Latest news and developments from Hummingbird.",{"label":13,"to":14,"icon":15},"Hummingbird 2 is out!","/news/hummingbird-2","i-heroicons-arrow-top-right-on-square-20-solid",[17,24,28],{"title":18,"description":19,"to":20,"date":21,"authors":22},"We're now on GitHub Sponsors","Hummingbird is on GitHub Sponsors. Help us to continue maintaining and improving the framework by sponsoring development.","/news/github-sponsors","6 Apr 2026",[23],"Adam",{"title":13,"description":25,"to":14,"date":26,"authors":27},"Hummingbird 2 has been released. The framework has been completely rebuilt from scratch with Swift concurrency taking a central role.","11 Sep 2024",[23],{"title":29,"description":30,"to":31,"date":32,"authors":33},"Hummingbird 2 Release Candidate","The Hummingbird 2 Release Candidate is now available, marking the final stages before the official release.","/news/hummingbird-2-release-candidate","1 July 2024",[23],"content:news.yml","yaml","content","news.yml","news","yml",{"_path":31,"_dir":38,"_draft":6,"_partial":6,"_locale":5,"title":41,"description":30,"body":42,"_type":330,"_id":331,"_source":36,"_file":332,"_stem":333,"_extension":334},"Hummingbird 2 release candidate",{"type":43,"children":44,"toc":323},"root",[45,53,58,65,70,75,80,85,91,107,173,178,267,273,278,283,289,309],{"type":46,"tag":47,"props":48,"children":50},"element","h1",{"id":49},"hummingbird-2-release-candidate",[51],{"type":52,"value":41},"text",{"type":46,"tag":54,"props":55,"children":56},"p",{},[57],{"type":52,"value":30},{"type":46,"tag":59,"props":60,"children":62},"h2",{"id":61},"overview",[63],{"type":52,"value":64},"Overview",{"type":46,"tag":54,"props":66,"children":67},{},[68],{"type":52,"value":69},"We started the path to Hummingbird v2.0 in May 2023. I wrote a small experimental server using SwiftNIO's (then new) communication layer between their own EventLoop based APIs and Swift concurrency. A lot of what was learned from this project was used in the development of Hummingbird 2.",{"type":46,"tag":54,"props":71,"children":72},{},[73],{"type":52,"value":74},"Initially we wanted to release an interim version that included some of the features we experimented with earlier. As time went on, we realized it would be much better to do a release including our full plans for the framework. By January we had what we considered our alpha release.",{"type":46,"tag":54,"props":76,"children":77},{},[78],{"type":52,"value":79},"While this release was pretty much feature complete, it needed some cleaning up. Since then we have been refining our public APIs and fixing bugs. The release candidate is the result of this work.",{"type":46,"tag":54,"props":81,"children":82},{},[83],{"type":52,"value":84},"Hummingbird 2 is a complete re-write, based around structured concurrency. We have access to the many new features of Swift concurrency including AsyncSequences, task cancellation, task locals. The code is much easier to maintain as structured concurrency provides better clarity over task lifetimes. And this maintainability and clarity is also transferred to the backends you write with Hummingbird 2.",{"type":46,"tag":59,"props":86,"children":88},{"id":87},"features",[89],{"type":52,"value":90},"Features",{"type":46,"tag":54,"props":92,"children":93},{},[94,96,105],{"type":52,"value":95},"Hummingbird 2 comes with a repository full of pre-built ",{"type":46,"tag":97,"props":98,"children":102},"a",{"href":99,"rel":100},"https://github.com/hummingbird-project/hummingbird-examples",[101],"nofollow",[103],{"type":52,"value":104},"examples",{"type":52,"value":106},", including working with various different databases, JWT, AWS Lambda, Fluent, HTTP proxies, Passkeys and more.",{"type":46,"tag":108,"props":109,"children":110},"ul",{},[111,117,122,145,159],{"type":46,"tag":112,"props":113,"children":114},"li",{},[115],{"type":52,"value":116},"Support for a flexible HTTP layer. With official support for HTTP1.1/TLS, HTTP2 and AWS Lambda",{"type":46,"tag":112,"props":118,"children":119},{},[120],{"type":52,"value":121},"Two new routers. A traditional but extremely optimised trie based router and a result builder based routing system.",{"type":46,"tag":112,"props":123,"children":124},{},[125,127],{"type":52,"value":126},"Pre-built middleware for your routes including:\n",{"type":46,"tag":108,"props":128,"children":129},{},[130,135,140],{"type":46,"tag":112,"props":131,"children":132},{},[133],{"type":52,"value":134},"File Serving (from the File System or externally)",{"type":46,"tag":112,"props":136,"children":137},{},[138],{"type":52,"value":139},"CORS support",{"type":46,"tag":112,"props":141,"children":142},{},[143],{"type":52,"value":144},"Observability (logging, metrics and tracing)",{"type":46,"tag":112,"props":146,"children":147},{},[148,150,157],{"type":52,"value":149},"Integration with ",{"type":46,"tag":97,"props":151,"children":154},{"href":152,"rel":153},"https://github.com/swift-server/swift-service-lifecycle",[101],[155],{"type":52,"value":156},"Swift Service Lifecycle",{"type":52,"value":158},".",{"type":46,"tag":112,"props":160,"children":161},{},[162,164,171],{"type":52,"value":163},"Uses new ",{"type":46,"tag":97,"props":165,"children":168},{"href":166,"rel":167},"https://github.com/apple/swift-http-types",[101],[169],{"type":52,"value":170},"HTTP types",{"type":52,"value":172}," from Apple.",{"type":46,"tag":54,"props":174,"children":175},{},[176],{"type":52,"value":177},"Additional packages provide more features including",{"type":46,"tag":108,"props":179,"children":180},{},[181,195,209,221,233,255],{"type":46,"tag":112,"props":182,"children":183},{},[184,186,193],{"type":52,"value":185},"Support for ",{"type":46,"tag":97,"props":187,"children":190},{"href":188,"rel":189},"https://github.com/hummingbird-project/hummingbird-websocket",[101],[191],{"type":52,"value":192},"WebSocket",{"type":52,"value":194}," clients and servers, with all new structured concurrency APIs and support for compression.",{"type":46,"tag":112,"props":196,"children":197},{},[198,200,207],{"type":52,"value":199},"An updated ",{"type":46,"tag":97,"props":201,"children":204},{"href":202,"rel":203},"https://github.com/hummingbird-project/hummingbird-auth",[101],[205],{"type":52,"value":206},"authentication framework",{"type":52,"value":208},", leveraging request contexts for passing authentication states into routes.",{"type":46,"tag":112,"props":210,"children":211},{},[212,219],{"type":46,"tag":97,"props":213,"children":216},{"href":214,"rel":215},"https://github.com/hummingbird-project/swift-jobs",[101],[217],{"type":52,"value":218},"Jobs",{"type":52,"value":220},", a Job Queue framework used to persist and offload work to other systems.",{"type":46,"tag":112,"props":222,"children":223},{},[224,231],{"type":46,"tag":97,"props":225,"children":228},{"href":226,"rel":227},"https://github.com/hummingbird-project/swift-mustache",[101],[229],{"type":52,"value":230},"Mustache templating",{"type":52,"value":232}," support for generating dynamic content.",{"type":46,"tag":112,"props":234,"children":235},{},[236,238,245,247,254],{"type":52,"value":237},"Integration with common packages like ",{"type":46,"tag":97,"props":239,"children":242},{"href":240,"rel":241},"https://github.com/vapor/fluent-kit",[101],[243],{"type":52,"value":244},"FluentKit",{"type":52,"value":246}," and ",{"type":46,"tag":97,"props":248,"children":251},{"href":249,"rel":250},"https://github.com/swift-server/redistack",[101],[252],{"type":52,"value":253},"RediStack",{"type":52,"value":158},{"type":46,"tag":112,"props":256,"children":257},{},[258,265],{"type":46,"tag":97,"props":259,"children":262},{"href":260,"rel":261},"https://github.com/hummingbird-project/hummingbird-compression",[101],[263],{"type":52,"value":264},"HTTP compression/decompression",{"type":52,"value":266}," support through middleware.",{"type":46,"tag":59,"props":268,"children":270},{"id":269},"flexible",[271],{"type":52,"value":272},"Flexible",{"type":46,"tag":54,"props":274,"children":275},{},[276],{"type":52,"value":277},"Hummingbird is still the flexible framework you know, more so now than ever before. Add your own middleware to edit requests and responses as they pass through the router. Use your own type to define the contextual data that is passed through the router alongside the HTTP request. If you don't like, or need a new feature, you can replace even the router or transport implementation with your own.",{"type":46,"tag":54,"props":279,"children":280},{},[281],{"type":52,"value":282},"Hummingbird is a feature rich, robust and performant solution, ready to implement your next server application!",{"type":46,"tag":59,"props":284,"children":286},{"id":285},"try-it",[287],{"type":52,"value":288},"Try it",{"type":46,"tag":54,"props":290,"children":291},{},[292,294,301,303,308],{"type":52,"value":293},"You can follow the instructions on the ",{"type":46,"tag":97,"props":295,"children":298},{"href":296,"rel":297},"https://docs.hummingbird.codes/2.0/documentation/hummingbird/gettingstarted",[101],[299],{"type":52,"value":300},"getting started",{"type":52,"value":302}," help page, or look at one of our many ",{"type":46,"tag":97,"props":304,"children":306},{"href":99,"rel":305},[101],[307],{"type":52,"value":104},{"type":52,"value":158},{"type":46,"tag":54,"props":310,"children":311},{},[312,314,321],{"type":52,"value":313},"Also consider visiting the community's ",{"type":46,"tag":97,"props":315,"children":318},{"href":316,"rel":317},"https://discord.gg/4twfgYqdat",[101],[319],{"type":52,"value":320},"Discord",{"type":52,"value":322}," server.",{"title":5,"searchDepth":324,"depth":324,"links":325},2,[326,327,328,329],{"id":61,"depth":324,"text":64},{"id":87,"depth":324,"text":90},{"id":269,"depth":324,"text":272},{"id":285,"depth":324,"text":288},"markdown","content:news:hummingbird-2-release-candidate.md","news/hummingbird-2-release-candidate.md","news/hummingbird-2-release-candidate","md",1775478208861]