Get started with Omnihorn
Updated · 5 min read · For developers
This is the 20-minute quickstart for developers. You sign up, create an app, upload the folder your Windows build produces, build the installer, run it on a Windows PC and then ship a second version to see the update arrive. You need no command-line tools and no code-signing certificate.
Before you start
You need three things: a Windows build of your app, a browser, and an email address you can read. The build is the folder your build tool produces: the .exe plus its DLLs and data files. You do not need Flutter, a signing certificate or any tooling of ours on your machine. The dashboard does the packaging.
The steps
Sign in with your email
Open the sign-in page, enter your email and choose Send sign-in link. The link in the email works once and expires after 15 minutes. There is no separate sign-up form: a new address goes on to set up a workspace.
Set up your workspace
Enter your name, choose Personal or Organization, name the workspace and accept the Terms of Service and Privacy Policy. You start on the free Indie plan. Nothing in this guide needs a paid plan; limits are on the pricing page.
Create the app
Choose Create app. On Setup, name the app and keep Windows as the platform, then choose Next. The app, its own signing key pair and a channel named
productionare created at this point.Pick the installer look
On Installer UI, adjust the window your users see while the app installs and updates, or keep the default. Everything here can be changed later on the Installer tab.
Upload your first build
On First build, drop your app folder or one archive (
.zip,.7z,.raror.tarvariants). Type a version such as1.0.0and choose Upload. When the build is processed it goes live onproductionand the installer is built with your settings. You can also choose Skip for now and upload later from the Builds tab.Set how often installed copies check
On Settings, choose how often installed copies on
productionlook for a new build. The default is fine for a first run.Choose what starts after install
On Launch, pick the program that starts after install and after every update, and which shortcuts the installer offers. If your build has one
.exe, it is usually found for you. Choose Finish.Download the installer
Open the Installer tab. Wait until the installer shows Ready; a first build of the installer usually takes a few minutes. Open Used on 1 channel and download it. If you skipped the first build, upload one, then choose Create installer there.
Run it on a Windows PC
Run the downloaded
setup.exe. Windows SmartScreen will warn about an unknown publisher, because installers are not code-signed by default. Choose More info, then Run anyway. The installer fetches your app’s files from Omnihorn, checks each one, installs them and starts the program you chose.Ship a second version
Upload a new build with a higher version from Builds, New build. Open the Channels tab, open
production, select the new build in the Assigned build card and save. Installed copies pick it up on their next check.
What you have now
You have one app with one channel, production, pointing at one build, and an installer bound to that channel. The installer does not contain your app’s files. It downloads them from the channel on first run, exactly as it downloads every later update. That is why you do not rebuild the installer when you ship a new version: you upload a build and assign it to the channel.
For the full picture of apps, builds, channels and the signed manifest, read How Omnihorn works.
See the update arrive without waiting
Installed copies check in the background at Windows start-up, no more often than the interval you set. To check at once, run the updater from the installed app’s .omni-installer folder:
omnihorn.exe --no-gui --check-update
omnihorn.exe --no-gui --check-update --update-if-allowedThe first command prints a JSON status line and exits with 2 if an update is available and 0 if the app is current. The second also applies the update without a window. More on how and when updates run is in Updates on user machines.
Common issues
| You see | What it means |
|---|---|
| SmartScreen “Unknown publisher” warning | Expected: installers are not code-signed by default. See why SmartScreen warns. |
| The installer stays on Queued | The build machine is busy or offline for a moment. Wait, then check the Installer tab again. |
| A build stays on Processing | Every file is verified first, and scanned for malware where scanning is on. Larger builds take longer. A build that turns failed shows the reason on its page. |
| Installed copies see no update | Check that the channel they use has the new build in its Assigned build card. A channel with no build has nothing to offer. |
Your .exe is not offered as the launch target | The build must finish processing first. Open the design again once the build is active. |
More cases are in Troubleshooting.
Next steps
- Upload from your CI instead of the browser: CI/CD.
- Add a beta channel and roll back a bad release: Channels and rollouts.
- Change the installer’s look, launch target and shortcuts: Installer Studio.
- Let an AI coding agent wire up your repository: Set up with an AI agent.
›Do I need a code-signing certificate to start?
No. Installers work without one, but Windows SmartScreen shows an “Unknown publisher” warning until the installer is signed. Your users choose More info, then Run anyway.
›Do I have to rebuild the installer for every release?
No. The installer downloads your app’s files from its channel, so a new build assigned to the channel reaches new and existing installs without a new installer.
›Can I ship to macOS or Linux?
Not yet. Windows is the only target today; the other platforms are marked Coming soon in the app wizard.
›Is there a separate sign-up page?
No. You enter your email on the sign-in page; a new address is taken to workspace setup after you open the link.
Keep reading
Something wrong or missing? Tell us.