A graph database with Cypher queries, built-in graph algorithms and a separate browser workbench.
3.5K
Galactus DB is a property-graph database for connected datasets, with Cypher queries, Bolt 4.4 and 5.0–5.4 connectivity, and native graph data science (GDS) and APOC functionality.
This image runs the database server. The optional Galactus DB Explorer image provides a browser-based query workbench.
ianknowles/galactus-db:latest or a release tag such as ianknowles/galactus-db:1.4.17687 (Bolt TCP and Bolt over WebSocket; native TLS optional)/datagdbgalactusUse Linux containers on Docker Desktop for Windows or macOS. The latest tag
tracks the newest release; each release is also published under its version
tag (from 1.0.1). Pin a version tag or an image digest for repeatable
deployments.
Create a file named gdb.env with your own password of at least 12 characters:
GDB_INITIAL_PASSWORD=replace-with-your-own-long-password
Keep this file private and out of source control. Start the database:
docker run -d --name galactus-db --cpus 2 --env-file gdb.env -e GDB_LICENSE_MODE=developer -e GDB_DURABILITY=group -p 127.0.0.1:7687:7687 -v galactus-data:/data ianknowles/galactus-db:latest
Connect with a Bolt client that supports protocol version 4.4 or 5.0–5.4:
| Connection setting | Value |
|---|---|
| URI | bolt://127.0.0.1:7687 |
| Username | gdb |
| Password | The value in gdb.env |
| Database | galactus |
Run a first query:
RETURN 'Hello from Galactus DB' AS message;
View server logs with docker logs -f galactus-db. The built-in healthcheck
checks listener reachability; a successful authenticated query verifies database
access.
For a database and browser workbench together, use this setup as an alternative
to the standalone command above. Save it as compose.yaml:
services:
db:
image: ianknowles/galactus-db:latest
cpus: 2
environment:
GDB_BIND: "0.0.0.0:7687"
GDB_DATA: "/data/gdb"
GDB_INITIAL_USER: "gdb"
GDB_INITIAL_PASSWORD: "${GDB_INITIAL_PASSWORD:?Set GDB_INITIAL_PASSWORD in .env}"
GDB_INITIAL_DATABASE: "galactus"
GDB_LICENSE_MODE: "developer"
GDB_DURABILITY: "group"
ports:
- "127.0.0.1:7687:7687"
volumes:
- graph-data:/data
healthcheck:
test: ["CMD", "/usr/local/bin/gdb-server", "--healthcheck"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
explorer:
image: ianknowles/galactus-db-explorer:latest
environment:
GDB_EXPLORER_LISTEN: "0.0.0.0:7474"
GDB_EXPLORER_DEFAULT_ENDPOINT: "bolt://db:7687"
GDB_EXPLORER_DEFAULT_USER: "gdb"
ports:
- "127.0.0.1:7474:7474"
depends_on:
db:
condition: service_healthy
restart: unless-stopped
volumes:
graph-data:
Create a .env file beside compose.yaml, using your own password:
GDB_INITIAL_PASSWORD=replace-with-your-own-long-password
Start the services:
docker compose up -d
docker compose ps
docker compose logs -f db
Open http://127.0.0.1:7474 and sign in as gdb with your configured password.
Explorer connects to bolt://db:7687 within the Compose network. Select galactus
as the database. Applications running on your host connect to
bolt://127.0.0.1:7687.
Configure the server through environment variables. These are release image
defaults; both examples above explicitly select group durability.
| Variable | Default | Purpose |
|---|---|---|
GDB_INITIAL_PASSWORD | Required | Administrator password; at least 12 characters |
GDB_REQUIRE_PASSWORD | true | Refuse a missing, default or short administrator password |
GDB_INITIAL_USER | gdb | Administrator created at startup |
GDB_INITIAL_DATABASE | galactus | Home database, created if absent |
GDB_BIND | 0.0.0.0:7687 | In-container Bolt listener |
GDB_DATA | /data/gdb | Instance directory within the persistent volume |
GDB_LICENSE_MODE | developer | developer, personal, or commercial |
GDB_LICENSE | Unset | Commercial licence token |
GDB_LICENSE_FILE | Unset | Path to a mounted licence file; takes precedence over GDB_LICENSE |
GDB_INSTANCE_ID | Generated | Stable instance ID a Commercial licence is bound to; otherwise generated once and kept in the data directory |
GDB_CORE_METRIC | allocated_vcpu | How cores are counted for licensing; fractional CPU limits round up |
GDB_DURABILITY | buffered | buffered, group, or sync |
GDB_SYNC_INTERVAL_MS | 50 | Buffered flush interval in milliseconds |
GDB_READ_AFTER_DURABLE | true | In group mode, reads wait until the writes they can see are on disk |
GDB_CHECKPOINT_THRESHOLD | 67108864 | Log bytes before automatic maintenance; 0 disables |
GDB_PROPERTY_CACHE_BYTES | 16777216 | Decoded property cache budget per database |
GDB_INTERN_VALUES | true | Share repeated property strings in memory |
GDB_QUERY_THREADS | auto | Parallel read workers; automatic selection is capped at 8 |
GDB_MAX_INPUT_BYTES | 67108864 | Maximum incoming Bolt message or WebSocket frame size |
GDB_MAX_CONNECTIONS | 1024 | Connections served at once; 0 removes the limit |
GDB_QUERY_TIMEOUT_MS | unset | Statement and transaction time limit in milliseconds |
GDB_TLS_CERT, GDB_TLS_KEY | unset | PEM certificate chain and key enabling native TLS |
GDB_TLS_REQUIRED | true | Refuse plaintext once a certificate is configured |
GDB_METRICS_BIND | unset | host:port of the Prometheus metrics endpoint |
GDB_BOLT_MAX_VERSION | 5.4 | Newest Bolt version offered (4.4, 5.0–5.4) |
GDB_NEO4J_AGENT | false | Report the agent as Neo4j/4.4.0-GDB-<version> for drivers that refuse other agents |
GDB_STREAM_MIN_ROWS | 4096 | Smallest plain result read from the database as it is pulled; 0 holds every result in memory |
GDB_CHANGE_STREAMS | off | Turns on change streams, subscriptions and replica databases (from 1.4.0); each database also opts in |
GDB_STREAM_RETENTION, GDB_STREAM_MAX_BYTES | Unset | Default change-stream retention (e.g. 7d) and size limit (e.g. 10GiB) |
GDB_STREAM_SEGMENT_BYTES, GDB_STREAM_SYNC_MS, GDB_STREAM_MAX_LAG_BYTES | 64MiB, 1000, 64MiB | Stream segment size, stream sync period, and the backlog at which a lagging stream fails instead of growing |
GDB_LOG | info | JSON log threshold: debug, info, warn, error or critical |
buffered durability can lose acknowledged changes since the last sync after a
power or kernel failure. group and sync wait for a covering disk sync before
acknowledging commits.
Keep GDB_BIND=0.0.0.0:7687 inside the container. Use the host port mapping to
control access. The examples publish ports only on loopback.
For remote access, use private networking and TLS. Mount a certificate and set
GDB_TLS_CERT and GDB_TLS_KEY (PEM, certificate chain leaf first). The
server then terminates TLS itself on port 7687 (bolt+s://) and refuses
plaintext unless GDB_TLS_REQUIRED=false. Without a certificate the listener
is plaintext. Keep GDB_METRICS_BIND on a private interface: the
metrics endpoint is unauthenticated.
Mount a volume at /data to retain database files when replacing a container.
The image runs as UID/GID 10001:10001. New named volumes inherit the image's
directory ownership; bind-mounted directories must be writable by that user.
Use a separate data directory for each instance, with only one running server
accessing it.
docker compose down retains the named volume. Adding -v deletes it and its
database files.
Before upgrading, arrange a verified backup and check storage compatibility for the target release. Native backup and restore require Commercial entitlement. Set the desired image tag or digest in your Compose file, then run:
docker compose pull
docker compose up -d
docker compose ps
Keep the previous image reference and your recovery copy. An older image is not guaranteed to read data written by a newer release.
Galactus DB is proprietary software. Use is subject to the applicable licence grant and terms.
| Edition | Intended use | CPU allocation | Native backup and restore |
|---|---|---|---|
| Developer | Development and evaluation | Multiple allocated CPUs | Unavailable |
| Personal | Personal projects | One allocated CPU | Unavailable |
| Commercial | Commercial deployments | Licensed allocated cores per instance | Requires backup/restore entitlement |
A fresh instance starts in free Developer mode without a licence key,
registration, or online activation. Both free editions support reads, writes,
Cypher, GDS, and APOC. For Personal mode, set GDB_LICENSE_MODE=personal and limit
the container to one CPU.
Personal runs one active user database plus system, and Developer runs three
plus system; image tags before 1.3.0 limit Developer to one. GDB_INITIAL_DATABASE
selects the home database. Commercial supports any number of active user databases.
Commercial deployments require a Commercial licence. A licence is issued for
one instance ID and a number of allocated cores. Run CALL gdb.license(); to
see this instance's ID, its allocated cores and its licence status, and supply
them when you order. The ID is generated once and kept in the data directory,
so keep the volume, or set GDB_INSTANCE_ID to fix it explicitly.
Supply the token through GDB_LICENSE or a mounted file selected by
GDB_LICENSE_FILE, set GDB_LICENSE_MODE=commercial, and limit the container
to the licensed cores (for example --cpus 4). Reads stay available if a
licence is missing, expired or exceeded; writes are refused until it is fixed.
Galactus DB implements its own Cypher, GDS, and APOC functionality. Support is a
subset of the corresponding Neo4j interfaces; applications should verify the
queries and procedures they use. Drivers must be able to negotiate Bolt 4.4 or
5.0–5.4. The official Neo4j Python driver refuses any server agent that does not
begin Neo4j/; start the server with GDB_NEO4J_AGENT=true to use it.
The server operates as a single node, without replicated clustering or
failover. From 1.4.0, with GDB_CHANGE_STREAMS=on, a database can publish a
change stream, feed subscriptions and trigger queues, and keep read-only
replica databases on the same instance. Write execution is exclusive. Graph
topology and indexes remain in memory, so size container memory for the
workload as well as the property cache.
The runtime image contains no shell or package manager. Use docker logs and
Bolt clients for diagnostics.
Content type
Image
Digest
sha256:07a436115…
Size
4.5 MB
Last updated
about 1 hour ago
docker pull ianknowles/galactus-db