$ kivo

Web Console — try it in your browser

Start kivo, open http://localhost:3001, and paste any command below. Results render RESP-style (+OK, -ERR, :42, "value", arrays). No redis-cli. No client library. Nothing to install.

How to use

  1. Run go run ./cmd/kivo (or docker run -p 6379:6379 -p 3001:3001 ghcr.io/itsmunim/kivo).
  2. Open http://localhost:3001 in your browser.
  3. Paste the commands below into the terminal, one at a time (or in a batch).
  4. The keys panel on the left shows every key with a type badge and TTL; click a key to GET it. It refreshes every 5 seconds.
  5. Press ↑/↓ to recall previous commands.

1 · Connection & sanity

CommandExpected
PING+PONG
ECHO "hi""hi"
DBSIZE:0 (an empty key count)

2 · Strings

CommandExpected
SET name "alice smith"+OK
GET name"alice smith"
APPEND name "!":12 (new length)
STRLEN name:12
SET counter 10+OK
INCR counter:11
INCRBY counter 5:16
DECR counter:15
MSET a 1 b 2 c 3+OK
MGET a b carray "1","2","3"

3 · Lists

CommandExpected
RPUSH tasks "write code" "review pr" "deploy":3
LPUSH tasks "kickoff":4 (now at head)
LRANGE tasks 0 -1array of all 4
LRANGE tasks 0 1first 2 items
LLEN tasks:4
LINDEX tasks 1"write code"
RPOP tasks"deploy"
LPOP tasks"kickoff"
LREM tasks 1 "review pr":1
LTRIM tasks 0 1+OK (keeps 2)
Note: if you see the key in the panel but not immediately after a write, that is the 5-second panel refresh — hit the refresh button or wait.

4 · Sets

CommandExpected
SADD tags go redis cache:3
SADD tags go:0 (already a member)
SMEMBERS tagsarray of 3
SISMEMBER tags redis:1
SISMEMBER tags rust:0
SCARD tags:3
SPOP tagsone random member
SADD a 1 2 3  ·  SADD b 2 3 4:3 each
SINTER a b"2","3"
SUNION a b"1","2","3","4"
SDIFF a b"1"

5 · Hashes

CommandExpected
HSET user:1 name "Alice" email "a@x.io" age 30:3
HGET user:1 name"Alice"
HMGET user:1 name age"Alice","30"
HGETALL user:1flat array name/Alice/email/…
HKEYS user:1name,email,age
HVALS user:1Alice,a@x.io,30
HEXISTS user:1 email:1
HLEN user:1:3
HINCRBY user:1 age 1-ERR (not in v1 command set — expected)

6 · Sorted Sets (leaderboard)

CommandExpected
ZADD board 100 alice 200 bob 150 carol:3
ZSCORE board alice"100"
ZRANGE board 0 -1 WITHSCORESalice/100, carol/150, bob/200 (ascending)
ZREVRANGE board 0 2bob,carol,alice (top 3)
ZRANGEBYSCORE board 150 200carol,bob
ZINCRBY board 50 alice"150"
ZCARD board:3
ZCOUNT board 100 150:2
ZREMRANGEBYSCORE board 160 1000:1 (removes bob)

7 · Keys & expiration

CommandExpected
SET temp value EX 5+OK
TTL temp:4 or :5 (counts down)
PEXPIRE temp 3000:1
PTTL temp~3000, decreasing
PERSIST temp:1 (removes TTL)
TTL temp:-1 (no expiry)
EXISTS temp:1
RENAME temp temp2+OK
TYPE temp2string
TYPE taskslist
TYPE user:1hash
KEYS *all keys
KEYS t*tasks, temp2, tags…

8 · Errors & edge cases

CommandExpected
GET missingkey(nil)
LPUSH 42-ERR wrong number of arguments
BOGUSCMD x-ERR unknown command
LPOP name-ERR WRONGTYPE (name is a string)
FLUSHDB+OK (nuclear reset — clears all keys)
Tip: after FLUSHDB the keys panel empties and DBSIZE returns :0. Any unexpected -ERR elsewhere is a bug — report it at github.com/itsmunim/kivo/issues.