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.path

DynamoDB 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 in DynamoDBLocal_lib/, and the documented launch command must point the JVM there. Running java -jar DynamoDBLocal.jar bare (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-osx binaries; an ARM64 JVM refuses to load them ("no matching architecture").
  • A wrapper pinning an old copyjest-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

  1. Launch it the documented way, from the extracted folder:

    java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
  2. Update 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.

  3. Or sidestep natives entirely with Docker — the amazon/dynamodb-local image is the least fragile path and runs on Apple Silicon:

    docker run -p 8000:8000 amazon/dynamodb-local
  4. On 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.dylib with the community-published ARM64 build of sqlite4java.

  5. In-memory escape hatch: -inMemory still 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.

References

Last verified 2026-07-13 against the official AWS documentation linked above.

Work with DynamoDB without the Console

DynoTable is a fast desktop client for DynamoDB — browse tables, run SQL-style queries, and edit items locally.