Config Checker for redis.conf and valkey.conf

Paste a redis.conf or valkey.conf and pick a server version. The checker reads the file the way that version reads it at startup and tells you whether the server would start. If it wouldn’t, you get the error the server prints, word for word, with the line it stops at, and then every other line it would stop at once that one is fixed. If it would, you see each setting the file changes as CONFIG GET would report it, and the settings that deserve a second look. It also reads the output of CONFIG GET * from a running server. It all runs in your browser.

Nothing you paste leaves this page. The tool doesn’t send anything anywhere, and the page’s security policy stops it from fetching or loading anything from another site, so your passwords and hostnames stay on your machine.

On a wide screen you can open it full screen.

How to Use It

  1. Paste the file into the box, or open it, or drop it anywhere on the page. The page reads files up to 1 MiB, about eight times the size of the default redis.conf.
  2. Pick the server you run. For Redis 6.2 and 7.0, say whether it was built with TLS; for Redis 8.10, whether it was built with BUILD_COMPRESSION=yes. Those settings exist only in such builds.
  3. Read the verdict. If the server would stop, fix the lines in the list and watch the verdict change as you type.
  4. Look at the rest: what deserves a second look, the settings the file changes, the file line by line, and a table of all 15 versions. Pick a version in the table to see its details.

Download the short file gives just the lines that change something, under their current names, written so that the version you picked reads them back to the same settings. Lines the server would stop at stay in it as comments, with the reason. To check a running server, paste the output of redis-cli --raw CONFIG GET '*' into the second box. The checker shows what differs from the defaults of its version, and works out the version from the setting names when you don’t know it, and the build too: a server built with TLS lists the TLS settings.

How a Server Reads Its Config File

Redis and Valkey read their config file once, at startup, before they open a port. Each line is a setting and its value, such as maxmemory 2gb. A line that starts with # is a comment, and quotes keep spaces inside a value.

The server stops at the first line it can’t use. It prints the line and the reason, then exits, so a misspelled name, a value out of range or a quote left open keeps the whole server down. The fix is usually small. Finding it can take a while when every attempt means a restart, and the checker finds them all in one pass.

A file that works with one version can stop another. Settings come and go, and the rules for values change. Redis 7.0 stopped accepting gopher-enabled. Redis 8.0 no longer stops at an unknown name: it takes the name for a module’s setting and stops later, while starting, when no module claims it. Valkey 9.0 reads "abc"def as one value where every other version refuses the line.

Some lines don’t stop the server and still don’t do what they seem to. A setting given twice keeps the last value. Old names such as slave-read-only still work for replica-read-only. Some values change as the server starts: hz is held between 1 and 500, and a cluster has one database. The checker shows each of these, and flags the settings worth a second look: no password with protected mode off, nothing saved to disk, no memory limit, DEBUG switched on, and more.

How It Was Tested

The checker’s answers come from the servers. A script read each version’s table of settings from its source code, every name, old name, type, bound and allowed value, and asked each built server for its defaults. Then it started each of the 15 versions, Redis 6.2.24 to 8.10.2 and Valkey 7.2.14 to 9.1.2, with 66,000 config files in all.

  • Every file reads the same. For each one, the checker gives the server’s answer: the same text, byte for byte, at the same line, or the same value for every setting. Over the 66,000 files that’s about 2,500,000 values.
  • Every problem in a file. When the server stopped at a line, that line came out and the file ran again, until the server started. Reading the whole file at once, the checker lists the same lines in the same order.
  • The short file. For every file, the short file the checker writes reads back to the same value for every setting. Started on real servers of seven versions, short files gave the same CONFIG GET values as the files they came from.
  • Stopping while starting. Settings left for modules, users in the file together with an ACL file, and a subcommand given to rename-command all stop the server after it has read the file. The checker gives the same log lines.

The files try every setting of every version with values chosen to find the edges: the limits and one past them, numbers that overflow, memory units, percentages, signs, spaces and leading zeros, every allowed word in every case, quotes, escapes and odd bytes.

The Code

The checker’s logic is one JavaScript file with no dependencies, open source under the Apache License 2.0. It checks user lines with the ACL Builder’s code. It also runs as a command line in Node.js, which a deploy script can call before it restarts a server:

node config/cli.js redis.conf                        # which of the 15 versions start with it
node config/cli.js redis.conf --server valkey-9.1    # one version in detail
node config/cli.js /etc/redis/redis.conf --server "redis 7.2.4" || exit 1

The full manual, the tests and the files they replay are in the config folder on GitHub. The other tools work the same way.