{"id":13484205,"url":"https://github.com/patrikx3/redis-ui","last_synced_at":"2026-05-21T18:09:03.353Z","repository":{"id":39105464,"uuid":"147909955","full_name":"patrikx3/redis-ui","owner":"patrikx3","description":"📡 P3X Redis UI: A highly functional and convenient database GUI that fits in your pocket, accessible on both responsive web and desktop applications.","archived":false,"fork":false,"pushed_at":"2026-04-15T13:15:44.000Z","size":12410,"stargazers_count":794,"open_issues_count":0,"forks_count":75,"subscribers_count":11,"default_branch":"master","last_synced_at":"2026-04-15T13:22:12.545Z","etag":null,"topics":["dark","database","desktop","donation","electron","gui","internationalization","ioredis","light","p3x","redis","redis-cluster","redis-desktop","redis-desktop-manager","redis-gui","redis-gui-client","redis-ui","tree","web"],"latest_commit_sha":null,"homepage":"https://www.corifeus.com/redis-ui","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/patrikx3.png","metadata":{"files":{"readme":"README.md","changelog":"change-log.2018.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-09-08T06:59:38.000Z","updated_at":"2026-04-15T13:14:51.000Z","dependencies_parsed_at":"2024-01-13T18:25:02.760Z","dependency_job_id":"26089a51-5ca1-419b-801b-010f5faa2a3a","html_url":"https://github.com/patrikx3/redis-ui","commit_stats":{"total_commits":1103,"total_committers":6,"mean_commits":"183.83333333333334","dds":"0.016319129646418906","last_synced_commit":"adda4a1645fe6755476b580a65df80d8e3a7d553"},"previous_names":[],"tags_count":385,"template":false,"template_full_name":null,"purl":"pkg:github/patrikx3/redis-ui","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrikx3%2Fredis-ui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrikx3%2Fredis-ui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrikx3%2Fredis-ui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrikx3%2Fredis-ui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/patrikx3","download_url":"https://codeload.github.com/patrikx3/redis-ui/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrikx3%2Fredis-ui/sbom","scorecard":{"id":722569,"data":{"date":"2025-08-11","repo":{"name":"github.com/patrikx3/redis-ui","commit":"39644e86e24b357b4b6fab085e89608b871cfeb1"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.4,"checks":[{"name":"Code-Review","score":0,"reason":"Found 1/29 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":9,"reason":"7 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 9","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/build.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/patrikx3/redis-ui/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/patrikx3/redis-ui/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/patrikx3/redis-ui/build.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/patrikx3/redis-ui/build.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:32: update your workflow using https://app.stepsecurity.io/secureworkflow/patrikx3/redis-ui/build.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/patrikx3/redis-ui/build.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/patrikx3/redis-ui/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:98: update your workflow using https://app.stepsecurity.io/secureworkflow/patrikx3/redis-ui/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:100: update your workflow using https://app.stepsecurity.io/secureworkflow/patrikx3/redis-ui/build.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:115: update your workflow using https://app.stepsecurity.io/secureworkflow/patrikx3/redis-ui/build.yml/master?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:9: pin your Docker image by updating node:lts-slim to node:lts-slim@sha256:752ea8a2f758c34002a0461bd9f1cee4f9a3c36d48494586f60ffce1fc708e0e","Warn: npmCommand not pinned by hash: Dockerfile:14","Warn: npmCommand not pinned by hash: .github/workflows/build.yml:21","Warn: npmCommand not pinned by hash: .github/workflows/build.yml:22","Info:   0 out of   5 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   5 third-party GitHubAction dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned","Info:   0 out of   3 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/build.yml:24"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v2025.4.136 not signed: https://api.github.com/repos/patrikx3/redis-ui/releases/228584300","Warn: release artifact v2025.4.129 not signed: https://api.github.com/repos/patrikx3/redis-ui/releases/195526512","Warn: release artifact v2025.4.127 not signed: https://api.github.com/repos/patrikx3/redis-ui/releases/195519887","Warn: release artifact v2025.4.101 not signed: https://api.github.com/repos/patrikx3/redis-ui/releases/193212228","Warn: release artifact v2024.10.126 not signed: https://api.github.com/repos/patrikx3/redis-ui/releases/192464259","Warn: release artifact v2025.4.136 does not have provenance: https://api.github.com/repos/patrikx3/redis-ui/releases/228584300","Warn: release artifact v2025.4.129 does not have provenance: https://api.github.com/repos/patrikx3/redis-ui/releases/195526512","Warn: release artifact v2025.4.127 does not have provenance: https://api.github.com/repos/patrikx3/redis-ui/releases/195519887","Warn: release artifact v2025.4.101 does not have provenance: https://api.github.com/repos/patrikx3/redis-ui/releases/193212228","Warn: release artifact v2024.10.126 does not have provenance: https://api.github.com/repos/patrikx3/redis-ui/releases/192464259"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 2 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"18 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-2qqx-w9hr-q5gx","Warn: Project is vulnerable to: GHSA-2vrf-hf26-jrp5","Warn: Project is vulnerable to: GHSA-4w4v-5hc9-xrr2","Warn: Project is vulnerable to: GHSA-j58c-ww9w-pwp5","Warn: Project is vulnerable to: GHSA-m2h2-264f-f486","Warn: Project is vulnerable to: GHSA-m9gf-397r-hwpg","Warn: Project is vulnerable to: GHSA-mqm9-c95h-x2p6","Warn: Project is vulnerable to: GHSA-prc3-vjfx-vhm9","Warn: Project is vulnerable to: GHSA-qwqh-hm9m-p5hr","Warn: Project is vulnerable to: GHSA-wf5p-g6vw-rhxx","Warn: Project is vulnerable to: GHSA-jr5f-v2jv-69x6","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-pfrx-2q88-qq97","Warn: Project is vulnerable to: GHSA-pfq8-rq6v-vf5m","Warn: Project is vulnerable to: GHSA-rc47-6667-2j5j","Warn: Project is vulnerable to: GHSA-jgmv-j7ww-jx2x","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-22T11:48:54.686Z","repository_id":39105464,"created_at":"2025-08-22T11:48:54.686Z","updated_at":"2025-08-22T11:48:54.686Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31994010,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T20:23:30.271Z","status":"online","status_checked_at":"2026-04-19T02:00:07.110Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["dark","database","desktop","donation","electron","gui","internationalization","ioredis","light","p3x","redis","redis-cluster","redis-desktop","redis-desktop-manager","redis-gui","redis-gui-client","redis-ui","tree","web"],"created_at":"2024-07-31T17:01:20.602Z","updated_at":"2026-04-19T04:03:11.755Z","avatar_url":"https://github.com/patrikx3.png","language":"JavaScript","funding_links":["https://paypal.me/patrikx3","https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=QZVM4V6HVZJW6"],"categories":["JavaScript"],"sub_categories":[],"readme":"[//]: #@corifeus-header\n\n  [![NPM](https://img.shields.io/npm/v/p3x-redis-ui.svg)](https://www.npmjs.com/package/p3x-redis-ui)  [![Donate for PatrikX3 / P3X](https://img.shields.io/badge/Donate-PatrikX3-003087.svg)](https://paypal.me/patrikx3) [![Contact Corifeus / P3X](https://img.shields.io/badge/Contact-P3X-ff9900.svg)](https://www.patrikx3.com/en/front/contact) [![Corifeus @ Facebook](https://img.shields.io/badge/Facebook-Corifeus-3b5998.svg)](https://www.facebook.com/corifeus.software)  [![Uptime ratio (90 days)](https://network.corifeus.com/public/api/uptime-shield/31ad7a5c194347c33e5445dbaf8.svg)](https://network.corifeus.com/status/31ad7a5c194347c33e5445dbaf8)\n\n\n\n\n\n# 📡 P3X Redis UI: A highly functional and convenient database GUI that fits in your pocket, accessible on both responsive web and desktop applications v2026.4.2002\n\n\n  \n🌌 **Bugs are evident™ - MATRIX️**  \n🚧 **This project is under active development!**  \n📢 **We welcome your feedback and contributions.**  \n    \n\n\n\n### NodeJS LTS is supported\n\n### 🛠️ Built on NodeJs version\n\n```txt\nv24.14.1\n```\n\n\n\n\n\n# 📝 Description\n\n                        \n[//]: #@corifeus-header:end\n\n**p3x-redis-ui** is a versatile Redis GUI that works as a web-based server application or a standalone desktop app. It excels at managing JSON data through an integrated CodeMirror editor with GitHub dark/light themes, supports uploading and downloading binary data, and handles SSH, cluster, and sentinel configurations.\n\n### Minimum Node.js Version\n\n```txt\nv22.0.0\n```\n\n## 30-Second Docker Quick Start\n\n```bash\nmkdir -p ./p3x-redis-ui-settings\ndocker run -d \\\n  --name p3x-redis-ui \\\n  -p 7843:7843 \\\n  -v $PWD/p3x-redis-ui-settings:/settings \\\n  patrikx3/p3x-redis-ui\n```\n\nOpen: `http://localhost:7843`\n\n\u003e **Kubernetes / Docker:** Always use the `latest` tag (`patrikx3/p3x-redis-ui:latest`) with `imagePullPolicy: Always`. Version-specific tags are available but `latest` is the recommended and supported tag.\n\n### Supported Languages\n\nSwitch language in `Settings` — **54 languages** covering 88+ countries:\n\nArabic (`ar`), Azerbaijani (`az`), Belarusian (`be`), Bengali (`bn`), Bosnian (`bs`), Bulgarian (`bg`), Chinese (`zn`), Chinese - Hong Kong (`zh-HK`), Chinese - Taiwan (`zh-TW`), Croatian (`hr`), Czech (`cs`), Danish (`da`), Dutch (`nl`), English (`en`), Estonian (`et`), Filipino (`fil`), Finnish (`fi`), French (`fr`), Georgian (`ka`), German (`de`), Greek (`el`), Hebrew (`he`), Hungarian (`hu`), Armenian (`hy`), Indonesian (`id`), Italian (`it`), Japanese (`ja`), Kazakh (`kk`), Khmer (`km`), Korean (`ko`), Kyrgyz (`ky`), Lithuanian (`lt`), Macedonian (`mk`), Malay (`ms`), Nepali (`ne`), Norwegian (`no`), Polish (`pl`), Portuguese (`pt-PT`), Portuguese - Brazil (`pt-BR`), Romanian (`ro`), Russian (`ru`), Serbian (`sr`), Sinhala (`si`), Slovak (`sk`), Slovenian (`sl`), Spanish (`es`), Swahili (`sw`), Swedish (`sv`), Tajik (`tg`), Tamil (`ta`), Thai (`th`), Turkish (`tr`), Ukrainian (`uk`), Vietnamese (`vi`)\n\n## Screenshots\n\n[View screenshots](artifacts/readme/screenshots.md)\n\n## Demo\n\n![P3X Redis UI Demo](artifacts/demo.gif)\n\n## Live Demo\n\nTry the latest version at [p3x.redis.patrikx3.com](https://p3x.redis.patrikx3.com).\n\n- **Daily data reset:** the Redis database restores certain datasets every morning (CET)\n- **Brief downtime:** occasional ~1 second interruptions may occur due to automatic updates from Git changes\n- **Version differences:** the live instance may differ from the GitHub or NPM release; updates are typically published monthly\n\n## Features\n\n### Triple GUI: Angular + React + Vue\n\nP3X Redis UI was originally built with AngularJS and has been fully migrated to three modern frontends — **Angular**, **React/MUI**, and **Vue/Vuetify** — all at full feature parity. You can switch between them live in **Settings → GUI**.\n\n- **Angular** (`/ng/`) — Angular CLI with esbuild, CDK virtual scrolling, standalone components with signals\n- **React** (`/react/`) — Zustand state management, @tanstack/react-virtual, MUI (Material UI), Vite\n- **Vue** (`/vue/`) — Pinia state management, Vue 3 Composition API, Vuetify, Vite\n- `/` auto-redirects to your last used frontend\n- **Shared across all three:** same Socket.IO protocol, same 54-language translation system, same 7 themes (4 dark + 3 light), Web Worker tree building, Playwright E2E tests\n- Works in the Electron desktop app, Docker, and standalone server\n\n### AI-Powered Redis Query Translation\n- **Natural language queries:** type plain English (or any language) in the console — if Redis doesn't recognize the command, AI translates it to a valid Redis command and replaces the console input; the command is **not executed automatically** — you review, edit if needed, and press Enter to run it\n- **Multi-command AI:** AI can generate multiple commands or multi-line EVAL scripts — they are placed in the textarea for review, then executed with Enter\n- **Input replacement:** after AI translation, the console input is replaced with the generated Redis command so you can see exactly what will be executed before running it\n- **Multilingual:** understands 54 languages, explanations are returned in the language you type in\n- **Context-aware:** sends Redis version, loaded modules, available RediSearch indexes, current page, active connection, and selected database to the AI for accurate, situation-aware answers\n- **Agentic tool-use:** for investigation prompts (\"why is memory high?\", \"show me the 10 busiest keys\"), the AI can call safe read-only Redis tools (INFO, MEMORY STATS, SLOWLOG, SCAN, ACL WHOAMI, etc.) in a bounded loop and surfaces every tool call + result in the console scrollback for transparency\n- **AI Cheatsheet:** dedicated dialog (replaces the old Redis Commands popup) with categorized, searchable prompts grouped by feature (diagnostics, keys, data types, RedisJSON, RediSearch, TimeSeries, Bloom, VectorSet, scripting, cluster, ACL, translation). Module- and version-aware: groups only appear when the relevant module is loaded\n- **Stop button:** click the stop icon in the console input to cancel a running AI query instantly — the input is cleared and re-enabled while the server-side loop finishes in the background and its response is discarded\n- **Bring your own key:** optionally set your own free Groq API key in Settings for better performance (get one at [console.groq.com](https://console.groq.com))\n- **`ai:` prefix:** explicitly trigger AI translation by starting your input with `ai:` — works when AI is enabled in Settings\n- **AI toggle in console:** when AI is globally enabled in Settings, a slide toggle appears in the console toolbar to control auto-detect behavior:\n  - **AI ON** (default): unrecognized commands automatically try AI translation\n  - **AI OFF**: only the explicit `ai:` prefix triggers AI — console errors are instant with no Groq round-trip delay\n  - When AI is disabled in Settings, the toggle is hidden and all AI features are off\n\n  | Settings AI | Console Toggle | `ai:` prefix | Auto-detect on errors |\n  |---|---|---|---|\n  | Disabled | Hidden | Off | Off |\n  | Enabled | ON (default) | Works | Works |\n  | Enabled | OFF | Works | Off (instant errors) |\n\n## AI Configuration\n\nThe AI query translation feature works out of the box — natural language queries are automatically translated to Redis commands via the Groq API.\n\n### How It Works\n\nBy default, AI queries are routed through `network.corifeus.com`, which handles the Groq API call. No configuration needed.\n\nIf you set your own Groq API key, you can choose to:\n- **Keep routing via `network.corifeus.com`** (default) — your key is used but queries still go through the proxy for analytics\n- **Route directly to Groq** — toggle \"Route via network.corifeus.com\" OFF in AI Settings to bypass the proxy entirely\n\n### AI Settings in the UI\n\nThe **Settings** page has an **AI Settings** panel with:\n- **AI Enabled** — toggle AI on/off (enabled by default)\n- **Route via network.corifeus.com** — toggle routing (only visible with a valid Groq API key)\n- **Groq API Key** — set via the Edit button (validated against Groq before saving)\n\n### Configuration Options\n\n**Recommended:** Configure AI settings via the GUI first (Settings \u003e AI Settings). Once configured, you can optionally add `groqApiKeyReadonly: true` to `p3xrs.json` or `--groq-api-key-readonly` CLI flag to lock the settings.\n\nAll settings can also be configured via `p3xrs.json` or CLI options.\n\nConfig (`p3xrs.json`):\n\n```json\n{\n  \"p3xrs\": {\n    \"groqApiKey\": \"gsk_your_key_here\",\n    \"aiEnabled\": true,\n    \"aiUseOwnKey\": false\n  }\n}\n```\n\n| Key | Type | Default | Description |\n|-----|------|---------|-------------|\n| `groqApiKey` | string | `\"\"` | Your Groq API key (get free at [console.groq.com](https://console.groq.com)) |\n| `aiEnabled` | boolean | `true` | Enable/disable AI auto-detect on unrecognized commands; `ai:` prefix always works regardless |\n| `aiUseOwnKey` | boolean | `false` | `true` = route directly to Groq, `false` = route via network.corifeus.com |\n| `groqApiKeyReadonly` | boolean | `false` | Lock all AI settings (toggles disabled, Edit hidden) |\n\nCLI options:\n\n```bash\np3xrs --groq-api-key gsk_your_key_here\np3xrs --groq-api-key-readonly\n```\n\n### Readonly Mode\n\nTo prevent users from changing AI settings (e.g. on a public instance):\n\nConfig (`p3xrs.json`):\n\n```json\n{\n  \"p3xrs\": {\n    \"groqApiKey\": \"gsk_your_key_here\",\n    \"groqApiKeyReadonly\": true\n  }\n}\n```\n\nCLI:\n\n```bash\np3xrs --groq-api-key gsk_your_key_here --groq-api-key-readonly\n```\n\nOr combine with readonly connections (`-r`) which also disables AI settings:\n\n```bash\np3xrs -r --groq-api-key gsk_your_key_here\n```\n\nExample systemd service (public instance):\n\n```ini\n[Unit]\nDescription=p3x-redis-ui\nAfter=network.target\n\n[Service]\nType=simple\nUser=user\nWorkingDirectory=/home/user/p3x-redis-ui\nExecStart=/var/p3x-redis-ui-server/bin/p3xrs.mjs -r --groq-api-key-readonly --config /home/user/p3x-redis-ui/p3xrs.json\nRestart=on-abort\n\n[Install]\nWantedBy=multi-user.target\n```\n\n### Connection Resilience\n- **Auto-reconnect** — when the server disconnects, a spinner overlay appears and Socket.IO automatically retries the connection\n- **Seamless recovery** — when the server comes back, the page reloads and reconnects to the same Redis instance automatically\n\n### Compatibility\n- **Redis 6+ with TLS** — see [Configuring Redis TLS](https://spin.atomicobject.com/2021/08/05/configuring-redis-tls/) for setup details\n- **Pika compatible** (not fully optimized)\n- **SSH tunneling** for single instances, cluster, and sentinel\n- **Environment variables:** customize server port and home directory via `P3XRS_PORT` and `P3XRS_DOCKER_HOME`\n\n### Data Handling\n- **Auto data decompression** — automatically detects and decompresses compressed values stored in Redis. Supports GZIP, ZIP (PKZip), zlib/deflate, Zstandard (zstd), LZ4, Snappy, and Brotli. Shows a compression badge with the algorithm name and space savings ratio. Only decompresses when the result is valid text — binary uploads (e.g., gzipped images) are left untouched. Works for string, list, hash, set, and sorted set values.\n- **Value format toggle** — switch between Raw, JSON, Hex, and Base64 display for all key types (string, hash, list, set, zset, stream); display-only — copy and edit always use the raw original value\n- **Hex dump viewer** — proper hex editor layout with address column, hex bytes (16 per line), and ASCII representation\n- **JSON pretty-print** — auto-formats valid JSON values with indentation\n- **Base64 encoding** — encodes values including Unicode and binary data via TextEncoder\n- **Binary data:** use the download button for binary content; direct text editing is not supported for binary values\n- **Large values (\u003e256 kB):** shown as `[object ArrayBuffer]`; use binary upload/download\n- **Clipboard:** text can be copied directly; binary data requires the download button\n\n### Editing Safety\n- **Diff view before save** — optional diff dialog shows inline or side-by-side comparison of old vs. new value before committing changes; works for string, hash, list, and JSON key types including the JSON editor; collapsible unchanged sections with context lines; toggle in Redis Settings (default: off)\n- **Undo after save** — after saving a string or JSON key, a toast notification appears with an Undo button; clicking it restores the previous value immediately; works for both direct edits and JSON editor saves\n\n### Key Export / Import\n- **Export:** download keys as a JSON file — supports string, list, set, zset, hash, stream, and JSON types with binary data encoded as base64 and TTL preservation\n- **Search-aware:** when a search is active, export only the matching results; otherwise export all keys in the current database\n- **Import:** upload a previously exported JSON file with a preview dialog showing all keys with their translated types, virtual scrolling for large key sets, and conflict handling (overwrite or skip existing keys)\n- **Hamburger menu:** export and import actions are accessible from the `⋮` menu in the tree controls toolbar; the menu label dynamically shows the key count and whether it's exporting all keys or search results\n- **Bulk delete:** delete all keys matching the current search pattern directly from the hamburger menu; when no search is active, deletes all keys using `FLUSHDB` for efficiency\n\n### Real-Time Monitoring (Pulse / Profiler / PubSub)\n\nThree dedicated tabs accessible from the monitoring page:\n\n#### Pulse — Live Dashboard\n- **Live metrics:** memory usage (used, RSS, peak, fragmentation), ops/sec, connected/blocked clients, hit rate, network I/O, expired/evicted keys — updating every 2 seconds\n- **Dashboard info cards:** server info (OS, port, PID, config file, CPU usage), persistence status (RDB last save, AOF), replication (role, replicas, master host), keyspace breakdown (keys + expires per database), loaded modules with versions — all with individual export buttons\n- **uPlot charts:** four lightweight canvas charts (~35 KB) for memory, ops/sec, clients, and network I/O with theme-aware colors\n- **Slow log viewer:** recent slow queries with execution duration\n- **Client list:** all connected Redis clients with address, name, database, current command, idle time, and kill button\n- **Memory top keys:** top 20 biggest keys by memory usage with byte sizes\n- **Auto-refresh:** toggle auto-polling for client list and memory top keys\n- **Pause/resume:** pause live updates without leaving the page\n- **Export:** download overview data, dashboard info, charts (PNG), slow log, client list, and top keys as text files; Export All bundles everything into a ZIP with TXT + PNG + PDF\n- **Theme + language reactive:** charts reinitialize on theme or language change\n\n#### Profiler — Real-Time Command Stream\n- **Redis MONITOR:** streams every command executed on the server in real time via a dedicated Redis connection\n- **Command display:** timestamp (ms precision), database number, source IP, and full command with arguments\n- **Performance:** renders max 66 DOM entries for smooth scrolling, stores up to 10,000 entries in memory\n- **Persistence:** last 100 entries saved to localStorage\n- **Export:** download all entries as a text file\n\n#### PubSub — Channel Message Monitoring\n- **Pattern subscription:** subscribe with configurable glob patterns (default `*` for all channels) via `PSUBSCRIBE`\n- **Message display:** timestamp, channel name, and full message content in real time\n- **Restart:** re-subscribe with a new pattern without leaving the page\n- **Performance:** same 66 DOM / 10,000 memory / 100 localStorage limits as Profiler\n- **Export:** download all entries as a text file\n\n#### Analysis — Memory Analysis Dashboard\n- **One-click snapshot:** capture the full state of your Redis server at a point in time — type distribution, memory allocation per namespace, key expiration stats, and INFO memory breakdown\n- **Type distribution chart:** canvas bar chart showing how many keys and how much memory each data type (string, hash, list, set, zset, stream) uses\n- **Memory by prefix:** groups keys by their first `:` segment and ranks prefixes by total memory — quickly find which namespace is consuming the most resources\n- **Key expiration overview:** shows the count of keys with TTL vs persistent keys, plus the average TTL across all expiring keys (formatted with `humanize-duration`)\n- **Memory breakdown:** total, RSS, peak, overhead, dataset, Lua, fragmentation ratio, and allocator — all from `INFO memory`\n- **Server info header:** Redis version, mode (standalone/cluster/sentinel), and uptime displayed in the accordion header\n- **Configurable scan:** adjust \"Top N\" and \"Max Scan Keys\" to control scan depth; the UI shows how many keys were sampled out of the total database size\n- **Export All (ZIP):** download a complete analysis bundle as a ZIP file (`{connection}-analysis.zip`) containing the full text report and all chart images (PNG) — useful for sharing with your team or attaching to incident reports when investigating server issues\n- **Chart export:** each chart accordion has its own Export button to download individual charts as PNG\n- **Theme-aware:** bar charts use CSS custom property colors and automatically redraw on theme or window resize\n\n### User Interface\n- **Responsive design:** works on phones, tablets, and desktops\n- **7 themes:** Light, Enterprise, Redis (light) + Dark, Dark Neu, Darko Bluo, Matrix (dark) — with **auto-switch** that follows your system's dark/light preference in real time\n- **Theme auto-switch:** defaults to system preference on first visit; manually selecting a theme overrides auto mode\n- **Info page:** dedicated page with keyboard shortcuts reference, about section (version, Redis info, links), and supported languages list\n- **Command palette:** VS Code-style quick command palette (`Ctrl+K` in Electron) with search and keyboard navigation\n- **Desktop shortcuts:** press ALT to access menus in the desktop version\n- **Tree view:** adjustable key count (100–100,000) with virtual scrolling for performance\n- **Smart tree memory:** expanded/collapsed folder state is saved per connection and database in session storage — survives page refreshes and database switches, restored automatically when reconnecting to the same server\n\n### Keyboard Shortcuts (Electron Desktop)\n| Shortcut | Action |\n|----------|--------|\n| `Ctrl+R` / `F5` | Refresh current view |\n| `Ctrl+F` | Focus search input |\n| `Ctrl+N` | New key dialog |\n| `Ctrl+K` | Command palette |\n| `Ctrl+D` | Disconnect |\n\n### Connection Management\n- **Connection groups:** organize connections into named groups with collapsible headers in Settings\n- **Drag-and-drop:** reorder connections within a group and reorder groups themselves by dragging headers\n- **Group toggle:** enable/disable grouped view with a single click — persisted in localStorage\n- **Group field:** optional group name in the connection dialog with autocomplete from existing groups\n\n### Console and Search\n- **Global console drawer:** bottom slide-up drawer accessible from any page — toggle via the footer Console button or **Ctrl+`** shortcut. Lets you run commands without leaving the Keys / Monitoring / Settings page you're on. Preference persists across reloads (per-connection — drawer stays hidden when disconnected)\n- **Multi-line input:** the console uses a textarea that supports multi-line commands\n  - **Shift+Enter** inserts a new line, **Enter** executes\n  - Multiple commands (one per line) are executed sequentially\n  - Multi-line `EVAL`/`EVALSHA` scripts are sent as a single command — Lua newlines are preserved\n  - The textarea auto-grows up to 3 lines when focused, with a scrollbar for longer content\n  - On blur the textarea collapses to a single line to keep the output visible\n- **Command history:** **Shift+ArrowUp/Down** navigates history (plain arrows scroll the textarea)\n- **AI multi-line:** AI-generated commands can be multiple lines — they are placed in the textarea for review before execution\n- **Channel monitoring:** toggle monitoring for all channel messages via a checkbox; the last 20 entries are stored in local storage\n- **Database selection:** choose databases via the console or dropdown (shows empty/filled status)\n- **Search modes:** client-side for small key sets, server-side for large key sets; search by prefix or substring\n\n### Networking\n- **Sub-directory support:** use Nginx/Ingress path rewriting — see [Issue #43](https://github.com/patrikx3/redis-ui/issues/43)\n- **Cluster support:** continuously improving, with significant contributions by [@devthejo](https://github.com/devthejo)\n\n\n### RediSearch Full-Text Search\n- **Search page:** full-text search UI with index selector, query input, and paginated results — only visible when RediSearch module is detected\n- **Index management:** create indexes with schema builder (TEXT, NUMERIC, TAG, GEO, VECTOR fields), drop indexes with confirmation\n- **Index info:** view index metadata and statistics after running a search\n- **Module-aware:** header button automatically appears when the `search` module is loaded (Redis 8+ or Redis Stack)\n\n### RedisTimeSeries Visualization\n- **Module auto-detection** — TimeSeries UI automatically appears when the `timeseries` module is loaded (Redis Stack or Redis 8+)\n- **Interactive line chart** — uPlot canvas chart with theme-aware colors (dark/light), responsive resizing, and locale-aware time formatting via native `Intl`\n- **Live auto-refresh** — toggle auto-polling (10-second interval) to watch incoming data in real time\n- **Reactive inputs** — chart auto-reloads on any input change (from/to, aggregation, overlay, label filter) with debounced updates\n- **Time range \u0026 aggregation** — filter by from/to timestamps, apply aggregation functions (avg, min, max, sum, count, first, last, range, std.p, std.s, var.p, var.s) with configurable time buckets\n- **Data point management** — add, edit, and delete individual data points with confirmation dialogs; inline add form directly below the chart\n- **Bulk edit** — edit all data points at once via the Edit button in the chart header; monospace textarea with `timestamp value` per line; `*` timestamps are auto-spread by a configurable interval (1s to 24h)\n- **Bulk generate on create** — toggle \"Bulk generate\" in the Add Key dialog to create a new timeseries key with multiple data points at once using the formula generator\n- **Formula generator** — generate test data with mathematical formulas (sin, cos, linear, random, sawtooth) with configurable point count, amplitude, and offset\n- **TS.INFO panel** — view retention, total samples, memory usage, chunk info, duplicate policy, labels, and compaction rules in a settings-style mat-list\n- **Labels editor** — edit retention, duplicate policy, and labels on existing keys via `TS.ALTER`; labels are also editable from the Edit dialog\n- **Default labels** — keys created from the GUI automatically get a `key=\u003ckeyname\u003e` label for discoverability; keys without labels get the default label assigned on first view\n- **Multiple series overlay** — overlay additional timeseries keys on the same chart by entering comma-separated key names\n- **TS.MRANGE label filter** — query across multiple keys by label filter (e.g. `sensor=temp`) and overlay all matching series on the chart with different colors\n- **Export chart as PNG** — download the chart as a PNG image with proper background (dark/light aware), title, and color legend\n- **Key creation** — create new timeseries keys with configurable retention, duplicate policy (`LAST`, `FIRST`, `MIN`, `MAX`, `SUM`, `BLOCK`), and labels\n- **Tree integration** — timeseries keys show with a chart-area icon and display the data point count (totalSamples) in the tree view\n- **Theme + language reactive** — charts reinitialize on theme or language change\n- **No external date library** — all date formatting uses native `Intl.DateTimeFormat`, no dayjs dependency for the timeseries component\n\n### Redis 8 Module Support (ReJSON)\n- **ReJSON (JSON data type)** — view, create, edit, format, copy, and download JSON documents stored with `JSON.SET`\n- **Module auto-detection** — available modules are detected on connection via `MODULE LIST`\n- **JSON keys** appear in the tree with a `\u003c/\u003e` icon; JSON type is available in the \"Add Key\" dialog when the module is detected\n- **Inline JSON tree** — JSON keys display as an expandable/collapsible tree with syntax coloring\n- **CodeMirror editor** — edit JSON documents with syntax highlighting, GitHub dark/light themes, line wrapping toggle, and code folding\n\n### RedisBloom Probabilistic Data Structures\n- **Full support for 5 types** — Bloom filter, Cuckoo filter, Top-K, Count-Min Sketch, and T-Digest\n- **Module auto-detection** — probabilistic types appear when the `bf` (RedisBloom) module is detected via `MODULE LIST`\n- **Info display** — click any probabilistic key to see its metadata (capacity, size, error rate, items inserted, etc.) in a clean card layout\n- **Inline actions** — add items, check membership (Bloom/Cuckoo), query counts (CMS), query quantiles (T-Digest), and list top items (Top-K) — all from the key view\n- **Key creation** — create new keys with smart defaults pre-filled (error rate, capacity, K, width, depth, decay, compression)\n- **Tree integration** — each type has its own icon (filter, trophy, chart) and shows item count in the tree view\n- **Console hints** — full autocomplete support for all BF.*, CF.*, TOPK.*, CMS.*, and TDIGEST.* commands\n- **AI query support** — the AI console understands all RedisBloom types and commands\n\n### Redis 8 VectorSet Support\n- **Native vector type** — full support for Redis 8's built-in `VECTORSET` data type (no module required)\n- **Vector info** — view metadata (dimensions, element count, quantization, projection) via `VINFO`\n- **Element browser** — paginated list of all vector elements with search, attribute inspection, and delete actions\n- **Similarity search** — search by element name or by raw vector with configurable COUNT; results displayed with similarity scores\n- **Attribute viewer** — inspect `VGETATTR` attributes on individual elements via info icon + toast\n- **Add elements** — inline form to add new vector elements with `VADD` (element name, vector, optional attributes)\n- **Key creation** — create new VectorSet keys from the \"Add Key\" dialog with dimension and initial element\n- **Tree integration** — VectorSet keys show with a data-array icon and display element count (VCARD) in the tree view\n- **Console hints** — autocomplete for VADD, VSIM, VCARD, VDIM, VGETATTR, VSETATTR, VREM, VINFO, VLINKS\n- **VSIM IN filter** (Redis 8.2+) — filter expression input for similarity search, narrow results by attribute values\n- **AI query support** — the AI console understands VectorSet types and commands\n\n### Redis 8.x Advanced Features\n- **Per-field hash TTL** (Redis 8.0+) — set expiration on individual hash fields via `HEXPIRE`; schedule icon per field row with live countdown, color-coded (green \u003e1h, yellow \u003c1h, red \u003c5min, pulsing \u003c30s), tooltip with humanized duration; auto-refresh when a field expires\n- **String digest** (Redis 8.4+) — view the hash digest of any string key value via the `DIGEST` command; one-click button in string key actions\n- **Hybrid search** (Redis 8.4+) — toggle `FT.HYBRID` mode on the search page to combine text queries with vector similarity using Reciprocal Rank Fusion; requires a RediSearch index with a VECTOR field\n- **Cluster slot stats** (Redis 8.2+) — monitoring dashboard accordion showing top slots by key count, CPU time, or memory usage via `CLUSTER SLOT-STATS`; only visible in cluster mode\n- **Console command hints** — autocomplete for all new Redis 8.0–8.6 commands: HGETEX, HSETEX, HGETDEL, HTTL, HEXPIRE, HPERSIST, MSETEX, XDELEX, XCFGSET, DIGEST, FT.HYBRID, CLUSTER SLOT-STATS, CLUSTER MIGRATION\n- **AI query support** — AI prompt updated with all Redis 8.0–8.6 commands; Redis server version now correctly sent to AI for version-aware command generation\n- **Version-gated UI** — all Redis 8.x features automatically appear/hide based on the connected Redis server version\n\n### ES Modules Backend\nThe server codebase has been fully migrated from CommonJS to **ES Modules** (`.mjs`), enabling native Node.js ESM support and better tree-shaking.\n\n### ACL Management (Redis 6.0+)\n- **User list** — view all ACL users with status (enabled/disabled), current user indicator, and rules summary\n- **Create / Edit / Delete** — full ACL user management via a dialog with chip-based rule editing\n- **Chip inputs** — commands, key patterns, and pub/sub channels are entered as chips with placeholder hints\n- **Deny highlighting** — commands starting with `-` (e.g. `-@dangerous`) are visually highlighted with the warning color\n- **Default user warning** — editing the `default` user shows an inline warning alert explaining the risk of locking out connections\n- **Save confirmation** — every ACL save shows a themed confirm dialog\n- **Consistent across GUIs** — identical chip styling, layout, and behavior in Angular, React, and Vue\n\n### Security\n- **Secure configuration:** passwords and sensitive data are protected with unique identifiers for both main and node configurations\n\n\u003c!--\n👷 **The first full complete version was created in 20 days in September of 2018.**\n--\u003e\n\n\n## Important Notice\n\nDo not manually create the configuration `JSON` file with a text editor. Use the GUI to generate it instead — the resulting file can then be deployed to systems like Kubernetes.\n\n## Optional HTTP Basic Authentication\n\nProtect both HTTP routes and Socket.IO with HTTP Basic authentication.\n\nConfig (`p3xrs.json`):\n\n```json\n{\n  \"p3xrs\": {\n    \"httpAuth\": {\n      \"enabled\": true,\n      \"username\": \"admin\",\n      \"passwordHash\": \"$2b$10$...\"\n    }\n  }\n}\n```\n\nGenerate a BCrypt password hash:\n\n```bash\nnode ./node_modules/p3x-redis-ui-server/bin/bcrypt-password.js -p myplainpass\n```\n\nEnvironment variables:\n\n- `HTTP_USER`\n- `HTTP_PASSWORD`\n- `HTTP_PASSWORD_HASH`\n- `HTTP_PASSWORD_HASH_FILE`\n- `HTTP_AUTH_ENABLED` (`true|false`)\n\nCLI options:\n\n- `--http-auth-enable`\n- `--http-auth-disable`\n- `--http-auth-username`\n- `--http-auth-password`\n- `--http-auth-password-hash`\n- `--http-auth-password-hash-file`\n\nNotes:\n\n- `passwordHash` is preferred over plain `password`.\n- Use HTTPS or a reverse proxy with TLS when HTTP auth is enabled.\n\n## All Features Are Free\n\nAll features including SSH tunneling, Cluster/Sentinel, ReJSON, binary upload/download, and readonly connections are available for free. No license required.\n\n\n\u003c!--\n## License Integration\n\nThe app validates licenses through `network.corifeus.com` for product `p3x-redis-ui`.\n\n- Validation endpoint: `GET https://network.corifeus.com/public/license/check/:licenseKey`\n- Returned data is shown in `Settings -\u003e License`:\n  - tier, validity and status, reason\n  - starts/expires/check timestamps, days left\n  - enabled features\n- License key is displayed only in masked form on the client.\n- License state refreshes every 60 minutes (server + client refresh flow).\n- License validation requires internet access.\n\n### Tier Feature Policy\n\n- `free`\n  - Core Redis UI only; no SSH tunneling, no Readonly connection mode, no Cluster/Sentinel, no Edit JSON/Upload binary/Download binary, no ReJSON.\n  - Price: `0 HUF/month (€0/month)`.\n- `pro`\n  - SSH tunneling, Readonly connection mode (including `--readonly-connections`/`-r`), Edit JSON, Upload binary, Download binary, ReJSON (JSON data type).\n  - Base price: `400 HUF/month (€1/month)` or `4,000 HUF/year (€10/year)`.\n  - Total with `27%` VAT: `500 HUF/month (€1.27/month)` or `5,100 HUF/year (€12.70/year)`.\n- `enterprise`\n  - SSH tunneling, Cluster and Sentinel, Edit JSON, Upload binary, Download binary, ReJSON (JSON data type); `--readonly-connections`/`-r` also works.\n  - Base price: `1,200 HUF/month (€3/month)` or `12,000 HUF/year (€30/year)`.\n  - Total with `27%` VAT: `1,500 HUF/month (€3.81/month)` or `15,200 HUF/year (€38.10/year)`.\n- Yearly price is `10x` the monthly price.\n- Default license includes `5 seats`; for more seats, contact [`support@corifeus.com`](mailto:support@corifeus.com).\n- Enterprise trial: `10 days` free with a valid email address.\n- Billing info required: `Name, Billing e-mail, Country code, Postal code, City, Address, VAT ID (optional)`.\n- PayPal payment accepted only in `HUF` (Hungarian forint).\n- VAT (`27%` in Hungary) is added to paid plan prices.\n- Invoice/license communication is in English; invoice currency is HUF.\n- Contact: [`support@corifeus.com`](mailto:support@corifeus.com).\n\nEnforcement:\n- Backend enforces tier rules on connection save/connect/test paths\n- Backend enforces Pro+ for binary value writes (`key-set`, `key-new-or-set`)\n- Backend enforces Pro+ for ReJSON (JSON data type) operations (`key-get`, `key-new-or-set`, `key-json-set`)\n- Frontend mirrors the rules in UI controls (hide/disable + localized messages)\n- `--readonly-connections` (`-r`) requires `pro` or `enterprise` tier\n\n### License Editing Policy (`p3xrs.json`)\n\nLicense editability is controlled by server config:\n\n- `p3xrs.licenseEditable` (recommended)\n- Legacy fallback: `p3xrs.editableActive`\n- Legacy fallback: `p3xrs.disabled` (inverted)\n\nIf license editing is disabled:\n\n- the `Edit` button is disabled in the UI\n- the UI shows a terminal-only notice (EN/ZH/RU)\n- the server blocks license updates (`license_readonly`), preventing bypass from browser/API\n\nExample:\n\n```json\n{\n  \"p3xrs\": {\n    \"licenseEditable\": false\n  }\n}\n```\n\nRestart the server after changing `p3xrs.json`.\n--\u003e\n\n## Installation\n\n### Releases / Downloads\n\nhttps://github.com/patrikx3/redis-ui/releases\n\n### CLI (Node.js / NPM)\n\nStart the server via Node.js/NPM and access it in a browser.\n\n```bash\nnpm install -g p3x-redis-ui\np3xrs\n```\n\nOpen: `http://localhost:7843`\n\n#### CLI Options\n\n```text\nUsage: p3xrs [options]\n\nOptions:\n  -V, --version                           output the version number\n  -c, --config [config]                   Set the p3xr.json p3x-redis-ui-server configuration, see more help in p3x-redis-ui-server\n  -r, --readonly-connections              Set the connections to be readonly, no adding, saving or delete a connection\n  -n, --connections-file-name [filename]  Set the connections file name, overrides default .p3xrs-conns.json\n  --http-auth-enable                      Enable HTTP Basic auth\n  --http-auth-disable                     Disable HTTP Basic auth\n  --http-auth-username [username]         HTTP Basic auth username\n  --http-auth-password [password]         HTTP Basic auth plain password\n  --http-auth-password-hash [hash]        HTTP Basic auth bcrypt password hash\n  --http-auth-password-hash-file [file]   Read HTTP Basic auth bcrypt password hash from file\n  --groq-api-key [key]                    Groq API key for AI-powered Redis query translation (get a free key at console.groq.com)\n  --groq-api-key-readonly                 Prevent users from changing the Groq API key via the UI\n  -h, --help                              display help for command\n```\n\n[Server startup guide](artifacts/readme/start-up-server.md)\n\n[Config file reference](p3xrs.json)\n\n[Connection config reference](.p3xrs-conns.json)\n\n[Example connection config](.p3xrs-conns-example.json)\n\n### Docker\n\nhttps://hub.docker.com/r/patrikx3/p3x-redis-ui\n\n#### Compose\n\nhttps://github.com/patrikx3/redis-ui/blob/master/docker-compose.yml\n\n```bash\nwget https://raw.githubusercontent.com/patrikx3/redis-ui/master/docker-compose.yml\n# Adjust the settings folder path in docker-compose.yml as needed.\ndocker-compose up\n```\n\n#### Standalone\n\n```bash\nmkdir -p ./p3x-redis-ui-settings\ndocker run -v $PWD/p3x-redis-ui-settings:/settings -h docker-p3x-redis-ui -p 7843:7843 -t -i patrikx3/p3x-redis-ui\n```\n\nThe GUI will be at http://localhost:7843\n\n#### Health Check\n\nThe Docker image includes a built-in `HEALTHCHECK` that polls `/health` every 30 seconds. Container orchestrators (Docker Compose, Swarm, etc.) will automatically mark the container as unhealthy if the server stops responding.\n\n#### Graceful Shutdown\n\nThe server handles `SIGTERM` and `SIGINT` signals gracefully — it closes Socket.IO connections, disconnects all Redis clients, and shuts down the HTTP server before exiting.\n\n### Kubernetes\n\n#### Raw Manifests\n\nhttps://github.com/patrikx3/redis-ui/blob/master/k8s/manifests\n\n```bash\nkubectl apply -f namespace.yaml\n# Edit redis host and password in configmap.yaml first\nkubectl apply -f configmap.yaml\nkubectl apply -f deployment.yaml\nkubectl apply -f service.yaml\nkubectl apply -f ingress.yaml\n```\n\nThe manifests and Helm chart include **liveness** and **readiness** probes — both use `GET /health` to verify the server is responding.\n\n#### Helm Chart\n\nhttps://github.com/patrikx3/redis-ui/blob/master/k8s/chart\n\n```bash\nhelm template -f values.yaml release --namespace namespace . \u003e generated.yaml\nkubectl apply -f generated.yaml\n```\n\n### Desktop Applications\n\n#### macOS\n\nSupports both Intel and Apple Silicon builds. If you download the `zip` for the `arm64` version, remove the quarantine attribute:\n\n```bash\nsudo xattr -rd com.apple.quarantine P3X-Redis-UI.app\n```\n\n#### Snap\n\nAvailable for **x64** and **arm64** architectures.\n\n```bash\nsudo snap install p3x-redis-ui\n```\n\n[![LINK](https://cdn.corifeus.com/assets/svg/snap-store-black.svg)](https://snapcraft.io/p3x-redis-ui#cory-non-external)\n\n#### Flatpak\n\nDownload from the releases page and install:\n\n```sh\nwget https://github.com/patrikx3/redis-ui/releases/download/v${VERSION}/P3X-Redis-UI-${VERSION}-x86_64.flatpak\nflatpak install ./P3X-Redis-UI-${VERSION}-x86_64.flatpak\nflatpak run com.patrikx3.redis_ui\n```\n\nThe application menu is automatically integrated.\n\n#### AppImage, deb, rpm\n\nThese packages support automatic updates.\n\n\u003c!--\n#### To integrate into the menu using AppImage\nExecute:\n```bash\nsudo add-apt-repository ppa:appimagelauncher-team/stable\nsudo apt-get update\nsudo apt-get install appimagelauncher\n```\n--\u003e\n\nAfter downloading the AppImage, make it executable:\n\n```bash\nmkdir -p $HOME/opt\nmv ~/Downloads/p3x-redis-ui-a.b.c-x86_64.AppImage $HOME/opt/\nchmod +x $HOME/opt/p3x-redis-ui-a.b.c-x86_64.AppImage\n$HOME/opt/p3x-redis-ui-a.b.c-x86_64.AppImage \u0026\n```\n\n\u003c!--\nIt then actually integrates itself into the menus and it will auto update itself.\n--\u003e\n\n#### ElectronJs\n\nThe app is listed on [ElectronJs Apps](https://electronjs.org/apps) — search for `P3X`.\n\n## Architecture\n\nThis application uses Socket.IO instead of REST for client-server communication. While unconventional, Socket.IO provides better responsiveness by avoiding HTTP protocol overhead, resulting in a smoother interaction experience.\n\n[REST vs WebSocket benchmarks](https://www.google.com/search?q=rest+vs+websocket+comparison+benchmarks)\n\n\n### Communication Flow\n\n```\nBrowser / Electron App / VS Code Extension\n        ↓\nredis-ui-material\n  ├── Angular frontend (/ng/)  — Angular + Angular Material\n  ├── React frontend (/react/) — React + MUI + Vite + Zustand\n  └── Vue frontend (/vue/)     — Vue 3 + Vuetify + Vite + Pinia\n        ↓ Socket.IO + HTTP\nredis-ui-server (Express + ioredis)\n        ↓\nRedis Instance (standalone / cluster / sentinel, optional SSH tunnel)\n```\n\n### Related Repositories\n\n| Repository | Description |\n|------------|-------------|\n| [p3x-redis-ui](https://github.com/patrikx3/redis-ui) | Electron desktop app + CLI (this repo) |\n| [p3x-redis-ui-server](https://github.com/patrikx3/redis-ui-server) | HTTP + Socket.IO server backend |\n| [p3x-redis-ui-material](https://github.com/patrikx3/redis-ui-material) | Angular + React + Vue frontends |\n\n## Adoption Notes\n\n`redis-commander` has more Docker pulls due to its longer history and presence in tutorials/CI pipelines. `p3x-redis-ui` adoption continues to grow steadily.\n\n[Detailed analysis and action plan](artifacts/readme/adoption-growth.md)\n\n## Change Log\n\n[View change log](change-log.md)\n\n## Contributors\n\n[View contributors](contributors.md)\n\n## Links\n\n[P3X Redis UI playground](https://www.patrikx3.com/en/front/playground/19/p3x-reds-ui#PG19)\n[Corifeus P3X Redis UI](https://corifeus.com/redis-ui/)\n[AlternativeTo](https://alternativeto.net/software/p3x-redis-ui/)\n[NPM](https://www.npmjs.com/package/p3x-redis-ui)\n[Snap Store](https://snapcraft.io/p3x-redis-ui)\n[GitHub Pages](https://patrikx3.github.io/redis-ui/)\n[Web development](https://corifeus.eu/)\n[Webfejlesztés](https://corifeus.hu/)\n  \n\n[//]: #@corifeus-footer\n\n---\n\n## 🚀 Quick and Affordable Web Development Services\n\nIf you want to quickly and affordably develop your next digital project, visit [corifeus.eu](https://corifeus.eu) for expert solutions tailored to your needs.\n\n---\n\n## 🌐 Powerful Online Networking Tool  \n\nDiscover the powerful and free online networking tool at [network.corifeus.com](https://network.corifeus.com).  \n\n**🆓 Free**  \nDesigned for professionals and enthusiasts, this tool provides essential features for network analysis, troubleshooting, and management.  \nAdditionally, it offers tools for:  \n- 📡 Monitoring TCP, HTTP, and Ping to ensure optimal network performance and reliability.  \n- 📊 Status page management to track uptime, performance, and incidents in real time with customizable dashboards.  \n\nAll these features are completely free to use.  \n\n---\n\n## ❤️ Support Our Open-Source Project  \nIf you appreciate our work, consider ⭐ starring this repository or 💰 making a donation to support server maintenance and ongoing development. Your support means the world to us—thank you!  \n\n---\n\n### 🌍 About My Domains  \nAll my domains, including [patrikx3.com](https://patrikx3.com), [corifeus.eu](https://corifeus.eu), and [corifeus.com](https://corifeus.com), are developed in my spare time. While you may encounter minor errors, the sites are generally stable and fully functional.  \n\n---\n\n### 📈 Versioning Policy  \n**Version Structure:** We follow a **Major.Minor.Patch** versioning scheme:  \n- **Major:** 📅 Corresponds to the current year.  \n- **Minor:** 🌓 Set as 4 for releases from January to June, and 10 for July to December.  \n- **Patch:** 🔧 Incremental, updated with each build.  \n\n**🚨 Important Changes:** Any breaking changes are prominently noted in the readme to keep you informed.\n\n---\n\n\n[**P3X-REDIS-UI**](https://corifeus.com/redis-ui) Build v2026.4.2002\n\n [![NPM](https://img.shields.io/npm/v/p3x-redis-ui.svg)](https://www.npmjs.com/package/p3x-redis-ui)  [![Donate for PatrikX3 / P3X](https://img.shields.io/badge/Donate-PatrikX3-003087.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=QZVM4V6HVZJW6)  [![Contact Corifeus / P3X](https://img.shields.io/badge/Contact-P3X-ff9900.svg)](https://www.patrikx3.com/en/front/contact) [![Like Corifeus @ Facebook](https://img.shields.io/badge/LIKE-Corifeus-3b5998.svg)](https://www.facebook.com/corifeus.software)\n\n\n\n\n\n[//]: #@corifeus-footer:end\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpatrikx3%2Fredis-ui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpatrikx3%2Fredis-ui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpatrikx3%2Fredis-ui/lists"}