eeee eeee eeeee eeeee eeeee eeeee eeeee eeeee eeeee e eeee
8 8 8 8 8 8 8 8 8 88 8 8 8 88 8 8 8 8
8eee 8eee 8eee8e 8e 8 8eee8e 8 8 8eee8e 8 8 8e 8e 8e
88 88 88 8 88 8 88 8 8 8 88 8 8 8 88 88 88
88 88ee 88 8 88 8 88 8 8eee8 88eee8 8eee8 88 88 88e8
skip the compute factor, run your robotics sim out in the cloud
Install the native Fern CLI through Bun:
bun install --global @coolcmyk/fern
fern --helpOr run a temporary cached copy:
bunx @coolcmyk/fern --helpSee the installation guide for supported platforms and configuration. The package uses a platform-specific native Rust binary and does not run a download script during installation.
Fern deploys the Drone Sim UE5.8/Cosys-AirSim runtime to a standard GPU Runpod Pod. The published image is interactive: Fern can create a fresh Pod and expose a protected noVNC desktop, while the user starts the simulator inside that Pod. See the implementation plan.
Set the API key once in your shell startup file so every Fern invocation can
use it. Add this line to ~/.bashrc when using Bash or ~/.zshrc when using
Zsh:
export RUNPOD_API_KEY="your-runpod-api-key"Reload the matching shell configuration:
# Bash
source ~/.bashrc
# Zsh
source ~/.zshrcKeep that file private and never commit it to a repository. Fern also supports
RUNPOD_ACCOUNT_API_KEY, which takes precedence when both variables are set.
The current CLI provides Runpod discovery and a reversible stop operation:
fern config check
fern pod list --compute cpu
fern pod get <pod-id>
fern pod stop <pod-id>Fern never prints either credential.
For a project-local setup instead, put the credential in an ignored .env
file at the repository root:
RUNPOD_API_KEY=your-runpod-api-key.github/workflows/drone-sim-stack-image.yml builds the current coolcmyk/drone-sim main
source on GitHub-hosted runners and publishes the complete Fern runtime as:
ghcr.io/coolcmyk/drone-sim:stack-main
ghcr.io/coolcmyk/drone-sim:stack-<fern-commit>
The workflow pulls the EULA-gated Epic UE base directly while building, then publishes only the
completed runtime. EPIC_GHCR_USERNAME and EPIC_GHCR_PUBLISH_TOKEN must therefore grant the
same account read access to Epic's package and write access to Coolcmyk GHCR. Fern selects
stack-main by default; use --image to pin a tested digest. MAVLink, DDS, raw VNC and
simulator-control ports remain private to the Pod.
Fern publishes only the password-protected noVNC viewer. It never exposes raw VNC, MAVLink, DDS, or simulator-control ports. Create the fresh GPU Pod with:
fern deploy --profile drone-sim-stack --vnc-viewer --yesFern returns https://<pod-id>-6080.proxy.runpod.net/vnc.html?autoconnect=true. The desktop
and terminal are available immediately; enter the password (default: root) and run:
/opt/drone-sim/scripts/sim_up_local.sh --detachThat starts the local simulator services without Docker. Set FERN_VNC_PASSWORD before deploy
to override the default for any shared deployment.
bun install
bun run testRust-only checks remain available through Cargo:
cargo test --all-targets
cargo clippy --all-targets -- -D warnings