Rendezvous Key-Value Server

A lightweight, public key-value store server designed as a rendezvous/bootstrap point for mesh networks, distributed applications, and general-purpose key-value storage without registration.

🌐 Public Instance

A public instance is available at: https://rendezvous.jipok.ru

🚀 API Usage

Store a Value

curl -X POST -d "your-data-here" {CURRENT_HOST}/your-key

The expiration time for a key is reset with every successful POST request, extending its lifetime.

Retrieve a Value

curl {CURRENT_HOST}/your-key

Protecting Values with Owner Secret

You can protect your values from modification by adding the X-Owner-Secret header when posting:

# Store a value with owner protection
curl -X POST -d "your-protected-data" -H "X-Owner-Secret: your-secret-here" {CURRENT_HOST}/your-key

# Update a protected value (requires the same secret)
curl -X POST -d "your-new-data" -H "X-Owner-Secret: your-secret-here" {CURRENT_HOST}/your-key

# This will be rejected if the secret doesn't match
curl -X POST -d "unauthorized-update" -H "X-Owner-Secret: wrong-secret" {CURRENT_HOST}/your-key

Anyone can still read the value, but only someone with the correct secret can modify it.

Note: The secret and the value together must not exceed the maximum value size limit (1000 bytes by default).

IP-Protected Keys

For paths prefixed with /ip/, the server automatically injects the client's IP address into the key:

# If your client IP is 20.18.12.10, this actually stores the value under
# the key "ip/20.18.12.10/service1" automatically
# The response will return your public IP address instead of "OK".
curl -X POST -d "my-server-info" {CURRENT_HOST}/ip/service1

curl {CURRENT_HOST}/ip/20.18.12.10/service1

This feature makes it easy for servers to publish information that only they can modify, without needing to know their public IP in advance. Stored key is automatically prefixed with client's IP, preventing others from overwriting the data.

📋 Use Cases

🔧 Self-hosted

Using prebuilt

wget https://github.com/Jipok/rendezvous/releases/latest/download/rendezvous-server
chmod +x rendezvous-server
./rendezvous-server

Using Go

git clone https://github.com/Jipok/rendezvous
cd rendezvous
go build
./rendezvous-server

🔑 Features

⚙️ Configuration

Flag Default Description
-maxKeySize 100 Maximum key length in bytes
-maxValueSize 1000 Maximum value size in bytes (including secret)
-maxNumKV 100000 Maximum number of key-value pairs
-expireDuration 2h Time after which keys expire
-resetDuration 1m Duration between rate limit resets
-saveDuration 30m Duration between state saves
-maxRequests 11 Maximum request tokens per IP (POST=3 tokens, GET=1 token)
-port 80 Server port
-l 0.0.0.0 Interface to listen on
-disableLocalIPWaring false Disable warnings about requests from localhost

Example:

./rendezvous-server -maxValueSize 4096 -expireDuration 24h -port 9000

⚠️ Limitations