.github/ 0000775 0000000 0000000 00000000000 15164025543 0012423 5 ustar 00root root 0000000 0000000 .github/workflows/ 0000775 0000000 0000000 00000000000 15164025543 0014460 5 ustar 00root root 0000000 0000000 .github/workflows/build.yml 0000664 0000000 0000000 00000007243 15164025543 0016310 0 ustar 00root root 0000000 0000000 name: Build and Release on Tag
on:
push:
tags:
- 'v*'
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: ['lts/*']
steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node-version }}
- run: npm i -g grunt-cli
- run: npm install
- run: grunt
deploy-image:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: get-npm-version
id: package-version
uses: martinbeentjes/npm-get-version-action@main
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push Docker image
run: |
docker buildx build . \
--platform linux/amd64,linux/arm64,linux/arm/v7 \
-t patrikx3/p3x-redis-ui:latest \
-t patrikx3/p3x-redis-ui:${{ steps.package-version.outputs.current-version }} \
--push
package-and-release-macos:
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: 'lts/*'
- name: Install dependencies
run: npm install
- name: Decode and Install Certificates
env:
CERTIFICATE_P12_BASE64: ${{ secrets.CERTIFICATE_P12_BASE64 }}
CERTIFICATE_P12_PASSWORD: ${{ secrets.CERTIFICATE_P12_PASSWORD }}
run: |
echo $CERTIFICATE_P12_BASE64 | base64 --decode > certificate.p12
security create-keychain -p actions temp.keychain
security import certificate.p12 -k ~/Library/Keychains/temp.keychain -P "$CERTIFICATE_P12_PASSWORD" -T /usr/bin/codesign
security list-keychains -s temp.keychain
security default-keychain -s temp.keychain
security unlock-keychain -p actions temp.keychain
security set-key-partition-list -S apple-tool:,apple: -s -k actions temp.keychain
- name: Build and package macOS app
env:
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
DEBUG: "*"
run: npm run publish-macos
- name: Upload macOS build to GitHub Release
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ github.ref_name }}
files: |
dist/*.pkg
dist/*.dmg
dist/*.zip
dist/*.blockmap
dist/latest-mac.yml
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
package-and-release-windows:
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: 'lts/*'
- name: Install dependencies
run: npm install
- name: Build and package Windows app
run: npm run publish-windows
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload Windows build to GitHub Release
uses: softprops/action-gh-release@v1
with:
files: |
dist/*.exe
dist/*.msi
dist/*.blockmap
dist/latest.yml
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
.github/workflows/macos-test.yml 0000664 0000000 0000000 00000005417 15164025543 0017271 0 ustar 00root root 0000000 0000000 name: Build MAS
on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
build:
runs-on: macos-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: 'lts/*'
- name: Install dependencies
run: npm install
- name: Decode certificates and profiles
run: |
echo "${{ secrets.MAS_CERTIFICATE_P12 }}" | base64 --decode > mac_app.p12
echo "${{ secrets.MAS_INSTALLER_CERTIFICATE_P12 }}" | base64 --decode > mac_installer.p12
echo "${{ secrets.MAS_PROVISIONING_PROFILE }}" | base64 --decode > p3xredisui.provisionprofile
- name: Install Certificate
run: |
echo $CERTIFICATE_P12_BASE64 | base64 --decode > certificate.p12
security create-keychain -p actions build.keychain
security default-keychain -s build.keychain
security unlock-keychain -p actions build.keychain
security import mac_app.p12 -k build.keychain -P "$MAS_CERTIFICATE_PASSWORD" -T /usr/bin/codesign
security import mac_installer.p12 -k build.keychain -P "$MAS_INSTALLER_CERTIFICATE_PASSWORD" -T /usr/bin/productsign
security import certificate.p12 -k build.keychain -P "$CERTIFICATE_P12_PASSWORD" -T /usr/bin/codesign
security set-key-partition-list -S apple-tool:,apple: -s -k actions build.keychain
env:
CERTIFICATE_P12_BASE64: ${{ secrets.CERTIFICATE_P12_BASE64 }}
CERTIFICATE_P12_PASSWORD: ${{ secrets.CERTIFICATE_P12_PASSWORD }}
MAS_CERTIFICATE_PASSWORD: ${{ secrets.CERTIFICATE_P12_PASSWORD }}
MAS_INSTALLER_CERTIFICATE_PASSWORD: ${{ secrets.CERTIFICATE_P12_PASSWORD }}
- name: Setup Provisioning Profile
run: |
mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
cp p3xredisui.provisionprofile ~/Library/MobileDevice/Provisioning\ Profiles/
- name: Build MAS Package
run: npm run publish-macos
env:
CSC_LINK: file://mac_app.p12
CSC_KEY_PASSWORD: ${{ secrets.CERTIFICATE_P12_PASSWORD }}
CSC_INSTALLER_LINK: file://mac_installer.p12
CSC_INSTALLER_KEY_PASSWORD: ${{ secrets.CERTIFICATE_P12_PASSWORD }}
CSC_PROVISIONING_PROFILE: $(pwd)/p3xredisui.provisionprofile
APPLEID: ${{ secrets.APPLE_ID }}
APPLEIDPASS: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: List all files
run: ls -all -h dist
- name: Upload Artifacts
uses: actions/upload-artifact@v2
with:
name: mas-build
path: dist/*.pkg
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} .gitignore 0000664 0000000 0000000 00000000447 15164025543 0013060 0 ustar 00root root 0000000 0000000 /build
/node_modules
/*.log
/*.iws
.idea/workspace.xml
.idea/tasks.xml
.idea/profiles_settings.xml
.idea/inspectionProfiles/Project_Default.xml
.idea/inspectionProfiles/profiles_settings.xml
node_modules/.yarn-integrity
/dist
/p3x-redis-ui-settings
/.flatpak-builder
/.build
/repo
.DS_Store
.ncurc.json 0000664 0000000 0000000 00000000063 15164025543 0013145 0 ustar 00root root 0000000 0000000 {
"reject": [
"electron-store"
]
}
.npmignore 0000664 0000000 0000000 00000000414 15164025543 0013061 0 ustar 00root root 0000000 0000000 /.idea
/artifacts
/build
/test
/node_modules
/*.iml
/*.ipr
/*.iws
/.travis.yml
/.scrutinizer.yml
/Gruntfile.js
/*.lock
*.log
/corifeus-boot.json
/secure
/scripts
/dist
/.github
/.vscode
/.flatpak-builder
/.build
/repo
/generated-sources.json
/com.patrikx3.redis-ui.yml .p3xrs-conns-example.json 0000664 0000000 0000000 00000014753 15164025543 0015674 0 ustar 00root root 0000000 0000000 {
"update": "2024-03-30T07:14:37.928Z",
"list": [
{
"id": "P3Xid5a0dfde8c710100089fc907b54ac0d",
"name": "localhost",
"host": "localhost",
"port": 6379,
"readonly": false,
"cluster": false,
"sentinel": false,
"nodes": [],
"tlsWithoutCert": false,
"ssh": false,
"sshPort": 22
},
{
"id": "P3Xida0d91ee8c71010000f522eeef7a348",
"name": "server prod",
"host": "secure",
"port": 6379,
"readonly": false,
"cluster": false,
"sentinel": false,
"nodes": [],
"ssh": false,
"sshPort": 22,
"password": "secure"
},
{
"id": "P3Xid86322ee8c71010008c337ccb2c67ef",
"name": "server test",
"host": "secure",
"port": 6380,
"readonly": false,
"cluster": false,
"sentinel": false,
"nodes": [],
"askAuth": false,
"ssh": false,
"sshPort": 22,
"password": "secure"
},
{
"id": "P3Xid2dd6106a981010008259e3d1f3a201",
"name": "server test with tls",
"host": "secure",
"password": "secure",
"port": 7379,
"readonly": false,
"askAuth": false,
"sentinel": false,
"cluster": false,
"nodes": [],
"ssh": false,
"sshPort": 22,
"tlsWithoutCert": false,
"tlsRejectUnauthorized": false,
"tlsCrt": "-----BEGIN CERTIFICATE-----secure-----END CERTIFICATE-----",
"tlsKey": "-----BEGIN PRIVATE KEY-----secure-----END PRIVATE KEY-----",
"tlsCa": "-----BEGIN CERTIFICATE-----secure-----END CERTIFICATE-----"
},
{
"id": "P3Xidf634827e881010008da44ae82969f5",
"name": "vpn redis",
"host": "secure",
"port": 6379,
"readonly": true,
"tlsWithoutCert": false,
"tlsRejectUnauthorized": true,
"cluster": false,
"nodes": [],
"ssh": false,
"sshPort": 22,
"sentinel": false
},
{
"id": "P3Xid3862da58e81010008b1bd28b2142e3",
"name": "sentinel",
"host": "secure",
"port": 26379,
"readonly": true,
"askAuth": false,
"tlsWithoutCert": false,
"tlsRejectUnauthorized": true,
"cluster": false,
"sentinel": true,
"nodes": [
{
"host": "secure",
"port": 26380,
"id": "P3Xid81e69c68e81010005182fd9e1d5261"
},
{
"host": "secure",
"port": 26381,
"id": "P3Xid62099c68e81010000cf739e167e6a6"
}
],
"ssh": false,
"sshPort": 22,
"sentinelName": "sentinel"
},
{
"id": "P3Xid13512e98e8101000aac09572042541",
"name": "demona tunnel",
"host": "localhost",
"port": 6379,
"askAuth": false,
"readonly": true,
"tlsWithoutCert": false,
"tlsRejectUnauthorized": false,
"ssh": true,
"sshHost": "secure",
"sshPort": 22,
"sshUsername": "secure",
"cluster": false,
"sentinel": false,
"nodes": [],
"sshPassword": "",
"sshPrivateKey": "-----BEGIN RSA PRIVATE KEY-----secure-----END RSA PRIVATE KEY-----"
},
{
"name": "server test tunnel",
"host": "localhost",
"port": 6380,
"askAuth": false,
"id": "P3Xid1d5973b8e8101000430f568d12ecb5",
"tlsWithoutCert": false,
"tlsRejectUnauthorized": true,
"ssh": true,
"sshHost": "secure",
"sshPort": 22,
"sshUsername": "redis-ui",
"cluster": false,
"sentinel": false,
"nodes": [],
"password": "private",
"sshPrivateKey": "-----BEGIN OPENSSH PRIVATE KEY-----secure-----END OPENSSH PRIVATE KEY-----"
},
{
"name": "cluster",
"host": "localhost",
"port": 36379,
"askAuth": false,
"username": "",
"id": "P3Xid27bac4b8e8101000a4b8746ee66bc3",
"tlsWithoutCert": false,
"tlsRejectUnauthorized": false,
"ssh": false,
"sshPort": 22,
"cluster": true,
"sentinel": false,
"nodes": [
{
"host": "localhost",
"port": 36380,
"id": "P3Xid0af6c4b8e81010000e240e7a8ce7ac"
},
{
"host": "localhost",
"port": 36381,
"id": "P3Xid3907c4b8e810100084704e45d3bd37"
}
]
},
{
"name": "cluster grokzen",
"host": "localhost",
"port": 7000,
"askAuth": false,
"id": "P3Xid491fe7b8e81010008ba0f8c654ae0e",
"tlsWithoutCert": false,
"tlsRejectUnauthorized": false,
"ssh": false,
"sshPort": 22,
"cluster": true,
"sentinel": false,
"nodes": [
{
"host": "localhost",
"port": 7001,
"id": "P3Xid8035e7b8e8101000836a3798403521"
},
{
"host": "localhost",
"port": 7002,
"id": "P3Xidbbe6e7b8e810100007d8705d2db9a3"
},
{
"host": "localhost",
"port": 7003,
"id": "P3Xiddd68e7b8e810100003921524ee5e38"
},
{
"host": "localhost",
"port": 7004,
"id": "P3Xid73e9e7b8e810100006f8a0a1ab2c2b"
},
{
"host": "localhost",
"port": 7005,
"id": "P3Xid1d5be7b8e810100009ae5b8ee7e201"
}
]
}
]
} .p3xrs-conns.json 0000664 0000000 0000000 00000011442 15164025543 0014233 0 ustar 00root root 0000000 0000000 {
"update": "2064-03-29T14:10:53.960Z",
"license": "MIT",
"list": [
{
"id": "P3Xid-starts-with-and-indexing-unique-identifier",
"name": "instance with ssh",
"host": "127.0.0.1",
"port": 6379,
"password": "private",
"readonly": false,
"askAuth": false,
"cluster": false,
"sentinel": false,
"sentinelName": "",
"nodes": [],
"ssh": true,
"sshHost": "private",
"sshPort": 22,
"sshUsername": "private",
"sshPrivateKey": "private",
"sshPassword": "",
"tlsWithoutCert": false,
"tlsRejectUnauthorized": false,
"tlsCrt": "",
"tlsKey": "",
"tlsCa": ""
},
{
"id": "P3Xid-starts-with-and-indexing-unique-identifier",
"name": "instance with tls enabled",
"host": "127.0.0.1",
"port": 7379,
"password": "private",
"readonly": false,
"askAuth": false,
"cluster": false,
"sentinel": false,
"sentinelName": "",
"nodes": [],
"ssh": false,
"sshHost": "",
"sshPort": 22,
"sshUsername": "",
"sshPrivateKey": "",
"sshPassword": "",
"tlsWithoutCert": false,
"tlsRejectUnauthorized": false,
"tlsCrt": "private",
"tlsKey": "private",
"tlsCa": "private"
},
{
"id": "P3Xid-starts-with-and-indexing-unique-identifier",
"name": "instance with tls enabled without cert if it is valid",
"host": "127.0.0.1",
"port": 7379,
"password": "private",
"readonly": false,
"askAuth": false,
"cluster": false,
"sentinel": false,
"sentinelName": "",
"nodes": [],
"ssh": false,
"sshHost": "",
"sshPort": 22,
"sshUsername": "",
"sshPrivateKey": "",
"sshPassword": "",
"tlsWithoutCert": true,
"tlsRejectUnauthorized": false,
"tlsCrt": "",
"tlsKey": "",
"tlsCa": ""
},
{
"id": "P3Xid-starts-with-and-indexing-unique-identifier",
"name": "cluster",
"host": "127.0.0.1",
"port": 16379,
"password": "",
"readonly": false,
"askAuth": false,
"cluster": true,
"sentinel": false,
"sentinelName": "",
"nodes": [
{
"host": "127.0.0.1",
"port": 16380,
"password": "",
"id": "P3Xid-starts-with-and-indexing-unique-identifier-different-than-id-and-other-node-id"
},
{
"host": "127.0.0.1",
"port": 16381,
"password": "",
"id": "P3Xid-starts-with-and-indexing-unique-identifier-different-than-id-and-other-node-id"
}
],
"ssh": false,
"sshHost": "",
"sshPort": 22,
"sshUsername": "",
"sshPrivateKey": "",
"sshPassword": "",
"tlsWithoutCert": false,
"tlsRejectUnauthorized": false,
"tlsCrt": "",
"tlsKey": "",
"tlsCa": ""
},
{
"id": "P3Xid-starts-with-and-indexing-unique-identifier",
"name": "sentinel",
"host": "127.0.0.1",
"port": 26379,
"password": "sentinel password",
"readonly": false,
"askAuth": false,
"cluster": false,
"sentinel": true,
"sentinelName": "sentinel",
"nodes": [
{
"host": "127.0.0.1",
"port": 26380,
"password": "",
"id": "P3Xid-starts-with-and-indexing-unique-identifier-different-than-id-and-other-node-id"
},
{
"host": "127.0.0.1",
"port": 26381,
"password": "",
"id": "P3Xid-starts-with-and-indexing-unique-identifier-different-than-id-and-other-node-id"
}
],
"ssh": false,
"sshHost": "",
"sshPort": 22,
"sshUsername": "",
"sshPrivateKey": "",
"tlsWithoutCert": false,
"tlsRejectUnauthorized": false,
"tlsCrt": "",
"tlsKey": "",
"tlsCa": ""
}
]
}
Dockerfile 0000664 0000000 0000000 00000000763 15164025543 0013063 0 ustar 00root root 0000000 0000000 #docker login
#docker build -t patrikx3/p3x-redis-ui .
##docker tag IMAGE_ID patrikx3/p3x-redis-ui:latest
#docker push patrikx3/p3x-redis-ui:latest
#docker tag patrikx3/p3x-redis-ui:latest patrikx3/p3x-redis-ui:2023.4.102
#docker push patrikx3/p3x-redis-ui:2023.4.102
#docker images
#docker rmi -f IMAGE_ID
FROM node:lts-slim
ENV COMPOSER_PROCESS_TIMEOUT=3600
ENV DEBIAN_FRONTEND=noninteractive
ENV P3XRS_DOCKER_HOME=/settings
EXPOSE 7843
RUN npm -g --unsafe-perm install p3x-redis-ui
CMD p3x-redis
Gruntfile.js 0000664 0000000 0000000 00000001031 15164025543 0013353 0 ustar 00root root 0000000 0000000 const utils = require('corifeus-utils');
module.exports = (grunt) => {
const _ = require('lodash');
const builder = require(`corifeus-builder`);
const loader = new builder.loader(grunt);
loader.js({
replacer: {
type: 'p3x',
nodejsinfo: true,
},
});
//console.log(JSON.stringify(test, null, 4));
let defaults = builder.config.task.build.js.slice()
// defaults.splice(defaults.indexOf('mocha_istanbul:cory-coverage'), 1)
grunt.registerTask('default', defaults);
}
LICENSE 0000664 0000000 0000000 00000002013 15164025543 0012064 0 ustar 00root root 0000000 0000000 MIT License
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. README.md 0000664 0000000 0000000 00000040231 15164025543 0012342 0 ustar 00root root 0000000 0000000 [//]: #@corifeus-header
[](https://www.npmjs.com/package/p3x-redis-ui) [](https://paypal.me/patrikx3) [](https://www.patrikx3.com/en/front/contact) [](https://www.facebook.com/corifeus.software) [](https://stats.uptimerobot.com/9ggnzcWrw)
# 📡 P3X Redis UI is a very functional handy database GUI and works in your pocket on the responsive web or as a desktop app v2024.4.308
**Bugs are evident™ - MATRIX️**
### NodeJS LTS is supported
### Built on NodeJs version
```txt
v22.2.0
```
# Description
[//]: #@corifeus-header:end
**p3x-redis-ui** is a versatile Redis GUI that can function as either a backend server on the web or as a desktop application. This open-source software is particularly effective for managing JSON, featuring integration with JSONEditor and ACE. Explore a variety of options in the 'edit json' button dialog, which also supports uploading and downloading binary data. Additionally, it handles SSH, cluster, and sentinel configurations.
## Features
### Configuration and Security
- **Secure Configuration:** Setup is intricate due to its roots in shared web applications, ensuring that passwords and sensitive data are safeguarded with unique identifiers for both main and node configurations. Node-specific IDs enhance security measures for node passwords.
### Compatibility and Usage
- **Redis Versions and TLS:** Supports Redis 6 with TLS, enhancing security and data integrity.
- For TLS configuration details, visit [Configuring Redis TLS](https://spin.atomicobject.com/2021/08/05/configuring-redis-tls/).
- **Pika Compatibility:** Compatible with Pika, though not perfectly optimized.
- **SSH Tunneling:** Functional for single instances. Support for cluster and sentinel configurations is under development.
- **Environmental Customizations:** Customize the server port and home directory via `P3XRS_PORT` and `P3XRS_DOCKER_HOME` environment variables.
### Data Handling
- **Binary Data Management:** Special care is needed when handling binary data to prevent issues. Use the download button for binary data; direct editing in text mode is not supported for binary content.
- **Large Data Sets:** Handles values larger than 256 kB, indicated by `[object ArrayBuffer]`. For large values, utilize binary upload and download capabilities.
- **Clipboard Operations:** Text copying is supported directly; binary data requires using the download functionality.
### User Interface and Experience
- **Desktop Shortcuts:** Access menus in the desktop version by pressing ALT.
- **Responsive Design:** Fully responsive, ensuring usability on phones and tablets.
- **Themes:** Choose between Dark - Dracula and light themes for personalized visual comfort.
- **Data Visualization and Management:**
- Tree view settings allow adjustments to key count from a minimum of 100 to a maximum of 100,000 to prevent crashes.
- Deferred rendering in the tree view enhances performance by rendering only what is visible in the viewport.
### Advanced Features
- **Monitoring and Logging:** Monitor all channel messages on the console with a simple checkbox. Console history is stored indefinitely in local storage, keeping the last 20 entries accessible.
- **Database Interaction:** Select databases via the console or a dropdown menu, which also indicates whether databases are empty or filled.
- **Search Functionality:**
- Client-side mode for searching small sets of keys.
- Server-side mode for efficient searching within large sets of keys.
- Search can be configured to start with a specific string or include a string within the keys.
### Network Setup and Extensions
- **Sub-directory Support:** Utilize Nginx/Ingress to rewrite paths when used in a sub-directory.
- For more information, see [Issue #43](https://github.com/patrikx3/redis-ui/issues/43).
### Contributions and Support
- **Cluster Support:** Recently added and continuously improving. Contributions by [@devthejo](https://github.com/devthejo) have significantly enhanced this functionality.
- **Community and Feedback:** As this tool evolves, feedback and issue reporting are highly valued to refine and improve the features.
Redis UI provides a powerful interface for managing Redis databases with a focus on security, efficiency, and user experience. Whether you are dealing with small or large data sets, p3x-redis-ui offers robust solutions tailored to meet diverse operational needs.
## Important Notice
To ensure accuracy and minimize errors, we strongly advise against manually creating the configuration `JSON` file using a text editor. Instead, utilize the GUI to generate the configuration, which can then be seamlessly integrated into systems like Kubernetes.
### Awareness of AngularJs Security Risks
For detailed information on potential vulnerabilities and mitigation strategies, please refer to our [dedicated documentation](artifacts/readme/angularjs.md).
## Access the Latest Online Version
Explore the most current iteration of our project at [p3x.redis.patrikx3.com](https://p3x.redis.patrikx3.com)
### Operational Insights:
- **Data Restoration:** Our Redis database automatically restores certain datasets every morning at CET, offering a fresh start daily. Feel free to experiment as needed.
- **Application Stability:** You may notice brief downtime (about 1 second) in our test application, possibly due to automatic updates triggered by changes in the Git repository.
- **Version Consistency:** Please be aware that the live snapshot might differ from the versions available on GitHub or NPM. Updates and new features are typically released monthly or as developments occur.
### Screenshots
[Screenshots readme](artifacts/readme/screenshots.md)
## Change log
[The change log readme](change-log.md)
## Releases / Downloadable installer
https://github.com/patrikx3/redis-ui/releases
## MacOS Compatibility
Our application supports builds for both Intel and Apple Silicon architectures.
### Snap
[](https://snapcraft.io/p3x-redis-ui#cory-non-external)
## Flathub
You download from the releases page and install as:
```sh
wget https://github.com/patrikx3/redis-ui/releases/download/v${VERSION}/P3X-Redis-UI-${VERSION}-x86_64.flatpak
flatpak install ./P3X-Redis-UI-${VERSION}-x86_64.flatpak
flatpak run com.patrikx3.redis_ui
```
Besides the menu is integrated.
### AppImage, dep, rpm
AppImage, dep and rpm auto update itself.
#### To integrate into the menu using AppImage
Execute:
```bash
sudo add-apt-repository ppa:appimagelauncher-team/stable
sudo apt-get update
sudo apt-get install appimagelauncher
```
#### After downloading the ```AppImage```, make it an executable.
```bash
mkdir -p $HOME/opt
mv ~/Downloads/p3x-redis-ui-a.b.c-x86_64.AppImage $HOME/opt/
chmod +x $HOME/opt/p3x-redis-ui-a.b.c-x86_64.AppImage
# Then you can run it
$HOME/opt/p3x-redis-ui-a.b.c-x86_64.AppImage &
```
### On ElectronJs
The app can be found on [ElectronJs Apps](https://electronjs.org/apps) and search for `P3X`, you will find it.
### CLI
Start up with a server or via a browser and NodeJs/NPM.
[Start up with a server readme](artifacts/readme/start-up-server.md)
[Some description about the config file readme](p3xrs.json)
[Some description about the config connections readme](.p3xrs-conns.json)
[Example of config connections](.p3xrs-conns-example.json)
### Docker
https://hub.docker.com/r/patrikx3/p3x-redis-ui
#### Compose
https://github.com/patrikx3/redis-ui/blob/master/docker-compose.yml
```bash
wget https://raw.githubusercontent.com/patrikx3/redis-ui/master/docker-compose.yml
# You might want to tune the settings folder in the docker-compose.yml.
# the /home/user/p3x-redis-ui-settings settings folder in yml should be set by yourself.
docker-compose up
```
#### Bare
```bash
# you can tune the settings folder
# in the -v first part is where you can set your own folder
mkdir -p ./p3x-redis-ui-settings
docker run -v $PWD/p3x-redis-ui-settings:/settings -h docker-p3x-redis-ui -p 7843:7843 -t -i patrikx3/p3x-redis-ui
```
The GUI will be @ http://localhost:7843
### Kubernetes
A complete example of deployment `p3x-redis-ui` in kubernetes using raw manifests
https://github.com/patrikx3/redis-ui/blob/master/k8s/manifests
```bash
kubectl apply -f namespace.yaml
# Do not forget to edit redis host and password configuration
kubectl apply -f configmap.yaml
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
kubectl apply -f ingress.yaml
```
Helm chart `p3x-redis-ui` deployment in kubernetes
https://github.com/patrikx3/redis-ui/blob/master/k8s/chart
```bash
helm template -f values.yaml release --namespace namespace . > generated.yaml
kubectl apply -f generated.yaml
```
# Contributors
[The contributors readme](contributors.md)
# Development
For file names do not use camelCase, but use kebab-case. Folder should be named as kebab-case as well. As you can see, all code filenames are using it like that, please do not change that.
Please apply the `.editorconfig` settings in your IDE.
It creates a package that allows you to compose `p3x-redis-ui-server` and `p3x-redis-ui-material` into one:
[Server on GitHub](https://github.com/patrikx3/redis-ui-server)
[Client on GitHub](https://github.com/patrikx3/redis-ui-material)
If you develop on this app, you are required to test, that all JS you code write is working with Electron (as the embedded Electron NodeJs version is usually below the real NodeJs). Once the server and client is running as above, you clone this repo and test like this:
```bash
# terminal 1
git clone https://github.com/patrikx3/redis-ui-material.git
cd redis-ui-material
npm install
npm run dev
# terminal 2
git clone https://github.com/patrikx3/redis-ui-server.git
cd redis-ui-server
npm install
npm run dev
# if you are not working on Electron, at this point you can fire the browser
# @ http://localhost:8080/
# terminal 3
git clone https://github.com/patrikx3/redis-ui.git
cd redis-ui
npm install
./scripts/start-local.sh
# or
.\scripts\start-local.cmd
```
### Development of the translations
By default, only English is created, but given all strings are from a `JS` file, it is very quick to spawn another language eg. German, French, Spanish etc ...
[For a new language](https://github.com/patrikx3/redis-ui-material/blob/master/src/main.js)
[English strings, for the web UI](https://github.com/patrikx3/redis-ui-material/blob/master/src/strings/en/strings.js)
[English strings, for the Electron](https://github.com/patrikx3/redis-ui/blob/master/src/strings/en/index.js)
[Moment a new language for vendor (require moment/locale)](https://github.com/patrikx3/redis-ui-material/blob/master/src/vendor.js)
[JSON Editor, to incorporate a new language](https://github.com/patrikx3/redis-ui-material/blob/master/redis-ui-material/src/core/settings.js)
[Moment a new language for Material (momentDateMap)](https://github.com/patrikx3/redis-ui-material/blob/master/src/core/settings.js)
[Humanize duration](https://github.com/patrikx3/redis-ui-material/blob/master/redis-ui-material/src/core/settings.js)
# Solution
Interestingly, this solution doesn't employ REST; it opts for Socket.IO instead! 😄 It might seem a bit unconventional, but I actually appreciate the choice. Using Socket.IO is expected to be more responsive, as it avoids the significant overhead associated with the HTTP protocol. This approach should provide a smoother and faster interaction experience.
## Reference for Socket.IO speed
https://www.google.com/search?q=rest+vs+websocket+comparison+benchmarks
# URL links
[P3X Redis UI playground](https://www.patrikx3.com/en/front/playground/19/p3x-reds-ui#PG19)
[Corifeus P3X Redis UI](https://corifeus.com/redis-ui/)
[AlternativeTo Redis UI](https://alternativeto.net/software/p3x-redis-ui/)
[NPM P3X Redis UI](https://www.npmjs.com/package/p3x-redis-ui)
[Snap Store](https://snapcraft.io/p3x-redis-ui)
[Github.IO Page](https://patrikx3.github.io/redis-ui/)
[//]: #@corifeus-footer
---
## Support Our Open-Source Project ❤️
If 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!
### Server Availability
Our server may occasionally be down, but please be patient. Typically, it will be back online within 15-30 minutes. We appreciate your understanding.
### About My Domains
All my domains, including [patrikx3.com](https://patrikx3.com) 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.
### Versioning Policy
**Version Structure:** We follow a Major.Minor.Patch versioning scheme:
- **Major:** Corresponds to the current year.
- **Minor:** Set as 4 for releases from January to June, and 10 for July to December.
- **Patch:** Incremental, updated with each build.
**Important Changes:** Any breaking changes are prominently noted in the readme to keep you informed.
---
[**P3X-REDIS-UI**](https://corifeus.com/redis-ui) Build v2024.4.308
[](https://www.npmjs.com/package/p3x-redis-ui) [](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QZVM4V6HVZJW6) [](https://www.patrikx3.com/en/front/contact) [](https://www.facebook.com/corifeus.software)
[//]: #@corifeus-footer:end
_config.yml 0000664 0000000 0000000 00000000035 15164025543 0013210 0 ustar 00root root 0000000 0000000 theme: jekyll-theme-midnight
artifacts/ 0000775 0000000 0000000 00000000000 15164025543 0013043 5 ustar 00root root 0000000 0000000 artifacts/apple/ 0000775 0000000 0000000 00000000000 15164025543 0014144 5 ustar 00root root 0000000 0000000 artifacts/apple/entitlements/ 0000775 0000000 0000000 00000000000 15164025543 0016657 5 ustar 00root root 0000000 0000000 artifacts/apple/entitlements/entitlements.plist 0000664 0000000 0000000 00000001540 15164025543 0022447 0 ustar 00root root 0000000 0000000
com.apple.security.cs.allow-unsigned-executable-memory
com.apple.security.cs.disable-library-validation
com.apple.security.cs.allow-jit
com.apple.security.app-sandbox
com.apple.security.network.client
com.apple.security.network.server
com.apple.security.files.user-selected.read-write
com.apple.security.files.downloads.read-write
com.apple.application-identifier
3GB3S9SH84.com.patrikx3.redis-ui
com.apple.developer.team-identifier
3GB3S9SH84
artifacts/apple/entitlements/entitlementsInherit.plist 0000664 0000000 0000000 00000001540 15164025543 0023772 0 ustar 00root root 0000000 0000000
com.apple.security.cs.allow-unsigned-executable-memory
com.apple.security.cs.disable-library-validation
com.apple.security.cs.allow-jit
com.apple.security.app-sandbox
com.apple.security.network.client
com.apple.security.network.server
com.apple.security.files.user-selected.read-write
com.apple.security.files.downloads.read-write
com.apple.application-identifier
3GB3S9SH84.com.patrikx3.redis-ui
com.apple.developer.team-identifier
3GB3S9SH84
artifacts/apple/icons/ 0000775 0000000 0000000 00000000000 15164025543 0015257 5 ustar 00root root 0000000 0000000 artifacts/apple/icons/redis.icns 0000664 0000000 0000000 00000661736 15164025543 0017266 0 ustar 00root root 0000000 0000000 icns cTOC Hic07 "mic08 Gic09 Bic10 b0ic11 ic12 ic13 Gic14 Bic07 "mPNG
IHDR >a ",IDATx}{UoyeޓBf&a //) "s^;~
WEAAѣx|
Ey$LywwkLzI=UkoUUXw\[8Q8G(%0;+Nܴ魙3jLPL;Y ZUY 8 s73OH+7l# N>D$bޘ3A~'p <;<.-Ω/oR$Ӌ#֭Zu J ZD\JT!0C@