heatsync version history - 12 versions
Be careful with old versions! These versions are displayed for testing and reference purposes.You should always use the latest version of an add-on.
Latest version
Version 1.7.35
Released Jul 24, 2026 - 1.77 MBWorks with firefox 128.0 and later- fix(tabs): mention highlight is red, not yellow
Source code released under MIT License
Older versions
Version 1.7.34
Released Jul 23, 2026 - 1.77 MBWorks with firefox 128.0 and later- feat(commands): /mod /unmod (twitch broadcaster) from live GQL capture
- feat(commands): /vip /unvip (twitch broadcaster) from live GQL capture
- feat(commands): /tab — switch tab from the composer
- feat(commands): /set — change any setting from the composer
- feat(commands): poll/prediction + note/block slash commands
- security: safeUrl-gate profile-card avatar + strip CR/LF on IRC send
- security(feed): neutralize bare < in the injected feed-post render
- security(bridge): validate heatsync-insert-emote payload
- perf(emotes): cap senderEmoteBustVer + viewerBadgesPerChannel
- perf(input): bound pendingSends, hoist trigger-context regexes
- perf(multichat): stop observer-cleanup bypass leaks on channel switch
- fix(overlay): pred/poll/hype banner overlays chat instead of shoving rows
- fix(kick): self-clear the fallback-tap interval on ext reload
- fix(content): kick send double-post + honest emote toasts + three leak fixes
- fix(emotes): truthful block/remove toasts in the picker
- fix(background): honest transient-vs-404 caching + no youtube re-send
- docs(input): correct stale 'kick has no chat-mode write' comments
- fix(profile): stop caching transient banner-fetch failures as 'no banner'
- fix(twitch): deliver apollo-mutate rejections instead of timing out
- fix(yt): re-attach ingest observers when youtube swaps the chat container
- test(edge-breaker): fix flaky cap assertion tied to sub-ms clock drift
Source code released under MIT License
Version 1.7.33
Released Jul 22, 2026 - 1.76 MBWorks with firefox 128.0 and later- fix(kick): pop-out chat fills its window instead of docking to a 340px column
- fix(chat): stop the hashtag, mention and thread-ref passes breaking links
- fix(embeds): put the play mark on the artwork, drop the dead slider
- style: biome format
- feat(embeds): transport on the player — pause and volume where it exists
- feat(embeds): every controllable embed plays in place, in the chat
- feat(embeds): audio plays in the chat row, no panel
- fix(youtube): make yt moderation reachable instead of silently dead
- chore: rebuild bundles
- fix(commands): refuse the twitch commands that no longer exist instead of chatting them
- chore: rebuild bundles
- feat(links): linkify the host-less link forms chat actually posts
- fix(yt): stop hijacking the wheel on shorts and hover-preview players
- release: v1.7.32
- docs: changelog for 1.7.32
- fix(ui): every T K Y button gets a full box, on the pixel grid
- fix(ui): send-target arrow matches the whisper arrow instead of micro
- fix(emotes): chained modifier words follow their first token
- feat(tooltip): show the whole emote composition, colour-coded
- fix(ui): one style for both T K Y clusters, not two
- chore: delete dead handlers, listeners and the stranded actions tab
- fix(emotes): bind modifiers in each provider's own direction
- fix(input): snap EVERY composer chip, not just the pasted one
- fix(push): unsubscribe used POST against a DELETE-only route
- fix(input): text after an emote in the composer was blurry
- fix(kick): any script on kick.com could forge chat and mod actions
- style: organize imports in the i18n call-site test
- test(i18n): guard every t() call site against under-supplied substitutions
- docs: changelog for 1.7.31
- release: v1.7.31
- test: pin the invariants three rewrites depend on
- fix(twitch): stop pretending we can set the boolean chat modes
- fix(twitch): boolean chat modes used the read field name, which does nothing
- fix(kick): chat-mode body and oracle were both wrong — proven against live api
- fix(kick): a bad emote id must not kill the whole message
- fix(i18n): t() leaked raw message keys into the UI
- feat(kick): chat-mode write — /slow /followers /subscribers /emoteonly
- feat(twitch): wire all five chat modes, verified by read-back
- fix: close the last two silent-failure findings
- fix(native): follow button and mod-card actions no longer no-op in silence
- fix(native): emote block on the native surfaces claimed success blind too
- fix(emote): block/unblock claimed success before the server answered
- fix(twitch): mod actions no longer cry 'channel not found' on a network blip
- test: highlight proxy-throw is now unconfirmed, not a bare error
- fix(twitch): /highlight could double-charge bits on a timeout
- feat(kick): KICKs gifts off the pusher tap
- fix(yt): stop failing silently, and stop leaking machine codes
- refactor: keep the reply-echo comment next to its function
- …see the full changelog in the repo
Source code released under MIT License
Version 1.7.32
Released Jul 22, 2026 - 1.75 MBWorks with firefox 128.0 and later- docs: changelog for 1.7.32
- fix(ui): every T K Y button gets a full box, on the pixel grid
- fix(ui): send-target arrow matches the whisper arrow instead of micro
- fix(emotes): chained modifier words follow their first token
- feat(tooltip): show the whole emote composition, colour-coded
- fix(ui): one style for both T K Y clusters, not two
- chore: delete dead handlers, listeners and the stranded actions tab
- fix(emotes): bind modifiers in each provider's own direction
- fix(input): snap EVERY composer chip, not just the pasted one
- fix(push): unsubscribe used POST against a DELETE-only route
- fix(input): text after an emote in the composer was blurry
- fix(kick): any script on kick.com could forge chat and mod actions
- style: organize imports in the i18n call-site test
- test(i18n): guard every t() call site against under-supplied substitutions
- docs: changelog for 1.7.31
- release: v1.7.31
- test: pin the invariants three rewrites depend on
- fix(twitch): stop pretending we can set the boolean chat modes
- fix(twitch): boolean chat modes used the read field name, which does nothing
- fix(kick): chat-mode body and oracle were both wrong — proven against live api
- fix(kick): a bad emote id must not kill the whole message
- fix(i18n): t() leaked raw message keys into the UI
- feat(kick): chat-mode write — /slow /followers /subscribers /emoteonly
- feat(twitch): wire all five chat modes, verified by read-back
- fix: close the last two silent-failure findings
- fix(native): follow button and mod-card actions no longer no-op in silence
- fix(native): emote block on the native surfaces claimed success blind too
- fix(emote): block/unblock claimed success before the server answered
- fix(twitch): mod actions no longer cry 'channel not found' on a network blip
- test: highlight proxy-throw is now unconfirmed, not a bare error
- fix(twitch): /highlight could double-charge bits on a timeout
- feat(kick): KICKs gifts off the pusher tap
- fix(yt): stop failing silently, and stop leaking machine codes
- refactor: keep the reply-echo comment next to its function
- test: carve _unkickEmotes into the sent-echo harness
- fix(kick): echo matching had to follow the emote rewrite
- fix(kick): native emotes were sent as bare words, so nobody saw them
- fix(yt): a tab added from a watch link showed 'watch?v=...' forever
- fix(kick): a send timeout is unconfirmed, not failed — stop auto-retrying it
- feat(kick): render pinned messages
- feat(kick): subs and gift subs off the pusher tap, not just webhooks
- fix(kick): theatre controls bar hard-codes kick's own chat width
- fix(kick): theatre mode was never detected — kick moved the flag
- fix(kick,yt): theatre/fullscreen left the panel covering the player
- fix(mc): the universal hover rule was matching ZERO elements
- release: v1.7.30
- fix(build): backticks in a css comment broke both builds
- fix(whispers): kill the bitmap smear the bigger arrow introduced
- …see the full changelog in the repo
Source code released under MIT License
Version 1.7.31
Released Jul 21, 2026 - 1.74 MBWorks with firefox 128.0 and later- release: v1.7.31
- test: pin the invariants three rewrites depend on
- fix(twitch): stop pretending we can set the boolean chat modes
- fix(twitch): boolean chat modes used the read field name, which does nothing
- fix(kick): chat-mode body and oracle were both wrong — proven against live api
- fix(kick): a bad emote id must not kill the whole message
- fix(i18n): t() leaked raw message keys into the UI
- feat(kick): chat-mode write — /slow /followers /subscribers /emoteonly
- feat(twitch): wire all five chat modes, verified by read-back
- fix: close the last two silent-failure findings
- fix(native): follow button and mod-card actions no longer no-op in silence
- fix(native): emote block on the native surfaces claimed success blind too
- fix(emote): block/unblock claimed success before the server answered
- fix(twitch): mod actions no longer cry 'channel not found' on a network blip
- test: highlight proxy-throw is now unconfirmed, not a bare error
- fix(twitch): /highlight could double-charge bits on a timeout
- feat(kick): KICKs gifts off the pusher tap
- fix(yt): stop failing silently, and stop leaking machine codes
- refactor: keep the reply-echo comment next to its function
- test: carve _unkickEmotes into the sent-echo harness
- fix(kick): echo matching had to follow the emote rewrite
- fix(kick): native emotes were sent as bare words, so nobody saw them
- fix(yt): a tab added from a watch link showed 'watch?v=...' forever
- fix(kick): a send timeout is unconfirmed, not failed — stop auto-retrying it
- feat(kick): render pinned messages
- feat(kick): subs and gift subs off the pusher tap, not just webhooks
- fix(kick): theatre controls bar hard-codes kick's own chat width
- fix(kick): theatre mode was never detected — kick moved the flag
- fix(kick,yt): theatre/fullscreen left the panel covering the player
- fix(mc): the universal hover rule was matching ZERO elements
- release: v1.7.30
- fix(build): backticks in a css comment broke both builds
- fix(whispers): kill the bitmap smear the bigger arrow introduced
- style(whispers): make the direction arrow read at a glance
- fix(whispers): stop the GQL fallback burying "you need to re-link"
- fix(bg): server blocks/mutes silently stopped syncing after any HTTP error
- fix(mc): stop the ext lying about failures — 7 traced instances
- fix(mc): composer stops promising a send it can't make
- feat(kick): mirror kick follows into heatsync + yt layout and dm error fixes
- fix(mc): /dm resolve read wrong profile field, always no-op'd
- fix(mc): whisper direction clarity, reply-bar echo race, emote-suggest lag
- fix(twitch): replay integrity token's full binding context (device-id, session-id, version)
- fix(twitch): reuse twitch's own Client-Integrity token instead of minting a rejected one
- fix(twitch): /highlight channel resolve is scope-safe + slash cmds never silent-fail
- fix(twitch): route highlight mutation through MAIN-world proxy for integrity
- …see the full changelog in the repo
Source code released under MIT License
Version 1.7.30
Released Jul 21, 2026 - 1.73 MBWorks with firefox 128.0 and later- fix(build): backticks in a css comment broke both builds
- fix(whispers): kill the bitmap smear the bigger arrow introduced
- style(whispers): make the direction arrow read at a glance
- fix(whispers): stop the GQL fallback burying "you need to re-link"
- fix(bg): server blocks/mutes silently stopped syncing after any HTTP error
- fix(mc): stop the ext lying about failures — 7 traced instances
- fix(mc): composer stops promising a send it can't make
- feat(kick): mirror kick follows into heatsync + yt layout and dm error fixes
- fix(mc): /dm resolve read wrong profile field, always no-op'd
- fix(mc): whisper direction clarity, reply-bar echo race, emote-suggest lag
- fix(twitch): replay integrity token's full binding context (device-id, session-id, version)
- fix(twitch): reuse twitch's own Client-Integrity token instead of minting a rejected one
- fix(twitch): /highlight channel resolve is scope-safe + slash cmds never silent-fail
- fix(twitch): route highlight mutation through MAIN-world proxy for integrity
- fix(mc): slash Tab-complete resolves aliases (/hl → /highlight)
- fix(twitch): highlight send requires cost field — fetch power-up price live
- build: rebuild dist with /highlight + rebased tree
- feat(twitch): /highlight — send highlighted message via bits power-up
- fix(mc): announce allowlist entry + GQL schema fix + hard timeouts on mod-action auth chain
- fix(emotes): consistent inventory attribution in tooltips + set→inventory rename
- fix(mc): guard slash-command Tab-complete against emote-completion hijack
- fix(mc): restore sendIrcMessage + 4 channel-mgmt fns orphaned by biome rename; widen build guard to whole multichat dir; announce autocomplete list; fail-safe keydown handler
- fix(mc): restore sendIrcMessage + channel-mgmt entry points orphaned by biome rename
- fix(mc): rejected sends leave a persistent inline notice row, not just a toast
- feat(bg): edge-block circuit breaker for heatsync API calls
- fix(mc): repaint rows when the heatsync identity changes
- fix(mc): cleared tab highlights survive reload; pin teardown-TDZ contract
- fix(mc): restore hsSched + log bindings orphaned by biome rename, guard the rename class
- fix(mc): restore cleanup binding, guard teardown tdz, live dots red
- style: biome format
- feat(events): raw-irc test mode, shared-chat tap passthrough, gigantified size fix
- feat(events): full twitch chat-event coverage — payforward/prime/extend/charity/ritual/user-intro/gigantified/fx/shared-chat/pin + /testnotices
- feat(mod): wire /announce via gql + loud announce styling + tap announcement wrappers
- refactor(colors): unblock flash green
- refactor(colors): ansi doctrine across ext — tokens everywhere, orange reserved for brand
- feat(palette): css color tokens + shared js platform map
- style: biome sweep — template literals, test formatting
- style: biome template-literal fixes in autocomplete-hook
- style: template literal in early-inject gql error
- …see the full changelog in the repo
Source code released under MIT License
Version 1.7.29
Released Jul 18, 2026 - 1.69 MBWorks with firefox 128.0 and later- diag(mc): mode-banner chain counters in dbg_kick_tap
- fix(mc): host-gate channel detection + persist kick mode baselines
- fix(mc): epoch bumps rebuild rows in place — never reorder or flash
- docs: automod thread resolved — sweep live, 2 watches; note whispers 404
- docs: punch list rev 2 — incident fixes + 07-18 e2e state
- fix(mc): guard init tail — whispers throw killed automod init silently; dev breadcrumbs
- diag(mc): sweep breadcrumb stamps every exit path
- diag(mc): dev-build automod sweep breadcrumb (silent catch cost a debug session)
- fix(mc): automod sweep counts own channel as modded
- build: bundles with @-strip fix + lint-clean template in img retry
- fix(mc): strip yt author's own @ before reply-mention prepend
- fix(mc): per-instance guards for lifecycle-bound listeners
- docs: rebuild punch list from post-07-14 verified state
- feat(mc): trigger-less emote suggestion popup while typing
- fix: jsdoc types for emote provider helpers (typecheck gate)
- feat(mc): scroll-wheel volume on the player
- feat(mc): emote provider priority setting
- chore: biome lint fixes (node: imports, automod-queue format)
- fix(mc): dedupe automod relink toast per page session
- fix(mc): automod-queue toggle reader, wire caps, heldAt parse, sweep parallel
- fix(mc): automod-queue review nits — lowercase belt-and-braces, chip escape test
- feat(mc): automod hold-queue
- fix(mc): harden bulk-ban scope safety (review findings)
- fix(mc): rebuild bundles + drop backticks from css comment (broke the build)
- fix(mc): use will-change:transform to actually promote the chat scroller
- revert: shelve name-history ("aka:") feature — privacy
- fix(mc): name-history display defaults OFF (opt-in)
- feat(mc): show prior display names on profile card
- style: format main.js (biome drift)
- chore: rebuild bundles (search n/N)
- feat(mc): vim n/N cycling through in-tab search matches
- fix(mc): chunk fat history replay ingest — reload freeze
Source code released under MIT License
Version 1.7.28
Released Jul 17, 2026 - 1.67 MBWorks with firefox 128.0 and later- docs(changelog): 1.7.28 release notes
- style: format mod-toolbar (biome drift from bulk-ban)
- fix(mc): promote chat scroller to one GPU layer — kill stale-tile smear
- chore: rebuild bundles (pronouns + bulk-ban + notif will-change)
- feat(mc): bulk-ban multi-select for mods
- feat(mc): pronouns on profile card + hover tooltip
- fix(mc): drop stray will-change:opacity on notif layer
Source code released under MIT License
Version 1.7.27
Released Jul 17, 2026 - 1.66 MBWorks with firefox 128.0 and later- docs(changelog): 1.7.26 release notes
- perf(mc): cap per-channel yt replay-dedup + sub-tenure maps
- feat(popup): platform picker for bare-name popouts
- feat(mc): kick page-side chat fallback + yt tap reaches all surfaces
- fix(mc): bg yt buffer keeps innertube id — replay dedup needs it
- fix(mc): archive backfill dedup + late-surface yt history replay
- feat(mc): own posted emotes honor the owner's cw toggles
- chore: rebuild chrome dev-mirror bundles
- feat(mc): kick/yt joins backfill real history from heatsync archive
- feat(mc): kick chat-mode banners (slow/sub-only/emote-only/followers)
- fix(mc): kick-native emotes labeled 'all kick' in tab-complete tooltip
- feat(mc): kick native channel emotes join the channel pool
- fix(mc): reply author survives send-retry so yt @mention isn't lost
- fix(mc): yt reply sends carry @mention context
- feat(mc): filter-hidden emotes render a labeled cw placeholder instead of raw text
- fix(emotes): bulletproof channel-emote survival across ext reload + heal history; append-only cycle merge; catalog relevance
- fix(input): tab-cycle pages the emote catalog — 20/20 flows into 21/N instead of wrapping
- fix(mc): adult-content toggles hit the server age gate — mirror site's 18+ confirm flow
- fix(mc): drop container-level paint containment — last paint-isolation surface behind stale-paint row overlap
- fix(input): zero-width completions stack across split text nodes — shared resolveOverlayBaseLeft for tab/live/cycle paths
- fix(input): zero-width asset recovery also scans the viewer's own set
- fix(input): recover stripped zero-width flag by asset identity — owned overlay emotes tab-complete as stacks again
- fix(mc): layout-guard signature spread the channel Set (broke yt popout mount)
- fix(mc): fort-knox scroll pipeline — one pinner, no browser anchoring, reserved stack widths, layout no-op guard
- fix(input): tab modifier-sweep no longer eats content letters or hijacks completion
- fix(input): tab-complete never rewrites an abandoned completion or mis-stacks on name collision
- fix(mc): drop per-row paint containment — stale rows overlapped on scroll while typing
- style: clear biome errors blocking publish (useTemplate + format drift)
- build: rebuild multichat bundles (yt send-leak, live-tab label, mention-tenure, recs-on-collapse)
- revert: drop YT-popout tab guard — it was chasing a non-bug
- fix(popout): make YT-popout tab guard config-independent
- fix(popout): YT popout stays on its live stream, not the parent's saved tab
- feat(multichat): label the live tab with its channel (auto-live reads as selected)
- fix(youtube): never fan a channel tab's send to youtube without its exact stream id
- fix(youtube): mod actions never hit a guessed tab (wrong-stream moderation)
- fix(multichat): don't force live tab over a user's own tabs on watch pages
- fix(youtube): never route a send to a guessed tab (msg leak)
- …see the full changelog in the repo
Source code released under MIT License
Version 1.7.26
Released Jul 15, 2026 - 1.66 MBWorks with firefox 128.0 and later- chore: rebuild chrome dev-mirror manifest to 1.7.25
Source code released under MIT License
Version 1.7.23
Released Jul 12, 2026 - 1.71 MBWorks with firefox 128.0 and laterthis is the first listed release since 1.6.8 — it brings the store version up to date with a month of work. highlights since then:- multichat overlay for twitch, kick and youtube in one window
- 7tv / bttv / ffz emote support plus your own heatsync emote inventory
- name paints, and every animated copy of a name now animates in sync
- heatsync plus tenure token beside member names
- chat archive: per-user logs and search from the overlay
- emote modifiers (w! h! v! z! c! l! r! p! s!) and ffz effects
- many bug fixes and performance work
Source code released under MIT License
Version 1.6.8
Released Jun 9, 2026 - 926.71 KBWorks with firefox 128.0 and later- 7tv paints now render on reply, whisper, and dm names plus profile cards
- fixed badge strobe / flicker on cold load
- security hardening: css-injection strip, api null guards, destructive-handler
source guard - recent chatters now lead bare-word tab-complete
- 7tv proxy fallback on ip-block (403/429/5xx)
- ffz animated emotes use animated url, not static png
- whispers sent via apollo instead of raw gql
- chat timestamps show clock time (hh:mm)
- restored prediction/poll/mod-mode strings that rendered as raw keys
Source code released under MIT License