DynamoDB Local: Failed to load native library sqlite4java
TL;DR — DynamoDB Local's storage engine loads a native library (sqlite4java) at startup, and the JVM either can't find it or can't run it. Two classic causes: you launched the jar without -Djava.library.path=./DynamoDBLocal_lib, or you're on an Apple Silicon Mac and the bundled binary is for x86_64. Point the JVM at the native-lib folder, update to a current DynamoDB Local, or run the multi-arch Docker image.
What it means
Failed to load native library:'libsqlite4java-osx-1.0.392.dylib'. ...
java.lang.UnsatisfiedLinkError: no sqlite4java-osx-x86_64-1.0.392 in java.library.pathDynamoDB Local is a Java application whose on-disk storage is backed by a native (per-OS, per-architecture) library. UnsatisfiedLinkError is the JVM saying it could not link that binary — either it's not on the library path at all, or the file exists but was built for a different OS/CPU architecture than your JVM. The emulator can't start without it.
Why it happens
- Missing
-Djava.library.path— the download ships the natives inDynamoDBLocal_lib/, and the documented launch command must point the JVM there. Runningjava -jar DynamoDBLocal.jarbare (or from a different working directory) loses them. - Apple Silicon (M-series) + an x86_64 native — older DynamoDB Local builds and wrappers bundle only Intel
libsqlite4java-osxbinaries; an ARM64 JVM refuses to load them ("no matching architecture"). - A wrapper pinning an old copy —
jest-dynamodb,serverless-dynamodb-local, and similar tools download their own DynamoDB Local; a cached old version keeps the stale natives around even after you "update". - Natives extracted to a temp dir that got cleaned — some setups unpack into a temp folder the OS clears, so it works until reboot.
How to fix it
Launch it the documented way, from the extracted folder:
java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDbUpdate DynamoDB Local — download the current release; newer builds resolve the Apple Silicon situation that plagued older ones. If a wrapper manages the install, clear its cache/reinstall so it actually fetches the new version.
Or sidestep natives entirely with Docker — the
amazon/dynamodb-localimage is the least fragile path and runs on Apple Silicon:docker run -p 8000:8000 amazon/dynamodb-localOn Apple Silicon with an old build you can't change: run an x86_64 JDK under Rosetta 2 (the Intel natives then match the JVM), or replace
libsqlite4java-osx.dylibwith the community-published ARM64 build of sqlite4java.In-memory escape hatch:
-inMemorystill needs the library in current builds — it is not a workaround for a missing native; fix the path/arch instead.
Once the emulator is up, point your tools at it — the DynoTable desktop app connects to DynamoDB Local at http://localhost:8000 so you can create tables and inspect data without writing a script. Use the DynamoDB JSON converter to prep seed items in the wire format.
Related errors
- Unable to start DynamoDB Local process — the umbrella startup failure this often hides inside.
- DynamoDB Local port 8000 in use
- Could not connect to DynamoDB Local
- Learn: Running DynamoDB Local
References
- Deploying DynamoDB locally on your computer — AWS DynamoDB Developer Guide (the documented
java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jarlaunch command) - DynamoDB local usage notes — AWS DynamoDB Developer Guide (
-sharedDb,-inMemoryand the other runtime options) - amazon/dynamodb-local — Docker Hub (official multi-architecture image — amd64 + arm64, so it runs natively on Apple Silicon)
Last verified 2026-07-13 against the official AWS documentation linked above.