What's new¶
User-facing changes in recent deploys. Newest first. The in-app Update available toast links here so you can skim before updating.
2026-07-25¶
- Project history replaces per-file versions. The camera button and
the
< >version arrows are gone. Instead, every Synthesize project keeps a timeline of checkpoints: one is taken automatically before the agent touches your files, you can commit a named one any time (clock icon in the Files header), and closing a project autosaves one. Each entry shows exactly what changed — with line-by-line diffs — and can restore a single file or the whole project. Restores are themselves checkpointed, so you can always change your mind, and even deleted files can be brought back. Heads up: existing project files from before this change don't carry over. - Let the agent work unattended (if you want). A new per-project toggle — "Agent edits files without asking" — skips the per-edit approval prompts. It's safe to hand over the keys because every change lands in project history and can be rolled back. Folders mounted from your computer (desktop app) always still ask.
2026-07-23¶
- Side panels tuck away like picture-in-picture. Sources and HTML previews now live behind slim tabs on the right edge of the screen — tap to slide a panel in, tap ⟩ to tuck it back. No sources and no preview means no tabs at all, and the panels no longer run underneath the top bar (thanks to a live bug report for pinning that down). On phones they open as proper full-screen sheets.
- Your credits moved into the sidebar. The sats balance now lives at the top of the sidebar (Chats/Library) instead of the top bar — phone screens get their bar space back, and your balance is there when you look for it rather than staring at you while you chat. Everything in it works the same: tap for the balance panel, deposits, and withdraw.
2026-07-22¶
- Your typing survives. A half-written message now comes back after a reload or an accidental tab close, per conversation, and clears once you send. (Incognito keeps writing nothing, drafts included.)
- Big pastes become attachments. Pasting a long wall of text turns
it into a
pasted.txtchip instead of flooding the box, and pasting a screenshot attaches it like a photo — same rules as the paperclip. - Sturdier chat history. If a conversation's saved data is ever damaged, the app now repairs what it can on open instead of refusing to show the thread.
- PlebChat runs Python now. Python code blocks in replies have a Run button — the code executes right on your device (nothing is sent anywhere), with the output shown under the block. And the new Analyst preset gives the AI that same interpreter as a tool: ask a numbers question and it writes and runs real code instead of guessing, showing you the code that produced the answer. The Python runtime (~13MB) downloads once, the first time it's used, from plebchat.me itself.
- Preview the pages the AI writes. When a reply contains an HTML or SVG code block, a new Preview button renders it as a real page in a panel beside the chat (full screen on phones) — buttons click, styles apply, scripts run. It's fully sealed off: the preview can't touch your data or the network. Reload, download as a file, or close it from the panel header.
- Math renders as math. Replies containing LaTeX —
$$…$$,\(…\)and friends — now display as typeset equations instead of raw markup. Dollar amounts stay dollar amounts, and math the model garbles falls back to showing exactly what it wrote. - Long conversations stay fast. Older messages in a thread now skip rendering while they're off-screen, so scrolling a long chat doesn't slow down as it grows.
- Smoother, richer AI replies. Long answers now render steadily while they stream instead of flickering, and code blocks grew up: a header with the language, a Copy button, a collapse toggle, and syntax coloring that matches the app theme in light and dark. Links in replies open in a new tab so you never lose your conversation.
2026-07-21¶
- Look around before you commit. The front page now has a Look around button that drops you into a full demo of the app — seeded chat threads that answer common questions (tap a suggestion and watch the reply stream in), a book with example highlights in Read, and an editable recipe project in Synthesize. No key, no cost; everything you poke at stays on your device and clears when you create a real key.
- A clearer front door. Logged out, everything now lives on one landing page — the story, the four modes, Get started (the guided setup) and Look around (the demo). Signing out brings you back there too, instead of leaving you stranded on a signed-out Settings page. Buttons say "Get started" now — your account is a keypair, not a login.
- Installing on Safari. The install step now covers Safari on the Mac (Share → Add to Dock) alongside Chrome and Edge, with little pictures of what to look for.
- A guided first run. Your first visit now walks you through the essentials in four short steps: what PlebChat is (and the terms), installing it as an app on your phone or desktop, creating your key (or signing in with one you have), and setting up AI — PlebChat credits with a small Lightning deposit, your own provider, or skip it and decide later in Settings. Close the tab mid-way and it picks up where you left off.
- One About page instead of a brochure tour. The logged-out per-mode advert pages are gone; the whole story — all four modes, the principles, and the chat demo — now lives on About. Signed-out mode pages show a simple sign-in card, and links you were sent still open right where they pointed after you sign in.
2026-07-20¶
- Touching the screen while a reply streams no longer yanks it to the bottom. Scrolling during a response now just takes over the scroll — your prompt can still sit at the top, and the view stops jumping under your finger. (Found on a phone, fixed the same day.)
2026-07-19¶
- A cleaner sign-in, and your account in Settings. Signing in is now one clear dialog: create a new key (it makes you back it up first), paste your nsec, or use a browser extension. Your account moved to Settings → Account: copy your npub, reveal and back up your key, sign out — all in one place. The little wallet widget is gone from the corner; your credits live in the ⚡ pill.
- Top up with Lightning — no ecash knowledge needed. Adding credits is now: pick an amount (1k / 5k / 21k sats or custom), scan the QR, done — the credits appear on their own a few seconds after payment. No token to paste, nothing to copy; pasting a Cashu token still works under "Or paste a Cashu ecash token" if that's your thing. (Dev preview: the staging mint settles invoices automatically while we test with fake sats.)
- Your credit balance, always in view. A new ⚡ pill in the top bar shows your PlebChat credits in sats and updates after every reply. Tap it for the credits panel: balance, what you've spent, roughly what the last reply cost, paste-a-token top-up, and one-tap withdraw back to ecash. It turns amber when you're running low.
- PlebChat is now built in — zero setup. No more adding it as a provider: PlebChat is always first in the model picker and in Settings → LLM Providers. Deposit bitcoin (paste a Cashu token) on its page and you're chatting; your credit balance shows in whole sats, model prices read as sats per million tokens (with the dollar conversion), and Withdraw all hands the balance back as an ecash token any time. Your one credit key syncs encrypted with your other settings, so credits follow your nostr key across devices. Out of credits mid-chat? The reply tells you exactly where to top up.
- Provider settings, decluttered. LLM Providers is now a clean list — PlebChat pinned on top, your own providers below, one Add provider button — and each provider opens its own focused page instead of every key and URL crowding one screen.
- Pay with bitcoin — the PlebChat provider. Settings → AI providers has a new PlebChat preset: no account, no card — paste a Cashu ecash token, hit Check, and it becomes your API key with a sats credit balance. Chat replies stream through our own server and draw down the balance per token; the model list comes priced from the server, and your balance is withdrawable back to ecash at any time. (Dev preview: the server currently accepts fake test ecash while we shake it out.)
- Model picker: bottom sheet on phones. On a phone the model picker now opens as a bottom sheet (like the wallet settings) — swipe down to dismiss. The desktop popover got roomier too, and the vendor logos in the rail are twice the size.
- Honest reasoning badges. The brain badge (and the thinking-level picker) now reflect what models actually support: OpenRouter's per-model capability data is read properly (Kimi K3, Grok, and friends show their brain), and for providers whose APIs report nothing (xAI, direct Moonshot/DeepSeek endpoints) a built-in capability catalog fills the gaps.
2026-07-18¶
- Report a bug without closing the sidebar (phones). With the chat/read sidebar open on a phone, it covered the bug-report button in the top bar. The sidebar now has its own bug button next to the close (›) chevron, so you can report from anywhere. From live feedback.
- Send works on the first tap (iPhone). On iOS, tapping Send with the keyboard open used to just dismiss the keyboard and swallow the tap, so you had to press it twice. It now sends on the first tap — and the keyboard tucks away afterward so the reply scrolls in cleanly. From live feedback.
- Screens slide instead of snapping (phones). Opening the sidebar now slides it in from the left, and Settings glides between the topic list and a topic instead of jumping. Desktop is unchanged, and the animations turn off automatically if your device asks for reduced motion.
- No more surprise keyboard. Coming back to Chat (from Settings or anywhere else) no longer pops up the keyboard on phones — the message box waits until you tap it. From live feedback.
- A real model picker. The model popover now has a search box; your configured providers are collapsible sections (the active one opens first, with its logo); and a big catalog (like OpenRouter, which carries every vendor's models) gets a vertical rail of vendor icons — tap a vendor to see just its models. Each model shows small badges for vision, reasoning, and a $–$$$$ price tier (hover for exact per-million pricing). From live feedback.
- Thinking gets its own button. The thinking level moved out of the model picker into its own brain button next to it (it only appears for models that can think). And it now offers only the levels your model actually supports — LM Studio reports each model's options and the app matches them instead of listing everything. From live feedback.
- No more rubber-band scrolling. On iPad/iPhone the whole app could bounce-scroll even when there was nothing to scroll. The page is now locked so only the content areas that should scroll do. From live feedback.
- Tap away to cancel a delete. When you tap a message's delete button it arms a red Delete confirm; now tapping anywhere else (or Esc) cancels it, instead of leaving it armed until it times out. From live feedback.
- Cleaner Settings on phones. On a phone, the Settings screen no longer shows the mode switcher and sync button crowding the top — it's a focused full-page screen with just its Back button (and the feedback bug). From live feedback.
- Better photo attachments on iPhone. Screenshots you attach to a bug report are decoded more robustly (portrait iPhone photos no longer come out sideways, and unusual formats fall back to a second decoder instead of failing). From live feedback.
- Your tools stay on across new chats. Turning search tools on or off now sticks — start a new chat and it keeps your last choice, the same way the model picker remembers your last model. From live feedback.
- See token usage per reply. Each assistant reply has a small gauge button that opens a popover with the tokens it used (input, output, total) and the cost, when your endpoint reports it. From live feedback.
- Simpler provider setup: no "Default model" box. You no longer type a model name when adding an endpoint — Test connection reads the models from the endpoint and picks one, and you switch models per-chat from the model picker. From live feedback.
- API key box fixed for Safari (and everyone). The provider API-key field is now a plain, visible text box. Hiding it behind dots was making Safari treat it like a password — popping up password suggestions and, worse, lowercasing pasted keys through iCloud Keychain, so a correct key turned into a wrong one and the endpoint returned 401. The app also trims stray spaces/newlines from pasted keys now (another silent cause of 401s), and a rejected key gives a clearer message. From live feedback.
- Clearer AI error messages. When your model endpoint rejects a request (bad API key, rate limit, …), the chat error now shows the server's plain message — e.g. “401: Invalid API token provided.” — instead of a wall of raw JSON. From a live feedback report.
- Chat list shows which conversations errored. The little status dot next to each chat is now correct the moment the app loads: a conversation whose last reply failed shows red right away, instead of green until you opened it. From a live feedback report.
- Settings opens on a topic, not a blank pane (desktop). On a wide screen, opening Settings used to show an empty panel next to the topic list telling you to “Choose a setting from the list.” It now opens straight to Account & Wallet so there's always something in view. On a phone it still opens to the topic list, as before. From a live feedback report.
- LLM provider setup: test the connection, no more paperwork. Adding an endpoint is simpler and safer. The API key box is no longer a password field — that quietly confused phone and tablet password managers, which would offer to “fill” an email into the endpoint address and garble your key, so a perfectly good key came back as 401 Unauthorized. Now the key is a normal field with an eye button to show or hide it, and password managers leave it alone. There's a Test connection button: it checks the endpoint, and if it's reachable it fills in the model list for you — you no longer have to type a model name or paste any JSON (that box is gone). For LM Studio it reads the extra details each model reports, so the app knows which of your local models can see images. From a live feedback report.
2026-07-17¶
- Settings, reorganized. The settings page is no longer one long scroll — it's a tidy list of topics you open one at a time: Account & Wallet, LLM Providers, Web Search, News Feed, Relays & Storage, Privacy & Sync, Appearance, and Reading. Each row shows its current state at a glance (how many providers, which relay, your theme). On a phone you tap a topic to open it and Back to return; on a wide screen the topics sit in a sidebar and open beside it, using the space the way desktop apps do. Saving a topic drops you back to the list. New in here: a proper light/dark theme switch for the app, and your reading font/size/theme now live in Settings too (as well as in the reader). A mode's “configure” link opens straight to the right topic.
- Deleting a message now asks first. The trash button on a chat message — which removes that message and everything after it — used to fire on a single tap. It now arms on the first tap (turning into a red Delete button) and only removes anything on the second, and it disarms itself after a few seconds if you change your mind. From a live feedback report.
- Attach files and photos in Chat. The composer has a paperclip:
attach
.txtfiles (their contents ride along with your message) and up to four photos for models that can see — photos are offered only when the current model declares image support, and the picker learns that automatically from OpenRouter and xAI model metadata when you pick a model. Photos are downscaled before sending and show as thumbnails in the conversation. - Multiple AI providers, with presets. Settings now manages a list of AI providers instead of a single endpoint. Add one from a preset — xAI (Grok), OpenRouter, or any OpenAI-compatible server — each with its own URL, key, and models. OpenRouter gets the full treatment: browse its live model catalog with per-million-token prices and check your key's remaining credit right from the card. The chat model picker now lists every model across all your providers, grouped by provider, and simply remembers the last model you picked — new chats start on it, while existing chats keep the model they were using. (Heads up: your AI endpoint settings need to be re-entered once after this update.)
- Markdown syntax marks you can actually see (really, this time). In
the Synthesize editor, the
#,*,-,>characters and backticks revealed on the line you're editing were nearly invisible in dark mode. An earlier attempt didn't take — they're now genuinely bright orange, with list bullets/numbers orange throughout the document. From a live feedback report. - Readable code blocks in dark mode. Code blocks now sit on a slightly
lighter surface so they lift off the page, and the syntax colors inside
(the
```pythonlanguage label, keywords, strings, numbers, comments) are a bright palette tuned for the dark background instead of the dim, built-for-white defaults. Light mode is unchanged. From a live feedback report. - Regenerate without waiting. Flipping between response versions no longer stops a reply that's still being written — the fork arrows work mid-stream, and you can even fire off several takes at once and compare them as they land. In Synthesize, an edit-approval request from a background variant still pops up (labeled as coming from another fork) and applies to the right one.
- Interrupted replies keep their words. If you hit Stop, close the tab, or lose connection mid-answer, the text that already arrived stays in the conversation as an interrupted reply (with Retry) instead of vanishing.
2026-07-16¶
- The Synthesize agent can delete files. Ask it to remove a document and it uses its new delete tool — gated behind an explicit approval banner, like edits, since deleting a file (and its version history) is irreversible. From a live feedback report.
- Feedback on long conversations works again. Thumbs-down reports with a big agent transcript used to fail at the encryption step (gift wraps cap out at 64 KB of plaintext). Traces are now compressed before wrapping, so the whole thread rides along — and any report that got stuck in the retry queue un-sticks itself on the next retry.
- Synthesize catches up with its inspiration. Four additions from the original design: sources can now be fetched from the web — paste one or more URLs and they arrive as readable markdown (needs your Firecrawl key; manual paste still works without one). The New file dialog offers starter templates (blog post, study notes, outline, meeting notes) and imports dropped markdown/text files. Files and sources you haven't looked at yet show a blue unread dot — including files the agent edited behind your back. And ⌘K (or the tab bar's + → Open…) opens a quick search across your project's files, chats, and sources.
- The agent sees what you see. Synthesize's assistant now knows which tabs you have open, which file is on screen, and any text you've highlighted in the editor or a source — so "what does this mean?" just works. The chat pane also slimmed to a third of the width; the document keeps two-thirds (drag the divider to taste).
- Synthesize panes now have homes. Files and sources always open in the left pane, chats always on the right — document beside conversation, the way the workspace is actually used. The chat pane appears when you open a chat and disappears when you close the last one; no more panel open/close buttons or dragging tabs between columns.
- No more empty-chat clones. In Synthesize, "New chat" now reuses your existing untouched chat instead of piling up empty threads, and closing a never-used chat's tab deletes it outright.
- Color-coded at a glance. The Sync & privacy cloud now wears its stance: green when synced, orange for local-only, purple for incognito (incognito accents across Chat match). Synthesize's add-buttons and menus picked up their signature colors too — green for files, blue for chats, amber for sources.
- Sharper dark mode. Icons now render flat white in dark mode instead of the dim grey they inherited from surrounding text, and the edges of input fields — including the chat composer — are brighter in both themes, so fields stand out from ordinary panel borders.
- Incognito now covers every AI conversation. In Incognito, book chats in Read and Synthesize agent threads stop saving too — like Chat, they vanish on refresh or close. Everything else keeps working and saving on your device (files, imports, annotations, settings); Incognito is about conversations, not a lockdown. Sync stays paused, and the stance you pick is remembered across reloads.
- Read's sidebar stays with you. Opening an article no longer hides the collections sidebar — the reader renders next to it, and clicking any collection closes the article.
- Feeds shows your subscriptions; Articles has the long-form cards. The "Explore Recent Events" discover grid moved from Feeds to Articles, so Feeds is purely your RSS subscriptions. The sidebar's Feeds row also gained a › expander that lists your subscriptions — one click jumps straight into a feed.
- "Files" is now "PDFs" and sits right under eBooks — that's what the collection actually holds.
- News sync joined the big sync. The separate Sync button on the news collections is gone; the bar's Sync now pushes and pulls subscriptions and saved articles along with everything else. (The Refresh button inside a feed still does what it always did: fetch new articles.)
- One button for sync & privacy. Three scattered controls — the privacy toggle in the top bar, Chat's incognito picker, and the Library's sync button — merged into a single top-right control. Pick your data stance (Synced / Local only / Incognito) and see sync status, last-sync details, and Sync now in one place. The button's icon shows your stance and sync state at a glance. Incognito still means one memory-only chat (Read & News keep saving locally) and now pauses sync too.
- Thumbs-down under every AI reply. A bad answer gets its own channel, separate from bug reports: tap the thumbs-down, optionally say what you expected, and the conversation transcript, the agent's system prompt, and recent debug logs go to the developer encrypted — used to improve prompts and skills, nothing else. (No thumbs-up: good answers need no signal.)
- Delete only appears where it means something. AI replies no longer offer a Delete button — except on forked responses (the "n/m" arrows), where it deletes just that fork. Your own messages keep theirs.
- Chat errors now tell you what went wrong — and let you retry. A failed AI request used to show a bare "Connection error." dead end; the banner now names the endpoint it couldn't reach, hints at the usual causes (URL, network, CORS), and has a Retry button that re-runs the turn. The error also lands in the debug log, so a feedback report sent afterwards carries it automatically.
- Feedback reports can include the agent transcript. When a conversation is open, the feedback dialog offers an "Include agent transcript" checkbox — the full message-by-message trace (redacted and size-capped, encrypted like everything else in a report) rides along so agent bugs are diagnosable from the report alone.
- No more accidental text highlighting on buttons and menus. Like a native app, the interface itself can't be text-selected anymore — only real content can: chat messages, articles, PDF text, annotation quotes, and anything you type.
- Picked elements in feedback reports now say what they are. An icon-only button used to show up as just "button" — now it carries the button's tooltip name and which card or panel it lives in.
- Picking an element for a feedback report now works on phones. Tap the element to aim (you'll see it outlined), then tap Use element to confirm — no more hover-only guesswork, and there's a Cancel button on screen.
- Edge-swipe "back" is gone in the installed app. When PlebChat runs installed (added to your home screen or dock), navigating never builds up browser history — so an accidental swipe from the screen edge no longer yanks you back to a previous screen. In a regular browser tab, back and forward still work like any website.
- The site grew its pages. New About, Blog, Zap (support), Terms of Service, and Privacy pages, all linked from a footer on the front door at plebchat.me. The zap page is a placeholder for now — Lightning donations get wired up later.
- Desktop mode switcher is now a segmented pill. On wide screens the center of the top bar shows all four modes side by side — Chat · Read · Synthesize · Debate — macOS-style, one click to switch. On phones the compact popover picker stays.
- The feedback bug moved out of the way. It now sits with the buttons on the right of the top bar, as a plain icon without a chip around it.
- The sidebar collapse button sits fully inside the sidebar instead of straddling its edge, and it's no longer dimmed by the status-bar fade at the top of the screen.
- Tap the version number to check for updates. The build stamp at the bottom of the sidebar now fetches the latest deploy on demand — you get the "Update available" toast if one is ready, or a quick "Up to date", without closing and reopening the app.
- The mode pill knows when it doesn't fit. On narrow windows (a phone held sideways) with the sidebar open, the segmented pill would cover the sidebar's collapse button — it now switches back to the compact picker whenever there isn't room, and returns when you collapse the sidebar.
2026-07-15¶
- Four modes: Chat, Read, Synthesize, Debate. Search is gone as a mode — it was two things bolted together, and both moved somewhere better.
- Chat can research. The new Search button on the message box picks which providers this conversation may use (Web via your Firecrawl key, Nostr via NIP-50) and how hard to work (Balanced or Deep Research). Off by default — a plain chat stays a plain chat. Cited answers and the sources rail came along with it.
- Read owns everything you read. The sidebar now lists Collections: eBooks, Articles, Files and Feeds. The news reader, your saved articles and your RSS subscriptions moved here from Search.
- Files: PDFs. Import a PDF (or drop one on either grid — it'll find its way) and read it with selectable, findable text; the page you reached is remembered. PDFs aren't highlightable — highlights anchor to a position in flowing text, which a fixed page format doesn't have. For now they stay on the device that imported them.
- Viewing as — the eye at the top of Read's sidebar opens someone else's public shelf, read-only, as if you were them. Under a lens only eBooks is available: saved articles and feeds are encrypted to their owner's key, so nobody can read someone else's, and the sidebar says so rather than showing you an empty list.
- Old research threads are gone. PlebChat is pre-release, so rather than
migrate them we let them go;
/searchlinks no longer resolve. - No page pinch zoom — the mobile shell stays full-screen; form fields no longer trigger Safari’s focus-zoom. Use system Zoom or Read’s font controls for magnification.
2026-07-14¶
- PWA updates — installed PlebChat shows an Update available toast when a new version is waiting; tap Update to reload into it.
- Feed-item cache — subscribed RSS/Atom feeds reopen from a local cache instead of spending Firecrawl credits on every visit; Refresh still fetches.
- Floating glass shell — top bar is glass islands over edge-to-edge content; mode sidebars share a rail header (Cyphertap, Settings, Sync).
- Mobile sidebars — Chat/Read/Synthesize rails take the full screen on phones; the bar collapses to a close control while open.
- Settings sync — AI / research / relay settings sync across devices as an encrypted nostr event when you're logged in (and not in privacy mode).