Quickstart
This guide takes you from a fresh machine to a public HTTPS URL that serves a real response, in roughly ten minutes. By the end you will have:
- An Edgible account, logged in on your machine.
- The Edgible agent installed and running on that machine.
- A
pre-existingworkload published ashttps://hello-world.<your-org>.edgible.com.
The path uses the canonical Application v3 YAML model.
Prerequisites
Section titled “Prerequisites”-
A Linux or macOS machine on x86_64 or arm64. This guide uses a Debian-family Linux host (Ubuntu 22.04+ or Debian) for its commands; the installer also drives
dnf,yum,apkand Homebrew when it needs to fetch a missing tool, so a Fedora, Alpine or macOS host works with its own package manager’s names. -
Either sudo access or not — both work, and the choice is yours.
sudo edgible agent installgives you a system service that starts at boot and runs with nobody logged in;edgible agent installwithout sudo installs it under your own account and changes nothing system-wide. This guide uses the sudo form. See Install the agent without sudo for the other one. -
Outbound HTTPS reachable. The agent talks to
api.v2.prod.edgible.comover TCP/443. No inbound connectivity is required. -
An Edgible account. If you don’t have one, sign up first — you’ll receive an email and password.
-
The
edgibleCLI installed and on yourPATH:Terminal window curl -fsSL https://get.edgible.com/install.sh | bashThe CLI needs Node.js 20+ — the installer offers to install it if it’s missing. Run
edgible --versionto confirm.
The nine steps
Section titled “The nine steps”-
Log in.
Terminal window edgible auth login \--user-email you@example.com \--user-password 'your-password'The CLI writes auth tokens and your active organization ID to a config file under your user home directory.
-
Install the agent.
Terminal window sudo edgible agent install \--device-type serving \--device-name my-first \--yesOr, if you would rather not give a background service system-wide privileges, drop the
sudo:Terminal window edgible agent install \--device-type serving \--device-name my-first \--yesThat one difference decides everything else, and the command prints a short summary of what it means on your machine before it writes anything (
--yesskips the question, never the summary). Either way it registers a new device namedmy-firstin your organization, generates its credentials, installs the service and starts it. Installation takes 30–60 seconds. -
Verify the device is healthy.
Terminal window edgible device health --device my-firstExpect a
Health check OKresponse within ten or fifteen seconds. If this hangs, see Troubleshooting. -
Start something to serve.
For this walkthrough we’ll use Python’s built-in HTTP server as the placeholder workload. Run it on the device, in the background, on port 8080:
Terminal window python3 -m http.server 8080 &Anything listening on
127.0.0.1:8080will work — substitute your own service if you have one ready. -
Author the application YAML.
Save the following as
app.ymlsomewhere on the same machine. Replace<your-org-id>with your organization ID —edgible config listwill show it.app.yml apiVersion: v3kind: Applicationmetadata:name: hello-worldorganization: <your-org-id>spec:placement:strategy: serving-devicedeviceSelector:deviceName: my-firstworkloads:- name: webtype: pre-existinghostPort: 8080ports:- { name: http, containerPort: 8080, protocol: tcp }access:- name: publictype: httpstarget: { workload: web, port: http }hostname: { generated: true }tls: { managedBy: edgible }policies:auth: { modes: [none] }What’s happening:
placement.deviceSelector.deviceNamepins this application to the device you just installed.- The
pre-existingworkload tells Edgible there is already a process listening onhostPort: 8080. - One
accessentry exposes that port over HTTPS, on a hostname Edgible generates, with a managed TLS certificate, and no auth check (anyone can reach it).
-
Deploy.
Terminal window edgible stack deploy -f app.ymlThe CLI parses the file, validates it locally, and posts the application to the control plane. Within a second or two the agent on
my-firstwill receive the update and start reconciling. -
Watch the deployment finish.
Terminal window edgible stack status -f app.ymlYou’ll see the application move through
pending→deploying→ready. While it’s deploying, Edgible orders the TLS certificate and configures the public route; the first deploy of an application typically takes 30–90 seconds. -
Visit the URL.
Once status is
ready, the samestack statusoutput (oredgible application get <app-name>) will show the generated hostname, something likehello-world.myorg.edgible.com.Terminal window curl https://hello-world.myorg.edgible.com/You should see the directory listing Python’s HTTP server produces. That response is travelling over the public internet, into the gateway, through a WireGuard tunnel to your machine, through Caddy, into your
python3 -m http.server, and back. -
(Optional) Tear it down.
Terminal window edgible stack teardown -f app.ymlThe application is removed from the agent, Caddy stops serving the route, and the gateway forgets the hostname. The device itself stays installed and registered.
What you just built
Section titled “What you just built”https://hello-world.myorg.edgible.com │ ▼Edgible Gateway (HAProxy + WireGuard) │ encrypted tunnel ▼Your machine (Caddy on :10222 → python http.server on :8080)The hostname is bound to your specific device for as long as the application exists. If you stop the Python server, the URL keeps responding 502 (because the workload is dead, not the route). If you delete the application, the hostname is released.
Where to go next
Section titled “Where to go next”- Replace the placeholder with a real workload. Deploy a Docker Compose app walks through a multi-container example.
- Add a custom domain. Use a custom domain covers the DNS hand-off and a per-hostname certificate.
- Lock it down. Protect with API keys shows how to require a bearer token on every request.
- See who is calling it. Watching your traffic covers
edgible application trafficandedgible application requests— status codes, latency, paths, clients and errors. - Understand what the platform is doing. How it works and the Concepts section.