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

Public instance is available at: https://rendezvous.jipok.ru

πŸš€ API Usage

Note: All responses include an extra header:

Retrieve a Value

curl {CURRENT_HOST}/get/your-key

If the key exists, server returns the stored value with an extra header: X-Expires-At (Unix timestamp).

Store or Update a Value

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

You can optionally specify a TTL (up to max): ?ttl=30m

curl -X POST -d "session-token-123" "{CURRENT_HOST}/set/my-key?ttl=30m"

Load Or Store (Atomic Get-Or-Create)

curl -X POST -d "initial-value" {CURRENT_HOST}/los/unique-key

Compare-And-Swap (CAS)

curl -X POST -d "new-value" \
     -H "X-Expected-Value: old-value" \
     {CURRENT_HOST}/cas/some-key

Succeeds only if current value matches X-Expected-Value. Otherwise returns existing value with HTTP 409 Conflict.

Compare-And-Swap Or Create (CASOC)

curl -X POST -d "my-value" \
     -H "X-Expected-Value: old-value" \
     {CURRENT_HOST}/casoc/my-key

Protecting Values with Owner Secret

curl -X POST -d "protected-data" \
     -H "X-Owner-Secret: my-secret" \
     {CURRENT_HOST}/set/secure-key

Only clients with the same secret can update. New keys can be β€œclaimed” by providing a secret on first write. (Value + secret ≀ 1000 bytes)

IP-Protected Keys

# If client IP is 20.18.12.10, key will be stored as "ip/20.18.12.10/service1"
curl -X POST -d "my server instance" {CURRENT_HOST}/set/ip/service1

curl {CURRENT_HOST}/get/ip/20.18.12.10/service1

Ensures only that IP can update ip/... keys. Server returns your public IP on success instead of "OK".

πŸ“‹ 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

FlagDefaultDescription
-maxKeySize100Maximum key length in bytes
-maxValueSize1000Maximum value length in bytes (including secret)
-maxNumKV100000Maximum number of key-value pairs
-expireDuration2hMaximum/default TTL per key
-resetDuration1mTime between rate limit resets
-saveDuration30mInterval between persistence saves
-maxRequests17Max tokens per IP per window (SET=3, GET=1)
-port80Server listening port
-l0.0.0.0Listen address
-disableLocalIPWarningfalseDisable warnings for requests from localhost

Example:

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

⚠️ Limitations