Salesforce Functions WAS an elastic-compute service for running custom logic in Java / JavaScript / TypeScript outside the standard Apex governor limits. It was RETIRED on January 31, 2025. Existing Functions deployments stopped running on that date; new development should use Apex (for in-platform logic), External Services (for REST callouts), or Heroku (for elastic compute).
- Recognize that Salesforce Functions is retired
As of January 31, 2025, Salesforce Functions no longer runs. Existing deployments are inactive.
- Identify what your Functions did
Audit code in your sfdx project's functions/ directory. Each function had a specific purpose — bulk data processing, external API integration, complex computation.
- Pick the right replacement based on use case
Bulk data processing → Apex Batch / Queueable. External API → External Services + Apex callouts. Heavy compute → Heroku app called via REST. Long-running jobs → Heroku or External Service with async pattern.
- Migrate function logic to the chosen replacement
Re-implement in Apex / Heroku / external service. Update calling code to point at new endpoints / Apex methods.
- Test thoroughly in a sandbox
New approach has different behavior, latency, error handling — run end-to-end tests before production cutover.
- Decommission the old Functions configuration
Remove from sfdx project; clean up any references in calling code.
For Salesforce-internal heavy logic.
For declarative external API calls.
For elastic compute outside Salesforce.
For complex integration workflows.
- Salesforce Functions retired January 31, 2025. Documentation referencing it is outdated. Don't try to deploy new Functions — they don't run.
- Migration paths vary by use case. There's no one-to-one replacement; pick based on what the function actually did. Heroku is closest in spirit but has its own deployment model.
- Apex governor limits apply to Apex replacements. Functions code that relied on bypassing governor limits (heavy compute, large data) needs Heroku — Apex won't fit.