v0.1.1
The first public release of chats — real-time DMs and group chats for your Rails users in minutes, Hotwire-native end to end: Turbo Streams over Action Cable for live delivery, Stimulus for the thread/composer behavior, zero build step, any Rails 7.1+/8.x app.
gem install chats · on RubyGems: https://rubygems.org/gems/chats
What ships in 0.1.1
- Direct + group conversations with a policy seam (
can_message?) the host controls, viewer-agnostic broadcast bubbles (one render per message, shared by every subscriber), and keyset scroll-up pagination. - Telegram-style long-press actions — a FLIP-morphing bubble lift over a blurred backdrop with a reactions pill and contextual menu (Copy / Edit / Delete + host-injected items). Verified on real WebViews: copy runs inside the user-gesture frame (WebKit drops activation in promise continuations), and Copy/Edit read the popup's visible clone (the original bubble is hidden while lifted).
- Composer edit mode (Telegram's flow), read-horizon receipts (sent/seen double ticks), typing indicators via a Turbo Stream custom action, reactions, attachments with pre-send previews, soft-delete tombstones, inbox search.
- Mobile-WebView resilience: stale-thread catch-up endpoint for suspended sockets, «new messages» divider, DOM budget (~300 bubbles) with reachable trimmed history, chronology guard for out-of-order broadcast appends, tail-gated autoscroll (edits/pagination never yank the viewport).
- Host integration: ejectable views (
rails g chats:views), engine importmap pins,:message_created/:conversation_readnotifier hooks, and moderation-friendly seams (single marked body node, report-link injection point).
Battle-tested as the messaging layer of a production app (iOS + Android Hotwire Native shells + web) before extraction.
Full Changelog: https://github.com/rameerez/chats/commits/v0.1.1