From a8d4680580b5b7bba71b5695957a82bf2b993c53 Mon Sep 17 00:00:00 2001 From: vimtor Date: Wed, 11 Mar 2026 23:04:50 +0100 Subject: [PATCH] change default lambda runtime to nodejs24.x --- .changeset/default-nodejs24.md | 5 +++++ packages/sst/src/constructs/EdgeFunction.ts | 2 +- packages/sst/src/constructs/Function.ts | 4 ++-- packages/sst/src/constructs/Job.ts | 6 +++--- packages/sst/src/constructs/NextjsSite.ts | 4 ++-- packages/sst/src/constructs/SsrSite.ts | 2 +- packages/sst/src/constructs/Stack.ts | 2 +- packages/sst/src/constructs/deprecated/NextjsSite.ts | 6 +++--- packages/sst/test/constructs/Function.test.ts | 12 ++++++++++++ packages/sst/test/constructs/Job.test.ts | 2 +- 10 files changed, 31 insertions(+), 14 deletions(-) create mode 100644 .changeset/default-nodejs24.md diff --git a/.changeset/default-nodejs24.md b/.changeset/default-nodejs24.md new file mode 100644 index 000000000..70ca684b5 --- /dev/null +++ b/.changeset/default-nodejs24.md @@ -0,0 +1,5 @@ +--- +"sst": patch +--- + +Change the default Lambda runtime to `nodejs24.x` for all function-based constructs. diff --git a/packages/sst/src/constructs/EdgeFunction.ts b/packages/sst/src/constructs/EdgeFunction.ts index bdae2de38..ea1474d1d 100644 --- a/packages/sst/src/constructs/EdgeFunction.ts +++ b/packages/sst/src/constructs/EdgeFunction.ts @@ -108,7 +108,7 @@ export class EdgeFunction extends Construct { this.scope = props.scopeOverride || this; this.props = { - runtime: "nodejs18.x", + runtime: "nodejs24.x", timeout: 10, memorySize: 1024, ...props, diff --git a/packages/sst/src/constructs/Function.ts b/packages/sst/src/constructs/Function.ts index 0f2f6c649..c0184e2ab 100644 --- a/packages/sst/src/constructs/Function.ts +++ b/packages/sst/src/constructs/Function.ts @@ -228,7 +228,7 @@ export interface FunctionProps handler?: string; /** * The runtime environment for the function. - * @default "nodejs22.x" + * @default "nodejs24.x" * @example * ```js * new Function(stack, "Function", { @@ -880,7 +880,7 @@ export class Function extends CDKFunction implements SSTConstruct { .forEach((per) => { props = Function.mergeProps(per, props); }); - props.runtime = props.runtime || "nodejs22.x"; + props.runtime = props.runtime || "nodejs24.x"; if (props.runtime === "go1.x") useWarning().add("go.deprecated"); // Set defaults diff --git a/packages/sst/src/constructs/Job.ts b/packages/sst/src/constructs/Job.ts index e79a2e19a..d60497bf0 100644 --- a/packages/sst/src/constructs/Job.ts +++ b/packages/sst/src/constructs/Job.ts @@ -141,7 +141,7 @@ export interface JobProps { architecture?: "x86_64" | "arm_64"; /** * The runtime environment for the job. - * @default "nodejs18.x" + * @default "nodejs24.x" * @example * ```js * new Job(stack, "MyJob", { @@ -665,7 +665,7 @@ export class Job extends Construct implements SSTConstruct { }; const image = LinuxBuildImage.fromDockerRegistry( // ARM images can be found here https://hub.docker.com/r/amazon/aws-lambda-nodejs - dockerImageMap[architecture ?? "x86_64"][runtime ?? "nodejs18.x"] + dockerImageMap[architecture ?? "x86_64"][runtime ?? "nodejs24.x"] ); project.environment = { ...project.environment, @@ -804,6 +804,6 @@ export class Job extends Construct implements SSTConstruct { private convertJobRuntimeToFunctionRuntime() { const { runtime } = this.props; - return runtime === "container" ? "container" : "nodejs18.x"; + return runtime === "container" ? "container" : "nodejs24.x"; } } diff --git a/packages/sst/src/constructs/NextjsSite.ts b/packages/sst/src/constructs/NextjsSite.ts index 731660c3f..c64430421 100644 --- a/packages/sst/src/constructs/NextjsSite.ts +++ b/packages/sst/src/constructs/NextjsSite.ts @@ -272,7 +272,7 @@ export class NextjsSite extends SsrSite { ...baseServerConfig, handler: fn.handler, bundle: path.join(sitePath, fn.bundle), - runtime: this.props.runtime ?? ("nodejs18.x" as const), + runtime: this.props.runtime ?? ("nodejs24.x" as const), architecture: Architecture.ARM_64, memorySize: this.props.memorySize ?? 1536, environment: { @@ -311,7 +311,7 @@ export class NextjsSite extends SsrSite { function: { handler: fn.handler, bundle: path.join(sitePath, fn.bundle), - runtime: "nodejs18.x" as const, + runtime: "nodejs24.x" as const, memorySize: 1024, environment: { ...environment, diff --git a/packages/sst/src/constructs/SsrSite.ts b/packages/sst/src/constructs/SsrSite.ts index 6a8abb0f6..6e3bd3d46 100644 --- a/packages/sst/src/constructs/SsrSite.ts +++ b/packages/sst/src/constructs/SsrSite.ts @@ -1253,7 +1253,7 @@ function handler(event) { singletonUrlSigner ?? new EdgeFunction(self, "ServerUrlSigningFunction", { bundle: path.join(__dirname, "../support/signing-function"), - runtime: "nodejs18.x", + runtime: "nodejs24.x", handler: "index.handler", timeout: 10, memorySize: 128, diff --git a/packages/sst/src/constructs/Stack.ts b/packages/sst/src/constructs/Stack.ts index e82e1cf7e..261a17379 100644 --- a/packages/sst/src/constructs/Stack.ts +++ b/packages/sst/src/constructs/Stack.ts @@ -95,7 +95,7 @@ export class Stack extends CDKStack { * ```js * stack.setDefaultFunctionProps({ * srcPath: "backend", - * runtime: "nodejs18.x", + * runtime: "nodejs24.x", * }); * ``` */ diff --git a/packages/sst/src/constructs/deprecated/NextjsSite.ts b/packages/sst/src/constructs/deprecated/NextjsSite.ts index 290bff28d..aa6f0d61f 100644 --- a/packages/sst/src/constructs/deprecated/NextjsSite.ts +++ b/packages/sst/src/constructs/deprecated/NextjsSite.ts @@ -118,12 +118,12 @@ export interface NextjsSiteProps { permissions?: Permissions; /** * The runtime environment. - * @default "nodejs18.x" + * @default "nodejs24.x" * @example * ```js * new Function(stack, "Function", { * path: "path/to/site", - * runtime: "nodejs18.x", + * runtime: "nodejs24.x", * }) *``` */ @@ -1504,7 +1504,7 @@ export class NextjsSite extends Construct implements SSTConstruct { if (runtime === "nodejs20.x") { return lambda.Runtime.NODEJS_20_X; } - return lambda.Runtime.NODEJS_18_X; + return lambda.Runtime.NODEJS_24_X; } } diff --git a/packages/sst/test/constructs/Function.test.ts b/packages/sst/test/constructs/Function.test.ts index f0a75531e..efa42fd73 100644 --- a/packages/sst/test/constructs/Function.test.ts +++ b/packages/sst/test/constructs/Function.test.ts @@ -70,6 +70,18 @@ test("constructor: props with minimum config", async () => { countResources(stack, "AWS::Lambda::EventInvokeConfig", 0); }); +test("constructor: default runtime", async () => { + const app = await createApp(); + const stack = new Stack(app, "stack"); + new Function(stack, "Function", { + handler: "test/constructs/lambda.handler", + }); + await app.finish(); + hasResource(stack, "AWS::Lambda::Function", { + Runtime: "nodejs24.x", + }); +}); + test("constructor: props with full config", async () => { const stack = new Stack(await createApp(), "stack"); new Function(stack, "Function", { diff --git a/packages/sst/test/constructs/Job.test.ts b/packages/sst/test/constructs/Job.test.ts index d570ee3fc..632d17dae 100644 --- a/packages/sst/test/constructs/Job.test.ts +++ b/packages/sst/test/constructs/Job.test.ts @@ -52,7 +52,7 @@ test("constructor: default", async () => { Value: "/test/test/", }), ], - Image: "amazon/aws-lambda-nodejs:18", + Image: "amazon/aws-lambda-nodejs:24", Type: "LINUX_CONTAINER", }, TimeoutInMinutes: 480,