A package to compile nim functions for AWS Lambda
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
img Update README screenshot Nov 29, 2018
README.md Can now install awslambda straight from nimble Nov 30, 2018
awslambda.nim Prefer deadline as a Time instead of just ms Nov 29, 2018
awslambda.nimble Prefer deadline as a Time instead of just ms Nov 29, 2018


Nim on AWS Lambda

Write your Lambda functions in nim using the custom runtime and get tiny binaries (250kb) and single-digit millisecond cold starts!

Log output

Function Example

Create a bootstrap.nim with the following:

import awslambda, json, times

proc handler(event: JsonNode, context: LambdaContext): JsonNode =
  echo "Hi from nim! Invocation will timeout at: ", context.deadline.format("yyyy-MM-dd'T'HH:mm:ss'.'fff")

  event["newKey"] = %*"newVal"


when isMainModule:


# if you're using Linux, you probably don't need to compile in docker, but assuming you're not:

docker run --rm -v "$PWD":/app -w /app nimlang/nim \
  sh -c 'nimble install -y awslambda && nim c -d:release bootstrap.nim'

zip -yr lambda.zip bootstrap # and anything else your binary needs

Then upload lambda.zip as the function code for your (custom runtime) Lambda.



proc startLambda*(handler: proc(event: JsonNode, context: LambdaContext): JsonNode)

This processes the event processing loop and takes a handler proc that should take the form:

proc handler(event: JsonNode, context: LambdaContext): JsonNode


Each invocation will also have the following context object populated:

  LambdaContext* = tuple
    functionName: string
    functionVersion: string
    memoryLimitInMb: int
    logGroupName: string
    logStreamName: string
    awsRequestId: string
    invokedFunctionArn: string
    deadline: Time
    identity: JsonNode
    clientContext: JsonNode