<?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: Mateus Bentes</title>
    <description>The latest articles on DEV Community by Mateus Bentes (@mateus_bentes_52a21170551).</description>
    <link>https://dev.to/mateus_bentes_52a21170551</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%2F4145203%2F572e5112-21e2-4bb7-8d97-c609d65f9184.jpg</url>
      <title>DEV Community: Mateus Bentes</title>
      <link>https://dev.to/mateus_bentes_52a21170551</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mateus_bentes_52a21170551"/>
    <language>en</language>
    <item>
      <title>I built a Chrome extension because Kick's VOD chat can't keep up with 1.5x</title>
      <dc:creator>Mateus Bentes</dc:creator>
      <pubDate>Mon, 28 Sep 2026 23:12:16 +0000</pubDate>
      <link>https://dev.to/mateus_bentes_52a21170551/i-built-a-chrome-extension-because-kicks-vod-chat-cant-keep-up-with-15x-4a4l</link>
      <guid>https://dev.to/mateus_bentes_52a21170551/i-built-a-chrome-extension-because-kicks-vod-chat-cant-keep-up-with-15x-4a4l</guid>
      <description>&lt;p&gt;I watch most streams as VODs, and I watch them at 1.5x. On Kick that has one annoying side effect: the chat replay falls behind. Someone scores, the streamer screams, and the "GOOOL" wave in chat shows up 20 seconds later.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;&lt;a href="https://chromewebstore.google.com/detail/vod-chat-sync-for-kick/deeikanpfgojedfhhooelogofoeafkhg" rel="noopener noreferrer"&gt;VOD Chat Sync for Kick&lt;/a&gt;&lt;/strong&gt;, a small Chrome extension that keeps the chat replay in sync with the video at any speed. It's free and open source (MIT).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F06yx5ztjfu78kn01jxn3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F06yx5ztjfu78kn01jxn3.png" alt="Synced chat panel" width="340" height="892"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the chat lags
&lt;/h2&gt;

&lt;p&gt;I measured the native replay before touching anything. It fetches message windows at video pace, but it &lt;em&gt;displays&lt;/em&gt; them at wall-clock pace (1x). At 2x, after 30 seconds of watching, the native chat was about &lt;strong&gt;40 seconds behind&lt;/strong&gt; the video. Pausing or seeking realigns it, and then it starts drifting again.&lt;/p&gt;

&lt;p&gt;So it's not a network problem. The replay's clock is simply the wrong clock.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix: use the video as the clock
&lt;/h2&gt;

&lt;p&gt;Every VOD has the stream's real start time. That gives a simple mapping:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;absoluteTime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;vodStartMs&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currentTime&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With that, the extension:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fetches messages from the same endpoint the site uses, in 5-second windows, about 30 seconds ahead of the video.&lt;/li&gt;
&lt;li&gt;Renders each message only when &lt;code&gt;absoluteTime&lt;/code&gt; passes its timestamp.&lt;/li&gt;
&lt;li&gt;Resets the list on a seek (backward, or a big jump forward).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Because the video drives everything, 1.25x, 1.5x, 2x, pause and seek all just work, with no speed-specific logic.&lt;/p&gt;

&lt;p&gt;A few details that took longer than expected:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Throttled timers.&lt;/strong&gt; Chrome throttles &lt;code&gt;setInterval&lt;/code&gt; in background or unfocused tabs, so the tick is also driven by &lt;code&gt;timeupdate&lt;/code&gt;, &lt;code&gt;seeked&lt;/code&gt;, &lt;code&gt;ratechange&lt;/code&gt;, &lt;code&gt;play&lt;/code&gt; and &lt;code&gt;pause&lt;/code&gt; events.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SPA navigation.&lt;/strong&gt; Kick is a single-page app, so the extension watches &lt;code&gt;location.pathname&lt;/code&gt; and tears everything down when you leave a VOD.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Looking native.&lt;/strong&gt; I matched the chat's spacing, fonts, badges, emotes and replies, and checked 54 messages side by side against the native chat, down to row height.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Being honest about the original.&lt;/strong&gt; There's an "Original chat" button. My panel covers the native list instead of hiding it, because hiding it with &lt;code&gt;display: none&lt;/code&gt; made Kick's replay realign itself, which would make the comparison look better than reality. When you switch, you see the native chat exactly as it behaves.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Privacy
&lt;/h2&gt;

&lt;p&gt;No data is collected. No server, no analytics. Requests go straight from your browser to Kick, the same ones the site already makes. No build step either: what's in the &lt;code&gt;extension/&lt;/code&gt; folder is what runs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Chrome Web Store: &lt;a href="https://chromewebstore.google.com/detail/vod-chat-sync-for-kick/deeikanpfgojedfhhooelogofoeafkhg" rel="noopener noreferrer"&gt;https://chromewebstore.google.com/detail/vod-chat-sync-for-kick/deeikanpfgojedfhhooelogofoeafkhg&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Source: &lt;a href="https://github.com/matBentes/kick-vod-chat-sync" rel="noopener noreferrer"&gt;https://github.com/matBentes/kick-vod-chat-sync&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hopefully Kick fixes this natively one day and this extension becomes useless. Until then, enjoy your VODs at any speed with a chat that keeps up. Bug reports and ideas are welcome in the issues.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>chrome</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
