Skip to content

Add native execution mode: run Plano without Docker#744

Open
adilhafeez wants to merge 3 commits intomainfrom
adil/build_without_docker
Open

Add native execution mode: run Plano without Docker#744
adilhafeez wants to merge 3 commits intomainfrom
adil/build_without_docker

Conversation

@adilhafeez
Copy link
Contributor

@adilhafeez adilhafeez commented Feb 12, 2026

Summary

  • Adds --native flag to planoai build, up, and down commands for running Plano directly on the host without Docker
  • Envoy binary auto-downloaded from tetratelabs/archive-envoy on first use, cached at ~/.plano/bin/ with version pinning
  • WASM plugins and brightstaff built from source via planoai build --native
  • Docker mode remains the default and is fully preserved

Sample session

$ planoai build --native
✓ WASM plugins built
✓ brightstaff built

$ planoai up config.yaml --native
✓ Configuration valid
✓ Configuration rendered
✓ Plano is running (native mode)
  http://localhost:12000

$ curl -s -X POST http://localhost:12000/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{"model":"gpt-4o","messages":[{"role":"user","content":"Say hello in 5 words or less"}]}'
{
  "model": "gpt-4o-2024-08-06",
  "choices": [{"message": {"content": "Hi there! How are you?"}}],
  "usage": {"prompt_tokens": 15, "completion_tokens": 7, "total_tokens": 22}
}

$ planoai down --native
Plano stopped (native mode).

Files changed

File Change
cli/planoai/native_binaries.py New — Envoy binary download, WASM plugin and brightstaff discovery
cli/planoai/native_runner.py New — native mode lifecycle (config rendering, double-fork process management)
cli/planoai/main.py --native flag on build/up/down commands
cli/planoai/consts.py Native mode constants (PLANO_HOME, ENVOY_VERSION, etc.)
cli/planoai/core.py Fix _get_gateway_ports to support model_providers key
Dockerfile Extract ENVOY_VERSION to ARG, pinned in sync with consts.py
docs/source/get_started/quickstart.rst Native mode prerequisites and start instructions
docs/source/resources/deployment.rst Native deployment section

Test plan

  • planoai build --native builds WASM plugins and brightstaff
  • planoai up config.yaml --native starts natively, health checks pass
  • curl http://localhost:12000/v1/chat/completions routes through proxy to OpenAI
  • planoai down --native cleanly stops both processes
  • planoai up config.yaml (without --native) still works via Docker unchanged

adilhafeez added a commit that referenced this pull request Feb 12, 2026
Add `--native` flag to `planoai build`, `up`, and `down` commands,
enabling Plano to run directly on the host without Docker. Envoy is
auto-downloaded on first run, and WASM plugins + brightstaff are
compiled from source.

- Native build via `planoai build --native` (Rust toolchain required)
- Auto-download Envoy from tetratelabs/archive-envoy releases
- Config rendering reuses config_generator in-process
- Process management via double-fork daemonization with PID file
- Tracing support: `--with-tracing` injects tracing config automatically
- Supports linux-amd64, linux-arm64, darwin-arm64
- Demo config, script, and README in demos/native_run/

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@adilhafeez adilhafeez force-pushed the adil/build_without_docker branch from 92382fe to 1ac442f Compare February 12, 2026 01:43
@adilhafeez adilhafeez added this to the 0.2.1 milestone Feb 12, 2026
adilhafeez added a commit that referenced this pull request Feb 12, 2026
Add `--native` flag to `planoai build`, `up`, and `down` commands,
enabling Plano to run directly on the host without Docker. Envoy is
auto-downloaded on first run, and WASM plugins + brightstaff are
compiled from source.

- Native build via `planoai build --native` (Rust toolchain required)
- Auto-download Envoy from tetratelabs/archive-envoy releases
- Config rendering reuses config_generator in-process
- Process management via double-fork daemonization with PID file
- Tracing support: `--with-tracing` injects tracing config automatically
- Bump black to 24.10.0 for Python 3.14 compatibility
- Supports linux-amd64, linux-arm64, darwin-arm64
- Demo config, script, and README in demos/native_run/

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@adilhafeez adilhafeez force-pushed the adil/build_without_docker branch from df70c80 to 8e27de6 Compare February 12, 2026 02:48
adilhafeez added a commit that referenced this pull request Feb 19, 2026
Add `--native` flag to `planoai build`, `up`, and `down` commands,
enabling Plano to run directly on the host without Docker. Envoy is
auto-downloaded on first run, and WASM plugins + brightstaff are
compiled from source.

- Native build via `planoai build --native` (Rust toolchain required)
- Auto-download Envoy from tetratelabs/archive-envoy releases
- Config rendering reuses config_generator in-process
- Process management via double-fork daemonization with PID file
- Tracing support: `--with-tracing` injects tracing config automatically
- Bump black to 24.10.0 for Python 3.14 compatibility
- Supports linux-amd64, linux-arm64, darwin-arm64
- Demo config, script, and README in demos/native_run/

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@adilhafeez adilhafeez force-pushed the adil/build_without_docker branch from 8e27de6 to 1bf866b Compare February 19, 2026 05:02
@adilhafeez adilhafeez force-pushed the adil/build_without_docker branch from 409ef02 to 76a70d6 Compare February 19, 2026 05:13
@salmanap
Copy link
Contributor

Before I do a line-level code review: Is the build command mandatory? Meaning if we don't build native then the developer can't run native? This presumes that they must have our source code locally.

If the idea is for us to be a stand-alone binary (much like Envoy can be) then shouldn't we support that as a first-class option. Plus I am not sure if I have seen this --native flag in other open source projects that support both a dockerized container image and a binary. Can you share examples on the developer experience that might inform me here?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants