Skip to content

vicanso/zedis

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

455 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

中文 | English

Zedis

A High-Performance, GPU-Accelerated Redis GUI Client Built with Rust 🦀 and GPUI ⚡️

License Twitter Follow Downloads blazingly fast

zedis.mp4


🤔 Why Zedis?

Tired of Electron-based Redis clients that eat gigabytes of RAM just to display a JSON string, or freeze entirely when you accidentally click a key with 100,000 elements? We were too.

Zedis is built from the ground up for developers who demand native performance. Powered by GPUI (the same revolutionary rendering engine behind the Zed Editor), Zedis delivers a native, buttery-smooth 60+ FPS experience with a minimal memory footprint—even when navigating massive databases.

✨ Killer Features

🚀 Blazingly Fast & Native

GPU Rendering — every pixel drawn on the GPU; zero-lag scrolling, instant tab switches.

Minimal memory footprint even when navigating massive databases.

Virtual Lists — browse instances with millions of keys without ever blocking the UI.

Virtual scrolling combined with SCAN iteration keeps the interface responsive no matter how large the keyspace.

Cross-Platform — native on macOS, Windows, and Linux, with Light / Dark / System themes.

A truly native feel across all three desktop platforms.

🧠 Smart Data Viewer

Zedis auto-detects (ViewerMode::Auto) and formats payloads on the fly.

Auto-Decompression — transparently unpacks LZ4, SNAPPY, GZIP, and ZSTD.

Compressed values are unpacked in place so you read the real payload, not a blob.

Rich Content Decoding — JSON/RedisJSON, Protobuf, MessagePack, Unix timestamps, media & hex.
  • JSON & RedisJSON: Full read/write with pretty-printing and syntax highlighting. Computes RFC 7396 Merge Patch diffs to send minimal JSON.MERGE commands instead of full overwrites. JSONPath filtering works on plain string keys too — query nested fields with $.user.email or $.items[?(@.price > 100)] without the RedisJSON module.
  • Protobuf & MessagePack: Zero-config binary deserialization into readable JSON-like output.
  • Unix Timestamps: A string that is exactly a 10-digit (seconds) or 13-digit (milliseconds) epoch is auto-recognized and previewed as local + UTC dates — the raw value stays intact and editable.
  • Media & Hex: Native preview for images (PNG, JPG, WEBP, SVG, GIF) and a fully editable hex view for raw binary — paste in hex (whitespace, commas, and 0x prefixes tolerated) and Zedis decodes it back to bytes on save. Bytes-per-row auto-adapts (16 / 24 / 32) to viewport width.
Custom Script Viewer — pipe any value through an external shell command for custom decoding.

Configure a command template with placeholders ({KEY}, {VALUE}, {HEX}, {RAW_FILE}); Zedis runs it via sh -c (Unix/macOS) or cmd /c (Windows) and shows stdout as the formatted value. Perfect for base64, custom binary protocols, or any tool in your $PATH. Key patterns matched by exact / prefix / suffix / regex rules per server.

Value File Export / Import — save any string value to disk, or load a file back into the key.

From the key bar's menu, dump the current string value's raw bytes to a file (extension guessed from the detected format — .png, .json, .gz, …), or overwrites the value with a chosen file's bytes. Binary-safe, TTL preserved (SET … KEEPTTL), and recorded in the local write history like any other save.

Key Rename — rename the selected key from the key bar, with overwrite protection.

The key bar's menu opens a rename dialog (prefilled with the current name). It issues an atomic RENAMENX, so it never silently clobbers a different key — if the target name already exists, you get an explicit "overwrite?" confirm before a RENAME proceeds. The editor stays on the renamed key and the key tree refreshes; value and TTL ride along server-side.

Cross-Server Key Copy — copy a key (value + TTL) to another server or db.

"Copy to…" in the key bar's menu picks a target server + db (with an overwrite toggle), then ships the selected key there via DUMP on the source and RESTORE on the target — value, encoding and remaining TTL all preserved server-side. Great for promoting a key into a test environment. Cross-version copies obey Redis's RESTORE compatibility rules.

Cross-Server Key Diff — compare a string key against the same key on another server.

"Diff with server…" in the key bar's menu picks a target server + db, fetches that server's value of the current key (GET), and opens the side-by-side diff view — the other server on the left, this one on the right (RedisJSON keys also get the RFC 7396 merge-patch block). Built for "why does prod's config differ from staging?". String keys only.

Hash Field-Level TTL (Redis 7.4+) — per-field expiry via HEXPIRE / HPERSIST.

Set individual expiry times on specific hash fields — no need to restructure your data model just to expire a subset of fields.

Redis Streams — browse, live-tail, and manage consumer groups without leaving the GUI.

Browse entries, live-tail new messages in real time (XREAD BLOCK, ring-buffered so a hot stream never blows up memory), inspect Consumer Groups & Pending Entries via XINFO, and manage groups (XGROUP CREATE / SETID / DESTROY, with a confirm guard on destroy).

Bulk Paste — add many Hash/List/Set/ZSet entries from TSV or CSV in one shot.

Paste TSV or CSV (tab preferred, comma fallback, per-cell trimmed) and Zedis fans the rows out through the normal HSET / RPUSH / SADD / ZADD paths.

Pub/Sub — subscribe to patterns and publish, live, from the GUI.

Built-in subscribe/publish interface — subscribe to channel patterns, receive live messages, and publish directly without switching to redis-cli.

Local Write History — last 10 versions of every string value, with diff & restore.

Kept in memory per key — one click rolls a previous version back into the editor. Purely client-side (no Redis storage cost), scoped to the session, cleared on key delete or server switch. A split-button Diff sits next to Restore — main click shows a side-by-side diff against the previous version, the dropdown picks any older version. JSON keys also get an RFC 7396 merge-patch block equivalent to the JSON.MERGE the Save path would send.

RediSearch Browser (module) — a dedicated panel for the FT.* command family.

List indexes via FT._LIST, inspect schema and stats from FT.INFO (including indexing progress and type mismatch failure counters that explain "0 docs" mysteries), run raw FT.SEARCH with HIGHLIGHT / RETURN / LIMIT chips, or switch to FT.AGGREGATE with single-stage GROUPBY + REDUCE (COUNT, SUM, AVG, QUANTILE, TOLIST...). Create indexes from a structured form (HASH / JSON, prefixes, per-field SORTABLE / NOSTEM / NOINDEX), or alter / drop existing ones. Auto-hidden when the module isn't loaded.

Functions Editor (Redis 7+) — manage server-side Lua libraries with syntax highlighting.

Manage libraries through FUNCTION LIST / LOAD / DELETE. Cards show each library's engine, registered functions, and flags (no-writes, allow-oom, ...); click to expand a read-only Lua viewer with tree-sitter highlighting. Edit and "New library" share one Lua editor with line numbers, indent guides, and an explicit REPLACE toggle. Auto-hidden on Redis 6.x and earlier.

Time Series Viewer (RedisTimeSeries) — TS.INFO metadata plus a bucketed TS.RANGE chart.

Selecting a TSDB-TYPE key opens a dedicated chart — TS.INFO surfaces total samples / memory / retention / chunk count and labels, while TS.RANGE (server-side AVG aggregation, bucketed to ~240 points so even a multi-million-sample series stays responsive) feeds a GPU-rendered line chart with 15m / 1h / 6h / 24h / 7d / All toggles. Self-gates by the key's existence.

Probabilistic Structures (RedisBloom) — Bloom / Cuckoo / Count-Min / Top-K / t-digest viewers.

Keys that used to render as opaque binary now open a dedicated read-only viewer showing their *.INFO stats (capacity, size, error rate, ...). Top-K also lists current heavy hitters (TOPK.LIST … WITHCOUNT) and t-digest adds min / max / p50 / p90 / p99 (TDIGEST.QUANTILE). Dispatched by the key's module TYPE.

Bitmap / Bitfield — visualise a string's bits on a GPU grid, with SETBIT / BITCOUNT / BITFIELD.

Strings that look like a raw bitmap — small (< 4 KB), non-text, unrecognised binary — open in Bitmap mode automatically; larger opaque binaries can be flipped from the key bar's menu (text / JSON and recognised formats like images don't get the entry). It paints the bits on a tile-less GPU grid — set bits lit, in Redis bit order. Hover reads off the bit offset; click a cell to flip it with SETBIT. A stat row surfaces whole-key BITCOUNT and BITPOS (first set / first clear), and a thin box runs raw BITFIELD sub-commands (e.g. GET u8 0). The grid is capped for responsiveness; the stats stay whole-key.

HyperLogLog — a PFCOUNT cardinality card for HLL-backed string keys.

A HyperLogLog is stored as a plain string, so it used to render as opaque binary. Zedis now detects the HYLL header magic and opens a dedicated read-only card showing the estimated cardinality (PFCOUNT), the internal encoding (dense / sparse) and the representation size (STRLEN), plus a PFADD box to fold in new elements and watch the estimate move.

Vector Set + KNN (Redis 8) — metadata plus interactive nearest-neighbour search.

Native vectorset keys open a viewer with VINFO / VCARD / VDIM metadata, a VRANDMEMBER sample, and an interactive KNN search: type (or click) an element to run VSIM … WITHSCORES and see its ranked nearest neighbours; click a neighbour to re-search from it and walk the HNSW graph hop by hop. Read-only.

Geo Map — plot a geospatial sorted set on a tile-less radar canvas.

Flip any sorted set into Map mode to plot its members on a dark, GPU-rendered Web Mercator canvas — no map tiles, no network. GEOPOS decodes the geohash, fit-to-bounds frames the data, and scroll-zoom / drag-pan / hover (with a live coordinate readout and a side list that cross-highlights) make it a fast GEO debugging "radar". Enter a center lon/lat + radius to run GEOSEARCH and highlight the matching points (the rest dim out) with the radius circle drawn on the canvas. Capped for responsiveness; invalid / non-geo members are listed separately.

📊 Real-Time Observability

A built-in, GPU-accelerated dashboard for monitoring your instances.

Live Metrics — real-time charts for CPU, memory, and network I/O.

Beautifully rendered, GPU-accelerated time-series charts.

Memory Analyzer + AI Advice — hunt BigKeys, see the TTL distribution, get AI optimization tips.

Sort the Top-N table by Size / Hottest / ColdestOBJECT FREQ or OBJECT IDLETIME is auto-selected from the server's maxmemory-policy. The same SCAN feeds a TTL distribution histogram (<1m / <1h / <1d / <7d / ≥7d / No TTL) alongside the BigKey tables — spot the "3 AM expiry cliff", see what share of keys is PERSIST (a memory-leak red flag), and read the estimated cluster-wide count even at ratio < 1.0. One click on AI Analysis turns the report into a Markdown summary and sends it to any OpenAI-compatible endpoint (Base URL + API key in Settings, key stored encrypted) for actionable advice rendered inline — only key names, sizes and TTLs are sent, never values. Works with OpenAI, Claude (via Anthropic's OpenAI-compatible endpoint, https://api.anthropic.com/v1/), and other compatible providers; advice is returned in the app's UI language.

Command Stats — "why is Redis busy": a per-command call-rate table.

A diagnostics page (status-bar Tools menu) that polls INFO commandstats — aggregated across all cluster masters — and shows a striped, per-command calls/second table computed from the delta between samples (cumulative counters are meaningless on their own; a CONFIG RESETSTAT is handled gracefully). For which key is hottest, the Memory Analyzer's "Hottest" sort already covers it via OBJECT FREQ.

Value Search — find which key contains some text (Redis can't index this, so it's a guarded sample).

Redis only matches by key name, so "which key holds this value" means SCANning and reading values — O(keyspace). This page (status-bar Tools menu) runs it behind guardrails: a mandatory key prefix pins the scan to a namespace, it stops after 10k keys or 10s (cancellable), values over 1 MiB (or containers over 10k elements) are skipped, and the summary states exactly what was scanned / matched / skipped and why it stopped — results are an explicit sample, never claimed exhaustive. Searches string values, hash fields, and list / set / sorted-set members (case-insensitive substring), and every hit shows where it matched (field / index / member). Click a hit to preview its value inline.

Cluster Health — inspect cluster/Sentinel topology as a tree with replication lag.

Hover the node indicator to see masters with their slot ranges, replicas grouped beneath, plus per-replica replication lag (bytes + seconds + link state) parsed from INFO replication.

Cluster / Sentinel Management — failover, forget, meet, replicate from a GUI panel.

The Topology panel (status-bar Tools menu) turns the detected deployment into actionable controls. Cluster: per-replica CLUSTER FAILOVER (with a FORCE option, run on that replica), CLUSTER FORGET fanned out to every master, plus CLUSTER MEET host:port and CLUSTER REPLICATE forms. Sentinel: per-master SENTINEL FAILOVER, RESET, and REMOVE. Every write routes through the confirm dialog with production-tag escalation. The panel only appears on multi-node deployments — Standalone servers don't get the menu entry.

Deep Diagnostics — Slow Log ↔ Latency cross-linking, live MONITOR, client management.

Track Slowlogs, monitor live MONITOR streams with keyword filtering, and manage active clients (CLIENT LIST/KILL). The Performance panel cross-links Slow Log entries with LATENCY events: each slow command shows a chip naming the nearest fork/AOF/expire event within ±5 s, one click jumps to that event's LATENCY HISTORY sparkline; the reverse chip narrows the Slow Log to that window. Disabled latency-monitor-threshold can be flipped on (default 100 ms) from the panel (PROD servers go through the confirm dialog).

Persistence Management — RDB/AOF status with one-click BGSAVE / BGREWRITEAOF.

A dedicated panel reads INFO persistence continuously — last RDB save time, changes since last save, AOF size with growth ratio against the rewrite baseline, plus per-fork failure banners. One-click BGSAVE / BGREWRITEAOF (cluster mode fans out to every master) through a confirm dialog with PROD escalation; buttons auto-disable while a fork runs or when read-only.

Keyspace Notifications — live key-event triage from keyspace / keyevent channels.

"Which client just deleted user:42?" answered without leaving the GUI. Channels are parsed into a (time, db, key, event, source) table with severity-colored verbs, a ring-buffered 1000-row history, and post-subscription chip filters (event-type multi-select + key substring). When notify-keyspace-events is empty, an inline banner offers a one-click "Enable (AKE)" — PROD servers detour through the confirm dialog first.

🛡️ Enterprise-Grade Security & Productivity

Command Palette (⌘K) — keyboard-first fuzzy search over servers and panels.

Switch connections or jump to any panel (Metrics, Performance, Memory, Config, ACL, RediSearch, Functions, Lua Scripts, Settings...) without the mouse. Arrow keys to move, Enter to run, Esc to dismiss.

Server Groups & Ordering — named, collapsible groups; reorder; share as JSON.

Organize connections into named groups, reorder cards within a group, and share a single connection as JSON (credentials stripped by default — opt in to include secrets for personal backups). Collapse state persists across sessions.

Read-Only Mode — lock a connection to prevent accidental writes.

Guards against accidental writes in production environments.

ACL Management (Redis 6+) — GUI for the full ACL lifecycle.

List users, view flags / commands / key patterns / channel rules, and edit via a quick-preset toolbar (Full access / Read-only / Disabled) plus toggleable chips for command categories (+@read, -@dangerous, ...) and key/channel wildcards.

Connection Safety — environment tags + confirm dialogs that escalate on production.

Tag each server (PROD / DEV / STAGING) with a colored chip surfaced in the sidebar and status bar. Dangerous commands (FLUSHALL, FLUSHDB, CONFIG SET, SHUTDOWN, DEBUG, SCRIPT FLUSH, KEYS *, batch DEL...) are intercepted with a confirm dialog that escalates wording on production-tagged servers.

Data Import / Export — DUMP/RESTORE-based, binary-safe across all key types.

Dump any selection of keys (multi-select, single key, or whole folder prefix) to a framed binary file with magic header + CRC32, then restore on another instance.

Advanced Tunnels — TLS/SSL (custom CA, client certs) and SSH tunneling.

Full support for TLS/SSL and SSH Tunneling (Password, Private Key, SSH Agent).

Integrated CLI & Workbench — redis-cli terminal with completion plus a multi-line Batch mode.

Version-aware command completion and inline argument/summary hints. A one-click Batch mode swaps the single-line REPL for a multi-line editor — one command per line, run the whole script with /Ctrl+Enter (dangerous lines still route through the confirm dialog).

Namespace Tree View — keys grouped into a nested tree by :, with TTL chips.

Right-click any folder to refresh its contents or delete all keys under that prefix. Each leaf key carries a compact TTL chip — green for live TTL, red when expiring within 2 minutes, gray for permanent keys.

Multi-Select & Batch Delete — mark and delete dozens of keys at once.

Toggle multi-select mode to delete many keys without writing a single command.

Batch TTL — set or remove expiry on a whole multi-selection or key prefix at once.

Right-click a multi-selection or a folder in the tree: Set TTL… opens a dialog (durations like 7d, 3600, 1h30m) and pipelines EXPIRE across every key in scope; Remove TTL (persist) runs PERSIST. Cluster-safe (per-key concurrent commands instead of a cross-slot pipeline), and both routes go through the confirm dialog with PROD escalation — no more setting expiry one key at a time.

Key Favorites & Search History — bookmark keys, revisit recent searches.

Bookmark frequently used keys for instant access and revisit recent searches from a persistent history panel.

Key Tags & Notes (client-side only) — colour-tag and annotate keys, stored locally.

Annotate any key with a colour tag (red / orange / yellow / green / blue / purple) and a free-form note — everything lives in the local redb file, zero Redis storage cost, never leaves the machine. Tagged rows carry a 4 px colour bar on the left edge; hover reveals the note. Edit via right-click → "Edit tag & note…". Each tag colour can be used as a one-click filter from the tree's ⋯ menu; the filter sources keys directly from local metadata rather than the in-flight SCAN snapshot, so every tagged key shows up immediately. After a save, only the affected row re-renders. Schema is versioned on disk for future migration.

Auto-Refresh — periodic key-tree refresh for fast-changing instances.

Configure an automatic refresh interval to keep the tree in sync with a live instance.


📦 Installation

Ready to feel the speed? Install Zedis via your favorite package manager:

macOS

The recommended way to install Zedis is via Homebrew:

brew install --cask zedis

Windows

scoop bucket add extras
scoop install zedis

Linux (Arch)

yay -S zedis-bin

Cargo (Cross-Platform via Source)

cargo install --locked zedis-gui

🤝 Contributing

We want to make Zedis the ultimate Redis client, and we'd love your help! Whether it's adding new features, translating the UI, or fixing bugs, all contributions are welcome.

Open an issue or a PR to get started. By submitting a PR, you agree to our lightweight Contributor License Agreement (CLA).

📄 License

Zedis is open-source software licensed under the Apache License, Version 2.0.

About

Zedis: A blazing-fast, native Redis GUI built with Rust and GPUI.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages