Skip to content

Command Reference

Complete reference for all txpark commands.

Global Flags

These flags work with all commands:

Flag Description
--kubeconfig <path> Path to kubeconfig file (default: $HOME/.kube/config)
--context <name> Kubernetes context to use
--debug Enable debug logging
--help Show help for any command

deploy

Deploy a new testnet to the Kubernetes cluster.

Usage

txpark deploy [testnet-name] [flags]

If testnet-name is omitted, an auto-generated name will be used.

Flags

Flag Type Default Description
--sequencer bool false Deploy with EVM sequencer node
--build-branch <branch> string - GitLab branch to fetch binaries from
--lifetime <duration> string 1h Testnet lifetime (e.g., 30m, 2h, 1d)
--permanent bool false Create permanent testnet (never expires)
--profile <name> string default Resource profile: default, high-performance
--platform <name> string alpine Platform: alpine, debian-12, ubuntu-24.04, archlinux
--kernel-setup <path> string ./output/kernel_setup.yml Path to kernel_setup.yml file
--copy-local-binaries bool false Copy binaries from local $TEZOS_SOURCE (not yet implemented)

Mutually Exclusive Flags

  • --lifetime and --permanent cannot be used together
  • --build-branch and --copy-local-binaries cannot be used together

Resource Profiles

  • default: Standard resources for ephemeral testnets
  • EVM sequencer: 8Gi data storage, 50Gi rollup storage, 2 CPU, 4Gi memory
  • high-performance: 2x storage and memory for stress testing
  • EVM sequencer: 16Gi data storage, 100Gi rollup storage, 2 CPU, 16Gi memory

Examples

Deploy a basic testnet with auto-generated name:

txpark deploy

Deploy with custom name and 4-hour lifetime:

txpark deploy my-testnet --lifetime 4h

Deploy permanent testnet:

txpark deploy prod-testnet --permanent

Deploy with EVM sequencer from master branch:

# First, generate sequencer configuration
./scripts/setup-sequencer.sh my-testnet

# Then deploy
txpark deploy my-testnet --sequencer --build-branch master

Deploy with high-performance profile for stress testing:

txpark deploy load-test --profile high-performance --sequencer --build-branch master

Output Example

Deploying testnet
  name: my-testnet
  namespace: testnet-my-testnet
  platform: alpine
Testnet will auto-delete after 1h0m0s
Creating namespace...
✓ Namespace created
Setting up sequencer configuration...
✓ Rollup keys secret created
✓ Kernel setup ConfigMap created
✓ Octez-binaries PVC created
✓ Sequencer setup complete
Triggering CI pipeline for branch 'master'...
✓ Pipeline triggered: 12345
Installing Helm chart...
✓ Helm release installed: my-testnet

✅ Testnet deployed successfully!

Testnet: my-testnet
Namespace: testnet-my-testnet

Endpoints:
  Dashboard:           https://my-testnet.txpark.nomadic-labs.com/
  Blockscout Explorer: https://my-testnet-blockscout.txpark.nomadic-labs.com/
  Faucet:              https://my-testnet-faucet.txpark.nomadic-labs.com/
  EVM RPC:             https://my-testnet.txpark.nomadic-labs.com/rpc
  Smart Rollup Node:   https://my-testnet.txpark.nomadic-labs.com/rollup
  TzKT API:            https://my-testnet.txpark.nomadic-labs.com/tzkt

Lifetime: 1h0m0s (automatic cleanup)

Manage testnet:
  Status:  txpark status my-testnet
  Logs:    txpark logs my-testnet
  Destroy: txpark destroy my-testnet

list

List all running testnets in the cluster.

Usage

txpark list [flags]

Flags

Flag Type Default Description
--output, -o <format> string table Output format: table, wide, json, yaml
--owner <username> string - Filter by owner username
--expired bool false Show only expired testnets
--older-than <duration> string - Show testnets older than duration (e.g., 7d, 24h)
--sort-by <field> string age Sort by: name, age, owner, expiration

Examples

List all testnets (table format):

txpark list

List with detailed output including endpoints:

txpark list --output wide

List testnets owned by specific user:

txpark list --owner alice

List only expired testnets:

txpark list --expired

List testnets older than 7 days:

txpark list --older-than 7d

Sort by expiration time:

txpark list --sort-by expiration

Output as JSON for scripting:

txpark list --output json | jq '.[] | select(.Status == "Running")'

Output Example

Table format:

NAME                           STATUS          AGE        OWNER                EXPIRES
my-testnet                     Running         2h         alice                in 2h
test-1234567890                Running         5d         bob                  EXPIRED
prod-testnet                   Running         30d        charlie              never

Total: 3 testnet(s)

Wide format:

NAME              STATUS    AGE    OWNER    EXPIRES    ENDPOINTS
my-testnet        Running   2h     alice    in 2h      https://my-testnet.txpark.nomadic-labs.com/
prod-testnet      Running   30d    charlie  never      https://prod-testnet.txpark.nomadic-labs.com/

Total: 2 testnet(s)


status

Show detailed status of a specific testnet.

Usage

txpark status <testnet-name> [flags]

Flags

Flag Type Default Description
--watch, -w bool false Watch for status changes (refreshes every 2 seconds)

Examples

Show testnet status:

txpark status my-testnet

Watch status updates in real-time:

txpark status my-testnet --watch

Output Example

═══════════════════════════════════════════════════════════════
Testnet: my-testnet
Namespace: testnet-my-testnet
═══════════════════════════════════════════════════════════════

Metadata:
  Created:  2026-03-19 14:00:00 UTC (2h ago)
  Owner:    alice
  TTL:      1h0m0s
  Expires:  2026-03-19 15:00:00 UTC (EXPIRED)

Endpoints:
  Dashboard:           https://my-testnet.txpark.nomadic-labs.com/
  Blockscout Explorer: https://my-testnet-blockscout.txpark.nomadic-labs.com/
  Faucet:              https://my-testnet-faucet.txpark.nomadic-labs.com/
  EVM RPC:             https://my-testnet.txpark.nomadic-labs.com/rpc
  Smart Rollup Node:   https://my-testnet.txpark.nomadic-labs.com/rollup
  TzKT API:            https://my-testnet.txpark.nomadic-labs.com/tzkt

Components:
  NAME                              STATUS    READY    RESTARTS  AGE
  evm-sequencer-6d4b8c9f7-x9k2m     Running   2/2      0         2h
  my-testnet-blockscout-xxx         Running   1/1      0         2h
  my-testnet-tzkt-api-xxx           Running   1/1      0         2h
  my-testnet-tzkt-sync-xxx          Running   1/1      0         2h
  my-testnet-postgresql-0           Running   1/1      0         2h

Ingresses:
  NAME                       HOST                                        TLS
  my-testnet-main            my-testnet.txpark.nomadic-labs.com          ✓
  my-testnet-blockscout      my-testnet-blockscout.txpark.nomadic...     ✓
  my-testnet-faucet          my-testnet-faucet.txpark.nomadic-labs...    ✓

logs

Show logs from a specific testnet component.

Usage

txpark logs <testnet-name> <component> [flags]

Available Components

Component Description
evm-sequencer EVM sequencer node (default container)
smart-rollup-node Smart rollup node (sidecar container)
kernel-builder Kernel builder (init container)
rollup-originator Rollup originator (init container)
l1-node L1 Tezos node
tzkt-sync TzKT indexer sync service
tzkt-api TzKT API service
blockscout Blockscout explorer
tzkt-postgresql TzKT PostgreSQL database

Flags

Flag Type Default Description
--follow, -f bool false Stream logs in real-time
--tail <lines> int 100 Number of lines to show from the end
--container, -c <name> string - Specific container name (overrides component default)
--timestamps bool false Include timestamps in log output
--since <duration> string - Show logs since duration (e.g., 1h, 30m)

Examples

Show last 100 lines of EVM sequencer logs:

txpark logs my-testnet evm-sequencer

Follow logs in real-time:

txpark logs my-testnet evm-sequencer --follow

Show last 50 lines:

txpark logs my-testnet tzkt-sync --tail 50

Show logs with timestamps:

txpark logs my-testnet evm-sequencer --timestamps

Show logs from specific container in multi-container pod:

txpark logs my-testnet evm-sequencer --container smart-rollup-node

Show logs from init container:

txpark logs my-testnet kernel-builder

Output Example

2026-03-19 14:23:45 [INFO] Starting EVM sequencer...
2026-03-19 14:23:46 [INFO] Connecting to L1 node at http://l1-node:8732
2026-03-19 14:23:47 [INFO] EVM sequencer started successfully
2026-03-19 14:23:48 [INFO] Processing block #1234
2026-03-19 14:23:49 [INFO] Block #1234 processed in 250ms

shell

Open an interactive shell in a testnet pod.

Usage

txpark shell <testnet-name> [component] [flags]

Available Components

  • evm-sequencer (default)
  • l1-node
  • tzkt-sync
  • tzkt-api
  • tzkt-postgresql

Flags

Flag Type Default Description
--component, -c <name> string evm-sequencer Component to connect to
--container <name> string - Specific container name
--env <environment> string - Switch to environment first (not yet implemented)

Examples

Open shell in EVM sequencer pod:

txpark shell my-testnet

Open shell in specific component:

txpark shell my-testnet --component l1-node

Or using positional argument:

txpark shell my-testnet l1-node

Open shell in specific container:

txpark shell my-testnet evm-sequencer --container smart-rollup-node

Interactive Session Example

$ txpark shell my-testnet evm-sequencer
Opening shell in pod: evm-sequencer-6d4b8c9f7-x9k2m (testnet: my-testnet)

# Now you're inside the pod
$ ls -la /octez-binaries/
total 245M
-rwxr-xr-x 1 root root  42M octez-evm-node
-rwxr-xr-x 1 root root 156M octez-node
-rwxr-xr-x 1 root root  47M octez-smart-rollup-node

$ octez-evm-node --version
octez-evm-node 19.0

$ exit

upgrade

Upgrade testnet binaries without losing data.

Usage

txpark upgrade <testnet-name> [flags]

This performs a rolling restart of the EVM sequencer with updated binaries while preserving all blockchain data and state.

Flags

Flag Type Default Description
--build-branch <branch> string - GitLab branch to fetch binaries from
--copy-local-binaries bool false Copy binaries from local $TEZOS_SOURCE (not yet implemented)

Binary Source Required

You must specify either --build-branch or --copy-local-binaries to provide the binary source.

Upgrade Process

The upgrade follows these steps:

  1. Verifies testnet exists
  2. Triggers CI pipeline (if using --build-branch)
  3. Updates Helm release with new binary configuration
  4. Performs rolling restart of EVM sequencer pod
  5. Waits for pod to be ready with new binaries
  6. Verifies upgrade success

Examples

Upgrade to binaries from a different branch:

txpark upgrade my-testnet --build-branch feature-branch

Upgrade to latest master binaries:

txpark upgrade my-testnet --build-branch master

Output Example

Upgrading testnet binaries
  testnet: my-testnet
  branch: feature-branch
Fetching current release...
Current pipeline: 12345
Triggering CI pipeline for branch 'feature-branch'...
✓ Pipeline triggered: 12346
Upgrading Helm release...
✓ Helm release upgraded: my-testnet (revision 2)

✅ Testnet upgrade initiated!

The EVM sequencer pod will restart with new binaries.
Monitor progress: txpark status my-testnet --watch
View logs: txpark logs my-testnet evm-sequencer --follow

Pipeline ID: 12345 → 12346

destroy

Destroy a testnet and all its resources.

Usage

txpark destroy <testnet-name> [flags]

Destructive Operation

This action cannot be undone. All data, including blockchain state and persistent volumes, will be permanently deleted.

Flags

Flag Type Default Description
--force, -f bool false Skip confirmation prompt
--dry-run bool false Preview what would be deleted without actually deleting

What Gets Deleted

  • All pods (EVM sequencer, Blockscout, TzKT, PostgreSQL)
  • All persistent volumes and data
  • All ingresses and SSL certificates
  • All ConfigMaps and Secrets
  • The namespace itself

Examples

Destroy a testnet (with confirmation):

txpark destroy my-testnet

Force destroy without confirmation:

txpark destroy my-testnet --force

Preview what would be deleted (dry run):

txpark destroy my-testnet --dry-run

Output Example

With confirmation:

═══════════════════════════════════════════════════════════════
Testnet: my-testnet
Namespace: testnet-my-testnet
Created: 2026-03-19 14:00:00 UTC
Owner: alice
═══════════════════════════════════════════════════════════════

Resources to be deleted:
  Namespace:             1
  Pods:                  5
  Persistent Volumes:    3
  Services:              6
  Ingresses:             3
  ConfigMaps:            4
  Secrets:               2

⚠️  This action cannot be undone. Delete testnet 'my-testnet'? [y/N]: y

Destroying testnet...

✓ Helm release deleted
Deleting namespace and all resources...
Waiting for cleanup to complete.....

✅ Testnet destroyed successfully!

All resources have been deleted:
  • 5 pods stopped
  • 3 persistent volumes released
  • 3 ingresses removed
  • Namespace 'testnet-my-testnet' deleted

Dry run:

═══════════════════════════════════════════════════════════════
Testnet: my-testnet
Namespace: testnet-my-testnet
...
═══════════════════════════════════════════════════════════════

Resources to be deleted:
  Namespace:             1
  Pods:                  5
  Persistent Volumes:    3
  ...

✓ Dry run complete (no resources were deleted)


version

Show version information for the txpark CLI.

Usage

txpark version

Or using the global flag:

txpark --version

Output Example

txpark v1.0.0
Commit: abc1234def5678
Built: 2026-03-19
Go: go1.22.0

Common Patterns

Quick Testnet Lifecycle

# Deploy
txpark deploy test-123

# Check status
txpark status test-123

# View logs
txpark logs test-123 evm-sequencer --follow

# Debug with shell
txpark shell test-123

# Clean up
txpark destroy test-123

Production Testnet

# Deploy permanent testnet with high performance
txpark deploy prod --permanent --profile high-performance --sequencer --build-branch master

# Monitor continuously
txpark status prod --watch

# Upgrade when needed
txpark upgrade prod --build-branch stable-branch

Batch Operations

List and process testnets with jq:

# Get all expired testnets
txpark list --output json | jq -r '.[] | select(.Status == "Expired") | .Name'

# Destroy all expired testnets
txpark list --output json | jq -r '.[] | select(.Status == "Expired") | .Name' | \
  xargs -I {} txpark destroy {} --force


Next Steps