{"id":27996635,"url":"https://github.com/nilenso/goose","last_synced_at":"2025-05-08T21:47:36.897Z","repository":{"id":37762294,"uuid":"478852266","full_name":"nilenso/goose","owner":"nilenso","description":"A powerful background job processing library for Clojure","archived":false,"fork":false,"pushed_at":"2025-02-24T06:49:26.000Z","size":2049,"stargazers_count":296,"open_issues_count":19,"forks_count":11,"subscribers_count":11,"default_branch":"main","last_synced_at":"2025-04-21T14:36:13.676Z","etag":null,"topics":["asynchronous","background-processing","batch-processing","clojure","rabbitmq","redis","scheduler"],"latest_commit_sha":null,"homepage":"https://github.com/nilenso/goose/wiki","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nilenso.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2022-04-07T06:17:54.000Z","updated_at":"2025-04-17T18:26:25.000Z","dependencies_parsed_at":"2024-04-16T12:26:13.236Z","dependency_job_id":null,"html_url":"https://github.com/nilenso/goose","commit_stats":{"total_commits":277,"total_committers":5,"mean_commits":55.4,"dds":"0.10469314079422387","last_synced_commit":"d180dcaebcfec64637a43d3523c6b3dd4628d911"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nilenso%2Fgoose","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nilenso%2Fgoose/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nilenso%2Fgoose/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nilenso%2Fgoose/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nilenso","download_url":"https://codeload.github.com/nilenso/goose/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253154899,"owners_count":21862610,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["asynchronous","background-processing","batch-processing","clojure","rabbitmq","redis","scheduler"],"created_at":"2025-05-08T21:47:36.328Z","updated_at":"2025-05-08T21:47:36.882Z","avatar_url":"https://github.com/nilenso.png","language":"Clojure","funding_links":[],"categories":["Async processing"],"sub_categories":[],"readme":"Goose\n=========\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"logo/goose-round@2x.png\" title=\"Goose\" width=\"360\" height=\"360\" /\u003e\n\u003c/p\u003e\n\n[![Test \u0026 Lint Workflow](https://github.com/nilenso/goose/actions/workflows/fmt_test_lint.yml/badge.svg)](https://github.com/nilenso/goose/actions/workflows/fmt_test_lint.yml)\n[![Clojars Project](https://img.shields.io/clojars/v/com.nilenso/goose.svg)](https://clojars.org/com.nilenso/goose)\n[![cljdoc badge](https://cljdoc.org/badge/com.nilenso/goose)](https://cljdoc.org/d/com.nilenso/goose)\n\n### Simple. Pluggable. Reliable. Extensible. Scalable.\nA powerful background job processing library for Clojure. Goose is named after [LT Nick 'Goose' Bradshaw](https://topgun.fandom.com/wiki/Nick_Bradshaw), the _sidekick_ to [Captain Pete 'Maverick' Mitchell](https://topgun.fandom.com/wiki/Pete_Mitchell) in Top Gun.\n\nAnnouncement 🔈\n---------\nWe are excited to announce that **five companies** are successfully and reliably using Goose in production environments. With the release of a [Jobs Management Console](https://github.com/nilenso/goose/wiki/Console), Goose has reached a level of maturity, offering a feature-rich, stable, and production-ready background job processing solution.\n\nAs we continue addressing user feedback, we are *rescheduling* the **1.0.0 release to February 1st, 2026**. In the meantime, we will ensure API stability, backward compatibility and zero-downtime upgrades.\n\nWe welcome feedback from current and new users, especially if you’d like to request features or suggest changes to the API or implementation before the 1.0.0 release. Please review our [Architecture Decisions](https://github.com/nilenso/goose/tree/main/architecture-decisions) and [Wiki](https://github.com/nilenso/goose/wiki) for more context, and share your thoughts via [GitHub Issues](https://github.com/nilenso/goose/issues/new) or the [Clojurians Slack](https://clojurians.slack.com/channels/goose).\n\nFeatures\n---------\n- *Reliable* - Code/Hardware/Network failure won't cause data loss\n- Native support for RabbitMQ \u0026 Redis queues\n- Pluggable [Message Broker](https://github.com/nilenso/goose/wiki/Guide-to-Message-Broker-Integration) \u0026 [Metrics Backend](https://github.com/nilenso/goose/wiki/Guide-to-Custom-Metrics-Backend)\n- [Jobs management Console](https://github.com/nilenso/goose/wiki/Console)\n- [Scheduled Jobs](https://github.com/nilenso/goose/wiki/Scheduled-Jobs)\n- [Batch Jobs](https://github.com/nilenso/goose/wiki/Batch-Jobs)\n- [Cron Jobs](https://github.com/nilenso/goose/wiki/Cron-Jobs)\n- [Error Handling \u0026 Retries](https://github.com/nilenso/goose/wiki/Error-Handling-\u0026-Retries)\n- Extensible using [Middlewares](https://github.com/nilenso/goose/wiki/Middlewares)\n- Performant and scalable (refer [performance benchmarks](https://github.com/nilenso/goose/tree/main/perf))\n- Concurrency \u0026 Parallelism friendly\n- ... more details in [Goose Wiki](https://github.com/nilenso/goose/wiki)\n\nCompanies using Goose in Production\n---------\n\u003ca href=\"https://aspect-analytics.com/\"\u003e\n  \u003cimg src=\"logo/aspect-analytics.png\" title=\"Aspect Analytics\" width=\"150\" height=\"150\" /\u003e\n\u003c/a\u003e\n\u003ca href=\"https://beecastle.com/\"\u003e\n  \u003cimg src=\"logo/beecastle.png\" title=\"BeeCastle\" width=\"150\" height=\"150\" /\u003e\n\u003c/a\u003e\n\u003ca href=\"https://consolidate.health/\"\u003e\n  \u003cimg src=\"logo/consolidate-health.png\" title=\"Consolidate Health\" width=\"150\" height=\"150\" /\u003e\n\u003c/a\u003e\n\nGetting Started\n---------\n[![Clojars Project](https://img.shields.io/clojars/v/com.nilenso/goose.svg?labelColor=283C67\u0026color=729AD1\u0026style=for-the-badge\u0026logo=clojure\u0026logoColor=fff)](https://clojars.org/com.nilenso/goose)\n\n### Add Goose as a dependency\n```Clojure\n;;; Clojure CLI/deps.edn\ncom.nilenso/goose {:mvn/version \"0.6.0\"}\n\n;;; Leiningen/Boot\n[com.nilenso/goose \"0.6.0\"]\n```\n\n### Client\n```Clojure\n(ns my-app\n  (:require\n    [goose.brokers.rmq.broker :as rmq]\n    [goose.client :as c]))\n\n(defn my-fn\n  [arg1 arg2]\n  (println \"my-fn called with\" arg1 arg2))\n\n(let [rmq-producer (rmq/new-producer rmq/default-opts)\n      ;; Along with RabbitMQ, Goose supports Redis as well.\n      client-opts (assoc c/default-opts :broker rmq-producer)]\n  ;; Supply a fully-qualified function symbol for enqueuing.\n  ;; Args to perform-async are variadic.\n  (c/perform-async client-opts `my-fn \"foo\" :bar)\n  (c/perform-in-sec client-opts 900 `my-fn \"foo\" :bar)\n  ;; When shutting down client...\n  (rmq/close rmq-producer))\n```\n\n### Worker\n```Clojure\n(ns my-worker\n  (:require\n    [goose.brokers.rmq.broker :as rmq]\n    [goose.worker :as w]))\n\n;;; 'my-app' namespace should be resolvable by worker.\n(let [rmq-consumer (rmq/new-consumer rmq/default-opts)\n      ;; Along with RabbitMQ, Goose supports Redis as well.\n      worker-opts (assoc w/default-opts :broker rmq-consumer)\n      worker (w/start worker-opts)]\n  ;; When shutting down worker...\n  (w/stop worker) ; Performs a graceful shutsdown.\n  (rmq/close rmq-consumer))\n```\nRefer to wiki for [Redis queue](https://github.com/nilenso/goose/wiki/Redis), [Jobs management Console](https://github.com/nilenso/goose/wiki/Console), [Batch Jobs](https://github.com/nilenso/goose/wiki/Batch-Jobs), [Cron Jobs](https://github.com/nilenso/goose/wiki/Cron-Jobs), [Error Handling](https://github.com/nilenso/goose/wiki/Error-Handling-\u0026-Retries), [Monitoring](https://github.com/nilenso/goose/wiki/Monitoring-\u0026-Alerting), [Production Readiness](https://github.com/nilenso/goose/wiki/Production-Readiness) and more.\n\nGetting Help\n---------\n[![Get help on Slack](http://img.shields.io/badge/slack-clojurians%20%23goose-F49109?labelColor=3c0c3c\u0026logo=slack\u0026style=for-the-badge)](https://clojurians.slack.com/channels/goose)\n\nPlease [open an issue](https://github.com/nilenso/goose/issues/new) or ping us on [#goose @Clojurians slack](https://clojurians.slack.com/channels/goose).\n\nLicense\n---------\n[![Licence](https://img.shields.io/github/license/Ileriayo/markdown-badges?style=for-the-badge)](./LICENSE)\n\nContributing\n---------\n- As a first step, go through all the [architecture-decisions](https://github.com/nilenso/goose/tree/main/architecture-decisions)\n- Discuss with maintainers on the [issues page](https://github.com/nilenso/goose/issues) or at [#goose @Clojurians slack](https://clojurians.slack.com/channels/goose)\n- See [the contributing guide](https://github.com/nilenso/goose/blob/main/CONTRIBUTING.md) for setup \u0026 guidelines\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnilenso%2Fgoose","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnilenso%2Fgoose","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnilenso%2Fgoose/lists"}