Changelog

Release archive

Older Pushify releases. The latest updates live on the main changelog.

v0.2.0-beta.99

Dashboard

Added

  • Settings → Delete. - The owner can delete the organization. The dialog lists what happens now and after 30 days, the managed and connected servers, domains (with a pointer to transfer codes), the remaining wallet balance ("write to support to have it refunded"), and that included credit is not refunded. It links to database backups. - Any user can delete their account. - Both require the typed name or email, the password, and a 2FA code when 2FA is on. - The result lists commands for any connected server that could not be reached.
  • A banner on every dashboard page while the organization waits to be deleted. The owner gets a Restore link.
  • Restore screen at sign-in. An account scheduled for deletion gets a "Restore account" screen at sign-in, whether it signs in with a password, 2FA, GitHub, Google or SSO.

Changed

  • The server delete dialog's command box is now a shared CommandLine component.

v0.2.0-beta.98

Dashboard

Added

  • /exit-plan (EN + TR): - Commits to at least 90 days notice by email and on the site before the hosted service shuts down, with the dashboard, API and exports working throughout. - Says what keeps running on your own servers without Pushify, and what stops. - Explains how to take each kind of data (env vars, database backups, logs, managed servers). - Explains how to move to self-hosted Pushify. - Lists what is not there yet: account deletion, settings export, static-site download, image push, unmasked secrets. - Linked from the footer and the sitemap.

Fixed

  • /security, /contact and /exit-plan now follow the public site's dark theme like the other legal pages.

v0.2.0-beta.97

Dashboard

Added

  • /vs/dokploy, with every Dokploy fact checked against dokploy.com, docs.dokploy.com and GitHub on September 29, 2026. - Sources are linked under the table. - It covers the hosted plans, licensing (Apache-2.0 plus DSAL for enterprise features since January 2026), scaling, zero-downtime defaults, clustering and templates. - It says plainly where Dokploy is ahead. - It is linked from the footer, /alternatives and the sitemap. The temporary redirect to /alternatives is removed.
  • Comparison pages can list their sources under the table.

v0.2.0-beta.96

Dashboard

Added

  • Try Pushify without a server. - The homepage hero has a one-line link: upload a static site and get a https://…pushify.dev address. - /pricing has a "Try it without a server" row under the plans. It says the site is static only, up to 50 MB, works on every plan including Free, and counts as one project. - Both links open the new-project wizard on the upload step. Visitors sign up first and land there afterwards.
  • The new-project wizard accepts ?source=upload.

v0.2.0-beta.95

Dashboard

Added

  • Deleting a connected server when Pushify cannot reach it: the dialog now shows the one-line command that removes Pushify's SSH key from the server, plus the uninstall script command. Both have a copy button. Needs backend 0.2.0-beta.84.

Changed

  • /security, "What Pushify does on your server": now separates connected servers from servers Pushify creates. - The ufw reset and the nginx.conf replacement happen only on servers Pushify creates. nginx.conf is now backed up first. - Pushify's key is removed automatically when a connected server is deleted. - Documents the manual command and the uninstall script.

v0.2.0-beta.94

Dashboard

Fixed

  • `/.well-known/security.txt` returned 404 in production. It is now served by a route (with a rewrite from the RFC 9116 path) instead of a file in public/.well-known.

v0.2.0-beta.93

Dashboard

Changed

  • Downgrades are scheduled for the end of the billing period. Choosing a lower plan (or another billing cycle on the same plan) keeps the current plan and its included credit until the period ends; the confirmation says so, and the billing page shows "Changes to {plan} on {date}" with a "Keep current plan" button. Upgrades still apply immediately. Needs backend beta.82.

v0.2.0-beta.92

Dashboard

Changed

  • Refund policy 3.4, included server credit. A refund within the 14-day guarantee is reduced by the included server credit already used (never by more than the plan's credit for that month); unused included credit is removed. EN and TR.

v0.2.0-beta.91

Dashboard

Added

  • Monthly included server credit on `/pricing` and in the wallet. Plan cards state the credit (Hobby $9, Pro $18, Business $45 every month); Hobby shows "A 2 vCPU / 4 GB server, included" while the live price list confirms it fits. The wallet shows this month's remaining credit and reset date, and server charges covered by the credit say so. Needs backend beta.79.

v0.2.0-beta.90

Dashboard

Fixed

  • Server creation no longer opens on a region you cannot use. The create-server forms hide regions where your plan cannot create any in-stock server (for example Hobby in Nuremberg while its entry server is sold out there) and preselect the first region that works. Needs backend beta.78.

v0.2.0-beta.89

Dashboard

Added

  • X account linked. The footer links to @pushifydev, and the Organization structured data lists it.

v0.2.0-beta.88

Dashboard

Fixed

  • Heroku comparison. The last "one flat monthly price" line now matches the rest of the site: a fixed monthly plan for the platform, and managed servers at a fixed hourly rate from prepaid credits (EN and TR).

v0.2.0-beta.87

Dashboard

Added

  • Largest managed server per plan on `/pricing`. Derived from the same live rows as the price table, so it always equals what each plan can create (Falkenstein, 2026-09-29: Hobby 2 vCPU / 4 GB, Pro 2 vCPU / 4 GB, Business 8 vCPU / 16 GB; Enterprise on request).

v0.2.0-beta.86

Dashboard

Changed

  • API types match backend beta.76. Server size options, the infra wallet summary and provider server types no longer declare provider cost, margin or provider list prices, which the API stopped sending. No visible change; nothing in the dashboard displayed them.

v0.2.0-beta.85

Dashboard

Fixed

  • Health checks on the Free plan. Plan tables said Free has no health checks, while every plan gets automatic uptime checks and down/recovery emails. The row is now "Custom health checks" (own endpoint, expected status and interval, Hobby and up), with a note under the comparison table.
  • Data retention. The pricing FAQ now says data is kept for at least 30 days after a plan lapses, matching the refund policy.

v0.2.0-beta.84

Dashboard

Fixed

  • Structured data. The price range in the homepage JSON-LD said $0–$13; it is now $0–$99 with one offer per listed plan (Free, Hobby, Pro, Business). inLanguage is en only, since Turkish is served on the same URLs by browser language and crawlers only see English.

v0.2.0-beta.83

Dashboard

Added

  • Managed server prices on `/pricing`. A table lists each managed tier with vCPU, RAM, disk, price per hour, approximate price per month and the cheapest plan that allows it, rendered on the server from the new public price endpoint (backend beta.75). If prices cannot be loaded, the section says they are shown in the dashboard before a server is created.

v0.2.0-beta.82

Dashboard

Fixed

  • Managed server billing described correctly. Comparison pages, /alternatives, /about and the blog said managed Hetzner servers have flat monthly prices; they are billed at a fixed hourly rate from prepaid credits, while the platform plan stays a fixed monthly fee (EN and TR).

v0.2.0-beta.81

Dashboard

Added

  • Repository hygiene. CODE_OF_CONDUCT.md (Contributor Covenant 2.1) and an issue template config that routes security reports to the private policy and support questions to /contact.

v0.2.0-beta.80

Dashboard

Changed

  • One signup label. "Get started free", "Start building free", "Start with Pushify" and similar variants are now "Start free" (Turkish: "Ücretsiz başla"); pricing plan buttons are unchanged.
  • `llms.txt` accuracy. Removed the unmeasured "under 60 seconds" claim and "data never touches third-party infrastructure"; framework count is 26 everywhere; all plans listed.
  • Blog example app corrected (Grafana is not in the catalog), en-US spelling, neutral example timezone in the pushify.yaml reference.

v0.2.0-beta.79

Dashboard

Fixed

  • Shared links always showed the homepage card. Twitter/X tags now come from each page's own Open Graph data.
  • Guessable URLs returned 404. /marketplace and /signup redirect permanently to /apps and /register; /cli, /guides, /vs/dokploy and /docs/* paths redirect temporarily until they get pages of their own.

Changed

  • Hero: eyebrow reads "Open-source PaaS for developers"; the secondary GitHub button reads "View on GitHub".

v0.2.0-beta.78

Dashboard

Added

  • `/security`, `/contact` and `/.well-known/security.txt`. The security page covers how to report a vulnerability (72h acknowledgement), what is and is not certified, account and secret protection, exactly what Pushify does on a server you connect (including the ufw reset and nginx config) and that removing a server does not yet remove Pushify's SSH key. The contact page lists support, sales, bug reports and the company address. Both are linked from the footer.

v0.2.0-beta.77

Dashboard

Fixed

  • Status page showed "Unknown" before JavaScript ran. The page now reads the API health probe on the server (30s cache, falls back to the browser probe), so the first HTML — what crawlers and link previews see — shows the real state. Probe latency is displayed again (the API reports responseTime).

v0.2.0-beta.76

Dashboard

Fixed

  • Competitor claims corrected. The homepage/pricing FAQ said Coolify lacks team collaboration and a hosted option (it has both); /vs/railway said Railway Pro is $20 per seat (it is $20 per workspace with unlimited seats); /alternatives listed CapRover as MIT (Apache-2.0) and Dokploy as source-available (Apache-2.0 open-core). /vs/render now reflects Render's April 2026 bandwidth and $25 Pro workspace pricing. Unverifiable lines were removed rather than reworded, and every comparison table note carries a "last checked" date. Same corrections in Turkish and in llms.txt.

v0.2.0-beta.87

Platform & API

Fixed

  • Server snapshots were never listed. Hetzner's bound_to filter only applies to backup images and returns nothing for snapshots. As a result: - the server page showed no snapshots and they could not be restored from it; - the per-plan snapshot limit was never enforced; - automatic snapshots were never pruned. Snapshots are now matched on created_from, across all pages.
  • Deleting a managed server leaves nothing billable behind. Its snapshots (which can only be restored onto that server) and the SSH key uploaded for it are removed too.

Changed

  • The snapshot limit now refuses a new snapshot instead of deleting old ones. Snapshots a server already has are kept, even over the limit (it was never enforced before). The weekly automatic snapshot never lowers the count: below the limit it adds one, and at the limit it replaces the oldest automatic snapshot. When every snapshot was taken by hand, it does nothing.

Added

  • npm run snapshots:over-limit (read-only): the managed servers over their plan's snapshot limit, and how many organizations they belong to.
  • npm run hetzner:leftovers: lists snapshots of deleted servers and pushify-* SSH keys no server uses. With --delete it removes them. Servers unknown to the database are reported and never touched.

v0.2.0-beta.86

Platform & API

Added

  • Permanent purge of deleted organizations and accounts. An hourly worker sends a reminder one week before the date, then purges once the date has passed. External resources are removed first: - managed servers at Hetzner, with their uploaded SSH key and every snapshot taken from them; - projects on shared runners; - *.pushify.dev DNS records; - off-site database backups (<remote>/<orgId>/); - Pushify's GitHub webhooks and app installation; - email forwards at the registrar; - the Stripe customer. The row goes last, and the cascade removes the rest. An account goes after its organizations, along with its sign-in history.
  • Billing facts are kept. The name, billing email, Stripe customer id and wallet ledger go into deleted_organizations for BILLING_RECORD_RETENTION_YEARS (default 10).
  • Failures: each step is recorded. A failed required step is retried and the admin is emailed after three attempts. A failed best-effort step (GitHub, registrar, DNS) does not block the purge.
  • npm run notify:admin: emails ADMIN_NOTIFY_EMAILS from shell scripts, e.g. when the nightly control-plane backup fails.

Changed

  • Pre-deploy database dumps (scripts/db-backup.sh) are also removed after 14 days, not only beyond the newest 7.
  • Control-plane off-site backups (backup-control-plane.sh) are kept for 30 days instead of 60.

v0.2.0-beta.85

Platform & API

Added

  • Organization and account deletion, with a 30-day grace period. - The owner can delete an organization and any user can delete their account. Both need the typed name or email, the password, and a 2FA code when 2FA is on. - A request takes effect immediately: - the subscription is cancelled with no proration or final invoice; - API keys are revoked; for an account, sessions and Git tokens are revoked too; - included credit is reset and domain auto-renew is turned off; - projects on shared runners are paused and managed servers are powered off; - Pushify's SSH key is removed from connected servers and the credentials stored for them are wiped. Apps on the user's own server keep running. - An email gives the date, any manual key-removal commands and the remaining wallet balance. - The owner can restore the organization within 30 days; it comes back unlocked on Free. An account pending deletion cannot sign in. Sign-in returns a short-lived token that restores the account and the organizations scheduled with it. - An account that owns an organization with other members cannot be deleted. - A pending organization is read-only for every member. Only restoring, leaving, signing out and getting a domain transfer code still work. - Migration 0063_account_deletion (additive). organization_members.invited_by becomes ON DELETE SET NULL.
  • API errors can carry a specific code and details, e.g. ACCOUNT_PENDING_DELETION with a restore token.

Changed

  • customer.subscription.deleted no longer suspends an organization that is pending deletion again, and no longer sends it the "services paused" email.

v0.2.0-beta.84

Platform & API

Added

  • Deleting a connected server removes Pushify's SSH key from it. Pushify connects as root, removes only its own key from authorized_keys and leaves every other key alone. If the server cannot be reached within 10 seconds, the deletion still completes and the response carries the one-line command to remove the key by hand.
  • `scripts/server-uninstall.sh` removes what Pushify put on a server: its SSH keys, pushify-* containers and network, nginx sites, firewall openings, runner isolation rules and /opt/pushify. It closes only Pushify's app ports (3001-4000) and leaves 22, 80 and 443 open unless --close-web-ports is given; port 22 is never touched. Supports --dry-run, --keep-apps and --keep-data. Docker volumes, Docker, nginx, certbot and certificates are left in place.

Changed

  • Servers Pushify creates keep the distribution's /etc/nginx/nginx.conf as nginx.conf.pushify-backup before replacing it; the uninstall script restores it.

v0.2.0-beta.83

Platform & API

Fixed

  • Late or out-of-order Stripe webhooks can no longer roll billing back. Subscription, invoice and schedule events are now applied using the object as Stripe reports it at that moment, not the copy in the event. A stale update cannot restore an older plan, grant or remove included credit, or mark a paid-up organization past due.

v0.2.0-beta.82

Platform & API

Changed

  • Downgrades take effect at the end of the billing period. The current plan (and its included credit) continues until the period ends, then the lower plan starts, with no prorated refund — as the refund policy already said. Switching billing cycle on the same plan works the same way. Upgrades still apply immediately. A scheduled change can be cancelled (POST /billing/cancel-scheduled-change), is replaced by an upgrade, and is cleared when the subscription is cancelled. The pending change follows the Stripe subscription schedule, including edits made in the Stripe dashboard.

Database

  • Migration 0062_scheduled_plan_change (additive): organizations.pending_plan, pending_billing_interval, pending_change_at, stripe_schedule_id.