You're reading docs for Nextly Alpha. APIs may change between releases.

Telemetry

What Nextly's CLI collects, why, and how to opt out.

Nextly collects anonymous usage data from its CLI tools (create-nextly-app and nextly) to understand which features are used, catch regressions, and make data-driven product decisions during alpha.

Telemetry is anonymous, opt-out, automatically disabled in CI, Docker, production, and non-interactive shells, and can be disabled permanently with one command or one environment variable.

How to opt out

Any of these is enough. The first one you set wins.

# Option 1: one-time command, persists in ~/.config/nextly/config.json
nextly telemetry disable

# Option 2: environment variable, per-session
NEXTLY_TELEMETRY_DISABLED=1 nextly dev

# Option 3: community standard (also respected by other tools)
DO_NOT_TRACK=1 nextly dev

What we collect

Every event includes this base context:

FieldExampleDescription
cli_name"nextly"Which CLI emitted the event
cli_version"0.1.3"Version of the CLI
node_version"22.11.0"Node.js runtime version
os"darwin"darwin / linux / win32 / freebsd / other
arch"arm64"arm64 / x64 / other
package_manager"pnpm"From npm_config_user_agent
is_ci / is_dockerfalseAlways false in practice (telemetry is off in CI and Docker)
schema_version1Version of this event schema
project_id"a1b2c3d4e5f6"12-char one-way hash of your cwd plus a per-machine salt; lets us count distinct projects without knowing their paths. Only present for nextly commands, not create-nextly-app.

create-nextly-app events

EventExtra properties
scaffold_startedFlag presence booleans (yes, demoData, skipInstall, useYalc)
template_selectedtemplate, approach
database_selecteddatabase
install_started(none)
install_completedduration_ms
install_failedduration_ms, error_code
scaffold_completedtotal_duration_ms, template, database, approach, demo_data
scaffold_failedstage, error_code, duration_ms

nextly command events

EventExtra properties
command_startedcommand, flags_count (the number of flags passed, never their names or values)
command_completedcommand, duration_ms
command_failedcommand, duration_ms, error_code

error_code taxonomy

Errors map to a fixed enum. Raw error messages and stack traces never leave your machine.

  • install_failed, install_network, install_permission, install_disk_full
  • template_download_failed, template_parse_failed
  • config_generation_failed
  • db_connection_failed, migration_conflict
  • unknown

What we never collect

  • Project name, directory name, or any file path.
  • Git remote URL, username, email, or hostname.
  • IP address. We set disableGeoip: true on PostHog so the server does not derive one either.
  • File contents, schema names, collection names, or field names.
  • .env values, API keys, database URLs, or auth secrets.
  • Raw error messages or stack traces.
  • Next.js or Nextly config file contents.

How anonymous identity works

On first run, Nextly generates two random values:

  • anonymousId -- 256 bits of entropy, stored in your user config directory (~/.config/nextly/config.json on Linux; OS-appropriate paths elsewhere). Sent with every event as the distinct_id. Never linked to any account or email.
  • salt -- 128 bits of entropy, stored alongside the ID. Used to hash your project paths. The salt never leaves your machine.

You can rotate both with:

nextly telemetry reset

This will also re-show the first-run notice on your next CLI invocation.

When telemetry is disabled automatically

  • DO_NOT_TRACK=1 is set.
  • NEXTLY_TELEMETRY_DISABLED=1 is set.
  • NODE_ENV=production.
  • CI is detected (CI=1, GITHUB_ACTIONS, GITLAB_CI, CIRCLECI, TRAVIS, JENKINS_URL, BUILDKITE, VERCEL, NETLIFY, RENDER).
  • Docker is detected (/.dockerenv present).
  • Stdout is not a TTY (e.g., output is piped to a file).

Source code

Every line of telemetry code is open-source. Audit it yourself: