GenesisDB CE
Generated on 23 Feb 2026 from the GenesisDB CE catalog page
GenesisDB is a event sourcing database engine developed specifically for event sourcing. It handles the writing, reading, and watching of events with native precision. All while keeping consistency, reliability, and usability front and center. Whether you’re just exploring event sourcing, comparing tools, or building a production-grade system.
GenesisDB CE (Community Edition) is the freely available version of the GenesisDB database engine, purpose-built for event sourcing.
The goal isn’t to limit you. It’s to lower the barrier to entry. GenesisDB CE focuses on accessibility and learning, not artificial constraints. It’s powered by the same core engine as the commercial edition: the same performance, the same reliability, the same expectations for serious developers.
Read the full documentation: https://docs.genesisdb.io
Software Included
| Package | Version | License |
|---|---|---|
| GenesisDB CE | 1.1.3 | Community |
Creating an App using the Control Panel
Click the Deploy to DigitalOcean button to create a Droplet based on this 1-Click App. If you aren’t logged in, this link will prompt you to log in with your DigitalOcean account.
Creating an App using the API
In addition to creating a Droplet from the GenesisDB CE 1-Click App using the control panel, you can also use the DigitalOcean API. As an example, to create a 4GB GenesisDB CE Droplet in the SFO2 region, you can use the following curl command. You need to either save your API access token to an environment variable or substitute it in the command below.
curl -X POST -H 'Content-Type: application/json' \
-H 'Authorization: Bearer '$TOKEN'' -d \
'{"name":"choose_a_name","region":"sfo2","size":"s-2vcpu-4gb","image":"genesisdb-genesisdbce"}' \
"https://api.digitalocean.com/v2/droplets"Getting Started After Deploying GenesisDB CE
Getting Started After Droplet Creation
After creating your Droplet, you need to set your auth token before GenesisDB CE can accept requests.
1. SSH into your Droplet and set your auth token:
ssh root@<your-droplet-ip>
sudo nano /etc/genesisdb/genesisdb.env
Set GENESISDB_AUTH_TOKEN to a strong, secret value of your choice:
GENESISDB_AUTH_TOKEN=<your-secret-token>
GENESISDB_TZ=UTC
GENESISDB_PROMETHEUS_METRICS=true
GENESISDB_DATA_DIR=/data
2. Restart the service:
sudo systemctl restart genesisdb
3. Verify GenesisDB is running:
curl http://<your-droplet-ip>:8080/api/v1/status/ping
4. Check status (authenticated):
curl -H "Authorization: Bearer <your-secret-token>" \
http://<your-droplet-ip>:8080/api/v1/status
5. Commit your first events:
curl --location "http://<your-droplet-ip>:8080/api/v1/commit" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer <your-secret-token>" \
--data '{
"events": [
{
"source": "io.genesisdb.app",
"subject": "/customer",
"type": "io.genesisdb.app.customer-added",
"data": {
"firstName": "Bruce",
"lastName": "Wayne",
"emailAddress": "[email protected]"
}
}
]
}'
6. Stream events back:
curl --location "http://<your-droplet-ip>:8080/api/v1/stream" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer <your-secret-token>" \
--data '{
"subject": "/customer"
}'
Changing Configuration
Edit the environment file and restart the service:
sudo nano /etc/genesisdb/genesisdb.env
sudo systemctl restart genesisdb
Startup Script
This script is executed once when the Droplet is first created. It installs GenesisDB CE as a systemd service that starts automatically on every boot.
Path: /var/lib/cloud/scripts/per-instance/genesisdb-setup.sh
#!/bin/bash
set -euo pipefail
# --- GenesisDB CE — DigitalOcean Droplet Init Script ---
GENESISDB_ENV_FILE="/etc/genesisdb/genesisdb.env"
GENESISDB_DATA_DIR="/var/lib/gdb"
# Create directories
mkdir -p /etc/genesisdb
mkdir -p /var/lib/gdb
# Write environment config with placeholder token
# The user MUST set their own GENESISDB_AUTH_TOKEN before using the API.
cat > "$GENESISDB_ENV_FILE" <<EOF
GENESISDB_AUTH_TOKEN=CHANGE_ME
GENESISDB_TZ=UTC
GENESISDB_PROMETHEUS_METRICS=true
GENESISDB_DATA_DIR=/data
EOF
# Pull the latest image
docker pull genesisdb/genesisdb-ce:latest
# Install systemd service
cat > /etc/systemd/system/genesisdb.service <<'UNIT'
[Unit]
Description=GenesisDB CE
After=docker.service network-online.target
Requires=docker.service
[Service]
Type=simple
EnvironmentFile=/etc/genesisdb/genesisdb.env
ExecStartPre=-/usr/bin/docker rm -f genesisdb
ExecStart=/usr/bin/docker run --rm --name genesisdb \
-p 8080:8080 \
-v /var/lib/gdb:/data \
-e GENESISDB_AUTH_TOKEN=${GENESISDB_AUTH_TOKEN} \
-e GENESISDB_TZ=${GENESISDB_TZ} \
-e GENESISDB_PROMETHEUS_METRICS=${GENESISDB_PROMETHEUS_METRICS} \
-e GENESISDB_DATA_DIR=${GENESISDB_DATA_DIR} \
genesisdb/genesisdb-ce:latest
ExecStop=/usr/bin/docker stop genesisdb
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
UNIT
# Enable and start the service
# Note: GenesisDB will start with the placeholder token.
# The user must update /etc/genesisdb/genesisdb.env with their own token
# and run: sudo systemctl restart genesisdb
systemctl daemon-reload
systemctl enable genesisdb.service
systemctl start genesisdb.service
Droplet Summary
| Concern | How it’s handled |
|---|---|
| Auth token | Must be set by the user. Edit /etc/genesisdb/genesisdb.env and restart the service. |
| Timezone default | UTC configurable via /etc/genesisdb/genesisdb.env |
| License | Community Edition: no license key needed (env var left unset) |
| Data persistence | Host volume at /var/lib/gdb mounted to /data in the container |
| Auto-start on boot | systemd service with enable + Restart=always |
| Reconfiguration | Edit /etc/genesisdb/genesisdb.env, then sudo systemctl restart genesisdb |
| Port | 8080 ensure your DigitalOcean firewall allows inbound TCP on this port |
| Health check | GET /api/v1/status/ping (no authentication required) |
| Metrics | Prometheus metrics enabled by default |