Upgrading from v0.9.9 - nself-org/cli GitHub Wiki

Upgrading from v0.9.9 (Bash Era)

Migration guide for operators still running ɳSelf v0.9.9, the Bash-based predecessor to the current Go CLI.


Background

ɳSelf v0.9.9 was the last release of the Bash-era CLI. It used shell scripts, a .nself/config.sh variable file, and a hand-maintained docker-compose.yml. The v1.0.0 release (2026-03-29) replaced all of this with a single Go binary, the .env cascade, and a generated compose file.

The migration path is linear: v0.9.9 → current. There is no intermediate stop.


Quick start: automated detection

# Install current CLI first
brew tap nself-org/nself && brew install nself

# From your project root
nself migrate from-bash

This scans for Bash-era artifacts and prints a step-by-step checklist. Add --auto to run the safe automated steps (backup + remove nself.sh):

nself migrate from-bash --auto

For CI or non-interactive environments:

nself migrate from-bash --auto --yes

What changed between v0.9.9 and v1+

Area v0.9.9 (Bash) v1+ (Go CLI)
Config .nself/config.sh (shell vars) .env cascade (.env.dev.env.local.env.secrets)
Compose file Hand-maintained docker-compose.yml Generated by nself build
Entry point nself.sh script nself binary (Homebrew or direct install)
Env loading direnv + .envrc nself reads the .env cascade directly
Plugin install Manual Docker snippets nself plugin install <name>
Start/stop docker compose up/down nself start / nself stop

Manual migration steps

Follow these steps in order. Each step is idempotent, safe to re-run if interrupted.

Step 1: Install the current CLI

brew tap nself-org/nself
brew install nself
nself --version

If already installed via Homebrew:

brew upgrade nself

Step 2: Stop running containers

Your v0.9.9 docker-compose.yml may not be recognized by the current CLI. Use Docker directly:

docker compose down
# or if you have an older Docker:
docker-compose down

Step 3: Back up your project

cp -r /path/to/project /path/to/project.bak.$(date +%Y%m%d)

At minimum, back up the config and compose files:

cp .nself/config.sh .nself/config.sh.bak
cp docker-compose.yml docker-compose.yml.bak

Step 4: Create .env.dev from your Bash config

The Go CLI uses the .env cascade. The equivalent of .nself/config.sh is .env.dev.

Open .nself/config.sh and copy your variables:

# Example: extract variables from config.sh
grep -E '^(PROJECT_NAME|BASE_DOMAIN|POSTGRES_|HASURA_|AUTH_)' .nself/config.sh \
  | sed 's/^export //' >> .env.dev

Review .env.dev and make sure these required variables are present:

PROJECT_NAME=myapp
BASE_DOMAIN=myapp.local
POSTGRES_PASSWORD=<your-password>
HASURA_GRAPHQL_ADMIN_SECRET=<your-secret>

See the Env Cascade page for the full list of supported variables.

Step 5: Initialize the project

nself init

This creates the required directory structure (.nself/, nginx/, ssl/, postgres/) and generates an .env.dev scaffold if one does not exist. Safe to run on a directory that already has .env.dev.

Step 6: Build the stack

nself build

This generates a new docker-compose.yml (with the GENERATED BY nself build header), nginx config files, and SSL certificates. Your docker-compose.yml.bak is untouched.

Step 7: Start the stack

nself start

Step 8: Verify health

nself status
nself doctor

nself doctor checks SSL trust, port availability, Hasura connectivity, plugin states, and RLS configuration.

Step 9: Install plugins (if applicable)

If you used plugins in v0.9.9, reinstall them using the current plugin manager:

nself plugin install <name>
# For pro plugins (requires license key):
nself license set nself_pro_xxxx...
nself plugin install ai

See Plugin Overview for the full plugin catalog.

Step 10: Clean up v0.9.9 artifacts

Once the stack is running and healthy:

# Remove Bash-era files
rm -f nself.sh
rm -f .envrc
# Keep backups for now — remove after a stable soak period

Automated migration reference

nself migrate from-bash handles a subset of steps automatically. The table below shows which steps it automates:

Step Manual or Auto Notes
Detect artifacts Auto Always runs on nself migrate from-bash
Back up artifacts Auto (with --auto) Writes to .nself/bash-migration-backup/<timestamp>/
Remove nself.sh Auto (with --auto) Backed up before removal
Convert .nself/config.sh to .env.dev Manual Automated conversion planned for a future release
Remove .envrc Manual Review content before removing
Replace docker-compose.yml Manual Run nself build after creating .env.dev

Common issues

nself build fails with "no nself project found"

Run nself init first to create the required project markers.

Variables missing from .env.dev

Compare the full variable list in Env Vars Reference against your old .nself/config.sh. Add any missing required variables.

Postgres fails to start

Check that POSTGRES_PASSWORD is set in .env.dev and matches the password in your existing database volume (if you are reusing the volume from v0.9.9).

Hasura fails with "metadata inconsistency"

Run nself doctor to identify the cause. Typical resolution:

nself hasura clear-metadata
nself build
nself start

Port conflicts with old containers

If old v0.9.9 containers are still running:

docker ps -a | grep nself
docker rm -f <container-id>

Getting help


Upgrading-from-v1 | | Home

⚠️ **GitHub.com Fallback** ⚠️