Quickstart
This walkthrough creates a source project, builds linux/amd64 and linux/arm64 images in the cloud, deploys it through 1ctl, and verifies application readiness.
Prerequisites
Section titled “Prerequisites”Confirm the target before creating resources:
1ctl profile current1ctl auth status1ctl org currentCreate the application
Section titled “Create the application”mkdir satusky-quickstartcd satusky-quickstart
cat > go.mod <<'MOD'module quickstart
go 1.24MOD
cat > main.go <<'GO'package main
import ( "fmt" "log" "net/http")
func main() { http.HandleFunc("/", func(w http.ResponseWriter, _ *http.Request) { _, _ = fmt.Fprintln(w, "Hello from SatuSky") }) http.HandleFunc("/health", func(w http.ResponseWriter, _ *http.Request) { w.WriteHeader(http.StatusOK) }) log.Fatal(http.ListenAndServe(":8080", nil))}GO
cat > Dockerfile <<'DOCKERFILE'FROM golang:1.24-alpine AS buildWORKDIR /srcCOPY go.mod main.go ./RUN CGO_ENABLED=0 go build -trimpath -ldflags='-s -w' -o /server .
FROM scratchCOPY --from=build /server /serverUSER 65532:65532EXPOSE 8080ENTRYPOINT ["/server"]DOCKERFILEConfigure SatuSky
Section titled “Configure SatuSky”Choose an application name that is unique in your organization namespace:
export APP="quickstart-$(date +%m%d%H%M)"
cat > satusky.toml <<EOF[app]name = "$APP"port = 8080cpu_request = "10m"cpu_limit = "50m"memory = "32Mi"
[build]dockerfile = "Dockerfile"fast_build = true
[checks]health_path = "/health"
[checks.readiness]period_seconds = 5[checks.readiness.http_get]path = "/health"port = 8080
[deploy]strategy = "rolling"rolling_max_surge = "25%"rolling_max_unavailable = "0"EOFThe current schema keeps port and resources under [app]. Health and Kubernetes probe declarations belong under [checks].
Deploy
Section titled “Deploy”1ctl deploy --waitThe fast cloud builder publishes both supported architectures. The atomic deployment intent then creates the workload, Service, environment projection, and managed HTTPS route.
By default, --wait requires verified application readiness. The explicit
[checks].health_path lets the CLI use a successful /health response as
verification after the route is available. --wait-mode workload is available
for compatibility, but it proves only reconciliation and workload availability,
not that the application serves traffic.
Inspect the application and capture its deployment ID and URL:
APP_JSON="$(1ctl -o json app get "$APP")"DEPLOYMENT_ID="$(printf '%s' "$APP_JSON" | jq -r '.deployment_id')"APP_URL="$(printf '%s' "$APP_JSON" | jq -r '.domain')"
1ctl app status "$APP"printf 'URL: %s\n' "$APP_URL"Route and DNS publication can finish shortly after the workload becomes healthy. Poll the public endpoint:
for attempt in $(seq 1 60); do curl --max-time 5 --fail --silent "$APP_URL/health" >/dev/null && break sleep 2done
curl --fail --silent "$APP_URL/"Expected response:
Hello from SatuSkyView logs
Section titled “View logs”Use the deployment ID so 1ctl can resolve the namespace and application unambiguously:
1ctl logs stream --deployment-id "$DEPLOYMENT_ID"Stop streaming with Ctrl+C.
Clean up
Section titled “Clean up”1ctl app delete "$APP" --yesTerminal deletion removes the application and its managed runtime projections. Persistent resources are retained only when a product or marketplace package explicitly declares a retention policy.