Examples
Real, copy-pasteable artifacts for the Multi Database egg, generated from the actual egg JSON in this repository.
1 · Egg JSON excerpt
The head of the exported egg definition (egg-database-multi.json, PTDL PTDL_v2): meta, the universal Docker image, and the first exported variables. Every variable follows this shape: env_variable is what the runtime reads, rules is the panel-side validation.
{
"_comment": "Excerpt of egg-database-multi.json - see the repo for the full exported egg.",
"meta": {
"version": "PTDL_v2",
"update_url": "https://raw.githubusercontent.com/PotenFYR-Studios/Database-Eggs/master/egg-database-multi.json"
},
"exported_at": "2026-08-22T04:00:00+00:00",
"name": "Multi Database",
"docker_images": {
"Universal Multi-Database (All Engines)": "ghcr.io/potenfyr-studios/database-eggs:latest"
},
"variables": [
{
"name": "Database Type",
"description": "Engine to run (installed isolated inside the container on demand).\nSQL: mariadb, mysql, postgresql, cockroachdb, yugabytedb, tidb, dolt\nNoSQL: mongodb (mongo), ferretdb, arangodb, orientdb, ravendb, cassandra, aerospike, rethinkdb\nIn-Memory/KV: redis, valkey, keydb, dragonfly, memcached, etcd, nats, immudb, consul\nVector/Search: meilisearch, typesense, qdrant, elasticsearch, opensearch, solr, manticoresearch, milvus, weaviate, quickwit\nTime-Series/Storage: influxdb, clickhouse, victoriametrics, prometheus, questdb, seaweedfs, garage, minio, pocketbase, loki, sqlite\nGraph/Ledger/Events: neo4j, dgraph, surrealdb, kafka | Misc: sqld, custom\nVersions: latest, stable, beta, alpha, nightly, snapshot, a major (18), a series (11.4),\nan exact version (8.0.45) or a direct https URL. Invalid/nonexistent pins are refused\nwith a 'Did you mean ...?' list of the closest published versions.",
"env_variable": "DATABASE_TYPE",
"default_value": "mariadb",
"user_viewable": true,
"user_editable": true,
"rules": "required|string|max:32",
"field_type": "text"
},
{
"name": "Database Version",
"description": "Version to run. 'latest' auto-resolves upstream newest. Series like 18 or 11.4 resolve to the latest patch automatically; full versions (8.0.45) are used as-is. Switching majors never deletes old data - a fresh data/<engine>/<version> instance is created and the old one is preserved.",
"env_variable": "DB_VERSION",
"default_value": "latest",
"user_viewable": true,
"user_editable": true,
"rules": "required|string|max:128",
"field_type": "text"
}
]
}Grab the complete file (28 variables, 51 engine targets):
curl -fsSL https://raw.githubusercontent.com/PotenFYR-Studios/Database-Eggs/master/egg-database-multi.json -o egg-database-multi.json2 · Docker Compose
Standalone Docker needs no panel: the same image and the same exported variables. The compose below boots PostgreSQL 18 with two auto-provisioned users.
services:
database:
image: ghcr.io/potenfyr-studios/database-eggs:latest
container_name: my-database
restart: unless-stopped
ports:
- "5432:5432" # primary database port
environment:
DATABASE_TYPE: postgresql
DB_VERSION: "18"
DB_NAME: appdb
DB_USERNAMES: alice,bob
DB_PASSWORDS: "" # empty slot = auto-generate
DB_ROOT_PASSWORD: "" # empty = auto-generate
AUTO_GENERATE_CREDENTIALS: "1"
SAVE_TO_ENV: "1"
PERFORMANCE_TUNING: "1"
SECURITY_HARDENING: "1"
volumes:
- ./data:/home/container/data
# Credentials land in ./data/../.env inside the container;
# read them with: docker exec my-database cat /home/container/.env
stop_grace_period: 30s
# The image ships tini as PID 1 with graceful signal handling;
# no custom entrypoint needed for standalone Docker.Start it and read the generated credentials:
docker compose up -d
docker exec my-database cat /home/container/.env # DB_PASSWORD, DB_ROOT_PASSWORD, ...3 · Panel import
Pterodactyl / Jexactyl: Admin → Nests → Import Egg. Pelican: Admin → Eggs → Import. Both accept the same PTDL_v2 file. Or let the panel fetch it by URL during import:
https://raw.githubusercontent.com/PotenFYR-Studios/Database-Eggs/master/egg-database-multi.jsonFull step-by-step with variable explanations: the install guide.