AWS Credentials

There are three ways to specify AWS credentials:

  • .aws/credentials
  • Environment Variables
  • AWS.config

Dynamoose Object

const dynamoose = require('dynamoose');

dynamoose.model(name, schema[, options])

Compiles a new model or looks up an existing one. options is optional.

Default options:

  create: true, // Create table in DB, if it does not exist
  update: false, // Update remote indexes if they do not match local index structure
  waitForActive: true, // Wait for table to be created before trying to use it
  waitForActiveTimeout: 180000, // wait 3 minutes for table to activate
  streamOptions: { // sets table stream options
    enabled: false, // sets if stream is enabled on the table
    type: undefined // sets the stream type (NEW_IMAGE | OLD_IMAGE | NEW_AND_OLD_IMAGES | KEYS_ONLY) (
  serverSideEncryption: false, // Set SSESpecification.Enabled (server-side encryption) to true or false (default: false)
  defaultReturnValues: 'ALL_NEW' // sets ReturnValues for the UpdateItem operation (NONE | ALL_OLD | UPDATED_OLD | ALL_NEW | UPDATED_NEW) (

Basic example:

const Cat = dynamoose.model('Cat', {
  id: Number,
  name: String

streamOptions: object (optional)

Indicates whether stream is enabled or disabled on the table and dictates which type of stream the table should have. This is passed into into the StreamSpecification option property when creating the table.

serverSideEncryption: boolean

Indicates whether server-side encryption is enabled (true) or disabled (false) on the table. This boolean will be passed into the SSESpecification.Enabled option property when creating the table. Currently (when feature was implemented) DynamoDB doesn't support updating a table to add or remove server-side encryption, therefore this option will only be respected on creation of table, if table already exists in DynamoDB when using Dynamoose this value will be ignored.

const model = dynamoose.model('Cat', {...}, {
  streamOptions: {
    enabled: true,
    type: "NEW_AND_OLD_IMAGES"
  serverSideEncryption: true


Configure Dynamoose to use a DynamoDB local for testing. url defaults to 'http://localhost:8000'.



Configures and returns the AWS.DynamoDB object.


AWS object for Dynamoose. Used to configure AWS for Dynamoose.

  accessKeyId: 'AKID',
  secretAccessKey: 'SECRET',
  region: 'us-east-1'


Function to set the DynamoDB object that Dynamoose uses.

const AWS = require('aws-sdk');
const dynamoDB = new AWS.dynamoDB();


Function to revert the DynamoDB object that Dynamoose uses to the default.



Sets the default to be used when creating a model. Can be modified on a per model by passing options to .model().

Default options:

  create: true // Create table in DB if it does not exist
  prefix: '', // Default prefix for all DynamoDB tables
  suffix: '' // Default suffix for all DynamoDB tables

It is recommended that create be disabled for production environments.

dynamoose.setDefaults({create: false});


The Dynamoose Schema class, used to create new schema definitions. For example:

const appleSchema = new dynamoose.Schema({
  id: Number,
  type: String


Table class

AWS X-Ray Support

You can achieve Amazon Web Services X-Ray support using a configuration similar to the following.

const AWSXRay = require('aws-xray-sdk');
const dynamoose = require('dynamoose');
dynamoose.AWS = AWSXRay.captureAWS(require('aws-sdk'));


Sets the document client for DynamoDB. This can be used to integrate with Amazon Web Services DAX.

dynamoose.transaction(items[, options][, cb])

Allows you to run DynamoDB transactions. Accepts an array as the items parameter. You can pass in a RAW DynamoDB transaction object, or use the Dynamoose Model.transaction helper methods.

  User.transaction.update({id: "user1"}, {$ADD: {balance: -100}}),
  Charge.transaction.create({userid: "user1", product: "product1", amount: 100, status: "successful"}),
  Product.transaction.update({id: "product1"}, {$ADD: {inventory: -1}}),
  Credit.transaction.delete({id: "credit1"}),
    Delete: {
      Key: {
        id: {
          S: 'helloworld'
      TableName: 'MyOtherTable'
]).then(function (result) {
}).catch(function (err) {

If you use a custom RAW DynamoDB transaction object, you must have created a corresponding model in Dynamoose.

options properties:

  • type (string): The type of transaction Dynamoose will run. Can either be "get", or "write". By default if all of your items are of type "get", it will default to "get", otherwise, will default to "write".