Releases

Changelog

Every version of inƒlow, newest first. Installed from the Chrome Web Store, updates arrive on their own — there is nothing to download.

0.9.0

Latest

A conversation row dragged left until a green Archive panel fills it, then collapsing away as the list closes up; a second row dragged right to reveal an amber Star panel, springing back with a star beside the name

Swipe a row to archive or star it. Two fingers left on the trackpad archives a conversation, right stars it. The gesture was rebuilt from scratch this release around one rule: nothing is archived while your fingers are still on the trackpad.

Added

  • Swipe left to archive, right to star. Flick a row and it goes — the action fires the instant your fingers leave the trackpad, and a short fast flick counts as much as dragging the row the whole way. An archived row fills with green and then collapses out of the list, rather than blinking back to normal on its way out.
  • A drag that stops just waits. Pause part-way and the row stays exactly where you left it; carry on and it picks up from there instead of starting over. Drag far enough and let go and the row rests open with Archive or Star showing as a button you can click. Clicking the row, scrolling, or clicking anywhere else puts it away.

Changed

  • Trackpad gestures are read through wheel-gestures, which reports when your fingers actually leave the pad — from Chrome 151's native WheelEvent.momentum, and from its own analysis of the inertia below that. That replaced about 150 lines of guesswork that tried to infer the same thing from the shape of the scroll, and got it wrong often enough that a row could archive itself under a resting hand.

Fixed

  • An old account's data can no longer land in the new one. Switching accounts mid-sync could write conversations, polls, or queued-action results into whichever database happened to be active when the network came back. Discovery, quick polls, and queue replay now carry their database with them and re-check it after every await.
  • A queued send whose message had already failed no longer reports success. It skipped the send, as it should, but still marked the message sent and deleted its attachments.
  • Read receipts, reactions, and edits stop being overwritten when they arrive while a thread fetch, prefetch, or send is still in flight.
  • Cached invitations survive a bad page. A repeated, unreadable, or truncated response could look like a complete server list and delete invitations that were still pending. Pruning now needs evidence of a full, fully parsed walk.
  • Opening a thread no longer shows the previous one's messages for a beat while the new one loads.
  • Switching to another tab mid-dwell no longer marks unread messages read. Marking read now needs two uninterrupted seconds with the window visible.
  • Search results can no longer repopulate a search you cleared, and pagination from an abandoned query can't block the next one.
  • Profiles keep fields that only appeared in an earlier copy when the same person shows up twice in one batch.
  • The agent bridge checks the pairing handshake before accepting tool calls, ignores superseded sockets, and withholds results once access is revoked.

0.8.0

AI agents can work your LinkedIn inbox. inƒlow now exposes its inbox as structured tools, so an agent reads and acts through inƒlow's own data and actions instead of screen-scraping LinkedIn. Claude Desktop and Codex work today through the local MCP bridge. Everything is off until you turn it on.

Added

  • Claude Desktop connects with a double-click. Download Inflow.mcpb from Configure agent access, double-click it to install, then ask Claude for your pairing code — it answers with a link that opens inƒlow and asks you to confirm. No terminal, no config files, and it works with no inƒlow tab open.
  • Thirty tools, not a screenshot. Agents can list and search conversations, read threads, and see invitations and connections; send and reply, start a conversation with someone new, archive, star, move between Focused, Other and Spam, and mark read or unread; react to, edit and delete their own messages; and accept, ignore or withdraw connection requests.
  • An agent can draft instead of send. save_draft puts a reply in the composer for you to read and send yourself — the middle ground between answering everything by hand and letting an agent speak for you.
  • Everything is off by default, and stays that way until you choose. Two separate opt-ins live in the command palette under Configure agent access: one for reading, one for acting. Turning reading off turns acting off with it. Agent-sent messages are capped at 15 an hour, every agent action shows a notification, and every call from every surface passes through one gate that re-checks both toggles. Demo mode covers agent tools too, so the whole thing can be tried against fake data before it ever touches your account.
  • Codex uses the same local MCP bridge. Inflow.mcpb contains a standard MCP server that Codex can run after the bundle is unpacked. The server now advertises the complete tool catalog before Chrome connects, so clients that snapshot tools during startup do not get stuck with only setup commands.
  • WebMCP groundwork is included, but direct ChatGPT/Codex WebMCP is not yet available. inƒlow registers tools on the top-level inflow.im/app page, because tools inside an iframe are invisible to the agent. OpenAI currently exposes site tools in ChatGPT's built-in browser, which cannot access the inƒlow extension installed in a separate Chrome profile. Direct WebMCP needs a cross-browser relay or future support in the external Chrome surface.
  • Other ways in. Claude in Chrome can call the tools from any inflow.im page over extension messaging, and scripts on inflow.im/app get them through window.inflowAgent. How to connect an agent →
  • inƒlow is on Microsoft Edge Add-ons, and the site now sends Edge visitors there instead of to the Chrome Web Store.

Changed

  • One inbox when you have LinkedIn's Focused/Other split turned off. inƒlow showed a Focused tab and an Other tab regardless, so an account that had asked for neither had half its conversations filed behind a tab it did not expect, uncounted by the unread badge. inƒlow now reads that setting and mirrors it: one Inbox tab, everything in it, the badge counting all of it — and it follows along if you change the setting on LinkedIn. Nothing was ever lost; LinkedIn keeps categorising either way, so switching the setting back restores the two tabs exactly as they were.

0.7.0

The Network view's Invitations tab — a request from Noah Bennett selected, his note shown as a message and mutual connections under the headline The Connections tab, sorted by date, with Sarah Chen selected and a Message button The Sent tab — a request to Priya Raman with the note that was attached and a Withdraw button

The Network view in this release began as a contribution from @bdougie — the first working version of invitation triage and the connections list, and the proposal to put the nav state in the URL, which the whole app now uses rather than just that view. Thank you.

Added

  • Network view — keyboard-driven triage for connection requests and a browsable list of recent connections. G N opens it (or pick "Go to Network" from the command palette); 1 / 2 / 3 switch between Invitations, Connections and Sent, J / K move, / filters, Enter accepts an invitation or messages a connection, D / X / ignores, P opens the profile, and Esc returns to the inbox. It has its own address (#/network), so reloads and deep links land on it, and a Network button sits beside the Unread filter for anyone who would rather not learn the chord.
  • Reloading keeps your place — which tab you are on, and whether the unread filter is on, now live in the URL: #/inbox/archived, #/inbox/other?unread. ⌘R off Archive used to drop you back on Focused. Back and forward step through tabs too, and any of these addresses can be bookmarked. Toggling unread doesn't pile up history entries, and what you type in the search box stays out of the URL. This works through inflow.im/app as well, where the app runs in an iframe: it hands its route to the page around it, which keeps it in the address bar and gives it back on the next load.
  • A Sent tab — every connection request you're still waiting on, with the note you attached and a Withdraw button on each. 3 opens it. LinkedIn no longer serves this over the API inƒlow uses for everything else, so it comes from their invitation manager page instead — the same pages its own infinite scroll asks for, walked to the end rather than stopping at the first ten.
  • Accepting a request with a note drops you into the reply — the note is the first message of the thread LinkedIn creates when you accept, so inƒlow switches to that thread at once and puts the cursor in the reply box. The thread takes a moment to arrive, so it stands in a placeholder you can already type into and swaps the real one underneath when it lands, carrying anything you have written. And it doesn't announce their note as a new message — you just accepted it. Accepting a request without a note leaves you on the list, so triaging a run of them is uninterrupted.
  • Mutual connections on each invitation — opening a request shows the same "Viren Baraiya and 62 other mutual connections" line LinkedIn does, faces and all, under the bio. It is usually what decides a request, and it rides along on the request inƒlow already makes.

Changed

  • archives in the inbox, matching E, so the same key clears a row in both the inbox and the network view.
  • The folder selector is a dropdown at every width — Focused, Other, Archive and Spam were four buttons in a row, which stopped fitting beside Unread, Network and compose once the sidebar could be narrowed, and the toolbar wrapped. The sidebar's minimum width went up a little for the same reason: it can no longer be dragged narrower than its own header.
  • Focus outlines only appear when you're actually using the keyboard — a button you clicked picked up an outline as soon as you pressed any key, which in an app driven by 1 / 2 / 3 and J / K meant immediately. It would then sit on, say, Unread while you were changing folders. Tabbing to a button still outlines it, which is what the outline is for.

Fixed

  • Archiving a conversation that was still being created — the row shown while a newly accepted invitation's thread arrives is a local stand-in, so archiving, starring, moving or deleting it asked LinkedIn about a conversation it had never heard of and failed with "failed to archive, rolling back". Those actions now stay local, and sending still works — that is what turns the stand-in into a real thread.
  • Moving a conversation out of Archive from the command palette — the palette's archive entry already restored a conversation to Focused when you were in the Archived tab, matching E, but it still called itself Archive conversation there. So the Archive tab offered a command describing the opposite of what it did, and searching the palette for "focused" turned up only Go to Focused inbox. It now reads Move to Focused, like the thread header already did.
  • E and O no longer do the same thing in Archive — a conversation archived out of Other kept that category while sitting in Archive, so the slot that offers Move to Focused for an Other conversation offered it again there, next to the one that already restores to Focused. The command palette, the right-click menu and the thread header each listed Move to Focused twice, and O did nothing E didn't. In Archive, O now restores to Other, so the two keys are the two ways back out.
  • Invitations no longer go missing on large accounts — three separate faults, all of which bite hardest on the accounts with the most requests. The walk stopped when a page of invitations parsed short, which a full page does whenever a single entity is in a shape inƒlow doesn't recognise — and stopping that way also convinced it that it had seen the whole list, so it then deleted every pending invitation past that point. A single failed request — likely on any account needing ten or more sequential fetches — threw away every invitation already collected instead of keeping them. And the ceiling sat at 400, which accounts in the high hundreds were already brushing against.
  • Profile pictures on invitations — LinkedIn moves shared sub-objects out of the record that references them, and inƒlow only understood the inline form, so every invitation fell back to a grey initial. Sender profiles are also kept now instead of being discarded after each sync.

0.6.1

Added

  • A close button on the shortcuts pane — the pane could only be dismissed from the keyboard. Esc still closes it, and ? still toggles it; the Esc hint is gone from the header now that there is a button sitting right there.
  • A conversation that LinkedIn keeps as two threads now says so — the header reads Merged from 2 LinkedIn threads, so it is clear why the messages below move between two conversations.

Fixed

  • Archiving a conversation LinkedIn holds twice no longer brings it back — LinkedIn can keep more than one thread with the same person: an old InMail and, separately, the thread created when you accept an invitation that came with a note. inƒlow shows those as a single conversation, but archiving, deleting, starring or moving it only ever acted on one of them. The other stayed in Focused and the conversation reappeared moments later; unstarring left the other starred, so the star sprang straight back on. Every one of those actions now covers all of the threads behind the row.
  • Dragging across the app no longer highlights its own buttons — selecting the text of Report Bug or Archive never helped anyone. Message text is untouched and still selectable.
  • Clicking a notification opens the desktop app — alerts were shown by the app page, and a page can't bring its own window forward while it's in the background, which is exactly the state you click a notification from. So clicking one did nothing. They now come from the app's service worker: clicking raises the installed app and opens the conversation, and because these notifications outlive the window that showed them, clicking one after you've closed the app launches it straight into that conversation. Clicking one of the extension's own fallback notifications also prefers the installed app over a stray extension tab. The icon on the notification is Chrome's own call and not something inƒlow can set: Chrome attributes every PWA notification to itself before Chrome 152, and to the installed app — with its own entry in System Settings › Notifications — from 152 on.
  • "Turn on inƒlow notifications" no longer sits there doing nothing — the prompt-me chip is offered while notification permission is undecided, and the window watched for permission changes to take it away again. But nothing held that watcher's browser object alive, so once it was garbage-collected the window stopped hearing about changes: granting permission anywhere else left the chip on screen, and clicking it did nothing at all, because there was nothing left to ask for. The same silence meant the extension went on believing that window couldn't show notifications and kept falling back to its own. The window now holds the watcher, re-reads permission whenever you come back to it, and a stale chip clears itself when clicked.
  • Restarting Chrome no longer strands the app on the install page — the installed app window reopens at startup while the extension is still waking up, and inƒlow gave it one retry before settling on "Add to Chrome — it's free". Its other two retries fire when the window is focused or made visible, which a window that restored already focused and already visible never does, so the pitch stayed there until you clicked away and back. The page now keeps retrying on a backoff, and while the browser can see that the extension is installed it waits quietly rather than showing an install pitch to someone who already installed it.

0.6.0

The inƒlow app icon

inƒlow becomes an app. It now lives at a real URL — inflow.im/app — and installs as a standalone desktop app with its own dock icon, unread badge, and native notifications. It also lands on Microsoft Edge. Underneath, 30 bugs found by a systematic audit of the composer, optimistic actions, caching, and realtime layers, each locked in by a regression test (the suite grew to 1,003 tests).

inƒlow running as a desktop app in dark mode — conversation list on the left, thread on the right The same window in light mode

Added

  • The app now lives at inflow.im/app — a real, memorable URL instead of chrome-extension://…/app.html. The page embeds the extension full-screen (same local database, same everything), shows an install page when the extension isn't there yet, keeps working offline after the first visit, and can be installed as a standalone desktop app (dock icon and its own window) via Chrome's Install inƒlow menu item. The old extension URL keeps working.
  • Unread count on the dock icon — when inƒlow is installed as a desktop app, the dock icon shows the number of unread Focused conversations (the same count as the toolbar badge); the browser-tab title shows it too, like (3) inƒlow.
  • Compose from the dock — right-click the installed app's dock icon → Compose new message opens inƒlow with the new-message composer ready.
  • Native-feeling window — the installed app draws edge-to-edge into the title bar (window-controls overlay) instead of showing a browser strip.
  • Smoother first run — installing the extension now opens the inbox immediately instead of leaving you to find the toolbar icon.
  • Notifications carry the inƒlow identity in the installed app — when the desktop app window is open (with notification permission granted), new-message alerts come from inƒlow with its own icon instead of being attributed to Chrome; clicking one focuses the app and opens the conversation. Without an app window they fall back to the extension's notifications as before.
  • inflow.im goes straight to your inbox — with the extension installed, visiting the homepage redirects to inflow.im/app; inflow.im/home always shows the homepage, which notices the install: the header button becomes Open inƒlow → and the install buttons give way to a green Installed for Chrome check that also opens the app. The inƒlow mark in the app's sidebar links back to the homepage.
  • inƒlow is coming to Microsoft Edge — the extension is submitted to the Edge Add-ons store, and Edge installs update themselves from there like Chrome Web Store installs do (no "move to the store" prompt).
  • In-page install prompt — the app page now offers a one-click Install inƒlow as an app chip when Chrome reports it installable, instead of leaving you to find the omnibox menu item.

Fixed

  • Conversations in Other can move back to Focused — the command palette, the thread list's right-click menu, the thread header's dropdown, and the O shortcut all showed only "Move to Other", even for conversations already there. Each now flips contextually to "Move to Focused" (and O toggles); archived and spam threads keep their existing routes back.
  • Notifications from the installed app work again — the app asked for notification permission once and recorded the ask before you answered, so dismissing the prompt (rather than choosing Allow or Block) left permission undecided and permanently unaskable: every alert quietly fell back to one attributed to Chrome. The ask is now recorded only once you decide, and whenever permission is still undecided the app offers a Turn on inƒlow notifications button — so a browser tab, a dismissed prompt, and an install carrying the old flag can all still turn them on.
  • @-mentions in messages are now links — a mentioned name used to render as plain text; it now links to the person's or company's LinkedIn profile.
  • Replying from LinkedIn web marks the thread read here too — reading and replying elsewhere used to leave the conversation stuck unread in inƒlow.
  • Read receipts no longer go missing — a ✓✓ that arrived before its message did was silently dropped, and realtime updates could wipe stored receipts, reactions, and edit markers off messages that already had them.
  • Attachment-only messages get a real preview — an image or file with no text showed "New message" in the list instead of "Sent an image".
  • Drafts stop disappearing — navigating past a conversation faster than its draft loaded deleted that draft, a slow load could overwrite text typed while it was in flight, and adding or removing a recipient wiped a new message's draft and attachments outright.
  • Failed actions undo themselves correctly — a failed reaction, edit, archive, or star could revert a different, successful change made moments later; a failed send-and-archive left the conversation archived with no way back; and a failed archive could make a thread vanish from every tab at once.
  • A stalled network no longer logs you out — a slow LinkedIn response was read as "signed out" and flashed the login screen. A hung attachment upload could also block every later send in that conversation until the extension restarted; it is now bounded.
  • Inline images render again — images delivered in one of LinkedIn's URL shapes were dropped entirely, leaving an empty bubble.
  • AI replies got cheaper and smarter — autocomplete fired a request on nearly every keystroke (~55 per reply); it now waits for a real pause, keeps the end of your draft rather than the beginning when asking for a completion, and stops predicting when you switch conversations.
  • Typing 3:1 no longer opens the emoji picker and turns Enter into an emoji insert instead of a send.
  • Storage stops growing without bound — cached profile photos and shared posts were never evicted.
  • A big inbox stops stuttering while addressing a message — the recipient picker rescanned every profile and conversation on each typing pause.
  • Fixed the reply shortcut leaving a merged conversation's hidden twin unread, a reply-suggestions spinner that could never stop, switching tabs mid-search showing the old tab's results, a long list rendering zero rows after it shrank, a search term next to a filter never matching, archived threads popping back into Focused, a corrupted sync setting silently meaning "sync everything", and closing a thread still marking it read.

Security

  • Nothing can frame inflow.im — the site now sends frame-ancestors 'none' and X-Frame-Options: DENY, since the /app shell holds your real inbox.
  • Fixed a service worker cache bug that broke the installed app — any in-scope URL (such as the web manifest) could poison the shell's cache, breaking the app window and Chrome's install check.
  • Prompt-building now strips nested tags repeatedly, so message text cannot reassemble a tag and break out of the untrusted-data block sent to the model.

0.5.2

Added

  • inƒlow badge on notification icons — native message notifications now show the inƒlow logo badged in the corner of the sender's avatar, so it's clear at a glance which app the alert came from. (The large icon next to a notification is always Chrome's own logo — the OS puts it there for every extension.)

0.5.1

Fixed

  • Video messages were invisible — LinkedIn delivers received videos as a reference to a separate video entity, not inline, so no attachment was extracted; with no body text the message rendered as nothing at all (worst when the video was the only message: the thread looked empty). The conversation preview was blank for the same reason and now says "Sent a video".

Added

  • In-app video player — videos show as a thumbnail with a play button and duration badge, and clicking plays them in a modal right in the window (Escape or a backdrop click closes it) instead of opening a new tab.

0.5.0

Added

  • inƒlow is on the Chrome Web Store — installs from the store update themselves; releases are submitted automatically when a version tag is pushed. See docs/chrome-web-store-release.md.
  • inflow.im — the changelog and privacy policy now have proper pages on the site instead of linking into GitHub.

Changed

  • The update banner now moves manual installs to the store — a sideloaded copy is told where to get automatic updates, with a note that the store build starts with an empty local database and re-syncs from LinkedIn. Store installs show no banner at all: they already update themselves, so the old "download the zip and reload the folder" advice was wrong there.

0.4.0

Added

  • Sender avatars in notifications — native Chrome notifications now show the sender's profile picture (circle-cropped) instead of the generic app icon, with the app icon as fallback when the avatar can't be loaded. Requires a new media.licdn.com host permission.
  • Avatar rail on narrow windows — below 700px window width the conversation list collapses to a compact avatar-only rail (unread dot and star badges, name + preview on hover) so the thread keeps usable width. Keyboard navigation works unchanged.
  • Demo mode fires native notifications — simulated incoming messages now produce real OS notifications (when the app isn't focused), matching production behavior.

Fixed

  • Thread pane layout at narrow widths — the contact name no longer overflows into the header buttons, header buttons no longer wrap or clip, and message bubbles are no longer squeezed by the invisible hover-actions strip (which also no longer intercepts clicks while hidden).
  • Missed notifications after switching apps — notifications were wrongly suppressed when inƒlow was the active tab but Chrome wasn't the frontmost app. Suppression now requires the window to actually have OS focus.
  • Composer stays focused after sending a message.
  • Rate limits and network blips no longer pile up as errors in chrome://extensions — transient failures (timeouts, dropped connections, HTTP 429/5xx) log as warnings and recover on their own.

Changed

  • Removed profile scraping — the extension no longer calls LinkedIn's identity API. Everything shown (names, avatars, headline, location) comes from messaging data. Company/title display, the company logo badges, and the company: search filter are gone; demo mode people no longer have fabricated companies or roles.

0.3.6

Fixed

  • Notification clicks now open the right conversation — clicking a native message notification (or the in-app toast) opens the app focused on that specific thread instead of just raising the window.
  • Mark-as-read now reliably syncs to LinkedIn — outbound read/unread requests are checked against the response body, so a silently-rejected batch update surfaces as an error instead of appearing to succeed.
  • Read/unread toggled on LinkedIn now reflects in inƒlow — a thread marked read or unread on another device is reconciled from the authoritative server flag for any conversation, not just the top of the focused inbox. Optimistic local state is preserved while a mutation is in flight.

Changed

  • Redundant conversation refetches triggered by realtime echoes are coalesced into far fewer network calls.

0.3.5

Added

  • Resizable sidebar — drag the divider between the conversation list and the thread to resize it (280px up to 60% of the window); double-click the divider to reset. Your chosen width persists across sessions. Thanks @sharkymark for the suggestion (#6).
  • When the sidebar is narrow, the Focused/Other/Archive/Spam tabs collapse into a compact dropdown so the header never overflows.

Changed

  • README: install steps moved to the top (#7) and screenshots now illustrate the feature tour.

0.3.4

Fixed

  • Blank app on load — opening inƒlow could intermittently show an empty conversation list until a (lucky) reload. The first render raced the local database opening; queries that lost the race never recovered. They now reconnect the moment the database is ready.

Changed

  • Much faster folder switching — the conversation list now renders only the rows in view instead of every conversation in the folder, batches its per-row lookups, and skips re-rendering unchanged rows during background sync. Switching between Focused/Other/Archived/Spam is instant even with hundreds of conversations, and revisiting a folder paints immediately from memory.

0.3.3

Fixed

  • Duplicate bubble after sending — a message you just sent could briefly show twice (the copy stored from the send response and the realtime echo carry timestamps a few ms apart) until the next thread refresh reconciled it. The two copies now collapse immediately.

0.3.2

A deep sync-consistency release: a systematic audit of everything flowing between LinkedIn and inƒlow, with 31 fixes — each locked in by a regression test (the suite grew to 656 tests).

Added

  • Cross-device star sync — starring or unstarring a conversation on the LinkedIn website or your phone now updates inƒlow live, in both directions.
  • Unsend sync — when someone unsends a message, it disappears from inƒlow immediately instead of lingering until the next refetch. Previously-stored copies of recalled messages are cleaned up too.
  • Deletion sync — conversations you delete on the LinkedIn website (or another device) are now removed from inƒlow instead of living there forever. Conservative by design: a conversation must be absent from two consecutive full syncs before it's removed.

Fixed

  • Unread accuracy — a batch of fixes for unread indicators that were wrong or stuck:
    • A sync page fetched moments before a new message arrived could clear the unread dot for a message you never saw.
    • Someone editing or reacting to an old message no longer marks the thread unread, pulls it out of Archive, or fires a "new message" notification.
    • Duplicate threads with the same person (InMail + regular) are shown merged, but the hidden twin's unread could never be cleared — the thread stayed unread forever and inflated the badge.
    • The toolbar badge now counts exactly what the Focused list shows.
  • Message ordering and timestamps — sent messages now get their real server timestamp immediately from the send response instead of the local clock, and a skewed system clock can no longer make the background sync silently skip newly arrived messages.
  • Group chats — a message from a participant we hadn't synced yet could render as "You" and later show duplicated. Senders are now resolved from the event itself.
  • Folder consistency — moving an archived conversation to Other or Spam no longer leaves it visible in Archived as well, and archive followed by a quick undo can no longer land on LinkedIn out of order and snap back.
  • Deleted conversations stay deleted — a sync page fetched just before a local delete could silently resurrect the conversation.
  • Unsent messages no longer leave an orphaned timestamp in the thread when they were the only message under it.
  • Shared post previews refresh after a week — a post that failed to load once was cached as missing forever.
  • Large mailboxes — the initial full sync no longer monopolizes the sync engine for hours; it works in short rounds so read-state reconciliation keeps running throughout.
  • Sign-in after startup — interrupted sync items now recover on the next cycle instead of waiting for a browser restart; same after an account switch.
  • Toolbar icon clicks while dragging a tab no longer error and do nothing — the click retries once the drag ends.

Changed

  • Database schema v12 (automatic, data-preserving migration).

0.3.1

Fixed

  • Compose to new contacts — sending a first message to a recently connected person no longer fails with a misleading "not connected" error. The createMessage payload was missing a required field (hostRecipientUrns).

0.3.0

Added

  • Check for updates command in the command palette (Cmd+K) for an on-demand release check.
  • The running version is now shown on the keyboard shortcuts bar.

Fixed

  • Update checks now run reliably — the GitHub API host is declared, so the background check is no longer blocked.
  • The ? (shortcuts) and ! (mark as spam) shortcuts now work on non-QWERTY keyboard layouts such as AZERTY. Thanks @qchuchu (#4).

Removed

  • The WhatsApp community top banner — the button in the conversation header already covers it.

0.2.0

First public GitHub release, with in-app update notifications.

Existing users: this is a one-time fresh start. This build pins a stable extension ID so all future updates preserve your data. Moving from an older build changes the extension's identity once, so inƒlow will open empty — re-enter your Gemini key (if you use AI features) and let it re-sync. This only happens this once; every release after this keeps your data.

Added

  • Update notifications — inƒlow now checks GitHub for new releases and shows a banner with a link to the release notes when an update is available.
  • GitHub Releases — each version ships a downloadable inflow-<version>-chrome.zip.
  • Stable extension ID — updates (zip download or rebuild) now preserve your conversations and settings regardless of where the extension folder lives.
  • New envelope app icon.

Fixed

  • New conversations started from another device (e.g. your phone) no longer show the participant as "Unknown".
  • A conversation read on another device now reflects as read in inƒlow, even while the realtime connection is active.

0.1.0

Initial pre-release builds (shared informally before GitHub Releases).