What you need
Three things. You can line all of them up before you install anything.
An agreement with us
Sign in to your Nebulai account with GitHub, create your organisation, and tell us its name. We record the seats and installations you have agreed. Until that is recorded the installer will politely refuse, which is how you know nobody can quietly run up a bill in your name.
A Microsoft Azure subscription
An Azure account with a payment method, where you can create resources. Your Azure user must be an Owner, or have Contributor plus permission to create the one narrowly scoped backup role assignment. Azure bills you directly for the machine Nebulai runs on — roughly US$90 a month while it is running, and about US$9 a month if you pause it. We never see your Azure login, and we cannot create anything in your account: the installer uses the session on your own computer.
A GitHub account for the code you want indexed
Near the end, Nebulai walks you through creating a GitHub App that belongs to you, and you choose which repositories it can see. Its keys live on your installation. We never hold a key to your code.
What we hold is deliberately small: your organisation, what you have agreed, and which installations exist. Not your repositories, your questions, or your answers.
Install it
Everything happens on your own computer — a Mac or a Linux machine. You will type two commands, sign in twice in your browser, and answer one question.
Install the two tools
The first line installs Microsoft's Azure command, which is how your computer talks to your own Azure account. The second installs
nebulai. Both come from their publishers, and Homebrew checks each download against a published fingerprint before it runs.brew install azure-cli brew install kaiservermillion/nebulai/nebulaiNo Homebrew? Install it first from brew.sh — one line, and it is the standard way to install developer tools on a Mac.
Sign in to Azure
This opens your browser and signs you in to Microsoft, exactly as any other Azure sign-in. The result stays on your computer.
az loginRun the installer
This is the whole installation. It opens your browser once to confirm a short code against your Nebulai account, so we know the request is really you.
nebulai installRead the confirmation, then say yes
Before anything is created, the installer prints exactly what it will build in your subscription and what Azure will charge for it. Nothing exists until you answer
y.Nebulai will create these resources in YOUR subscription (Pay-As-You-Go): Resource group nebulai in eastus Recovery group nebulai-recovery in eastus, retained independently Virtual machine Standard_D2as_v7, Ubuntu 24.04, no inbound SSH Data disk 64 GB, kept if you later uninstall Backup storage encrypted GRS Blob storage, soft delete and versioning enabled Managed identity scoped to write recovery blobs (requires RBAC assignment permission) Public address https://nebulai-3f9a2c11.eastus.cloudapp.azure.com Installation Your Company (team plan) Azure bills you about US$90 a month while it runs. Create these resources now? [y/N]In plain terms: one small Linux machine, one disk that holds your data and survives the machine being replaced, protected backup storage in a separate Azure group, and a fixed web address with a real certificate. No remote-login port is opened at all.
Wait about fifteen minutes
The installer builds the machine, proves to your account that this specific machine is the one it just created, downloads the software, sets up the database, starts everything, asks for the certificate, and publishes the first recovery set outside the workload group. It prints each step as it goes. You do not need to do anything.
Interrupted? Close the laptop, lose your connection, change your mind — run
nebulai installagain and it picks up where it stopped. It never builds a second machine by accident.
Want it somewhere other than the default? --region westeurope chooses a different part of the world, and --resource-group NAME changes the folder Azure keeps it in. The installer checks the region can actually fit the machine before it creates anything, and names an alternative if it cannot.
Become the administrator
When the installation is ready, your browser opens on a one-time link that makes you its first administrator. This is the one step with a clock on it.
Open the link it gives you
It opens by itself. If your browser did not appear, the installer prints the path of a file containing the link — open that. The whole link matters, including the part after the
#; the address alone will not work.Within ten minutes
The link works once and expires after ten minutes. That is deliberate: it is what stops anyone else who briefly sees your screen becoming the administrator of your installation.
If you miss it, nothing is lost
Run
nebulai installagain. It issues a fresh link and opens it. Missing the window costs a minute, not an installation.
Connect your code
Nebulai now walks you through creating a GitHub App — a connection GitHub itself controls, owned by you, that can read only the repositories you pick.
Give it a name
Anything you like, as long as no one on GitHub has taken it. Leave the organisation box empty to create it under your own account.
Approve it on GitHub
GitHub shows you exactly what the App may do — read code, pull requests and metadata, nothing more — and returns you to your installation, which stores the keys itself.
Choose repositories
Pick the repositories Nebulai should learn from. You can add or remove them at any time on GitHub, and Nebulai follows that immediately.
Invite your team
Everyone signs in with GitHub. The seats we recorded for you are enforced here, so you always know where you stand.
Check it works
Three checks, in order. Do not hand it to your team until all three pass.
A repository finishes indexing
Add a repository and watch it complete on the project page. Then push a change and confirm Nebulai picks it up without being asked.
An answer cites where it came from
Ask a question from the project page. The answer should name the commit, pull request or discussion behind it. An answer with nothing behind it is a failure, not a partial success.
A backup restores
Confirm the scheduled backup has an off-host receipt, then complete a controlled Azure loss-and-recovery drill before production use. A backup nobody has ever restored is a hope, not a plan.
Pause, resume, remove
You are renting a machine from Azure, so the useful thing to know is how to stop paying for it.
Pause it
Stops the machine and the hourly charge. Your data stays where it is, costing a few dollars a month, and starting it again brings everything back by itself.
az vm deallocate -g nebulai -n nebulai-vm az vm start -g nebulai -n nebulai-vmRepair replaceable resources
If the machine or network is damaged but the data disk remains, this reconciles the Azure deployment stack and reattaches the verified disk.
nebulai repairIf the whole workload group was lost outside the uninstaller, the separate recovery group can recreate the disk from the latest verified backup. Use
nebulai repair --from-backup --confirm-installation YOUR_INSTALLATION_IDwith the exact id printed in your installation state.Remove it, but keep your data
Deletes the machine and its networking, keeps the disk holding your database as recovery data, and revokes the installation. Revocation is final, so a fresh installation cannot silently adopt that disk.
nebulai uninstallRemove the workload and database
Deletes the data disk too, but keeps the independently protected backup archive. It asks you to type the workload group name back.
nebulai uninstall --delete-dataRemove the backup archive too
This final teardown asks you to type both Azure group names. It removes the workload, database, and protected recovery storage and cannot be undone.
nebulai uninstall --delete-data --delete-backups
Your licence is a short lease that renews by itself while your agreement is current. If it lapses, indexing and answering stop — but nothing is deleted and nothing is locked away. Sign-in, export and backup keep working, so you can always take your data with you.
Never send private keys, tokens or code to support. If we ask for logs, your installation redacts them before they leave it.
Your own Linux server
If your team already runs its own servers and would rather not use Azure, Nebulai installs onto a Linux host you provide. This path assumes someone comfortable with a terminal.
You need Docker Engine with Compose v2, encrypted storage, a public DNS name pointing at the host, and ports 80 and 443 reachable. Install the nebulai command as above, then, as root on that host:
nebulai doctor --mode team --hostname YOUR_HOSTNAME --storage-encrypted
nebulai setup --mode team --hostname YOUR_HOSTNAME --storage-encrypteddoctor changes nothing; it reports what would stop the install. setup prints a short code and pauses: approve it in your Nebulai account, and it continues to the same owner link described above. If it stops partway, run the same command again and it resumes.
Evaluating on a laptop instead? --mode evaluation runs the same software at http://localhost:4300 with no DNS name and no open ports. It is for assessment only: GitHub cannot reach it to send updates, so you refresh sources by hand.