Custom runtime for lambda - example in main.zig
Find a file
Emil Lerch 183d2d912c
All checks were successful
Lambda-Zig Build / build (push) Successful in 1m31s
move to forgejo CI
2026-02-02 11:19:59 -08:00
.forgejo/workflows move to forgejo CI 2026-02-02 11:19:59 -08:00
src upgrade to zig 0.15 / rewrite build tooling as standalone CLI 2026-02-02 11:05:20 -08:00
tools/build upgrade to zig 0.15 / rewrite build tooling as standalone CLI 2026-02-02 11:05:20 -08:00
.gitignore out with AWS cli/in with the SDK 2024-08-27 16:29:43 -07:00
.mise.toml upgrade to zig 0.15 / rewrite build tooling as standalone CLI 2026-02-02 11:05:20 -08:00
.pre-commit-config.yaml upgrade to zig 0.15 / rewrite build tooling as standalone CLI 2026-02-02 11:05:20 -08:00
build.zig upgrade to zig 0.15 / rewrite build tooling as standalone CLI 2026-02-02 11:05:20 -08:00
build.zig.zon upgrade to zig 0.15 / rewrite build tooling as standalone CLI 2026-02-02 11:05:20 -08:00
lambdabuild.zig upgrade to zig 0.15 / rewrite build tooling as standalone CLI 2026-02-02 11:05:20 -08:00
LICENSE add license 2021-10-04 08:14:01 -07:00
README.md upgrade to zig 0.15 / rewrite build tooling as standalone CLI 2026-02-02 11:05:20 -08:00

lambda-zig: A Custom Runtime for AWS Lambda

This is a custom runtime built in Zig (0.15). Simple projects will execute in <1ms, with a cold start init time of approximately 11ms.

Custom build steps are available for packaging and deploying Lambda functions:

  • zig build awslambda_package: Package the Lambda function into a zip file
  • zig build awslambda_iam: Create or verify IAM role for the Lambda function
  • zig build awslambda_deploy: Deploy the Lambda function to AWS
  • zig build awslambda_run: Invoke the deployed Lambda function

Build options:

  • function-name: Name of the AWS Lambda function
  • payload: JSON payload for function invocation (used with awslambda_run)
  • region: AWS region for deployment and invocation
  • profile: AWS profile to use for credentials
  • role-name: IAM role name for the function (default: lambda_basic_execution)

The Lambda function can be compiled for x86_64 or aarch64. The build system automatically configures the Lambda architecture based on the target.

A sample project using this runtime can be found at https://git.lerch.org/lobo/lambda-zig-sample

Using the Zig Package Manager

To add Lambda package/deployment steps to another project:

  1. Fetch the dependency:
zig fetch --save git+https://git.lerch.org/lobo/lambda-zig
  1. Update your build.zig:
const std = @import("std");
const lambda_zig = @import("lambda_zig");

pub fn build(b: *std.Build) !void {
    const target = b.standardTargetOptions(.{});
    const optimize = b.standardOptimizeOption(.{});

    // Get lambda-zig dependency
    const lambda_zig_dep = b.dependency("lambda_zig", .{
        .target = target,
        .optimize = optimize,
    });

    const exe_module = b.createModule(.{
        .root_source_file = b.path("src/main.zig"),
        .target = target,
        .optimize = optimize,
    });

    // Add lambda runtime to your module
    exe_module.addImport("aws_lambda_runtime", lambda_zig_dep.module("lambda_runtime"));

    const exe = b.addExecutable(.{
        .name = "bootstrap",
        .root_module = exe_module,
    });

    b.installArtifact(exe);

    // Add Lambda build steps
    try lambda_zig.configureBuild(b, lambda_zig_dep, exe);
}

Note: The build function return type must be !void or catch/deal with errors to support the Lambda build integration.