<?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: Ivan Shevtsov</title>
    <description>The latest articles on DEV Community by Ivan Shevtsov (@dl1ar).</description>
    <link>https://dev.to/dl1ar</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4047247%2Fa5400d04-5105-45ab-b55c-c41283476611.png</url>
      <title>DEV Community: Ivan Shevtsov</title>
      <link>https://dev.to/dl1ar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dl1ar"/>
    <language>en</language>
    <item>
      <title>I Built a DevTools for Telegram Mini Apps So You Don't Have to Debug on Your Phone</title>
      <dc:creator>Ivan Shevtsov</dc:creator>
      <pubDate>Sat, 25 Jul 2026 22:09:09 +0000</pubDate>
      <link>https://dev.to/dl1ar/i-built-a-devtools-for-telegram-mini-apps-so-you-dont-have-to-debug-on-your-phone-30m9</link>
      <guid>https://dev.to/dl1ar/i-built-a-devtools-for-telegram-mini-apps-so-you-dont-have-to-debug-on-your-phone-30m9</guid>
      <description>&lt;p&gt;While building a Telegram Mini App recently, I hit the same wall every TMA developer knows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Code your app locally.&lt;/li&gt;
&lt;li&gt;Spin up ngrok (hope it doesn't crash).&lt;/li&gt;
&lt;li&gt;Go to &lt;a class="mentioned-user" href="https://dev.to/botfather"&gt;@botfather&lt;/a&gt;, set the web_app URL to the tunnel.&lt;/li&gt;
&lt;li&gt;Grab your phone, launch the app, &lt;code&gt;console.log()&lt;/code&gt; and pray.&lt;/li&gt;
&lt;li&gt;Repeat for every theme / platform / user combination you need to test.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There's no official Telegram Mini Apps emulator. The workflow is stuck in 2015. Developers in the Russian TMA community have been complaining about it publicly:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The main difficulty is the inability to run a project as easily as in a browser via localhost — and the &lt;strong&gt;absence of a developer console&lt;/strong&gt;." — Habr, March 2025&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So I built &lt;strong&gt;TMA DevKit&lt;/strong&gt; — an open-source local emulator and bridge inspector for Telegram Mini Apps. Think Redux DevTools, but for &lt;code&gt;window.Telegram.WebApp&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it works (one sentence):&lt;/strong&gt; you paste your Mini App URL into a local panel, and it runs inside an iframe against a faithful mock of the Telegram client — no phone, no ngrok, no BotFather.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it gives you:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🔧 &lt;strong&gt;Real mock, not a stub.&lt;/strong&gt; Full &lt;code&gt;window.Telegram.WebApp&lt;/code&gt; API surface with cryptographically valid &lt;code&gt;initData&lt;/code&gt; (HMAC-SHA-256 signed against your dev bot token). Backend validation passes. Compatible with &lt;code&gt;@telegram-apps/sdk&lt;/code&gt; v3 out of the box.&lt;/p&gt;

&lt;p&gt;⚡ &lt;strong&gt;5 one-click Quick Scenarios.&lt;/strong&gt; Premium iOS user → Free Android user → New user with referral param → Group chat launch → Desktop wide viewport. Switch contexts without touching a single input field.&lt;/p&gt;

&lt;p&gt;📊 &lt;strong&gt;Bridge event inspector.&lt;/strong&gt; Every &lt;code&gt;web_app_*&lt;/code&gt; call appears in real-time. Group by event type, filter, pause, export logs as &lt;code&gt;.txt&lt;/code&gt;. Plus an emit console to fire client→app events (&lt;code&gt;theme_changed&lt;/code&gt;, &lt;code&gt;main_button_pressed&lt;/code&gt;, etc.) back into your app.&lt;/p&gt;

&lt;p&gt;☁️ &lt;strong&gt;CloudStorage editor.&lt;/strong&gt; Visual key-value editor — no more guessing what's stored or manually manipulating localStorage.&lt;/p&gt;

&lt;p&gt;💾 &lt;strong&gt;Saved presets.&lt;/strong&gt; Save your current config (platform, user, theme, viewport, bot token) as a named preset. Switch between them in one click. Persists across sessions.&lt;/p&gt;

&lt;p&gt;🖥️ &lt;strong&gt;Panel UX.&lt;/strong&gt; Drag-resize panels (like VS Code), zoomable device stage (25%–200%), mobile notch and desktop traffic lights that react to your platform selection. Import/export config as JSON.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stack:&lt;/strong&gt; React 19, TypeScript, Vite, Tailwind CSS, shadcn/ui. Mock script is ~90 KB of zero-dependency vanilla JS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Testing:&lt;/strong&gt; 22 Vitest tests covering the base64url codec, config model, wire protocol, and bridge message discrimination.&lt;/p&gt;

&lt;p&gt;MIT licensed. Would love some honest feedback — and stars if you find it useful ⭐&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://github.com/Deus-org/tma-devkit" rel="noopener noreferrer"&gt;github.com/Deus-org/tma-devkit&lt;/a&gt;&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>opensource</category>
      <category>react</category>
      <category>telegram</category>
    </item>
  </channel>
</rss>
