<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Maciej Ostaszewski</title>
    <description>The latest articles on DEV Community by Maciej Ostaszewski (@mosthy65).</description>
    <link>https://dev.to/mosthy65</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3867601%2F8cf9b7b5-4496-4cff-97a6-58a49e18cd5c.png</url>
      <title>DEV Community: Maciej Ostaszewski</title>
      <link>https://dev.to/mosthy65</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mosthy65"/>
    <language>en</language>
    <item>
      <title>hdcd-telegram: A 3.5 MB Rust Drop-in for Claude Code's 100 MB Telegram Plugin</title>
      <dc:creator>Maciej Ostaszewski</dc:creator>
      <pubDate>Wed, 08 Apr 2026 11:18:47 +0000</pubDate>
      <link>https://dev.to/mosthy65/dcd-telegram-a-35-mb-rust-drop-in-for-claude-codes-100-mb-telegram-plugin-2j1i</link>
      <guid>https://dev.to/mosthy65/dcd-telegram-a-35-mb-rust-drop-in-for-claude-codes-100-mb-telegram-plugin-2j1i</guid>
      <description>&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;If you use &lt;a href="https://docs.anthropic.com/en/docs/claude-code" rel="noopener noreferrer"&gt;Claude Code&lt;/a&gt; with the official Telegram channel plugin, you've probably hit one of these:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;"Channels are not currently available"&lt;/strong&gt; (&lt;a href="https://github.com/anthropics/claude-code/issues/36503" rel="noopener noreferrer"&gt;#36503&lt;/a&gt;, 24+ comments)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bot shows "typing" but never replies&lt;/strong&gt; (&lt;a href="https://github.com/anthropics/claude-code/issues/37933" rel="noopener noreferrer"&gt;#37933&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plugin stops after the first turn&lt;/strong&gt; (&lt;a href="https://github.com/anthropics/claude-code/issues/36477" rel="noopener noreferrer"&gt;#36477&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zombie processes keep polling after session ends&lt;/strong&gt;, causing 409 Conflict on the next launch&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The official plugin runs on &lt;a href="https://bun.sh" rel="noopener noreferrer"&gt;Bun&lt;/a&gt; -- a JavaScript runtime. It works, but it's heavy: ~100 MB RAM per instance, 2-3 second startup, and it doesn't clean up after itself.&lt;/p&gt;

&lt;p&gt;If you run multiple Claude Code agents in parallel (CI, orchestrator setups, dev fleet), each one spawns its own Bun process. 10 agents = 10 runtimes = ~1 GB just for Telegram bridges.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution: hdcd-telegram
&lt;/h2&gt;

&lt;p&gt;We built &lt;strong&gt;&lt;a href="https://github.com/gohyperdev/hdcd-telegram" rel="noopener noreferrer"&gt;hdcd-telegram&lt;/a&gt;&lt;/strong&gt; -- a Rust drop-in replacement with full feature parity.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Bun (official)&lt;/th&gt;
&lt;th&gt;Rust (hdcd-telegram)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Binary size&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~100 MB (runtime + deps)&lt;/td&gt;
&lt;td&gt;3.5 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RAM per instance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~100 MB&lt;/td&gt;
&lt;td&gt;~5 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;10 parallel agents&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~1 GB&lt;/td&gt;
&lt;td&gt;~50 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Startup&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2-3 seconds&lt;/td&gt;
&lt;td&gt;&amp;lt;50 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Shutdown&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Keeps polling (zombie)&lt;/td&gt;
&lt;td&gt;Immediate on stdin EOF&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  How it connects
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Telegram  ---&amp;gt;  hdcd-telegram  ---&amp;gt;  Claude Code
  (user)        (MCP server)         (session)
          &amp;lt;---  (stdio/JSON-RPC) &amp;lt;---
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;hdcd-telegram runs as an MCP server subprocess. Claude Code starts it, communicates over stdio, and the binary handles all Telegram API interaction. No ports opened, no webhooks -- just outbound HTTPS to &lt;code&gt;api.telegram.org&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  It Also Works Around the Channels Bug
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;--channels plugin:telegram@claude-plugins-official&lt;/code&gt; activation path is broken for many users due to a server-side feature flag. The workaround:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Register the server in &lt;code&gt;.mcp.json&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Launch with &lt;code&gt;--dangerously-load-development-channels server:telegram&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This uses a different code path that bypasses the buggy plugin resolution. hdcd-telegram is designed for this workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Start
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Download the binary&lt;/strong&gt; from &lt;a href="https://github.com/gohyperdev/hdcd-telegram/releases" rel="noopener noreferrer"&gt;GitHub Releases&lt;/a&gt; (Linux, macOS, Windows).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Save your bot token:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/.claude/channels/telegram
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"TELEGRAM_BOT_TOKEN=your-token-here"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; ~/.claude/channels/telegram/.env
&lt;span class="nb"&gt;chmod &lt;/span&gt;600 ~/.claude/channels/telegram/.env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Add to &lt;code&gt;.mcp.json&lt;/code&gt;:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"telegram"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/path/to/hdcd-telegram"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;4. Launch:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude &lt;span class="nt"&gt;--dangerously-load-development-channels&lt;/span&gt; server:telegram
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5. Pair&lt;/strong&gt; -- DM your bot, get a code, run &lt;code&gt;/telegram:access pair &amp;lt;code&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Full setup guide (including group chat configuration): &lt;a href="https://github.com/gohyperdev/hdcd-telegram#quick-start" rel="noopener noreferrer"&gt;README&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;All 8 message types&lt;/strong&gt;: text, photo, document, voice, audio, video, video note, sticker&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;4 MCP tools&lt;/strong&gt;: reply (with chunking, threading, attachments, MarkdownV2), react, edit_message, download_attachment&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Access control&lt;/strong&gt;: pairing flow, per-user allowlists, group policies with @mention gating&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Permission relay&lt;/strong&gt;: inline keyboard for remote tool-use approval/denial&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Voice transcription&lt;/strong&gt;: automatic speech-to-text via &lt;a href="https://github.com/openai/whisper" rel="noopener noreferrer"&gt;OpenAI Whisper&lt;/a&gt; running locally -- no data leaves your machine&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clean shutdown&lt;/strong&gt;: immediate exit on stdin EOF, no zombie polling&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Zero Migration
&lt;/h2&gt;

&lt;p&gt;If you already use the official plugin, hdcd-telegram reads the same files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;~/.claude/channels/telegram/.env&lt;/code&gt; (bot token)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;~/.claude/channels/telegram/access.json&lt;/code&gt; (allowlist, groups)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Just swap the binary path in &lt;code&gt;.mcp.json&lt;/code&gt; -- all pairings and settings are preserved.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why We Built This
&lt;/h2&gt;

&lt;p&gt;We're &lt;a href="https://gohyperdev.com" rel="noopener noreferrer"&gt;HyperDev&lt;/a&gt; -- we build tooling for multi-agent Claude Code deployments. Our &lt;a href="https://github.com/maciek-O-digiaidev/sdlc-orchestrator" rel="noopener noreferrer"&gt;SDLC Orchestrator&lt;/a&gt; runs 4+ Claude Code agents in parallel, each needing its own Telegram bridge. At that scale, the Bun runtime overhead adds up fast.&lt;/p&gt;

&lt;p&gt;hdcd-telegram started as an internal tool and we open-sourced it because everyone hitting the channels bugs deserves a working alternative.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/gohyperdev/hdcd-telegram" rel="noopener noreferrer"&gt;gohyperdev/hdcd-telegram&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Releases: &lt;a href="https://github.com/gohyperdev/hdcd-telegram/releases" rel="noopener noreferrer"&gt;Pre-built binaries&lt;/a&gt; for Linux, macOS, Windows&lt;/li&gt;
&lt;li&gt;Related Claude Code issues: &lt;a href="https://github.com/anthropics/claude-code/issues/36503" rel="noopener noreferrer"&gt;#36503&lt;/a&gt;, &lt;a href="https://github.com/anthropics/claude-code/issues/36477" rel="noopener noreferrer"&gt;#36477&lt;/a&gt;, &lt;a href="https://github.com/anthropics/claude-code/issues/38259" rel="noopener noreferrer"&gt;#38259&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Questions? Open an &lt;a href="https://github.com/gohyperdev/hdcd-telegram/issues" rel="noopener noreferrer"&gt;issue&lt;/a&gt; or find us in the comments.&lt;/p&gt;

</description>
      <category>anthropic</category>
      <category>claudecode</category>
      <category>rust</category>
      <category>telegram</category>
    </item>
  </channel>
</rss>
