view .md
Answers · Migration

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. Your options: (1) migrate to 2026.03 and accept the install gate, (2) ride 2025.1 until its August 1, 2026 deadline — a dead end, or (3) port the functions to a runtime you own and call them over HTTPS. hs-x migrate automates option 3 onto your own Cloudflare account.

What actually happened

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, bracketed by a version you must leave (2025.1, hard deadline August 1, 2026) and a version you can move to (2026.03). The migration-path overview confirms the lanes: 2025.2 is supported through March 2027 but functionless; 2023.x is already sunset.

Option 1 — migrate to 2026.03 and use appFunctions

This is HubSpot's intended path, and for many apps 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.

Option 2 — stay on 2025.1

Mentioned for completeness, because the deadline makes it a non-plan: 2025.1 apps must migrate by August 1, 2026. Staying put buys months, not years, and you'll do the migration anyway — just under more time pressure. The only reason to deliberately sit on 2025.1 is if you're mid-migration already.

Option 3 — run the functions on infrastructure you own

The third 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 with its handler in a Cloudflare Workers project, deployable to your own Cloudflare account with hs-x deploy.

hs-x migrate inspect ./my-app     # classify: what converts, what needs review
hs-x migrate report ./my-app      # readiness summary + concrete next steps
hs-x dev                          # run + test the handlers locally and live

The 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 → Option 1. Stay fully inside HubSpot; take the 2026.03 migration.
  • Mixed-tier customers, or functions that are really an API → Option 3. The Enterprise gate alone decides this for most marketplace apps.
  • On 2025.1 today → either way, move before August 2026 — and if you're touching the app anyway, land on 2026.03, not 2025.2, so the functions question is settled.