Package Exports
- now/download/dist/now
- now/package.json
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (now) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme

Usage
Now enables instant immutable deployments to any cloud provider with a simple API that's scalable, intuitive and optimized for collaboration.
This is all it takes to deploy, for example, a Node.js project:
cd my-project
cat server.jsrequire('http').createServer((req, res) => {
res.end('▲ Hello World')
}).listen(process.env.PORT)and deploy!
nowThe output of the now command will be a unique url to the deployment. No need for git.
Features
- Single command deployment:
now. - 100% OSS and licensed under Apache 2.0
- Serverless. Worry about code, not servers.
- Immutable. Every time you write
now, a new deployment is provisioned. - Pluggable. Client can query any public and private cloud provider APIs
- Flexible. Interact with multiple clouds at once:
now gcp deploy && now aws deploy - Single command setup:
now [provider] login - Secure. All deployments are served over SSL
- Dynamic and Static. Deploy popular runtimes or static websites
- Remote fs support. Deploy any github project with
now project/repo, gitlab withgitlab://. PRs welcome!
Installation
To get the latest version, run this command:
npm install -g nowNote: while the API has been in production for over a year, the different providers are still under heavy development
Optionally, you can clone this repo and run npm run build to
produce the pkg binaries.
Setup
Configuration of one or more providers via login command is necessary.
Global configuration is stored as ~/.now/config.json. Your default provider will be the first one you log in to. If you are logged into multiple providers and want to set default provider, run:
now config set defaultProvider gcpNow.sh
now loginTo skip the configuration steps and deploy to https://now.sh
execute now login without any parameters, defaulting to the sh provider (equivalent to: now sh login).
Now.sh is free for open-source projects and static deployments. It supports Dockerfile, package.json and static sites out of the box. All builds are reproducible and executed in the cloud.
AWS Lambda (aws)
Run:
now aws loginIf you have already run aws configure before, you will be offered
to synchronize your credentials.
Serverless deployments are provisioned by using:
- Lambda functions λ
- A proxy is automatically used to bridge the API between HTTP and lambda functions and retain a consistent interface
- Certificate Manager
- API Gateway
Google Cloud Platform (gcp)
$ now gcp loginand follow the instructions!
Project Configuration
| ℹ️ | We welcome feedback from the community! |
The v1 release of now.json includes the following specification:
name(optional, recommended)Stringdescription(optional, recommended)Stringtype(optional, recommended). One of:Stringan unique identifier for the project type. The following are recommended choices to be supported by every provider:dockernodestatic
Objectwhen it's necessary to specify a version or multiple interacting runtimes. It's a dictionary of runtime identifier and SemVer-compatible version. For example:{ "type": { "docker": "1.x.x" } }provider(optional) indicates affinity to a certain provider
target(optional)String- specifies a directory or file to deploy. If relative, it's resolved
to the project directory. This is useful when a certain
deployment type (like
static) has an output target, like anoutordistdirectory.
- specifies a directory or file to deploy. If relative, it's resolved
to the project directory. This is useful when a certain
deployment type (like
env(optional). One ofObjecta dictionary mapping the name of the environmental variable to expose to the deployment and its value. If the value begins with@, it's considered aArraya list of suggested environmental variables that the project might require to be deployed and function correctly
regions-ArrayofString- specifies one or more region identifiers to deploy to. A wildcard can be used to signify deployment to all supported regions by the provider
files-ArrayofString- specifies a whitelist of what files have to be deployed
To supply provider-specific configuration, you can include an arbitrary Object and use the provider identifier as the key.
Global Configuration
The client will initialize a .now directory in the user's home
directory upon first running.
There, two files can be found:
config.jsonauth.json
Implementation notes
Now is directly modeled after UNIX. It's useful to think of the primary subcommands deploy, alias and rm as being the "cloud equivalents" of cp, ln and rm.
The minimal set of commands that providers must supply are:
[] | deploy |
the default command to launch a deployment |
remove | rm |
remove a deployment identified by its unique URL |
Recommended, but not required, commands are:
alias | ln |
associates a URL with a permanent domain name |
secrets ls | rm | add |
manage deployment secrets |
domains ls | add | rm |
manage domains |
dns ls | add | rm |
manage dns records |
certs ls | add | rm |
manage certificates |
The build step for serverless deployments is implemented locally and is compatible with projects configured with the type node, and others are on the way!
Philosophy
Immutability
Each time you write now a new deployment is provisioned. Whenever
possible, providers should strive to make deployments idempotent in the
absence of changes to:
- Originating source code
- Configuration
- Environment variables
Standards compliance
All projects expose a HTTP/1.1-compatible interface. A port is provided
via the standard process.env.PORT.
Secure
Whenever possible, deployments are strongly encouraged to be served over SSL. The process of provisioning certificates should be transparent to the user.
Projects should require minimal JSON configuration
Whenever possible, projects should be deployable with minimal or no configuration.
Avoid manifest duplication
If the configuration or conventions imposed by a programming language or framework are present, attempt to provide sane defaults.
Examples of this is the presence of Dockerfile or package.json. When
publishing a project it's recommended that the type is strictly
configured in now.json to avoid
Contributions and Roadmap
Community
All feedback and suggestions are welcome!
- 💬 Chat: Join us on zeit.chat
#now-client. - 📣 Stay up to date on new features and announcments on @zeithq.
- 🔐 Subscribe to our security mailing list to stay up-to-date on urgent security disclosures.
Please note: we adhere to the contributor covenant for all interactions in our community.
Contributions
To get started contributing, make sure you're running node 8.x.x. Clone this repository:
git clone https://github.com/zeit/now-cliTo test the pkg binary distribution, run:
npm run buildOngoing development
- Support for
now <file>, with support for:- Binaries as a first-class deployment type
- Static deployments as a fallback
- We are working on built-in support for provisioning Kubernetes replication controllers and pods, in a similar vein as the Draft project.
- A simple API to register custom providers and pluggable build systems externally, such as Travis, Circle CI, etc.
- A companion desktop app Now Desktop
is available, released under the MIT license.
Work is ongoing for pluggable providers to enable:
- Team collaboration
- One-click context switch
- Drag and drop deployments
- Adding interoperabity between objects that live in different providers
- Providing a Next.js and React powered dashboard that can be deployed anywhere
Why Ship a pkg-ed Binary?
- Simpler installation for non-Node users like those deploying static files or Dockerfiles.
- Consistency across platforms and installation mechanisms (
npm,brewand manual scripts) - Parsing and evaluation optimizations lead to a faster bootup time
- Easier installation in automation environments (like CI systems)
- Increased safety by providing a unified signature mechanism for releases
- We're able to select our own Node version of choice and can take advantage of the latest features
Caught a Bug?
- Fork this repository to your own GitHub account and then clone it to your local device
- Link the package to the global module directory:
yarn run link(notyarn link) - You can now start using
nowfrom the command line!
As always, you can use yarn test to run the tests and see if your changes have broken anything.
How to Do a Release (Internal)
Stable release: Run
release <major|minor|patch>(depending on the version bump you're planning to do) on themasterbranch.Canary release: Run
release preon thecanarybranch.
Other than one of these two commands, no other action is required. The CI will take care of the rest.
Authors
- Guillermo Rauch (@rauchg) - ZEIT
- Leo Lamprecht (@notquiteleo) - ZEIT
- Tony Kovanen (@TonyKovanen) - ZEIT
- Olli Vanhoja (@OVanhoja) - ZEIT
- Naoyuki Kanezawa (@nkzawa) - ZEIT