v3.4.0
Everything upstream has done since the fork, brought in. 41 of gitroomhq/postiz-app's 42 post-fork commits, across eight PRs.
The one that mattered most
Large videos no longer go through memory. Provider uploads read the whole file into a Buffer before sending it — on a container capped at 4 GB and already sitting at 2.2 GB, with backend, frontend and orchestrator all inside it. One large upload could take the application down, not just the upload. Eleven providers now stream the range they are about to send.
Publishing correctness
A post can no longer be published twice. Some platforms accept a post and confirm it later; publishing against them blind is how the same content reaches an audience twice. There is now a publish-then-confirm contract, implemented across twelve providers.
Publishing an already-published post needs an explicit opt-in. Saving one as a schedule used to clear its release id and start the workflow again. The confirmation now names the channel and the original publish date, and says so when the post recurs.
Google Business posts that Google answered with REJECTED, or with a non-JSON body, were recorded as published. Pinterest video pins uploaded whatever media happened to be first rather than the mp4. Reddit parsed its upload response without a guard. AI video generation hung forever when the provider reported a failure.
Security
SSRF protection reaches the paths that use axios rather than fetch, and the media and webhook fetches pin DNS at request time rather than trusting what was resolved at save time.
Sign-in and accounts
Email lookups are case-insensitive for login, password reset and impersonation — anyone who registered as Ali@… and later typed ali@… could not get in. The organization switcher shows each member's role, and the Developers screen names the organization an OAuth app will belong to.
New
Admin coupon tools for support, X's article format, and admin statistics per platform. Sentry now has user, organization and Stripe customer context ready for whenever it is switched on.
Not taken
One commit, 48bf76af, points the security policy at upstream's own advisory intake. Reporting a vulnerability in this product should not route to a different company.
Upgrading
No schema change and no manual Temporal step. Post workflows are per-post: new posts use v1.0.7 while anything already in flight keeps replaying the version it started with.
How the sync is done, and why dependency versions are held in step with upstream, is written down in docs/upstream-sync.md.
Full diff: v3.3.3...v3.4.0