AWS Lambda Layers: The Community Registry That AWS Forgot to Build
Hook
AWS launched Lambda Layers in 2018 to solve dependency hell in serverless functions, but forgot one critical piece: a way to find the thousands of public layers the community built. That’s where awesome-layers comes in.
Context
When AWS introduced Lambda Layers, they promised a revolution in serverless development: share runtimes, dependencies, and utilities across functions without bloating deployment packages. Want to run PHP on Lambda? Build a layer. Need FFmpeg for video processing? Layer. Chrome for web scraping? Layer.
The problem? AWS never built a searchable marketplace for public layers. Unlike Docker Hub or npm, there’s no central registry where developers can discover what already exists. You’re left Googling “AWS Lambda Chrome layer” and hoping someone published one with a public ARN. The awesome-layers repository fills this gap by manually curating a registry of dozens of production-ready and experimental layers, complete with ARNs, version badges, and GitHub links. With over 2,200 stars, it’s become the de facto directory for Lambda Layer discovery.
Technical Insight
The repository organizes layers into four strategic categories: Runtimes, Utilities, Monitoring, and Security. The Runtimes section is particularly fascinating—it showcases how Lambda’s provided runtime enables any language to run on AWS infrastructure. You’ll find official AWS labs projects like aws-lambda-cpp and aws-lambda-rust-runtime alongside community experiments in Bash, Crystal, Nim, and even joke languages like Brainfuck and LOLCODE.
The PHP layers deserve special attention because they demonstrate the real-world value. Before layers, running PHP on Lambda required complex custom runtimes or container workarounds. Now, thanks to Bref’s PHP layers, you can deploy Laravel or Symfony apps with a simple ARN reference:
# serverless.yml
functions:
web:
handler: public/index.php
layers:
- arn:aws:lambda:us-east-1:209497400698:layer:php-73:latest
runtime: provided
Bref publishes separate layers for PHP-CLI and PHP-FPM, recognizing that console commands need different configurations than web requests. The repository links directly to version-specific ARNs at runtimes.bref.sh for accessing these layers.
The Utilities section reveals another clever pattern: packaging heavyweight binaries that would otherwise bloat your deployment. Layers like FFmpeg bundle large binaries compiled specifically for Lambda’s Amazon Linux 2 environment. Without layers, you’d either exceed Lambda’s 50MB zipped deployment limit or struggle with compilation flags.
What makes this repository technically sophisticated is its use of dynamic version badges via the Globadge API. Instead of manually updating version numbers in markdown, entries like the Bash layer display real-time version info:

This badge queries the AWS Lambda API, fetches the latest published version, and renders it as an SVG. It’s a clever hack that keeps the list current without constant pull requests.
The repository also functions as a learning resource. It links to tutorials for creating layers with Serverless Framework, SAM, AWS Console, AWS CLI, and Stackery. The AWS CLI tutorial is particularly instructive for understanding layer anatomy:
# Create layer structure
mkdir -p layer/python
pip install requests -t layer/python
# Package and publish
cd layer
zip -r layer.zip .
aws lambda publish-layer-version \
--layer-name my-dependencies \
--zip-file fileb://layer.zip \
--compatible-runtimes python3.8
This simple example reveals the magic: layers are just zip files with a specific directory structure (python/, nodejs/, etc.) that Lambda unpacks into /opt at runtime. Your function code can import from these directories without knowing they’re externalized.
One underappreciated aspect is the Monitoring section, which catalogs observability layers from providers like IOpipe, Datadog, Thundra, and New Relic. These layers inject tracing SDKs without modifying your code—they use Lambda’s runtime wrapper scripts to intercept invocations. It’s the difference between sprinkling @trace decorators everywhere and getting distributed tracing for free.
Gotcha
The repository’s biggest limitation is inherent to its design: it’s a manually curated list, not automated infrastructure. When a layer maintainer abandons a GitHub repo or stops publishing updates, the awesome-layers entry doesn’t automatically flag it as deprecated. You might reference an ARN only to discover it points to a two-year-old version with known vulnerabilities.
Region specificity is another sharp edge. ARNs are hardcoded to specific regions (usually us-east-1), and while the README tells you to substitute <region>, many layers aren’t published to all AWS regions. The Perl runtime, for example, only lists us-east-1 in the main table. You’ll need to check the linked GitHub repo to see if your region is supported—and sometimes the answer is “build it yourself.”
There’s also zero quality vetting. A layer that renders a badge doesn’t guarantee it’s production-ready, maintained, or secure. The Brainfuck and LOLCODE runtimes are explicitly marked as toys (“Built for fun, will not process events!”), but other entries lack this honesty. You’re responsible for auditing the source code, checking commit freshness, and evaluating whether the layer maintainer has the expertise to compile binaries correctly for Lambda’s environment. Using a random layer without verifying its provenance is how supply chain attacks happen.
Verdict
Use awesome-layers if you’re prototyping serverless applications, evaluating whether a layer-based approach fits your architecture, or need a quick way to run non-native languages on Lambda without rolling your own runtime. It’s invaluable for discovering solutions you didn’t know existed—like the fact that someone already published layers for Apache Tika, better-sqlite3, or AWS CLI utilities. Skip it if you’re building regulated workloads (healthcare, finance) that require vendor SLAs, security attestations, or guaranteed maintenance. For production systems, treat this as a shopping list for ideas, then fork the GitHub repos and publish your own vetted versions to private layer ARNs. The real value isn’t the ARNs themselves—it’s the discovery that these solutions exist and have working implementations you can learn from.