{"id":13526763,"url":"https://github.com/bee-queue/arena","last_synced_at":"2025-05-14T16:09:29.745Z","repository":{"id":21689715,"uuid":"90908305","full_name":"bee-queue/arena","owner":"bee-queue","description":"An interactive UI dashboard for Bee, Bull and BullMQ packages","archived":false,"fork":false,"pushed_at":"2024-06-13T04:05:42.000Z","size":3622,"stargazers_count":876,"open_issues_count":75,"forks_count":232,"subscribers_count":17,"default_branch":"master","last_synced_at":"2025-04-10T18:10:24.928Z","etag":null,"topics":["bee-queue","bull","bullmq","dashboard","job-queue","redis-queue"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/bee-queue.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-05-10T21:05:56.000Z","updated_at":"2025-04-05T17:18:58.000Z","dependencies_parsed_at":"2023-01-16T22:00:31.220Z","dependency_job_id":"d9bb1cad-9bac-41b5-95e1-e03965b4dd7f","html_url":"https://github.com/bee-queue/arena","commit_stats":{"total_commits":510,"total_committers":69,"mean_commits":7.391304347826087,"dds":0.8215686274509804,"last_synced_commit":"d87df774ad19f2afb3ab9c091f9d5d0c95b6ad3e"},"previous_names":["mixmaxhq/arena"],"tags_count":108,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bee-queue%2Farena","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bee-queue%2Farena/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bee-queue%2Farena/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bee-queue%2Farena/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bee-queue","download_url":"https://codeload.github.com/bee-queue/arena/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248456374,"owners_count":21106602,"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":["bee-queue","bull","bullmq","dashboard","job-queue","redis-queue"],"created_at":"2024-08-01T06:01:34.390Z","updated_at":"2025-04-13T02:00:19.680Z","avatar_url":"https://github.com/bee-queue.png","language":"JavaScript","readme":"# Arena\n\n[![NPM](https://img.shields.io/npm/v/bull-arena.svg)](https://www.npmjs.com/package/bull-arena) [![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://github.com/prettier/prettier) [![NPM downloads](https://img.shields.io/npm/dm/bull-arena)](https://www.npmjs.com/package/bull-arena) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\nAn intuitive Web GUI for [Bee Queue](https://github.com/bee-queue/bee-queue), [Bull](https://github.com/optimalbits/bull) and [BullMQ](https://github.com/taskforcesh/bullmq). Built on Express so you can run Arena standalone, or mounted in another app as middleware.\n\nFor a quick introduction to the motivations for creating Arena, read _[Interactively monitoring Bull, a Redis-backed job queue for Node](https://www.mixmax.com/blog/introducing-bull-arena)_.\n\n### Screenshots\n\n[![](screenshots/screen1_sm.png)](screenshots/screen1.png) [![](screenshots/screen2_sm.png)](screenshots/screen2.png) [![](screenshots/screen3_sm.png)](screenshots/screen3.png)\n\n### Features\n\n- Check the health of a queue and its jobs at a glance\n- Paginate and filter jobs by their state\n- View details and stacktraces of jobs with permalinks\n- Restart and retry jobs with one click\n\n### Usage\n\nArena accepts the following options:\n\n```js\nconst Arena = require('bull-arena');\n\n// Mandatory import of queue library.\nconst Bee = require('bee-queue');\n\nArena({\n  // All queue libraries used must be explicitly imported and included.\n  Bee,\n\n  // Provide a `Bull` option when using bull, similar to the `Bee` option above.\n\n  queues: [\n    {\n      // Required for each queue definition.\n      name: 'name_of_my_queue',\n\n      // User-readable display name for the host. Required.\n      hostId: 'Queue Server 1',\n\n      // Queue type (Bull or Bee - default Bull).\n      type: 'bee',\n\n      // Queue key prefix. Defaults to \"bq\" for Bee and \"bull\" for Bull.\n      prefix: 'foo',\n    },\n  ],\n\n  // Optionally include your own stylesheet\n  customCssPath: 'https://example.com/custom-arena-styles.css',\n\n  // Optionally include your own script\n  customJsPath: 'https://example.com/custom-arena-js.js',\n});\n```\n\nThe required `name` and `hostId` in each queue object have to be present in each queue object. Additional keys can be present in them, to configure the redis client itself.\n\nThe three ways in which you can configure the client are:\n\n#### 1. port/host\n\n```jsonc\n// In a queue object.\n{\n  // Hostname or IP. Required.\n  \"host\": \"127.0.0.1\",\n\n  // Bound port. Optional, default: 6379.\n  \"port\": 6379,\n\n  // Optional, to issue a redis AUTH command.\n  \"password\": \"hello\",\n\n  // Optional; default 0. Most of the time, you'll leave this absent.\n  \"db\": 1\n}\n```\n\n#### 2. URL\n\nYou can also provide a `url` field instead of `host`, `port`, `db` and `password`.\n\n```js\n{\n  \"url\": \"[redis:]//[[user][:password@]][host][:port][/db-number][?db=db-number[\u0026password=bar[\u0026option=value]]]\"\n}\n```\n\n#### 3. Redis client options\n\nArena is compatible with both Bee and Bull.\nIf you need to pass some specific configuration options directly to the redis client library your queue uses, you can also do so.\n\nBee uses node [redis](https://www.npmjs.com/package/redis) client, Bull uses [ioredis](https://www.npmjs.com/package/ioredis) client.\nThese clients expect different configurations options.\n\n```js\n{\n  \"redis\": {}\n}\n```\n\nFor Bee, the `redis` key will be directly passed to [`redis.createClient`](https://github.com/NodeRedis/node_redis#rediscreateclient), as explained [here](https://github.com/bee-queue/bee-queue#settings).\n\nFor Bull, the `redis` key will be directly passed to [`ioredis`](https://github.com/luin/ioredis/blob/master/API.md#new_Redis_new), as explained [here](https://github.com/OptimalBits/bull/blob/master/REFERENCE.md#queue). To use this to connect to a Sentinel cluster, see [here](https://github.com/luin/ioredis/blob/master/README.md#sentinel).\n\n#### Custom configuration file\n\nTo specify a custom configuration file location, see [Running Arena as a node module](#running-arena-as-a-node-module).\n\n_Note that if you happen to use Amazon Web Services' ElastiCache as your Redis host, check out http://mixmax.com/blog/bull-queue-aws-autodiscovery_\n\n#### Running Arena as a node module\n\nSee the [Docker image](#docker-image) section or the [docker-arena] repository for information about running this standalone.\n\nNote that because Arena is implemented using `async`/`await`, Arena only currently supports Node `\u003e=7.6`.\n\nUsing Arena as a node module has potential benefits:\n\n- Arena can be configured to use any method of server/queue configuration desired\n  - for example, fetching available redis queues from an AWS instance on server start\n  - or even just plain old reading from environment variables\n- Arena can be mounted in other express apps as middleware\n\nUsage:\n\nIn project folder:\n\n```shell\n$ npm install bull-arena\n```\n\nIn router.js:\n\n```js\nconst Arena = require('bull-arena');\n\nconst express = require('express');\nconst router = express.Router();\n\nconst arena = Arena({\n  // Include a reference to the bee-queue or bull libraries, depending on the library being used.\n\n  queues: [\n    {\n      // First queue configuration\n    },\n    {\n      // Second queue configuration\n    },\n    {\n      // And so on...\n    },\n  ],\n});\n\nrouter.use('/', arena);\n```\n\n`Arena` takes two arguments. The first, `config`, is a plain object containing the [queue configuration, flow configuration (just for bullmq for now) and other optional parameters](#usage). The second, `listenOpts`, is an object that can contain the following optional parameters:\n\n- `port` - specify custom port to listen on (default: 4567)\n- `host` - specify custom ip to listen on (default: '0.0.0.0')\n- `basePath` - specify custom path to mount server on (default: '/')\n- `disableListen` - don't let the server listen (useful when mounting Arena as a sub-app of another Express app) (default: false)\n- `useCdn` - set false to use the bundled js and css files (default: true)\n- `customCssPath` - an URL to an external stylesheet (default: null)\n\n##### Example config (for bull)\n\n```js\nimport Arena from 'bull-arena';\nimport Bull from 'bull';\n\nconst arenaConfig = Arena({\n  Bull,\n  queues: [\n    {\n      type: 'bull',\n\n      // Name of the bull queue, this name must match up exactly with what you've defined in bull.\n      name: \"Notification_Emailer\",\n\n      // Hostname or queue prefix, you can put whatever you want.\n      hostId: \"MyAwesomeQueues\",\n\n      // Redis auth.\n      redis: {\n        port: /* Your redis port */,\n        host: /* Your redis host domain*/,\n        password: /* Your redis password */,\n      },\n    },\n  ],\n\n  // Optionally include your own stylesheet\n  customCssPath: 'https://example.com/custom-arena-styles.css',\n\n  // Optionally include your own script\n  customJsPath: 'https://example.com/custom-arena-js.js',\n},\n{\n  // Make the arena dashboard become available at {my-site.com}/arena.\n  basePath: '/arena',\n\n  // Let express handle the listening.\n  disableListen: true,\n});\n\n// Make arena's resources (js/css deps) available at the base app route\napp.use('/', arenaConfig);\n```\n\n(Credit to [tim-soft](https://github.com/tim-soft) for the example config.)\n\n##### Example config (for bullmq)\n\n```js\nimport Arena from 'bull-arena';\nimport { Queue, FlowProducer } from \"bullmq\";\n\nconst arenaConfig = Arena({\n  BullMQ: Queue,\n  FlowBullMQ: FlowProducer,\n  queues: [\n    {\n      type: 'bullmq',\n\n      // Name of the bullmq queue, this name must match up exactly with what you've defined in bullmq.\n      name: \"testQueue\",\n\n      // Hostname or queue prefix, you can put whatever you want.\n      hostId: \"worker\",\n\n      // Redis auth.\n      redis: {\n        port: /* Your redis port */,\n        host: /* Your redis host domain*/,\n        password: /* Your redis password */,\n      },\n    },\n  ],\n\n  flows: [\n    {\n      type: 'bullmq',\n\n      // Name of the bullmq flow connection, this name helps to identify different connections.\n      name: \"testConnection\",\n\n      // Hostname, you can put whatever you want.\n      hostId: \"Flow\",\n\n      // Redis auth.\n      redis: {\n        port: /* Your redis port */,\n        host: /* Your redis host domain*/,\n        password: /* Your redis password */,\n      },\n    },\n  ],\n\n  // Optionally include your own stylesheet\n  customCssPath: 'https://example.com/custom-arena-styles.css',\n\n  // Optionally include your own script\n  customJsPath: 'https://example.com/custom-arena-js.js',\n},\n{\n  // Make the arena dashboard become available at {my-site.com}/arena.\n  basePath: '/arena',\n\n  // Let express handle the listening.\n  disableListen: true,\n});\n\n// Make arena's resources (js/css deps) available at the base app route\napp.use('/', arenaConfig);\n```\n\n### Bee Queue support\n\nArena is dual-compatible with Bull 3.x and Bee-Queue 1.x. To add a Bee queue to the Arena dashboard, include the `type: 'bee'` property with an individual queue's configuration object.\n\n### BullMQ Queue support\n\nArena has added preliminary support for BullMQ post 3.4.x version. To add a BullMQ queue to the Arena dashboard, include the `type: 'bullmq'` property with an individual queue's configuration object.\n\n### Docker image\n\nYou can `docker pull` Arena from [Docker Hub](https://hub.docker.com/r/mixmaxhq/arena/).\n\nPlease see the [docker-arena] repository for details.\n\n### Official UIs\n\n- [Taskforce](https://taskforce.sh) for Bull and Bullmq\n\n### Contributing\n\nSee [contributing guidelines](CONTRIBUTING.md) and [an example](example/README.md).\n\n### License\n\nThe [MIT License](LICENSE).\n\n[docker-arena]: https://github.com/bee-queue/docker-arena\n","funding_links":[],"categories":["JavaScript","Repository"],"sub_categories":["Job Queues"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbee-queue%2Farena","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbee-queue%2Farena","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbee-queue%2Farena/lists"}