Connecting
Connect to your provisioned MariaDB, Postgres, or MongoDB database on db.teamhydra.dev with the CLI, a driver, or an ORM, plus the naming scheme, status values, and quota model.
Connecting
Each database you provision is a real database on db.teamhydra.dev with a dedicated user scoped to that one database. Use any client that speaks the engine's wire protocol.
Connection details
Find the connection string and password on each database card in the dashboard Databases tab. On creation, the management API also returns them once in the response.
| Engine | Host | Port |
|---|---|---|
| MariaDB / MySQL | db.teamhydra.dev | 3306 |
| Postgres | db.teamhydra.dev | 5432 |
| MongoDB | db.teamhydra.dev | 27017 |
The username and database name are auto-generated; the password is shown on creation. To reveal the current password again, or rotate it, use the database card in the dashboard or the management API.
Naming scheme
Names are generated deterministically so you can recognize them. For a database in slot n:
- Database name:
u<engineLetter>_<userSlug>_<n> - Database user:
du<engineLetter>_<userSlug>_<n>
Where engineLetter is m for MariaDB, p for Postgres, g for MongoDB, userSlug is the last 10 characters of your user ID (lowercased, non-alphanumerics replaced with x), and n is the per-engine slot number starting at 1. For example, a second MariaDB database for user slug 0a1b2c3d4e is database um_0a1b2c3d4e_2 with user dum_0a1b2c3d4e_2. The name you choose ("my-app") is the friendly label; it is not the connection-level database name.
MariaDB / MySQL
CLI
mysql -h db.teamhydra.dev -P 3306 -u <db_user> -p <db_name>The MariaDB client (mariadb) works identically. Add --ssl if your client supports it; TLS is served when it is configured on the server.
Node.js (mysql2)
import mysql from "mysql2/promise";
const pool = mysql.createPool({
host: "db.teamhydra.dev",
port: 3306,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
waitForConnections: true,
connectionLimit: 5,
});
const [rows] = await pool.execute("SELECT NOW() AS now");
console.log(rows);Prisma
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}# use the connection string from your database card
DATABASE_URL="mysql://<db_user>:<password>@db.teamhydra.dev:3306/<db_name>"Postgres
Provision with "engine":"postgres". The returned connection string uses the postgresql:// scheme.
CLI
psql "postgresql://<db_user>:<password>@db.teamhydra.dev:5432/<db_name>"Node.js (pg)
import { Pool } from "pg";
const pool = new Pool({
host: "db.teamhydra.dev",
port: 5432,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
max: 5,
});
const { rows } = await pool.query("SELECT NOW() AS now");
console.log(rows);Prisma
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}DATABASE_URL="postgresql://<db_user>:<password>@db.teamhydra.dev:5432/<db_name>"MongoDB
Provision with "engine":"mongo". The returned connection string uses the mongodb:// scheme and includes ?authSource=admin.
CLI
mongosh "mongodb://<db_user>:<password>@db.teamhydra.dev:27017/<db_name>?authSource=admin"Node.js (mongodb driver)
import { MongoClient } from "mongodb";
const client = new MongoClient(
"mongodb://<db_user>:<password>@db.teamhydra.dev:27017/<db_name>?authSource=admin"
);
await client.connect();
const db = client.db(process.env.DB_NAME);
const now = await db.command({ serverStatus: 1 });
console.log(now.localTime);Status values
Every database carries a status, surfaced by the management API list response:
| Status | Meaning |
|---|---|
active | Normal. Reads and writes allowed. |
over_quota | Your account total exceeded its storage cap; writes are revoked across all of your databases (see below). |
disabled | Locked by an account suspension. |
Quota and limits
Storage
Hep.gg continuously sums your total usage across every database. If the total exceeds your account-wide storage cap, INSERT / UPDATE / CREATE / ALTER are revoked on all of your databases at once, and each flips to over_quota, until you free up space or raise the cap with a pack. SELECT and DELETE stay allowed while over quota so you can clean up. Storage is account-wide, not per-database, and grants stack additively (free + premium + packs all sum).
Connections
Each database user is capped on concurrent connections: 10 on Free, 25 on Premium (higher limits are available). The cap is enforced per database user, so size your connection pools with that ceiling in mind, especially if several services share one database's credentials.
TLS
TLS is available. For MariaDB / MySQL clients, add --ssl (or the driver's SSL option) if your client supports it. Treat verification settings as deployment-specific; if you need CA pinning, contact Hep.gg support to confirm the current server certificate rather than assuming a fixed CA.