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.

EngineHostPort
MariaDB / MySQLdb.teamhydra.dev3306
Postgresdb.teamhydra.dev5432
MongoDBdb.teamhydra.dev27017

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
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)

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

schema.prisma
datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}
.env
# 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
psql "postgresql://<db_user>:<password>@db.teamhydra.dev:5432/<db_name>"

Node.js (pg)

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

schema.prisma
datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}
.env
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
mongosh "mongodb://<db_user>:<password>@db.teamhydra.dev:27017/<db_name>?authSource=admin"

Node.js (mongodb driver)

mongodb
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:

StatusMeaning
activeNormal. Reads and writes allowed.
over_quotaYour account total exceeded its storage cap; writes are revoked across all of your databases (see below).
disabledLocked 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.