# GenesisDB CE Generated on 23 Feb 2026 from [the GenesisDB CE catalog page](https://marketplace.digitalocean.com/apps/genesisdb-ce) 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](https://www.genesisdb.io), 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](https://docs.genesisdb.io) ## Software Included | Package | Version | License | |---|---|---| | [GenesisDB CE](https://www.genesisdb.io/) | 1.1.3 | [Community](https://docs.genesisdb.io/community-edition) | ## 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. [![Deploy to DO](https://www.deploytodo.com/do-btn-blue.svg)](https://cloud.digitalocean.com/droplets/new?image=genesisdb-genesisdbce) ## 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](https://docs.digitalocean.com/reference/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](https://docs.digitalocean.com/reference/api/create-personal-access-token/index.html.md) to an environment variable or substitute it in the command below. ```shell 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@ sudo nano /etc/genesisdb/genesisdb.env ``` Set `GENESISDB_AUTH_TOKEN` to a strong, secret value of your choice: ``` GENESISDB_AUTH_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://:8080/api/v1/status/ping ``` **4. Check status (authenticated):** ``` curl -H "Authorization: Bearer " \ http://:8080/api/v1/status ``` **5. Commit your first events:** ``` curl --location "http://:8080/api/v1/commit" \ --header "Content-Type: application/json" \ --header "Authorization: Bearer " \ --data '{ "events": [ { "source": "io.genesisdb.app", "subject": "/customer", "type": "io.genesisdb.app.customer-added", "data": { "firstName": "Bruce", "lastName": "Wayne", "emailAddress": "bruce.wayne@enterprise.wayne" } } ] }' ``` **6. Stream events back:** ``` curl --location "http://:8080/api/v1/stream" \ --header "Content-Type: application/json" \ --header "Authorization: Bearer " \ --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" < /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 |