Getting Started
Deploy your first application on Ghayma in under 5 minutes.
1. Create an Account
Sign up at dash.ghayma.cloud using email, GitHub, or Google.
2. Install the CLI
macOS / Linux
curl -fsSL https://dash.ghayma.cloud/install.sh | shWindows (PowerShell)
irm https://dash.ghayma.cloud/install.ps1 | iexVerify the installation:
ghayma version3. Login
ghayma loginThis opens dash.ghayma.cloud in your browser. Approve the login request and the CLI is authenticated automatically — it then creates a long-lived CLI token for this machine (365 days, revocable with ghayma logout or under Settings → API Tokens), so you stay signed in. Use ghayma login --email for email/password login instead.
4. Initialize Your Project
Navigate to your project directory and run:
cd my-app
ghayma initThis creates a .ghayma.json configuration file:
{
"project_id": "uuid",
"name": "my-app",
"slug": "my-app",
"framework": "nextjs",
"site_name": "main"
}The CLI auto-detects your framework (Next.js, Node, Python, Go, PHP, Ruby, Rust, or a static site) — see Supported frameworks. You also pick a plan during init (or pass --plan <slug>) — each plan comes with a points budget you spend across databases, apps, storage, and auth apps. See Points & Plans.
Your project’s main site is created automatically on your first deploy, which is why site_id and site_slug are absent above. Naming a site other than main at init creates it right away. main isn’t privileged — it can be renamed or deleted later, and it’s simply the site that serves at <slug>.ghayma.app while every other site serves at <slug>-<site>.ghayma.app. For multi-app projects, see Sites.
5. Deploy
ghayma deployThe CLI will:
- Package your source code
- Upload it to Ghayma
- Build a Docker container using your build command
- Deploy it to Kubernetes
- Assign a URL:
my-app.ghayma.app
You’ll see real-time build logs in your terminal.
6. Add a Custom Domain (Optional)
ghayma domain create my-app.comPoint your domain’s DNS at the IPv4 address shown in your Dashboard (Project → Domains → Add domain) with an A record, and SSL is provisioned automatically via Let’s Encrypt.
One A record, and no AAAA. Ghayma serves IPv4 only: the hostname needs exactly one A record pointing at the address shown in the Dashboard, and no AAAA (IPv6) record. Let’s Encrypt prefers IPv6 whenever an AAAA exists, so a stray AAAA left behind by a previous host blocks the certificate. Delete it, then check the domain again. A Cloudflare-proxied (orange-cloud) domain is fine as-is.
Networking: If your deployed app connects to Ghayma services (Auth, databases, storage API), you must use internal Kubernetes URLs instead of *.ghayma.tech. External URLs will timeout from inside the cluster. See the Networking Guide for details.