github HeyPuter/puter 26.10.1

2 hours ago

What's Changed

  • fix(thumbnails): duplicate a copied thumbnail with GetObject + PutObject instead of CopyObject by @Salazareo in #4072
  • attach egress actor to /down by @ProgrammerIn-wonderland in #4076
  • PUT-2011 by @ProgrammerIn-wonderland in #4077
  • PUT-1995 by @ProgrammerIn-wonderland in #4020
  • Let the account's own API token reach the routes a privileged app needs by @jfcastro92 in #4032
  • feat(ddb): log the table and key of throttled DynamoDB requests by @Salazareo in #4078
  • docs: medium perms recipe (PUT-1975) by @jfcastro92 in #3974
  • docs: medium fs recipe (PUT-1968) by @jfcastro92 in #3975
  • docs: medium kv recipes (PUT-1972) by @Salazareo in #4041
  • Worker and Subdomain Recipes by @ProgrammerIn-wonderland in #4075
  • docs: medium teams recipe (PUT-1976) by @jfcastro92 in #3976
  • feat(ai): carry the full Anthropic and OpenAI wire shapes through the chat driver by @Salazareo in #4079
  • PUT-1910 sync limits ai, fs, events, networking by @reynaldichernando in #4088
  • fix: error cleanup by @Salazareo in #4089
  • fix(ai): omit unsupported sampling options in Responses requests by @404oops in #4087
  • Gate an email address once, before it is stored by @jfcastro92 in #4092
  • Teams cleanup: pagination, resumable delete, and credentials that stop leaving by mail by @jfcastro92 in #4091
  • feat: trial cleanup by @Salazareo in #4097
  • fix: verification for sms by @Salazareo in #4098
  • fix: verification for sms by @Salazareo in #4099
  • fix: verification for sms by @Salazareo in #4100
  • fix: verification for sms by @Salazareo in #4101
  • Keep the flat permission view to the row it stands for by @jfcastro92 in #4080
  • Permissions and access-control cleanup by @jfcastro92 in #4086
  • fix(fs): SDK uid stat cache, readdir page types, move lookup errors, UID-shaped paths (PUT-1898) by @Salazareo in #4109
  • fix(kv): SDK list rejections, boot-cache read-after-write, byte-accurate size checks (PUT-1899) by @Salazareo in #4108
  • fix(kv): flush pagination, per-call caps, decr/del validation (PUT-1899) by @Salazareo in #4106
  • fix(db): 4xx for lost signup/move write races, stall-aware health-check timeouts (PUT-1897) by @Salazareo in #4107
  • fix: 402 error messaging by @Salazareo in #4114
  • fix: godmode installation by @Salazareo in #4116
  • Treat dots as significant on Apple's mail domains by @jfcastro92 in #4110
  • chore(deps): bump mysql2 from 3.24.4 to 3.24.5 by @dependabot[bot] in #4082
  • chore(deps): bump sharp from 0.35.4 to 0.35.5 by @dependabot[bot] in #4081
  • chore(deps): bump proxy-addr from 2.0.7 to 2.0.8 by @dependabot[bot] in #4122
  • chore(deps-dev): bump source-map-js from 1.2.1 to 1.2.2 by @dependabot[bot] in #4123
  • fix(kv): batch-read GUI boot keys only when the SDK runs as the GUI (PUT-1899) by @Salazareo in #4117
  • fix(auth): 400 instead of 500 when a username is taken mid-write (PUT-1897) by @Salazareo in #4115
  • fix(events): refuse scoped access tokens on durable events routes (PUT-2048) by @Salazareo in #4105
  • chore(deps): bump smtp-server from 3.19.13 to 3.19.17 by @dependabot[bot] in #4083
  • fix: harden card verification by @Salazareo in #4126
  • fix(ai): propagate cancellation and stream termination failures by @404oops in #4090
  • feat(ai): add Mistral Large 4 and update model pricing by @404oops in #4134
  • feat(ai): add Claude Haiku 5.5 by @404oops in #4135
  • Rename "Add Existing Account" menu item to "Add Another Account" by @reynaldichernando in #4124
  • chore(deps): bump shell-quote from 1.9.0 to 1.12.0 by @dependabot[bot] in #4121
  • chore(deps): bump shell-quote from 1.10.0 to 1.12.0 in /src/puter-js by @dependabot[bot] in #4120
  • test(events): fix flaky worker invoker backoff test by @Salazareo in #4127
  • fix(i18n): add GUI keys that rendered as raw key names by @theluckystrike in #4074
  • SDK auth plumbing: cache scope, dedupe keys and the token listener by @jfcastro92 in #4112
  • fix: settle the url file-access gate from a grant held on a folder above by @jfcastro92 in #4132
  • fix: a picker popup hands its opener a token once the user has picked by @jfcastro92 in #4133
  • fix(events): resolve relative fs: paths like fs operations do by @krishs01 in #4085
  • fix: credit usage gui by @Salazareo in #4140
  • chore(deps): bump handlebars from 4.7.9 to 4.7.10 by @dependabot[bot] in #4137
  • fix: team seats caps by @Salazareo in #4141
  • feat(puter-js): Add custom streams and perfect negotiation to Peer by @velzie in #4058
  • fix(events): single-writer presence items, live-socket counts and region-wide leave grace (PUT-1759) by @Salazareo in #4142
  • Keep archive entries inside the extract folder by @Salazareo in #4145
  • fix: only sign-in and picker popups hand the opener a token by @Salazareo in #4147
  • fix(puter-js): request idle timeout, callback/listener leaks, guarded message handlers (PUT-1908) by @Salazareo in #4143
  • fix(events): bill reached deliveries, bound dispatch reads, seal cursors (PUT-1900) by @Salazareo in #4146
  • Auth limits, reborn-app tokens, seat addresses, drop-area encode by @Salazareo in #4148
  • ci: shard backend tests and share workers across server-booting files by @Salazareo in #4149
  • Sharing cleanup: bounded outbound listings, and what see does not reach by @jfcastro92 in #4118
  • fix: settle which plan an org seat resolves to, and confirm a seat's address by @jfcastro92 in #4139
  • fix: a signed overwrite lands on the live key only once its completion is accepted by @jfcastro92 in #4136
  • Share attribution and cascade: finish PUT-1856 and PUT-1857 by @jfcastro92 in #4119
  • fix: let a revocation be seen by the reads and the nodes that outlive it by @jfcastro92 in #4151
  • Misc subdomain and worker fixes by @ProgrammerIn-wonderland in #4157
  • PUT-1901 by @ProgrammerIn-wonderland in #4159
  • fix(auth): no email password recovery for built-in admin accounts by @Salazareo in #4153
  • fix(alerts): overspend alarm in credits at warning; no-choices completions stop paging by @Salazareo in #4154
  • feat: let extensions claim a subdomain (PUT-2100) by @Salazareo in #4155
  • fix(health): discount total event-loop stall time from db liveness latency by @Salazareo in #4160
  • fix: session store revokes by @Salazareo in #4168
  • fix: backend test flakes and a socket shutdown hang by @Salazareo in #4170
  • fix(ai): hold credits for image and video generation by @Salazareo in #4164
  • fix: a copy records the size of the bytes it duplicated by @Salazareo in #4197
  • fix(stores): return written rows without reading them from a lagging replica by @Salazareo in #4166
  • fix(fs): emit fs.remove.node once per entry on recursive delete by @Salazareo in #4167
  • fix(cache): broadcast fs entry and team invalidations to peer regions by @Salazareo in #4169
  • fix(alarm): forget idle alarms and cap how many the client holds by @Salazareo in #4171
  • fix(ai-chat): forward max_tokens to xAI; moderate Azure through OpenAI by @Salazareo in #4172
  • fix(ai-chat): derive Azure model pricing from the OpenAI and xAI catalogs by @Salazareo in #4173
  • fix(fs): route thumbnail writes through FSEntryStore by @Salazareo in #4174
  • fix(db): detect duplicate keys with isUniqueViolation everywhere by @Salazareo in #4175
  • fix(email): one canonicalization and blocklist for every address path by @Salazareo in #4176
  • fix(fs): send the same outer.gui.item.* payload from every fs controller by @Salazareo in #4179
  • fix(redis): release locks with an atomic compare-and-delete by @Salazareo in #4183
  • fix(ai): map BytePlus video and Cloudflare image upstream errors at the driver boundary by @Salazareo in #4184
  • fix(fs): include supplementary-character names in subtree path queries on MySQL (PUT-2135) by @Salazareo in #4198
  • refactor(core-util): shared bounded map, cheaper route lifecycle, DDB/DB/rate-limit/gate dedup by @Salazareo in #4185
  • refactor(services): page fs subtree walks, gate share fan-out, one fs ACL helper by @Salazareo in #4190
  • refactor(services-core): read-only socket reauth, one token-grant read per check, shared grant/revoke and hosted-asset paths by @Salazareo in #4187
  • refactor(controllers): one signup, login, confirm and window.user path; userProtected/internalAuth route options by @Salazareo in #4189
  • refactor(drivers-wiring): AppService views and launch gates, batched app lookups, shared driver policy and guards by @Salazareo in #4186
  • refactor(ai-media): shared upstream fetch, provider registry and bounded inputs for AI media drivers by @Salazareo in #4188
  • refactor(ai-chat): one OpenAI-compatible provider, one pricing path, cached catalogs by @Salazareo in #4192
  • docs: tighten contributor and architecture guides by @Salazareo in #4194
  • refactor(stores): one row cache and keyset page helper, batched cache round trips, dead store methods removed by @Salazareo in #4191
  • fix(fs): page subtree walks over supplementary-character names on MySQL (PUT-2135) by @Salazareo in #4203
  • fix(kv): spread upload sessions across system KV partitions by @Salazareo in #4162
  • fix: reserve storage before creating directories on signed write starts by @Salazareo in #4161
  • fix: drop moved descendants from the entry cache; read cursor=null as the first page by @Salazareo in #4204
  • fix: follow-ups to #4161–#4203 (rate limits, broadcast, AI routing and billing, fs subtree walks) by @Salazareo in #4205
  • fix(ai-tts): resolve ElevenLabs voice names before synthesis by @404oops in #4196
  • fix(ai): bound streaming buffers and normalize input errors by @404oops in #4199
  • feat(ai-image): add Gemini Nano Banana 2.1 by @404oops in #4201
  • fix(ai-speech): honor ElevenLabs output formats, voice IDs and URL audio by @404oops in #4202
  • Fix webdav locks issue and tighten GUI ipc rules for setWindow* by @ProgrammerIn-wonderland in #4207
  • Various docs fixes and AGENTS.md update by @reynaldichernando in #4211
  • fix(gui): resize app content above mobile keyboard by @himanchalkaushale in #4165
  • perf: cut godmode app launch latency (cached token renewal, launch reuse) by @Salazareo in #4221
  • Delete worker sessions when workers are deleted, don't treat sessions… by @ProgrammerIn-wonderland in #4163
  • Fix worker test by @ProgrammerIn-wonderland in #4156
  • Normalize remote chat catalogs and conditional pricing by @404oops in #4208
  • Refresh verified provider pricing catalogs by @404oops in #4217
  • Fix speech catalog prices and clarify legacy transcription options by @404oops in #4213
  • Advertise image input for ZAI GLM-5.3 Flash models by @404oops in #4214
  • Protect direct DeepSeek peak-only pricing by @404oops in #4218
  • fix(fs): keep S3 read stream errors from crashing the process by @Salazareo in #4227
  • fix: give every route behind the user-protected gate a password budget by @jfcastro92 in #4150
  • fix: harden token delivery, session revokes, app identity and fs scoping by @Salazareo in #4229
  • fix: count one app open per account per app per hour by @jfcastro92 in #4152
  • fix: bound how many accounts a team owner can provision by @jfcastro92 in #4223
  • PUT-1903 by @ProgrammerIn-wonderland in #4226
  • PUT 2057 and PUT 2068 by @ProgrammerIn-wonderland in #4245
  • chore(deps): bump uuid from 14.0.2 to 14.0.3 by @dependabot[bot] in #4237
  • chore(deps-dev): bump vite from 8.1.5 to 8.1.6 by @dependabot[bot] in #4238
  • chore(deps): bump libphonenumber-js from 1.13.14 to 1.13.15 by @dependabot[bot] in #4239
  • chore(deps-dev): bump @types/busboy from 1.5.4 to 1.5.5 by @dependabot[bot] in #4241
  • chore(deps): bump smtp-server from 3.19.17 to 3.19.21 by @dependabot[bot] in #4242
  • chore(deps-dev): bump prettier from 3.9.9 to 3.9.10 by @dependabot[bot] in #4240
  • Resolve PUT-2059 by @ProgrammerIn-wonderland in #4250
  • fix: misc bugs by @Salazareo in #4251
  • remove private access routing from docs by @reynaldichernando in #4252
  • Handle unavailable chat model routes and exclude batch variants by @404oops in #4230
  • Add Gemini Argon with mode-specific limits and native usage metering by @404oops in #4231
  • Restore supported Gemini chat models and align scheduled pricing by @404oops in #4232
  • Keep Gemini speech instructions separate and validate speech requests by @404oops in #4233
  • Add Gemini transcription with consistent usage settlement by @404oops in #4234
  • Add Gemini Omni video generation with token metering by @404oops in #4235
  • Move New > User templates entries into a tested helper by @Salazareo in #4258
  • fix(metering): fence settles, idempotent monthly claim, split addon consumption (PUT-2001) by @Salazareo in #4236
  • fix(puter-js): handle file picker cancel message by @Salazareo in #4257
  • perf(backend): cut sequential round trips on auth, fs, driver, event and site paths by @Salazareo in #4259
  • docs(bug-bounty): list re-claimed abandoned site and worker names as a known non-issue by @Salazareo in #4261
  • fix(webdav): PROPPATCH checks write access and answers with the masked path by @Salazareo in #4260
  • PUT-2058 and PUT-2096 by @ProgrammerIn-wonderland in #4256
  • automerge emergency fix by @ProgrammerIn-wonderland in #4264
  • fix(ai): validate large base64 by decoded length, not regexps by @Salazareo in #4265
  • docs(bug-bounty): add eligibility rules by @Salazareo in #4269
  • fix(gui): drop deleted apps from the start menu (#4228) by @kunaaaalcodes in #4243
  • fix: misc scan fixes by @Salazareo in #4270
  • fix(gui): refresh Start menu apps without blocking cached rendering by @udit19199 in #4244
  • feat(ai): edit a source video with txt2vid (Gemini Omni, FLUX 3) by @404oops in #4272
  • feat: let a subdomain claim keep the main pipeline (PUT-2111) by @jfcastro92 in #4268
  • feat(fs): finish a home rename that stopped partway by @jfcastro92 in #4255
  • PUT-1911 fix contradicting jsdocs and docs by @reynaldichernando in #4282
  • fix(subdomains): emit subdomain.delete for sites deleted with an app by @Salazareo in #4273
  • feat(ai): add Kling for video, image and speech generation by @404oops in #4274
  • fix(dashboard): adversarial review — bugs, a11y, perf, i18n by @jelveh in #4285
  • chore(deps): bump smtp-server from 3.19.21 to 3.19.23 by @dependabot[bot] in #4276
  • refactor(gui): remove the AI side panel and its desktop button by @jelveh in #4286
  • chore(deps-dev): bump eslint-plugin-prettier from 5.5.6 to 5.5.7 by @dependabot[bot] in #4278
  • chore(deps): bump mysql2 from 3.24.5 to 3.24.6 by @dependabot[bot] in #4279
  • chore(deps): bump undici from 7.30.0 to 7.30.1 by @dependabot[bot] in #4280
  • feat(gui): "Open with AI" in the dashboard Files menu, opening like Open With by @jelveh in #4289
  • chore(deps-dev): bump vitest from 4.1.11 to 4.1.12 by @dependabot[bot] in #4275
  • chore(deps): bump follow-redirects from 1.16.0 to 1.16.1 in /src/puter-js by @dependabot[bot] in #4288
  • chore(deps): bump follow-redirects from 1.16.0 to 1.16.1 by @dependabot[bot] in #4287
  • misc: hardening by @Salazareo in #4290
  • fix(hosting): apps publish with write again by @Salazareo in #4291
  • fix(fs): support offset and byte_count in read operations by @1kailas in #4266
  • fix(apps): refuse claimed subdomains as app index_url hosts (PUT-2110) by @jfcastro92 in #4267
  • feat(gui): edit display name and bio from the Account tab by @Salazareo in #4293
  • chore: move to Node 26 by @Salazareo in #4295
  • feat(puter.js): open the upgrade page with what was refused by @Salazareo in #4294
  • fix(fetch): raise HTTP/2 receive windows for plain fetch by @Salazareo in #4296
  • feat(workers): internal teardown that takes the script down before the row, and destroy reports Cloudflare refusals (PUT-2219) by @jfcastro92 in #4297
  • fix(s3): keep credential-chain credentials an hour from expiry when signing by @Salazareo in #4299
  • refactor: make teams an optional feature by @jfcastro92 in #4248
  • feat(metering): free and no-allowance plan traits, provisional resolver answers by @jfcastro92 in #4284
  • fix(teams): refuse to boot when teams_enabled has nothing registering Teams by @Salazareo in #4300
  • feat(gui): add Filipino and restore the language menu by @vonypeto in #4263
  • fix(ai): treat a gateway 4xx with no upstream error body as a route failure by @404oops in #4301
  • test(ai): every AI driver holds and meters at the AI cost factor by @Salazareo in #4304
  • fix(dashboard): mobile and tablet review — layout, touch, safe areas by @jelveh in #4303
  • fix(ai): chat requests run to their upstream usage report after the caller disconnects by @Salazareo in #4302
  • feat(dashboard): account dialogs as dashboard modals instead of windows by @jelveh in #4305
  • feat(aws): DynamoDB, Polly and Textract can use the default credential chain by @Salazareo in #4307
  • fix(puter-js): replay the request after a successful token_auth_failed reauth by @rasadregmi in #3954
  • fix(dashboard): third adversarial review — bugs, UX, a11y, perf by @jelveh in #4310
  • PUT-2252 by @ProgrammerIn-wonderland in #4311
  • fix(dashboard): fourth adversarial review — bugs, UX, a11y, perf by @jelveh in #4312
  • Revamp networking api with epoxy try 2 by @r58Playz in #3476
  • Fix/dashboard fifth review by @jelveh in #4313
  • docs: easy events recipe (PUT-1961) by @Salazareo in #3998
  • fix(dashboard): sixth adversarial review — bugs, UX, a11y, perf by @jelveh in #4314
  • feat(ai): MiniMax video generation (H3 and Hailuo) by @404oops in #4309
  • fix(dashboard): seventh adversarial review — bugs, UX, a11y, perf by @jelveh in #4326
  • feat(dashboard): show who shared each item in Files → Shared by @jelveh in #4327
  • feat(dashboard): show profile pictures on people avatars by @jelveh in #4328
  • docs: medium events recipes (PUT-1971) by @reynaldichernando in #4333
  • docs: easy/medium/hard networking recipes by @r58Playz in #4040
  • feat(kv): share KV prefixes with other users at watch/read/write, and bound what apps can be granted by @Salazareo in #4331
  • chore: bump ver by @Salazareo in #4335

New Contributors

Full Changelog: 26.10...26.10.1

Don't miss a new puter release

NewReleases is sending notifications on new releases.