DynamoDB Local: Failed to load native library sqlite4java

TL;DR — O motor de armazenamento do DynamoDB Local carrega uma biblioteca nativa (sqlite4java) na inicialização, e a JVM ou não consegue encontrá-la ou não consegue executá-la. Duas causas clássicas: você lançou o jar sem -Djava.library.path=./DynamoDBLocal_lib, ou você está em um Mac com Apple Silicon e o binário empacotado é para x86_64. Aponte a JVM para a pasta de bibliotecas nativas, atualize para um DynamoDB Local atual, ou rode a imagem Docker multi-arch.

O que significa

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
# Unable to start DynamoDB Localnative library load failure

O DynamoDB Local é uma aplicação Java cujo armazenamento em disco é sustentado por uma biblioteca nativa (por SO, por arquitetura). UnsatisfiedLinkError é a JVM dizendo que não conseguiu linkar aquele binário — ou ele não está no library path de jeito nenhum, ou o arquivo existe mas foi compilado para um SO/CPU diferente da sua JVM. O emulador não consegue iniciar sem ele.

Por que isso acontece

  • -Djava.library.path ausente — o download traz as bibliotecas nativas em DynamoDBLocal_lib/, e o comando de lançamento documentado precisa apontar a JVM para lá. Rodar java -jar DynamoDBLocal.jar sozinho (ou de um diretório de trabalho diferente) as perde.
  • Apple Silicon (série M) + uma nativa x86_64 — builds e wrappers mais antigos do DynamoDB Local empacotam apenas binários Intel libsqlite4java-osx; uma JVM ARM64 se recusa a carregá-los ("no matching architecture").
  • Um wrapper fixando uma cópia antigajest-dynamodb, serverless-dynamodb-local e ferramentas similares baixam seu próprio DynamoDB Local; uma versão antiga cacheada mantém as nativas obsoletas por perto mesmo depois de você "atualizar".
  • Nativas extraídas para um dir temporário que foi limpo — alguns setups descompactam em uma pasta temporária que o SO limpa, então funciona até o reboot.

Como corrigir

  1. Lance-o da forma documentada, a partir da pasta extraída:

    java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
  2. Atualize o DynamoDB Local — baixe a versão atual; builds mais novos resolvem a situação do Apple Silicon que atormentava os antigos. Se um wrapper gerencia a instalação, limpe o cache/reinstale para que ele realmente busque a nova versão.

  3. Ou contorne os nativos de vez com o Docker — a imagem amazon/dynamodb-local é o caminho menos frágil e roda no Apple Silicon:

    docker run -p 8000:8000 amazon/dynamodb-local
  4. No Apple Silicon com um build antigo que você não pode trocar: rode um JDK x86_64 sob o Rosetta 2 (aí os nativos Intel batem com a JVM) ou substitua o libsqlite4java-osx.dylib pelo build ARM64 do sqlite4java publicado pela comunidade.

  5. Válvula de escape em memória: o -inMemory ainda precisa da biblioteca nos builds atuais — ele não é uma solução para um nativo ausente; corrija o path/arquitetura.

Abra no DynoTable

Assim que o Local subir, conecte-se pelo DynoTable — Configurações → Perfis → endpoint http://localhost:8000, qualquer string de região, credenciais fictícias e então Testar conexão. Abra as tabelas com dados de seed usando ⌘K sem escrever um script de conectividade.

Prepare os dados de seed com o conversor de JSON. Consulte Instalar e Conectar ao AWS para o caminho completo de configuração do Local.

Fontes

Erros relacionados

Referências

Última verificação em 13/07/2026 em relação à documentação oficial da AWS vinculada acima.

Trabalhe com o DynamoDB sem o Console

Um cliente desktop rápido para DynamoDB que roda o SQL de verdade que o DynamoDB não consegue — JOINs, GROUP BY, agregações — com edição visual e um agente de IA com suas próprias chaves do Bedrock.

Teste grátis de 30 dias, sem cartão de crédito — depois o plano Grátis sem limite de tempo.