Where did serverless functions go in 2025.2?
TL;DR — 2025.2 cannot express serverless functions; 2026.03 reintroduced them (appFunctions), but apps that ship them only install on Enterprise portals. 2025.1, the old workaround, closed to uploads on August 1, 2026. Two paths remain: migrate to 2026.03 and accept the install gate, or port the functions to a runtime you own. hs-x migrate automates the second onto your own Cloudflare account.
What happened to serverless functions in 2025.2?
HubSpot's platform versions are not a straight line of accumulating features. Per the versioning docs, 2025.2 rebuilt app distribution and the projects framework, and shipped without serverless function support. Teams whose apps depended on functions were told to stay on 2025.1. Then 2026.03 reintroduced full serverless support for project-built apps.
So “where did they go” has a precise answer: there is a one-version gap (2025.2) in which functions cannot exist. It was bracketed by a version you could linger on (2025.1, until its August 1, 2026 deprecation) and a version you can move to (2026.03). That first bracket is now closed: uploads at 2025.1 fail, so an app still there keeps running as deployed but cannot ship a change until it migrates. The migration-path overview confirms the remaining lanes: 2025.2 is supported through March 2027 but functionless; 2023.x is sunset.
Should I migrate to 2026.03 and use appFunctions?
This is HubSpot's intended path, and for an app whose customers are all on Enterprise it's the right one. 2026.03 functions are server-side JavaScript executed in HubSpot's infrastructure: private functions, public endpoints, first-class UI-extension wiring, npm packages, test-account support.
The commercial catch, straight from the overview doc: an app that includes serverless functions can only be installed on Enterprise-subscription portals (and public endpoints additionally require Content Hub Enterprise). During development a test account works fine; the gate applies to your customers at install time. If your install base includes Professional-tier portals, shipping your backend as HubSpot functions makes part of your market unable to install your app. Check this before you migrate, not after.
One more caveat, straight from HubSpot's migration guide: it describes 2026.03 serverless functions as support “for apps with static auth”, while the versioning and serverless pages say “project-built apps”. If your app is OAuth-distributed, confirm function support for your auth type on a test account before betting the migration on it.
Should I run the functions on infrastructure I own?
The other path is the one HubSpot's docs won't write for you: take the logic out of HubSpot's function runtime entirely. Your UI extensions can call any backend over HTTPS (hubspot.fetch()), and webhooks can target any URL. The function body you wrote for HubSpot's runtime is almost always a plain request handler that reads parameters, calls HubSpot or external APIs, and returns JSON — which runs anywhere.
What you gain: no Enterprise install gate for your backend, no HubSpot function limits, real observability, and independence from the next platform-version reshuffle. What you take on: hosting it (and authenticating requests yourself).
This is exactly the shape HS-X automates. hs-x migrate inspect reads your app's function definitions and classifies what converts automatically versus what needs review — functions that expose public endpoints get flagged rather than silently converted, because their auth contract changes when they leave HubSpot's runtime. The generation engine then turns each portable app function into a typed capability in a Cloudflare Workers project, deployable to your own Cloudflare account with hs-x deploy. The handler is a documented stub: you paste the body in, change context.parameters reads to input, and verify it in hs-x dev.
hs-x migrate inspect ./my-app # classify: what converts, what needs review (exit 1 while review items remain)
hs-x migrate run ./my-app --out ./my-app-hsx # generate the Workers dupe (endpoint functions are flagged, not ported)
cd my-app-hsx && bun install && hs-x dev # run + test the handlers locally and liveThe result is leaveable by construction: the generated app runs in your Cloudflare account, HubSpot talks to it over plain HTTPS, and no future platform version can take the runtime away again.
Which one should you pick?
- All-Enterprise customer base, simple functions → HubSpot-hosted. Stay fully inside HubSpot; take the 2026.03 migration.
- Mixed-tier customers, or functions that are really an API → your own runtime. A marketplace app with any Professional-tier installs cannot afford the Enterprise gate, so that alone decides it.
- Still on 2025.1 today → you are past the deadline, not ahead of it; migrate now, and land on 2026.03, not 2025.2, so the functions question is settled in the same move.
Last updated: August 27, 2026. Sourced from HubSpot's platform versioning and serverless functions overview pages. Refreshed whenever HubSpot ships a new platform version.