Up 0.3.0 — Custom domains, logging & stability improvements and more.

I’m back from a little vacation with a new release of Apex Up! This release introduces custom domains, domain purchasing from the command-line, improved logging support, and more. As usual, run up upgrade to update!

If you’re new to Up, it provides tooling enabling your team to deploy and manage “infinitely” scalable serverless apps, apis, and websites in seconds to your own infrastructure (currently supporting AWS Lambda).

Up lets you write vanilla applications using the framework(s) you already know and love, pay for only what you use, and never worry about infrastructure again.

Purchasing domains

Here’s an example of an unavailable domain, with suggestions:

And when it’s available:

If you decide that supersloths.com is your cool new startup, run up domains buy and fill out the brief interactive form to provide the registrar with your contact information.

Custom domains

"name": "example-site",
"stages": {
"production": {
"domain": "example.com"
"staging": {
"domain": "stage.example.com"

A second related project, such an API for your front-end might have the following configuration.

"name": "example-api",
"stages": {
"production": {
"domain": "api.example.com"

Note that if it’s a side project and you do not require staging or production environments, you could use “development” to streamline your workflow (requiring only up instead of up deploy production).

AWS ACM will send an email to the owner of the domain to confirm ownership for SSL certificate it generates. Up will wait until this is complete.

Click “I Approve” in the email and the command will resume!

Once complete, CloudFront may take up to 30–40 minutes to apply changes, as it has to distribute your configuration throughout the globe. Subsequent deploys are typically a second or two, depending on your connection speed. CloudFront is unfortunately very slow to initiate, but thankfully this is a one-time cost!

After that, you’re done!

External registrars

Once deployed, run up stack to view the status of your stack, and any nameservers associated with your mapped domain(s).

Here’s an example of the configuration for iwantmyname.com, however Godaddy and others will be very similar.

DNS propagation can take a moment, but otherwise you should be good to go!

Multi-line log capturing

ReferenceError: sloths is not defined
at repl:1:1
at ContextifyScript.Script.runInThisContext (vm.js:44:33)
at REPLServer.defaultEval (repl.js:239:29)
at bound (domain.js:301:14)
at REPLServer.runBound [as eval] (domain.js:314:12)
at REPLServer.onLine (repl.js:440:10)
at emitOne (events.js:120:20)
at REPLServer.emit (events.js:210:7)
at REPLServer.Interface._onLine (readline.js:279:10)
at REPLServer.Interface._line (readline.js:626:8)

JSON log capturing

All your app needs to do is output a level , message , and optional fields for contextual information:

"level": "info",
"message": "User Login",
"fields": {
"user_id": "sloth"

A minimalistic JavaScript logger for this format could be as simple as:

function log(level, message, fields = {}) {
const entry = { level, message, fields }

With the usage:

log('info', 'User Login', { user_id: "sloth" })

Check out a deployable example.

Log query units

up logs 'size >= 5kb'
up logs 'size >= 10.5mb'
up logs 'duration >= 500ms'
up logs 'duration >= 1.5s'

Log query stage short-hands

up logs 'stage = "production" and status >= 400'

Now you can use the stage shorthands stage , production , or development :

up logs 'production and status >= 400'

Hook arrays

"hooks": {
"build": [
"command 1",
"command 2",
"command 3"

Reverse proxy improvements

The reverse proxy now retries 5xx errors returned from your origin server, only when the request is idempotent (GET, HEAD, OPTIONS). You may disable this by setting proxy.retries to false.


  • add UP_STAGE env var. Closes #200
  • add environment variables to up start
  • add stage path support for defining a basepath (ex /v1 ) for a domain
  • add Lambda-specific logs to output (memory usage etc)
  • rename .proxy.timeout to .proxy.listen_timeout (BREAKING)
  • fix gzip handling when already compressed by the origin. Closes #328
  • fix permission issues for static file serving. Closes #385


The focus for v0.4.0 is on refactoring & UX, such as improving upload performance with multi-part S3, and working on the Pro version.

Up Pro will likely have an early-adopter price of around $25 USD / mo unlimited-use, with no additional cost per “seat” or team member, making it a cost-effective choice for any business. Pro will ship with features such as encrypted environment variables mapped by stage, alerting, uptime monitoring and more.

If you have questions or features you’d like to see, feel free to open an issue!

Code. Photography. Art.