Host-managed setup
Run everything directly on your host instead of inside the devcontainer. You need Git, Node.js 24, Python 3.13, and Docker (for Postgres, Redis, and MinIO).- Run the contributor bootstrap. It configures
originas your fork andupstreamasdograh-hq/dograh, initializes the pipecat submodule, creates the Python venv, and copies the.envtemplates:
- Activate the virtual environment:
- Install Python requirements:
- Install UI dependencies (make sure
node --versionreports 24, e.g. vianvm use 24):
- Start Postgres, Redis, and MinIO:
- Start the backend:
- Start the UI, then open
http://localhost:3000:
Devcontainer internals
The checked-in.devcontainer/ follows the Dev Containers specification, so it should also work in Cursor, JetBrains IDEs, and other compatible editors. Only the VS Code path is actively tested โ if something breaks elsewhere, please open a GitHub issue.
What the bootstrap does
While the container starts, the devcontainer will:- Initialize the
pipecatgit submodule on the host throughinitializeCommand - Bring up
postgres,redis, andminiothrough Docker Compose and wait for them to be healthy - Seed the
venvnamed volume from the image-baked Python 3.13 venv - Reinstall
pipecatas editable from the bind-mounted submodule so source edits take effect - Create
api/.env,api/.env.test, andui/.envfrom their*.exampletemplates if they do not already exist - Run
npm ciforui/andapi/mcp_server/ts_validator/
localhost for Postgres, Redis, and MinIO is rewritten to the docker network aliases postgres, redis, and minio. MINIO_PUBLIC_ENDPOINT deliberately stays on localhost because the browser on your host loads from it.
If you already had an
api/.env or api/.env.test from host-managed development with localhost hosts for Postgres, Redis, or MinIO, the bootstrap leaves it untouched. Edit those URLs to the docker network aliases before starting the backend inside the devcontainer, or delete the file and let the bootstrap recreate it on the next rebuild.When to rebuild the container
The workspace bind mount and thevenv / node_modules named volumes persist across container restarts, so you rarely need to rebuild. Rebuild only when one of these changes:
.devcontainer/Dockerfileor.devcontainer/devcontainer.jsonapi/requirements.txtorapi/requirements.dev.txt- The
pipecat/submodule
ui/package.json, and the .env.example templates do not require a rebuild. After a git pull, a quick check:
Personal install hook
Anything you install inside the container outside the named volumes, notably under/home/vscode, is wiped on rebuild. This includes npm i -g packages and tools like the Claude or Codex CLIs.
To reinstall personal tooling automatically on every rebuild, drop an executable script at .devcontainer/install.local.sh. It is gitignored and runs at the tail of the post-create bootstrap. Example:
command -v or a marker file so re-runs are cheap and safe.
Dev Container CLI
To use the devcontainer without VS Code, install the CLI once on your host (requires Node.js):Fork and upstream remotes
The contributor bootstrap (scripts/setup_fork.sh) configures two remotes:
origin: your fork, where you pushupstream:dograh-hq/dograh, where new commits land
dograh-hq/dograh directly instead of your fork, run it once (inside the devcontainer is fine):
git remote -v. You should see:
Always push feature branches to
origin (your fork), then open a pull request against dograh-hq/dograh:main. Never push directly to upstream.