Local development
Fast local development creates a tighter feedback loop maximizing developer velocity.
Requirements
- Platforms: Linux, macOS, Windows
 - Architect runtime: Node.js 14+
 - Function runtimes & package managers:
- Node.js (optional, supported versions) with 
npm6+ oryarn1+ - Python (optional, supported versions) and optionally 
pip3 - Ruby (optional, supported versions) and optionally 
bundle 
 - Node.js (optional, supported versions) with 
 
Preview
Follow the quickstart to get everything wired up. To preview a project running locally in a web browser:
cd myproject
npx arc sandbox
npx arc sandboxkicks up a local web server with all the resources defined in yourapp.arcfile
Testing
Checkout a complete example project for working locally.
Testing @http functions
Use @architect/sandbox as a module to test @http functions with Node:
const test = require('tape')
const tiny = require('tiny-json-http')
const sandbox = require('@architect/sandbox')
test('setup', async t=> {
  t.plan(1)
  await sandbox.start()
  t.ok(true, 'sandbox started on http://localhost:3333')
})
test('get /', async t=> {
  t.plan(1)
  let result = await tiny.get({ url: 'http://localhost:3333' })
  t.ok(result, 'got 200 response')
})
test('teardown', async t=> {
  t.plan(1)
  await sandbox.end()
  t.ok(true, 'sandbox ended')
})
Testing @events and @queues
Use @architect/functions to publish locally to @events or @queues for testing.
const test = require('tape')
const arc = require('@architect/functions')
const sandbox = require('@architect/sandbox')
test('setup', async t=>{
  t.plan(1)
  await sandbox.start()
  t.ok(true, 'started')
})
test('@events', async t=> {
  t.plan(1)
  // mock pingID
  let pingID = 'testing-ping'
  // send a ping event
  await arc.events.publish({
    name: 'ping',
    payload: { pingID }
  })
  // see if testing-ping is in the db
  let data = await arc.tables()
  let { hits } = await data.pings.get({ pingID })
  t.ok(hits, 'pong!')
})
test('teardown', async t=>{
  t.plan(1)
  await sandbox.end()
  t.ok(true, 'closed')
})
Testing @tables
Using @architect/functions to interact with DynamoDB @tables defined locally.
const test = require('tape')
const arc = require('@architect/functions')
const sandbox = require('@architect/sandbox')
test('setup', async t=>{
  t.plan(1)
  await sandbox.start()
  t.ok(true, 'started')
})
test('db', t=> {
  t.plan(1)
  let data = await arc.tables()
  let cats = await data.cats.scan({})
  t.ok(Array.isArray(cats.Items), 'bag o cats')
})
test('teardown', async t=>{
  t.plan(1)
  await sandbox.end()
  t.ok(true, 'closed')
})