Skip to content

Getting started

Start here when you want the shortest path to a working setup. Open the getting started overview

First project

Getting started

Use this page when you have cloned a real repository and want a little more context than the quickstart. The goal is still practical: get from fresh checkout to a validated, runnable local setup without mixing shared requirements and local values.

Starting point

This page assumes:

  • the repository already uses envctl
  • you want to prepare your machine, not redesign the project contract
  • you want a first successful run and a reliable next step if something is missing

Step 1: create your local config

config
$ envctl config init

This creates your machine-level config. It controls tool behavior such as vault location and default profile. It does not define the project contract and it does not store the project’s shared requirements.

Step 2: initialize the repository

init
$ envctl init

init prepares the checkout for normal envctl use. It may establish local structure, binding, and managed hook wrappers where supported.

init prepares local state, not secrets

init can normalize local structure and recover project state. It does not invent or guess the real values your machine needs.

Step 3: inspect what is already ready

status
$ envctl status

This is the fastest way to answer the practical question:

what is already ready, and what is still missing?

If you also want to confirm the managed hook layer, check it directly:

hooks
$ envctl hooks status

Step 4: fill missing required values

fill
$ envctl fill

This prompts only for values that are both:

  • required by the contract
  • missing from the active profile

Step 5: validate

check
$ envctl check

If validation fails, stay at this layer first. Fix the model before debugging a downstream runtime.

Step 6: run the project

run
$ envctl run -- python app.py
$ envctl run -- npm start
$ envctl run -- make dev

For most local workflows, run is the right default because it keeps projection explicit and ephemeral.

If you need a second local context

Create a named profile instead of mutating one local setup in place:

profiles
$ envctl profile create dev
$ envctl --profile dev fill
$ envctl --profile dev check
$ envctl --profile dev run -- python app.py

Mental model

See the compact explanation of the layers you just used.

Open mental model

Daily workflow

Move from first setup into the normal rhythm of working with envctl.

Open daily workflow

Command reference

Look up exact command behavior once the onboarding flow already makes sense.

Open command reference