Sync your AI Studio app to GitHub and EthioDeploy builds it on every push. Set GEMINI_API_KEY in Settings and make sure it never ends up in the browser.
Last updated
These are the defaults. Override any of them in Settings → Build.
In your app, open Settings → GitHub and create a new repository (or link an existing one). The sync goes both ways: AI Studio pushes its changes, and you can pull edits made elsewhere back in.
Or export a zip from the Code tab and push the folder to GitHub yourself. Either way, you set GEMINI_API_KEYon the new host; it isn't part of the code.
AI Studio builds full-stack apps: a React frontend by default (Angular and Next.js are also options) and a Node.js server that calls Gemini. How we run it depends on what's in the repo:
npm run build and then npm start. The server has to listen on process.env.PORT and 0.0.0.0.index.html fallback. Check the key warning above before deploying one of these.Older exports load React from a CDN through an import map in index.html. If the page loads blank, remove the import map and let the build bundle the packages from package.json.
Add GEMINI_API_KEYin the project's settings. If you also set GOOGLE_API_KEY, Google's libraries use that one instead.
Everyone who uses your app spends your Gemini quota. Restrict the key in Google Cloud and set a budget alert. Google's own guidance is to call Gemini from a backend, never from browser code.
Apps that used Firebase Auth keep using your Firebase project. In the Firebase console, add <project-slug>.ethiodeploy.com and any custom domain under Authentication → Settings → Authorized domains.
<project-slug>.ethiodeploy.com. Every push to the default branch redeploys, and the old version keeps serving until the new one is healthy.Blank page after deploy
Cause: An import map in index.html loads packages from a CDN that fails, or clashes with the bundled copies.
Fix: Remove the import map so the build bundles everything from package.json.
Your Gemini key appears in the built JavaScript
Cause: The build config copies GEMINI_API_KEY into browser code.
Fix: Move Gemini calls to the server, or update the app's Gemini features in AI Studio, which moves the key server-side. Then rotate the key.
AI features fail with an API key error
Cause: GEMINI_API_KEY isn't set on EthioDeploy.
Fix: Add it in Settings and redeploy.
Health check times out
Cause: The server listens on a fixed port or on localhost.
Fix: Listen on process.env.PORT and 0.0.0.0.
Google sign-in fails with auth/unauthorized-domain
Cause: The new domain isn't in Firebase Authentication's authorized domains.
Fix: Add it in the Firebase console.
Still stuck? Check the deployment's build log in the dashboard, or see Troubleshooting.
Why not use AI Studio's Deploy to Cloud Run button?
You can. It needs a Google Cloud project with billing, except on the limited Starter tier, and Cloud Run charges by usage. Host on EthioDeploy if you want a flat monthly price, Postgres and Redis addons, or an AI coding agent that deploys to the same place.
Can I keep editing in AI Studio after moving?
Yes. With GitHub sync on, AI Studio pushes each change to the repository, and EthioDeploy redeploys on every push to the default branch.
Does the Gemini API cost money?
There is a free tier for most Flash models, with lower rate limits, and Google may use free-tier content to improve its products. The paid tier charges per token. Every visitor's requests count against your key.
Ready to deploy? Sign in with GitHub and pick your repo. No Dockerfile, no YAML.
See the full docs for custom domains, env vars, addons, and billing.