{"id":19783086,"url":"https://github.com/quirrel-dev/owl","last_synced_at":"2025-04-12T21:25:12.534Z","repository":{"id":40646746,"uuid":"305943843","full_name":"quirrel-dev/owl","owner":"quirrel-dev","description":"A high-performance, Redis-backed job queueing library originally built for Quirrel. Has an in-memory mode for development use cases.","archived":false,"fork":false,"pushed_at":"2024-10-23T07:40:53.000Z","size":897,"stargazers_count":97,"open_issues_count":19,"forks_count":11,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-10-23T16:10:15.632Z","etag":null,"topics":["queue","quirrel","redis","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/quirrel-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"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,"publiccode":null,"codemeta":null}},"created_at":"2020-10-21T07:32:36.000Z","updated_at":"2024-10-06T17:25:04.000Z","dependencies_parsed_at":"2023-12-30T12:27:29.226Z","dependency_job_id":"f6e12650-514e-49b7-b31c-044ae4be0324","html_url":"https://github.com/quirrel-dev/owl","commit_stats":{"total_commits":365,"total_committers":5,"mean_commits":73.0,"dds":0.3342465753424657,"last_synced_commit":"f25b3952705c7e9bf0bd6b50f183b0cc366cb1c7"},"previous_names":[],"tags_count":30,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quirrel-dev%2Fowl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quirrel-dev%2Fowl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quirrel-dev%2Fowl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quirrel-dev%2Fowl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/quirrel-dev","download_url":"https://codeload.github.com/quirrel-dev/owl/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248633236,"owners_count":21136836,"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":["queue","quirrel","redis","typescript"],"created_at":"2024-11-12T06:07:15.687Z","updated_at":"2025-04-12T21:25:12.509Z","avatar_url":"https://github.com/quirrel-dev.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Owl 🦉\n\n- [Getting Started](#getting-started)\n- [What's special about Owl?](#whats-special-about-owl)\n- [Quirrel 🐿](https://github.com/quirrel-dev/quirrel)\n\nOwl is a high-performance, redis-backed job queueing library originally built for [Quirrel 🐿](https://github.com/quirrel-dev/quirrel).\n\n## Getting Started\n\n```\nnpm install @quirrel/owl\n```\n\n```ts\nimport Owl from \"@quirrel/owl\"\nimport Redis from \"ioredis\"\n\nconst owl = new Owl(() =\u003e new Redis())\n\nconst worker = owl.createWorker(async (job, ackDescriptor) =\u003e {\n  console.log(`${job.queue}: Received job #${job.id} with payload ${job.payload}.`);\n  // ...\n\n  await worker.acknowledger.acknowledge(ackDescriptor);\n})\n\nawait worker.start();\n\nconst producer = owl.createProducer()\n\nawait producer.enqueue({\n  queue: \"email\",\n  id: \"some-random-id\",\n  payload: \"...\",\n  runAt: new Date(Date.now() + 1000),\n  ...\n})\n```\n\n\u003e While I originally created Owl for use in Quirrel, I decided to publish\n\u003e it as its own project so people can use it for their own purposes.\n\u003e If you want to use Owl in your own project and need some more documentation:\n\u003e Please go ahead and create an issue for it :D\n\n## What's special about Owl?\n\nOwl ...\n\n- ... doesn't require you to specify queues upfront\n- ... is optimised for short-running jobs\n- ... allows for totally custom schedules\n- ... is written in TypeScript\n- ... has a low-overhead activity stream (based on Redis Pub/Sub)\n- ... allows fast queries about currently scheduled jobs\n- ... has an persisted mode, but also an in-memory one for quick development\n\n## Owl's Architecture\n\n![Owl Architecture](./Owl%20Architecture.svg)\n\nA *job* consists of a *Queue*, an *ID* and a *payload*.\n\nThey are *scheduled* for later execution by the *producer*.\n\nOnce the time has come for a job to be executed, a *worker* will *request* it.\nThis will move it into a list currently *processing* jobs.\nAftere execution is finished, the worker *acknowledges* it\nand (in case of repeated jobs) *re-enqueues* it.\n\n## Trivia\n\n### Why *Owl*?\n\nIt's well-known that Squirrels 🐿 and Owls 🦉 are good friends.\nOwls are reliable, mostly down-to-earth and know how to deal with time.\nThus, their skillset makes them excellent queue keepers.\n\n### Compatibility with Redis Cluster\n\nAt the moment, Owl does not aim to be compatible with Redis Cluster.\nThis may change in the future, though.\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/Skn0tt\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/14912729?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eSimon Knott\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/quirrel-dev/Owl/commits?author=Skn0tt\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#ideas-Skn0tt\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/DuckNrOne\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/45163503?v=4?s=100\" width=\"100px;\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAntony\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/quirrel-dev/Owl/commits?author=DuckNrOne\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/quirrel-dev/Owl/issues?q=author%3ADuckNrOne\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquirrel-dev%2Fowl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fquirrel-dev%2Fowl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquirrel-dev%2Fowl/lists"}