Documentation menu

Quick Start

Four commands, sixty seconds. You'll have a running DynamoDB endpoint with data in it.

1. Start Dynoxide

dynoxide

That's it. It's listening on http://localhost:8000 with an in-memory database.

2. Create a table

aws dynamodb create-table \
  --table-name users \
  --attribute-definitions AttributeName=id,AttributeType=S \
  --key-schema AttributeName=id,KeyType=HASH \
  --billing-mode PAY_PER_REQUEST \
  --endpoint-url http://localhost:8000

3. Write an item

aws dynamodb put-item \
  --table-name users \
  --item '{"id":{"S":"1"},"name":{"S":"Ada"},"role":{"S":"engineer"}}' \
  --endpoint-url http://localhost:8000

4. Read it back

aws dynamodb get-item \
  --table-name users \
  --key '{"id":{"S":"1"}}' \
  --endpoint-url http://localhost:8000

You'll get back:

{
  "Item": {
    "id": { "S": "1" },
    "name": { "S": "Ada" },
    "role": { "S": "engineer" }
  }
}

Using it with SDKs

Any DynamoDB SDK works. Just point the endpoint to http://localhost:8000. Here's Python with boto3:

import boto3

dynamodb = boto3.resource(
    'dynamodb',
    endpoint_url='http://localhost:8000',
    region_name='us-east-1',
    aws_access_key_id='anything',
    aws_secret_access_key='anything'
)

table = dynamodb.Table('users')
table.put_item(Item={'id': '2', 'name': 'Grace'})

The access key and secret can be any non-empty string - Dynoxide doesn't check credentials.

Persistent storage

By default, data lives in memory and disappears when you stop the process. To persist it:

dynoxide --db-path data.db

Now your tables and items survive restarts. The file is a standard SQLite database.