[{"data":1,"prerenderedAt":191},["ShallowReactive",2],{"news":3,"content-query-fjSXU876C3":53},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":5,"title":7,"description":8,"hero":9,"posts":16,"_id":47,"_type":48,"_source":49,"_file":50,"_stem":51,"_extension":52},"/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,31,37,41],{"title":18,"description":19,"to":20,"date":21,"authors":22},"Swift Jobs v1.0","Last year we released v1.0 of swift-jobs, the durable job execution queue. This week we released v1.0 of swift-jobs-valkey, the Valkey driver for swift-jobs. This is the final piece of the durable jobs puzzle.","/news/swift-jobs-1-0","4 May 2026",[23],"Adam",{"title":25,"description":26,"to":27,"date":28,"authors":29},"Our AI Policy","As AI assisted coding becomes more prevalent in open source, we have established a policy for AI usage in contributions to Hummingbird.","/news/ai-policy","14 Apr 2026",[30],"Joannis",{"title":32,"description":33,"to":34,"date":35,"authors":36},"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],{"title":13,"description":38,"to":14,"date":39,"authors":40},"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":42,"description":43,"to":44,"date":45,"authors":46},"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":20,"_dir":51,"_draft":6,"_partial":6,"_locale":5,"title":54,"description":19,"body":55,"_type":186,"_id":187,"_source":49,"_file":188,"_stem":189,"_extension":190},"Swift Job v1.0",{"type":56,"children":57,"toc":180},"root",[58,66,71,78,83,88,94,99,104,110,115,175],{"type":59,"tag":60,"props":61,"children":63},"element","h1",{"id":62},"swift-jobs-v10",[64],{"type":65,"value":18},"text",{"type":59,"tag":67,"props":68,"children":69},"p",{},[70],{"type":65,"value":19},{"type":59,"tag":72,"props":73,"children":75},"h2",{"id":74},"overview",[76],{"type":65,"value":77},"Overview",{"type":59,"tag":67,"props":79,"children":80},{},[81],{"type":65,"value":82},"Swift-jobs is a job execution queue that allows you to process jobs across multiple servers. It has a driver model where the underlying storage for the queue is abstracted behind a protocol. There are two official drivers one using the database Postgres and one using the key value store Valkey. The Postgres driver hit v1.0 last year. This week v1.0 of the Valkey driver was released.",{"type":59,"tag":67,"props":84,"children":85},{},[86],{"type":65,"value":87},"On top of the basic queue we have added features such as retry failed jobs, pausing and resuming of jobs, cancellation of jobs, scheduling jobs based on crontab and middleware to catch queuing, de-queuing, processing and completion of jobs.",{"type":59,"tag":72,"props":89,"children":91},{"id":90},"durable",[92],{"type":65,"value":93},"Durable",{"type":59,"tag":67,"props":95,"children":96},{},[97],{"type":65,"value":98},"We call swift-jobs durable, because it doesn't lose jobs if they fail, or servers crash. If you have a job that triggers a payment you cannot afford for that job to be missed or run twice. Jobs that fail will retry automatically but if a job continues to fail after their maximum retry attempts, they are stored separately for later execution. For instance if a service a job uses is offline the failed jobs will be stored and can be re-queued manually when the service is back online.",{"type":59,"tag":67,"props":100,"children":101},{},[102],{"type":65,"value":103},"Another situation where jobs can be lost is if a server running jobs crashes. Any jobs currently being processed will be orphaned and never completed. Swift-jobs provides a regularly scheduled job that will recognise jobs left in the processing state whose server is no longer running and re-queue them so they can be processed fully.",{"type":59,"tag":72,"props":105,"children":107},{"id":106},"features",[108],{"type":65,"value":109},"Features",{"type":59,"tag":67,"props":111,"children":112},{},[113],{"type":65,"value":114},"The full feature set of swift-jobs includes:",{"type":59,"tag":116,"props":117,"children":118},"ul",{},[119,125,130,135,140,145,150,155,160,165,170],{"type":59,"tag":120,"props":121,"children":122},"li",{},[123],{"type":65,"value":124},"Queue, pause, resume, cancel jobs.",{"type":59,"tag":120,"props":126,"children":127},{},[128],{"type":65,"value":129},"Queue delayed jobs.",{"type":59,"tag":120,"props":131,"children":132},{},[133],{"type":65,"value":134},"Job processor executing jobs across multiple servers.",{"type":59,"tag":120,"props":136,"children":137},{},[138],{"type":65,"value":139},"Graceful handling of SIGTERM, SIGINT signals.",{"type":59,"tag":120,"props":141,"children":142},{},[143],{"type":65,"value":144},"Job scheduler for queuing of jobs at regular intervals. Schedules are flexible enough to support most crontab setups.",{"type":59,"tag":120,"props":146,"children":147},{},[148],{"type":65,"value":149},"Customizable retry strategies, with a default exponential jitter implementation.",{"type":59,"tag":120,"props":151,"children":152},{},[153],{"type":65,"value":154},"Timeouts to catch jobs that have hung.",{"type":59,"tag":120,"props":156,"children":157},{},[158],{"type":65,"value":159},"Middleware to catch job queuing, dequeuing, handling and completion.",{"type":59,"tag":120,"props":161,"children":162},{},[163],{"type":65,"value":164},"Support for metrics and tracing via middleware.",{"type":59,"tag":120,"props":166,"children":167},{},[168],{"type":65,"value":169},"Customizable storage of failed, completed and cancelled jobs with automatic cleanup available via the job scheduler.",{"type":59,"tag":120,"props":171,"children":172},{},[173],{"type":65,"value":174},"Re-queuing of jobs that never completed because a server crashed.",{"type":59,"tag":67,"props":176,"children":177},{},[178],{"type":65,"value":179},"Swift jobs allows to you offload work your HTTP server would otherwise be doing but it can also be used for much more than that.",{"title":5,"searchDepth":181,"depth":181,"links":182},2,[183,184,185],{"id":74,"depth":181,"text":77},{"id":90,"depth":181,"text":93},{"id":106,"depth":181,"text":109},"markdown","content:news:swift-jobs-1-0.md","news/swift-jobs-1-0.md","news/swift-jobs-1-0","md",1777907829787]