Open source voice AI platform. Self-hosted alternative to Vapi and Retell. On Prem, BYOK across Speech to Speech or LLM/STT/TTS, with a visual workflow builder, MCP native and telephony support. https://app.dograh.com
Find a file
prabhatlepton e7494e9c21
feat(auth): gate OSS signup behind ENABLE_SIGNUP flag (#514)
* feat(auth): gate OSS signup behind ENABLE_SIGNUP flag

## Problem

The `POST /api/v1/auth/signup` endpoint is unconditionally exposed on
every OSS install. Operators running an invite-only deployment (private
customer instances, staging environments, internal-only tenants) have
no way to disable public account creation without patching the codebase.
The UI also shows the "Sign up" link on `/auth/login` regardless of
whether signup is available, so a locked-down deployment leaves broken
navigation on the login page.

## Fix

Introduce a single `ENABLE_SIGNUP` env var (default `true` — no behavior
change for existing installs) that controls signup end-to-end:

- **Backend** — `api/constants.ENABLE_SIGNUP` is read at module load.
  The signup handler returns 403 when it's false. Also exposed on
  `GET /api/v1/health` as `signup_enabled: bool` so the UI can mirror
  the operator's choice at runtime instead of at bundle-build time.

- **UI** — `getSignupEnabled()` in `lib/auth/config.ts` proxies the
  health field, `/api/config/auth` surfaces it to the browser, the
  login page conditionally renders the "Sign up" link via a one-shot
  `fetch("/api/config/auth")` in `useEffect`, and the middleware
  redirects `/auth/signup` → `/auth/login` when disabled (fires before
  Next.js can serve the statically-prerendered signup page).

- **Helm** — `config.enableSignup` (default `true`) is rendered into
  the ConfigMap as `ENABLE_SIGNUP` so operators can flip it via
  `--set config.enableSignup=false` at install/upgrade time.

Fallbacks default to `signupEnabled: true` in every layer so a fresh
install "just works" and matches the backend default.

* address review: rollout on ConfigMap change, cache TTL, no signup-link flash

Four review points on #514:

**P1 — ConfigMap Change Skips Rollout** (`configmap.yaml`). `helm upgrade
--set config.enableSignup=false` updated the ConfigMap but did NOT roll
the api pods, so running processes kept the ENABLE_SIGNUP env from
startup and continued serving the old signup behavior — including
divergence between replicas mid-upgrade.

Fix: add the standard `checksum/config` pod-template annotation on the
four backend Deployments that `envFrom` the ConfigMap (`web`,
`arq-worker`, `ari-manager`, `campaign-orchestrator`). Verified with
`helm template`: all four Deployments share the same checksum on any
given render, and flipping `config.enableSignup` changes the checksum
uniformly so kubectl sees a pod-template diff and rolls all four.

**P1 — Signup Flag Stays Cached (server)** (`ui/src/lib/auth/config.ts`).
Module-scoped cache had no TTL. `revalidate: 300` was passed on the
underlying `fetch()` but the in-memory short-circuit above ran first, so
the value never refreshed until the UI pod restarted.

Fix: add `AUTH_CONFIG_TTL_MS = 5 * 60 * 1000` (matching the fetch
revalidate hint) so the module cache and the Next fetch cache stay in
sync. Backend flag flips propagate within 5 minutes without a pod
restart.

**P1 — Middleware Redirect Uses Stale State** (`ui/src/middleware.ts`).
Same shape as above — a separate module cache with no expiry could keep
redirecting `/auth/signup → /auth/login` after signup was re-enabled, or
keep serving the statically-prerendered signup page after lockdown.

Fix: same `SERVER_CONFIG_TTL_MS = 5 * 60 * 1000` TTL on the middleware
cache.

**P2 — Signup link flash on login page** (`ui/src/app/auth/login/page.tsx`).
Initial `signupEnabled` state was `null`, so `{signupEnabled && ...}`
hid the link on first paint and it popped in after the fetch resolved
— a CLS on every login-page load on stock installs where signup is
enabled.

Fix: initialise the state to `true` (matches the backend default). The
fetch still overrides to `false` when the operator has actually
disabled signup, so the lockdown UI behavior is unchanged; only the
happy-path flash is gone.

* simplify signup flag: drop TTL caches and middleware redirect

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* resolve signup flag server-side to avoid signup link flicker

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: prabhat pankaj <prabhatiitbhu@gmail.com>
Co-authored-by: Abhishek Kumar <abhishek@a6k.me>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-13 14:08:25 +05:30
.agents/skills feat: add Review AGENTS.md Skill 2026-05-20 16:20:07 +05:30
.devcontainer chore: update documentation 2026-06-19 18:11:35 +05:30
.github chore: format release please changelogs 2026-06-02 13:42:55 +05:30
.vscode chore: setup worktree on folder open 2026-06-30 16:15:10 +05:30
api feat(auth): gate OSS signup behind ENABLE_SIGNUP flag (#514) 2026-07-13 14:08:25 +05:30
config/coturn feat: add coturn configurations (#143) 2026-02-03 13:52:50 +05:30
deploy feat(auth): gate OSS signup behind ENABLE_SIGNUP flag (#514) 2026-07-13 14:08:25 +05:30
docs feat(auth): gate OSS signup behind ENABLE_SIGNUP flag (#514) 2026-07-13 14:08:25 +05:30
evals chore: upgrade Next.js in evals/visualizer from 16.1.4 to 16.2.6 (#361) 2026-05-27 14:26:08 +05:30
examples feat(examples): add multi-node Workflow SDK example in Python and TypeScript (#440) 2026-06-18 15:13:10 +05:30
nginx feat: add rolling updates for production deployment (#175) 2026-03-02 14:44:04 +05:30
pipecat@cc535a0c86 chore: cleaup mps v1 billing (#507) 2026-07-07 18:38:29 +05:30
scripts feat: add Helm chart for Kubernetes deployment (#365) 2026-07-03 12:39:39 +05:30
sdk fix: fix superadmin impersonation 2026-07-11 15:51:36 +05:30
ui feat(auth): gate OSS signup behind ENABLE_SIGNUP flag (#514) 2026-07-13 14:08:25 +05:30
.dockerignore fix: speed up multi arch build (#372) 2026-05-28 13:43:33 +05:30
.gitignore chore: add Conductor per-worktree dev setup (.conductor/ + .worktreeinclude) 2026-06-29 12:48:33 +05:30
.gitmodules refactor: change pipecat to submodule & add github alerts 2025-09-29 18:17:04 +05:30
.nvmrc Chore/add setup and contributing docs (#90) 2025-12-27 09:25:20 +05:30
.python-version feat: add devcontainer based setup (#352) 2026-05-25 20:44:22 +05:30
.release-please-manifest.json chore(main): release dograh 1.41.0 (#497) 2026-07-06 21:37:02 +05:30
AGENTS.md chore: cleaup mps v1 billing (#507) 2026-07-07 18:38:29 +05:30
CHANGELOG.md chore(main): release dograh 1.41.0 (#497) 2026-07-06 21:37:02 +05:30
CLAUDE.md Chore/add setup and contributing docs (#90) 2025-12-27 09:25:20 +05:30
CONTRIBUTING.md feat: banner if API is not reachable 2026-05-31 13:05:22 +05:30
docker-compose-local.yaml chore: update setup docs 2026-05-12 14:25:34 +05:30
docker-compose.yaml feat(auth): gate OSS signup behind ENABLE_SIGNUP flag (#514) 2026-07-13 14:08:25 +05:30
LICENSE feat: add README, LICENSE, CONTRIBUTING 2025-09-10 09:20:38 +05:30
README.ja-JP.md Docs/add japanese readme (#477) 2026-06-30 09:49:41 +05:30
README.md Docs/add japanese readme (#477) 2026-06-30 09:49:41 +05:30
README.zh-CN.md Docs/add japanese readme (#477) 2026-06-30 09:49:41 +05:30
release-please-config.json chore: format release please changelogs 2026-06-02 13:42:55 +05:30
remote_up.sh feat(scripts): free trusted HTTPS via sslip.io for public-IP remote i… (#460) 2026-06-27 17:19:29 +05:30
SECURITY.md feat: add more issue templates 2025-09-30 15:05:06 +05:30

Dograh AI

The open-source, self-hostable alternative to Vapi & Retell — build production voice agents with a drag-and-drop workflow builder. From zero to a working bot in under 2 minutes.

Try the Cloud   Self-host in 60s   Join Slack

📖 Docs  ·  📜 BSD 2-Clause  ·  🌐 中文  ·  🌐 日本語

Dograh in action — build a workflow, launch a voice agent, talk to it

  • 100% open source, self-hostable — no vendor lock-in, unlike Vapi or Retell
  • Full control & transparency — every line of code is open, with flexible LLM / TTS / STT integration
  • Maintained by YC alumni and exit founders, committed to keeping voice AI open

dograh-hq%2Fdograh | Trendshift

Dograh featured by Better Stack
Featured by Better Stack — a hands-on look at Dograh
📺 Prefer a 2-minute product walkthrough? Click here.

⚖️ Dograh vs Vapi vs Retell

An honest comparison on the axes that matter most to teams evaluating voice AI platforms.

Dograh Vapi Retell
License BSD 2-Clause (open source) Proprietary Proprietary
Self-hostable Yes — one Docker command SaaS only SaaS only
Pricing Free (self-host) · usage-based (cloud) Per-minute SaaS Per-minute SaaS
Bring your own LLM / STT / TTS Any provider, or use Dograh's stack Configurable within their integrations Configurable within their integrations
Source-level customization Every line is yours to modify Closed source Closed source
Data residency Your infra, your rules Their cloud Their cloud
Vendor lock-in None Full Full

🚀 Get Started

Download and setup Dograh on your Local Machine

Note

We collect anonymous usage data to improve the product. You can opt out by setting ENABLE_TELEMETRY=false before running the startup script.

Note

If you wish to run the platform on a remote server instead, checkout our Documentation

curl -o docker-compose.yaml https://raw.githubusercontent.com/dograh-hq/dograh/main/docker-compose.yaml && curl -o start_docker.sh https://raw.githubusercontent.com/dograh-hq/dograh/main/scripts/start_docker.sh && chmod +x start_docker.sh && ./start_docker.sh

Prefer an AI agent to set it up for you? If you use Claude Code or Codex, install the official Dograh setup skill and let your agent handle installation, configuration, and troubleshooting — it detects your OS, picks the right deploy path, runs Dograh's own setup scripts, and verifies the result.

# In Claude Code
/plugin marketplace add dograh-hq/dograh-plugins
/plugin install dograh@dograh

Then start a new session and ask it to "set up Dograh" (or run /dograh-setup). Codex is supported too — see the plugin repo.

Note

First startup may take 2-3 minutes to download all images. Once running, open http://localhost:3010 to create your first AI voice assistant! For common issues and solutions, see 🔧 Troubleshooting.

🎙️ Your First Voice Bot

  1. Open http://localhost:3010 in your browser.
  2. Pick Inbound or Outbound, name your bot (e.g. Lead Qualification), and describe the use case in 510 words (e.g. Screen insurance form submissions for purchase intent).
  3. Click Web Call — you're talking to your bot.

🔑 No API keys needed. Dograh ships with auto-generated keys and its own LLM / TTS / STT stack. Connect your own keys for LLM, TTS, STT, or Telephony (e.g. Twilio, Vonage, Telnyx) anytime.

Features

Voice Capabilities

  • Telephony: Built-in telephony integration like Twilio, Vonage, Vobiz, Cloudonix (easily add others), with support for transferring calls to human agents
  • Languages: English support (expandable to other languages)
  • Custom Models: Bring your own TTS/STT models
  • Real-time Processing: Low-latency voice interactions

Developer Experience

  • Zero Config Start: Auto-generated API keys for instant testing
  • Python-Based: Built on Python for easy customization
  • Docker-First: Containerized for consistent deployments
  • Modular Architecture: Swap components as needed

Testing & Quality

  • Test Mode: Try your agent end-to-end before publishing, with no production calls or data affected
  • In-Dashboard Web Calls: Talk to your bot directly while building — no telephony setup required
  • QA Node: A built-in workflow node that analyzes prompt quality across your other nodes

Deployment Options

Local Development

Refer Local Setup

Self-Hosted Deployment

For detailed deployment instructions including remote server setup with HTTPS, see our Docker Deployment Guide.

Cloud Version

Visit https://www.dograh.com for our managed cloud offering.

📚Documentation

You can go to https://docs.dograh.com for our documentation.

📦 SDKs

🤝Community & Support

👋 Coming from the Better Stack video? Drop your use case in our pinned GitHub Discussion — we read every reply and the founders personally onboard early adopters.

  • Slack — the cornerstone of Dograh AI contributions. Connect with maintainers, discuss features before coding, get help with setup, and stay current on contribution sprints.
  • GitHub Discussions — share use cases, ask questions, swap workflow recipes.
  • GitHub Issues — report bugs or request features.

👉 Join us → Dograh Community Slack

🙌 Contributing

We love contributions! Dograh AI is 100% open source and we intend to keep it that way.

Getting Started

  • Fork the repository
  • Create your feature branch (git checkout -b feature/AmazingFeature)
  • Commit your changes (git commit -m 'Add some AmazingFeature')
  • Push to the branch (git push origin feature/AmazingFeature)
  • Open a Pull Request

Star History

Dograh star history

📄 License

Dograh AI is licensed under the BSD 2-Clause License- the same license as projects that were used in building Dograh AI, ensuring compatibility and freedom to use, modify, and distribute.

🏢 About

Built with ❤️ by Dograh (Zansat Technologies Private Limited) Founded by YC alumni and exit founders committed to keeping voice AI open and accessible to everyone.




Star us on GitHub | ☁️ Try Cloud Version | 💬 Join Slack