Import existing config

Snapshot a live organization into manifests with up0 import, so a first sync reports zero diff.

Import existing config

A brand new organization can start from an empty up0/ directory. An organization that already has monitors, tags, or other resources created by hand cannot: a first sync against an empty repository would report every one of those live resources as to_destroy, which is both alarming and wrong. Nothing should be destroyed; the repository just does not exist yet.

up0 import

Reads the organization's current live state and writes matching manifests under up0/, one file per resource at up0/<kind-plural>/<metadata.name>.yaml, plus the Organization reference manifest at up0/org.yaml. Immediately after running it, a sync against the generated files reports zero diff, by construction. It is a one-time snapshot, not something re-run on a schedule; re-running it after a manual console change is a valid way to pull that drift back into the repository, but it is a deliberate choice each time, not automatic.

--output-dir <dir> writes under a different directory instead of the current one (default: the current directory). --org-id selects an organization when the active CLI profile has none set. --json prints a machine-readable summary instead of the file list, for scripting.

What it actually exports today

Only Organization, Monitor, Tag, Rule, Service, and Objective have an export path today. The other two registered Kinds, StatusPage and Dashboard, and every Kind listed in Not yet as code, are not written to a manifest by up0 import yet, even though StatusPage is fully applyable through a sync once you write its manifest by hand. up0 import says so every time it runs, rather than reporting a clean "done" that reads as complete when it is not.

Real output

Run against a working organization that already held five monitors and a tag from earlier exploration, plus one monitor and one tag created for this page:

$ up0 import
Wrote 10 manifest(s) under up0/:
  up0/monitors/1645 example.yaml
  up0/monitors/1648 example dns.yaml
  up0/monitors/1648 example heartbeat.yaml
  up0/monitors/1648 example http.yaml
  up0/monitors/1648 example ping.yaml
  up0/monitors/1648 example tcp.yaml
  up0/monitors/1651 example.yaml
  up0/org.yaml
  up0/tags/1648-example.yaml
  up0/tags/1651-example.yaml
This snapshot is partial — some resource kinds aren't expressible as manifests
yet:
  your org has 1 EscalationPolicy, which this import cannot yet express
  your org has 8 IngestionTokens, which this import cannot yet express
  DataView is not yet supported by this import either

A StatusPage created in the same organization for this walk does not appear anywhere in that output, neither as a written manifest nor in the partial-snapshot warning: it is a registered, applyable Kind with no exporter built for it yet, and the count endpoint behind that warning does not currently track it either. Treat "not mentioned" the same as "not yet supported," not as "you have none."

One of the written files, showing the shape import produces:

# up0/monitors/1648 example dns.yaml
apiVersion: up0.io/v1
kind: Monitor
metadata:
  name: 1648 example dns
spec:
  type: dns
  url: example.com
  intervalSeconds: 300
  config:
    type: dns
    record_type: A

And the Organization reference manifest, written once regardless of how many other resources exist:

# up0/org.yaml
# Organization is reference-only -- see the Configuration as code overview.
# This file is never applied by a sync; it exists only so a sync can detect
# drift between this repository and the org it's connected to (name /
# dataRegion must match the live org exactly).
apiVersion: up0.io/v1
kind: Organization
metadata:
  name: upzero docs
spec:
  slug: upzero-docs
  timezone: UTC
  dataRegion: eu-central

excludedKinds counts what you actually have

The partial-snapshot warning names live counts, not a generic list of what is missing in general: an org with three status pages would (once StatusPage gains an exporter) be told about those three specifically, the same way it is told about its escalation policy and its eight ingestion tokens above.

On this page