base on 🚀🚀🚀A faster, better and more stable Redis desktop manager [GUI client], compatible with Linux, Windows, Mac. # Another Redis Desktop Manager <img align="right" width="110" src="https://cdn.jsdelivr.net/gh/qishibo/img/ardm/202411081958294.png"> > 🚀🚀🚀 A faster, better and more stable redis desktop manager, compatible with Linux, windows, mac. What's more, it won't crash when loading massive keys. <br> [![LICENSE](https://img.shields.io/github/license/qishibo/AnotherRedisDesktopManager)](LICENSE) [![Release](https://img.shields.io/github/release/qishibo/AnotherRedisDesktopManager.svg)](https://github.com/qishibo/AnotherRedisDesktopManager/releases) [![Download](https://img.shields.io/github/downloads/qishibo/AnotherRedisDesktopManager/total)](https://github.com/qishibo/AnotherRedisDesktopManager/releases) [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fqishibo%2FAnotherRedisDesktopManager.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Fqishibo%2FAnotherRedisDesktopManager?ref=badge_shield) <a href="https://www.producthunt.com/posts/another-redis-desktop-manager?utm_source=badge-featured"><img src="https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=340552&theme=dark" height="20" width="93" /></a> [![STARS](https://img.shields.io/github/stars/qishibo/AnotherRedisDesktopManager)](https://github.com/qishibo/AnotherRedisDesktopManager/) [简体中文](README.zh-CN.md) ## Windows - Download latest [exe](https://github.com/qishibo/AnotherRedisDesktopManager/releases) package from release \[or [gitee](https://gitee.com/qishibo/AnotherRedisDesktopManager/releases) in China\], double click to install. - Or by **chocolatey**: `choco install another-redis-desktop-manager` - Or by **winget**: `winget install qishibo.AnotherRedisDesktopManager` - Or **sponsor** by win store, It's not free, and I will be very grateful to you. <br/><a href="https://apps.microsoft.com/store/detail/9MTD84X0JFHZ?launch=true&cid=github&mode=mini"><img src="https://cdn.jsdelivr.net/gh/qishibo/img/microsoft-store.png" height="58" width="180" alt="get from microsoft store"></a> ## Linux - Download latest [AppImage](https://github.com/qishibo/AnotherRedisDesktopManager/releases) package from release \[or [gitee](https://gitee.com/qishibo/AnotherRedisDesktopManager/releases) in China\], `chmod +x`, double click to run. - Or by **snap**: `sudo snap install another-redis-desktop-manager` **Tips**: If permission denied when selecting private key, run `sudo snap connect another-redis-desktop-manager:ssh-keys` to give access to ~/.ssh folder. <br/>[![Get it from the Snap Store](https://cdn.jsdelivr.net/gh/qishibo/img/ardm/202411080845423.svg)](https://snapcraft.io/another-redis-desktop-manager) ## Mac > If you can't open it after installation by brew or dmg, exec the following command then reopen:<br>`sudo xattr -rd com.apple.quarantine /Applications/Another\ Redis\ Desktop\ Manager.app` - Download latest [dmg](https://github.com/qishibo/AnotherRedisDesktopManager/releases) package from release \[or [gitee](https://gitee.com/qishibo/AnotherRedisDesktopManager/releases) in China\], double click to install. - Or by **brew**: `brew install --cask another-redis-desktop-manager` - Or **sponsor** by app store, It's not free, and I will be very grateful to you. <br/>[![get from app store](https://cdn.jsdelivr.net/gh/qishibo/img/avail_app_store180.svg)](https://apps.apple.com/app/id1516451072) ## Enjoy! ![redis status dark](https://cdn.jsdelivr.net/gh/qishibo/img/ardm/202411081318491.png) ![redis key dark](https://cdn.jsdelivr.net/gh/qishibo/img/ardm/202411081318490.png) ![redis exec log](https://cdn.jsdelivr.net/gh/qishibo/img/ardm/202411081318492.png) ## Contributors This project exists thanks to all the people who contribute. [![contributors](https://opencollective.com/AnotherRedisDesktopManager/contributors.svg?width=890&button=false)](https://github.com/qishibo/AnotherRedisDesktopManager/graphs/contributors) [![backers](https://opencollective.com/AnotherRedisDesktopManager/backers.svg)](https://opencollective.com/AnotherRedisDesktopManager) <!-- sponsors --><a href="https://github.com/brunoksato"><img src="https://images.weserv.nl/?h=120&w=120&mask=circle&url=https:&#x2F;&#x2F;avatars.githubusercontent.com&#x2F;u&#x2F;2257501?u&#x3D;62e7db432487ab19a9e11db051198d91fb42fe95&amp;v&#x3D;4" width="60px" alt="Bruno Sato" /></a><a href="https://github.com/overtrue"><img src="https://images.weserv.nl/?h=120&w=120&mask=circle&url=https:&#x2F;&#x2F;avatars.githubusercontent.com&#x2F;u&#x2F;1472352?u&#x3D;72f261973db954faf4a64987ee3f7e7baf423ded&amp;v&#x3D;4" width="60px" alt="安正超" /></a><a href="https://github.com/wehnertb"><img src="https://images.weserv.nl/?h=120&w=120&mask=circle&url=https:&#x2F;&#x2F;avatars.githubusercontent.com&#x2F;u&#x2F;6706492?u&#x3D;23b3c316d88684d8cbce4947d9a9564c05fa48e6&amp;v&#x3D;4" width="60px" alt="Bill" /></a><a href="https://github.com/RobinTao"><img src="https://images.weserv.nl/?h=120&w=120&mask=circle&url=https:&#x2F;&#x2F;avatars.githubusercontent.com&#x2F;u&#x2F;3703152?v&#x3D;4" width="60px" alt="" /></a><a href="https://github.com/hfoxy"><img src="https://images.weserv.nl/?h=120&w=120&mask=circle&url=https:&#x2F;&#x2F;avatars.githubusercontent.com&#x2F;u&#x2F;1254033?u&#x3D;630787b85016572cb1f9d87a7fbd77314b084bb9&amp;v&#x3D;4" width="60px" alt="Harry Fox" /></a><a href="https://github.com/maniappstudios"><img src="https://images.weserv.nl/?h=120&w=120&mask=circle&url=https:&#x2F;&#x2F;avatars.githubusercontent.com&#x2F;u&#x2F;91392014?v&#x3D;4" width="60px" alt="Mani App Studios" /></a><a href="https://github.com/BWICompanies"><img src="https://images.weserv.nl/?h=120&w=120&mask=circle&url=https:&#x2F;&#x2F;avatars.githubusercontent.com&#x2F;u&#x2F;28601356?v&#x3D;4" width="60px" alt="BWI Companies, Inc." /></a><a href="https://github.com/dragonflydb"><img src="https://images.weserv.nl/?h=120&w=120&mask=circle&url=https:&#x2F;&#x2F;avatars.githubusercontent.com&#x2F;u&#x2F;104819355?v&#x3D;4" width="60px" alt="DragonflyDB" /></a><a href="https://github.com/gauravn00b"><img src="https://images.weserv.nl/?h=120&w=120&mask=circle&url=https:&#x2F;&#x2F;avatars.githubusercontent.com&#x2F;u&#x2F;70876227?v&#x3D;4" width="60px" alt="" /></a><a href="https://github.com/roostinghawk"><img src="https://images.weserv.nl/?h=120&w=120&mask=circle&url=https:&#x2F;&#x2F;avatars.githubusercontent.com&#x2F;u&#x2F;5466611?u&#x3D;6c5bcb3a5e4cd3bc128052dcce3a58ba00e742f9&amp;v&#x3D;4" width="60px" alt="liuwei" /></a><a href="https://github.com/status2xx"><img src="https://images.weserv.nl/?h=120&w=120&mask=circle&url=https:&#x2F;&#x2F;avatars.githubusercontent.com&#x2F;u&#x2F;40201780?u&#x3D;ba9c0f10211ecf2af64ec335a5df13637e313060&amp;v&#x3D;4" width="60px" alt="小新" /></a><a href="https://github.com/mikeallisonJS"><img src="https://images.weserv.nl/?h=120&w=120&mask=circle&url=https:&#x2F;&#x2F;avatars.githubusercontent.com&#x2F;u&#x2F;838371?u&#x3D;6c8a7a989e12d67117976a5ec155e022a5d83499&amp;v&#x3D;4" width="60px" alt="Mike Allison" /></a><!-- sponsors --> ## Sponsor - Give me a star ⭐ or upvote on [Producthunt](https://www.producthunt.com/posts/another-redis-desktop-manager) - Through [OpenCollective](https://opencollective.com/AnotherRedisDesktopManager) or [Github Sponsor](https://github.com/sponsors/qishibo) - If you are a Mac user, you can purchase this software from the [app store](https://apps.apple.com/app/id1516451072) to sponsor, and then let the app store automatically update it for you. <br>[![app store](https://cdn.jsdelivr.net/gh/qishibo/img/avail_app_store180.svg)](https://apps.apple.com/app/id1516451072) - If you are a Windows user, you can purchase this software from the [win store](https://www.microsoft.com/store/apps/9MTD84X0JFHZ) to sponsor. <br>[![windows store](https://cdn.jsdelivr.net/gh/qishibo/img/windows-store-icon182-56.png)](https://www.microsoft.com/store/apps/9MTD84X0JFHZ) - Wechat sponsor code [Sponsor me a cup of coffee ☕] <img width="150px" src="https://cdn.jsdelivr.net/gh/qishibo/img/202109031655807.jpeg" /> ## Feature Log - 2025-10-01: Long time no see! New features will coming soon! - 2024-11-03: Import batch commands from files - 2024-10-07: Hash field TTL support(Redis>=7.4) - 2024-06-06: Search connections support - 2024-04-10: DB custom name support - 2024-02-21: Java/Pickle viewers support - 2024-02-15: Groups/Consumers in STREAM view - 2024-01-31: Hey, long time! Command line(CLI) args support - 2023-06-22: Export\Import keys support - 2023-05-26: Search support in Stream && Slow log support - 2023-04-01: Search support in List && Deflate raw support - 2022-10-07: Arrow Keys support in key list && Memory Analysis in folder - 2022-08-05: Clone Connection && Tabs Contextmenu\Mousewheel Support - 2022-04-01: Protobuf Support && Memory Analysis - 2022-03-03: Readonly Mode && Mointor Support - 2022-01-24: Command Dump Support - 2022-01-05: Support To Load All Keys - 2022-01-01: Brotli\Gzip\Deflate Support && RedisJSON Support - 2021-11-26: JSON Editable && Subscribe Support - 2021-08-30: Execution log Support && Add Hot Keys - 2021-08-16: Custom Formatter View Support! - 2021-06-30: Sentinel Support!! - 2021-06-24: ACL Support - 2021-05-03: Stream Support && Cli Command Tips Support - 2021-02-28: Connection Color Tag && Search History Support - 2021-02-03: Multiple Select\Delete && Msgpack Viewer Support - 2020-12-30: Tree View Support!!! - 2020-11-03: Binary View Support && SSH Passparse\Timeout Support - 2020-09-04: SSH Cluster Support && Extension Commands Support - 2020-06-18: SSL/TLS Support!!! - 2020-04-28: Page Zoom && Big Key Loads With Scan && Auto Json - 2020-04-18: Unvisible Key\Value Format Support - 2020-04-04: Cluster Support!!! - 2020-03-13: Dark Mode Support!!! && JsonView In Other Place - 2020-02-16: SSH Private Key Support - 2020-02-13: Open Cli Console In Tabs - 2019-06-14: Custom Font-Family Support - 2019-05-28: Key List Resizable - 2019-05-09: Search Support In Hash List Set Zset - 2019-04-26: Auto Updater - 2019-04-09: SSH Tunnel Connection Support - 2019-04-01: Extract Search Support - 2019-02-22: Single Connection Support - 2019-01-08: Project Start ## Dev Build ### Linux Or Mac ```bash # clone code git clone https://github.com/qishibo/AnotherRedisDesktopManager.git --depth=1 cd AnotherRedisDesktopManager # install dependencies npm install # if download electron failed during installing, use this command # ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/" npm install # serve with hot reload at localhost:9988 npm start # after the previous step is completed to 100%, open another tab, build up a desktop client npm run electron ``` If linux errors like this: ```bash # if error like this ../src/FontManagerLinux.cc:1:35: fatal error: fontconfig/fontconfig.h: No such file or directory # then try this sudo apt install libfontconfig1-dev ``` ### Windows ``` bash # clone code git clone https://github.com/qishibo/AnotherRedisDesktopManager.git --depth=1 cd AnotherRedisDesktopManager # install dependencies, 32-bit or 64-bit all use win32 npm install --platform=win32 # if download electron failed during installing, use this command # npm config set ELECTRON_MIRROR https://npmmirror.com/mirrors/electron/ # npm install --platform=win32 # serve with hot reload at localhost:9988 npm start # after the previous step is completed to 100%, open another tab, build up a desktop client npm run electron ``` ### Build Package ```bash # prepare before package npm run pack:prepare # build package on respective platforms # on windows build 64bit package npm run pack:win # on windows build 32bit package npm run pack:win32 # on mac npm run pack:mac # on linux npm run pack:linux ``` ## Custom Viewer > When the default viewer does not meet the needs, you can format your content via customize script. <br>Method: Pull down the viewer list to the bottom, click "Custom -> Add", and then refer to the instructions below <br>Note: The script needs to output formatted content through `print` `console.log` `echo` etc., which can be any string or JSON string | Config | Description | | ------ | ------ | | `Name` | Custom name | | `Command` | Executable commands, such as `xxx.py` `xxx.js` `xxx.class` etc. The file needs `x` permission, which can be executed in the form of `./xxx.py`; It can also be set to `/bin/node` `/bin/bash` or other system commands, and the script path needs to be placed in Params | | `Params` | Parameters spliced after `Command`, such as "--key `{KEY}` --value `{VALUE}`", where `{KEY}` and `{VALUE}` will be replaced with the corresponding Redis key and value. Note that if the content is invisible such as binary, you can use `{HEX}` instead of `{VALUE}`, and `{HEX}` will be replaced with the hexadecimal string. If HEX is too long (>8000 chars), it will be written to a temporary file. You can use `{HEX_FILE}` to obtain the file path, and read by yourself in the script | ### Configuration example: > Add env to the first line of the script, the final executed command is: `./home/qii/pickle_decoder.py {HEX}`, the script can receive parameters via `argv[1]`, ref [#978](https://github.com/qishibo/AnotherRedisDesktopManager/issues/987#issuecomment-1294844707) | Command | Params | | ------ | ------ | | `/home/qii/pickle_decoder.py` | `{HEX}` | | `/home/qii/shell_decoder.sh` | `{VALUE}` | ### Without execute permission `x`: > The final executed command is: `/bin/node /home/qii/node_decoder.js {HEX} --key={KEY}`, the script can receive parameters via `argv[1]` | Command | Params | | ------ | ------ | | `/bin/bash` | `/home/qii/shell_decoder.sh {VALUE}` | | `/bin/node` | `/home/qii/node_decoder.js {HEX} --key={KEY}` | ## Start From Command Line(CLI) > If you want to start from command line(CLI), you can pass args to the App. ### Examples ```bash # Linux # ./Another Redis Desktop Manager.AppImage # Mac # open /Applications/Another\ Redis\ Desktop\ Manager.app --args # Windows "D:\xxxx\Another Redis Desktop Manager.exe" # COMMON --host 127.0.0.1 --port 6379 --auth 123 --name tmp_connection # CLUSTER --cluster # SSH --ssh-host 192.168.0.110 --ssh-username root --ssh-password 123 # SENTINEL --sentinel-master-name mymaster --sentinel-node-password 123 # save connection --save # readonly mode --readonly ``` ### Parameter Description #### Common | Args | Description | Args | Description | | ------ | ------ | ------ | ------ | | --host | Redis host* | --port | Redis port| | --auth | Password | --name | Custom name| | --separator | Key separator | --readonly | Enable readonly mode| | --username | Username(Redis6 ACL)| --save| Enable saving, one-time link by default| #### SSH | Args | Description | Args | Description | | ------ | ------ | ------ | ------ | | --ssh-host | SSH host* | --ssh-port | SSH port(default:22)| | --ssh-username | Username* | --ssh-password | Password| | --ssh-private-key | Path of private key | --ssh-passphrase | Password of private key| | --ssh-timeout | SSH timeout(s) | | &nbsp;| #### CLUSTER | Args | Description | | ------ | ------ | | --cluster | Enable CLUSTER mode | #### SSL | Args | Description | Args | Description | | ------ | ------ | ------ | ------ | | --ssl | Enable SSL* | --ssl-key | SSL Private Key Pem| | --ssl-ca | SSL Certificate Authority | --ssl-cert | SSL Public Key Pem| #### SENTINEL | Args | Description | | ------ | ------ | | --sentinel-master-name | Name of master group*,like 'mymaster' | | --sentinel-node-password | Password of Redis node | ## FAQ #### 1. How to connect to Redis Cluster in internal network (such as Docker, LAN, AWS)? Answer: Connect via `SSH+Cluster` (SSH to the internal network and then connecting to Cluster with internal IP such as `127.0.0.1`, `192.168.x.x`), you need to fill Redis Host with the internal IP. How to get Redis internal IP? Connect through SSH, uncheck Cluster option, and then open the console to execute `CLUSTER NODES`, select any IP in the result. #### 2. Do I need to fill in the 'Username' in the Redis configuration? Answer: The access control list (ACL) is only supported in `Redis>=6.0`, so do not fill it unless you need a special user. ## License [MIT](LICENSE) ## Support [goanother.com](https://goanother.com/) &nbsp; [Producthunt](https://www.producthunt.com/posts/another-redis-desktop-manager) &nbsp; [Twitter@shibo](https://twitter.com/qii404) &nbsp; [Download Analysis](https://qii404.me/github-release-statistics/?repo=/qishibo/AnotherRedisDesktopManager/) ", Assign "at most 3 tags" to the expected json: {"id":"8114","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"