About starters
A skill that helps developers select runnable Deepgram starter apps by feature and stack, with cloning and setup guidance. It also documents template availability and limitations such as submodule requirements.
Key features
- 01Choose templates by speech feature
- 02Filter by language and framework
- 03Browse the full starter matrix
- 04Follow clone and setup steps
- 05Distinguish apps from frontend submodules
Use cases
- 01Start a file transcription demo
- 02Build a real-time speech synthesis app
- 03Set up a voice agent for a chosen stack
- 04Check whether a Flux TTS template exists
MCP support
The README points to the `setup-mcp` skill for installing the Deepgram MCP server; it does not describe MCP interactions for this skill itself.
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ deepgram/ skills --skill startersAfter installing, type/startersin Claude Code to confirm it loaded.
Details
From the project READMEDeepgram Starter Apps
Clone a working demo and start building. Every starter is a minimal, runnable app you can extend.
1. Pick Your Feature
What do you want to build?
- Transcribe a file →
transcription— send audio/video, get text back (REST, Nova) - Transcribe a live stream →
live-transcription— real-time speech-to-text (WebSocket, Nova) - Generate speech →
text-to-speech— send text, get audio back (REST, Aura) - Stream speech →
live-text-to-speech— real-time text-to-audio (WebSocket, Aura) - Analyze text →
text-intelligence— sentiment, topics, intents, summaries over text you already have (REST,/v1/read) - Build a voice agent →
voice-agent— conversational AI agent (WebSocket, agent.deepgram.com) - Conversational STT with turn detection →
flux— Deepgram Flux STT for voice agents and interactive assistants (WebSocket,/v2/listen) - Turn-based TTS for a voice agent →
flux-tts— Deepgram Flux TTS, streaming synthesis with barge-in (WebSocket,/v2/speak)
There is no audio-intelligence starter. text-intelligence is text-only — it posts text you
already have to /v1/read. No {framework}-audio-intelligence repository exists in
deepgram-starters for any framework, so don't construct those URLs. To run intelligence features
(summarization, sentiment, topics, intents) over audio, they are query parameters on
/v1/listen, not a separate starter: clone the transcription starter for your framework and add
the parameters to its existing request. See the api skill for which features /v1/listen
supports.
Nova vs Flux STT for speech-to-text: use transcription or live-transcription (Nova, /v1/listen) for general-purpose transcription, captions, and batch workloads. Use flux (Flux STT, /v2/listen) when you need built-in turn detection for conversational audio. See the api skill for a full comparison.
Aura vs Flux TTS for text-to-speech: use text-to-speech or live-text-to-speech (Aura, /v1/speak) for one-shot synthesis, non-English voices, and compressed audio. Use flux-tts (Flux TTS, /v2/speak) when you're streaming LLM output to a speaker and need a turn lifecycle and barge-in. See the api skill for a full comparison.
Flux TTS starters exist for node, flask, fastapi, django, and java only — these are the five apps Deepgram officially publishes at Flux TTS template apps. There is no flux-tts starter for the other frameworks; don't construct those URLs. For an unsupported framework, start from the api skill's Flux TTS section and the SDK skills instead.
2. Pick Your Stack
| Language | Frameworks |
|---|---|
| JavaScript | node |
| TypeScript | bun, deno |
| Python | fastapi, flask, django |
| Go | go |
| Java | java |
| C# | csharp |
| Rust | rust |
| Ruby | ruby |
| PHP | php |
| C++ | cpp |
3. Clone and Run
Every starter lives at https://github.com/deepgram-starters/{framework}-{feature} — framework
first, feature second. Clone with submodules; each starter vendors two git submodules — its
browser frontend at frontend/ and the shared starter contracts at contracts/ — and a plain
git clone leaves both directories empty and the app unrunnable:
git clone --recurse-submodules https://github.com/deepgram-starters/{framework}-{feature}.git
cd {framework}-{feature}
In 80 of the 96 starters, both submodule URLs in .gitmodules are SSH ([email protected]:...)
even though both repositories are public, so --recurse-submodules fails with
Host key verification failed unless the user has a GitHub SSH key. The other 16 use HTTPS URLs
and clone without a key: 12 of the 13 {framework}-live-transcription starters (every one except
rust-live-transcription) plus csharp-voice-agent, django-voice-agent, flask-voice-agent,
and node-voice-agent. Without an SSH key, rewrite SSH to HTTPS for the clone. The rewrite
changes nothing on the 16 HTTPS starters, so it is safe to use on every starter:
git -c url."https://github.com/".insteadOf="[email protected]:" \
clone --recurse-submodules https://github.com/deepgram-starters/{framework}-{feature}.git
The starter's own make init runs git submodule update --init --recursive and installs
dependencies, but it inherits the URLs in .gitmodules. On the 80 SSH starters it fails
identically without a key, so it is the path for users who have SSH set up (or for one of the
16 HTTPS starters), not a workaround for users who don't.
Set your API key and follow the README:
export DEEPGRAM_API_KEY=your_key_here
Get an API key at https://console.deepgram.com.
Or scaffold with the CLI
The Deepgram CLI has a scaffolder that finds and clones a starter for you:
dg init --list # browse templates
dg init --list --search python # filter
dg init node-transcription # clone into ./node-transcription
dg init node-transcription --dir ./my-app
dg init does not solve the submodule problem. It runs a plain clone, so frontend/ and
contracts/ land empty, and it still prints Done! … is ready and "status": "success". Adding
--install runs the starter's make check-prereqs && make init, which hits the same .gitmodules
URLs: on the 80 SSH starters it fails with Host key verification failed, and dg init reports
success anyway. Without a GitHub SSH key, finish the checkout by hand after dg init:
cd my-app
git -c url."https://github.com/".insteadOf="[email protected]:" \
submodule update --init --recursive
dg init is also marked alpha, and its templates gallery is a separate list from the matrix
below rather than a subset of it. It carries 44 templates with no flux or flux-tts entries;
it still lists sinatra-transcription, whose repository is archived and private, so the clone
returns 404 for anyone outside Deepgram; and it lists nextjs-* templates that now redirect out
of deepgram-starters to deepgram-devs, which is why there is no nextjs row below. Treat
the matrix as authoritative and fall back to git clone. See the cli skill for installing
deepctl and for the rest of dg init.
The {feature}-html repos are not starters
The deepgram-starters org also contains transcription-html, live-transcription-html,
text-to-speech-html, live-text-to-speech-html, text-intelligence-html, voice-agent-html,
flux-html, and flux-tts-html. Do not clone these and do not offer them as starters. Each
is the shared browser frontend that a backend starter pulls in as its frontend/ submodule —
node-transcription vendors transcription-html, flask-voice-agent vendors voice-agent-html,
node-flux-tts and java-flux-tts both vendor flux-tts-html, and so on. Seven of the eight
say so in their own README ("This is a frontend submodule - do not use directly"); flux-tts-html
carries no such warning but is vendored the same way. None of them serve an API, so none of them
run standalone. Clone the backend starter instead and the right frontend arrives with it.
They also invert the naming rule. The starter pattern is {framework}-{feature}, but these are
{feature}-html — and the mirror-image names do not exist, so do not construct them:
deepgram-starters/html-transcription is a 404. There is no vanilla-HTML row in the matrix
because there is no standalone browser starter; for browser-only work, clone the node starter
for the feature you want and read its frontend/ directory.
Examples
"I want to build a voice agent in Python"
→ git clone --recurse-submodules https://github.com/deepgram-starters/fastapi-voice-agent.git
"I need live transcription in my Node app"
→ git clone --recurse-submodules https://github.com/deepgram-starters/node-live-transcription.git
"I want to add text-to-speech to my Go service"
→ git clone --recurse-submodules https://github.com/deepgram-starters/go-text-to-speech.git
"I want to analyze audio for sentiment in C#"
→ git clone --recurse-submodules https://github.com/deepgram-starters/csharp-text-intelligence.git
"I want streaming TTS with barge-in for my Node voice agent"
→ git clone --recurse-submodules https://github.com/deepgram-starters/node-flux-tts.git
"I want a plain browser/HTML demo"
→ There is no standalone HTML starter. Clone node-{feature} and work in its frontend/
directory — that is the same browser code the {feature}-html submodule holds.
All Starters
Every URL below is a real, published, non-archived repository, and the table is the complete
set: 13 frameworks × 7 features, plus flux-tts for the five frameworks that have it. A cell
showing — means that starter does not exist; don't construct the URL.
The java-flux-tts README clones with a plain git clone, without --recurse-submodules, while
its .gitmodules points both submodules at SSH URLs, so following its Maven steps leaves
frontend/ and contracts/ empty. Use the clone command in section 3 instead.
| transcription | live-transcription | text-to-speech | live-text-to-speech | text-intelligence | voice-agent | flux | flux-tts | |
|---|---|---|---|---|---|---|---|---|
| node | repo | repo | repo | repo | repo | repo | repo | repo |
| bun | repo | repo | repo | repo | repo | repo | repo | — |
| deno | repo | repo | repo | repo | repo | repo | repo | — |
| fastapi | repo | repo | repo | repo | repo | repo | repo | repo |
| flask | repo | repo | repo | repo | repo | repo | repo | repo |
| django | repo | repo | repo | repo | repo | repo | repo | repo |
| go | repo | repo | repo | repo | repo | repo | repo | — |
| java | repo | repo | repo | repo | repo | repo | repo | repo |
| csharp | repo | repo | repo | repo | repo | repo | repo | — |
| rust | repo | repo | repo | repo | repo | repo | repo | — |
| ruby | repo | repo | repo | repo | repo | repo | repo | — |
| php | repo | repo | repo | repo | repo | repo | repo | — |
| cpp | repo | repo | repo | repo | repo | repo | repo | — |
Need something more specific?
- Focused feature snippets (one feature, one language, < 50 lines) →
recipesskill → https://github.com/deepgram/recipes - Third-party integrations (Twilio, LiveKit, LangChain, Vercel AI SDK, Discord, etc.) →
examplesskill → https://github.com/deepgram/examples - SDK-specific code skills (idiomatic imports, async patterns, gotchas) →
npx skills add deepgram/deepgram-{lang}-sdk— see theapiskill for the 6 SDKs whose skills are publicly installable.
Related Deepgram skills
api: consolidated REST + WebSocket API referencerecipes: minimal runnable feature snippets per languageexamples: full integration examples with third-party platformsdocs: documentation findercli:deepctl, includingdg initfor scaffolding a template from the terminalsetup-mcp: Deepgram MCP server installation