Nots is a self-hosted cloud platform —
Just bring your code, and Nots will take care of the rest.
Warning
Nots is currently in development. The CLI is available for testing, but most features are not yet implemented. See the roadmap for more information.
With Nots, you can transform any server into a powerful, scalable, and secure cloud platform. It's a self-hosted alternative to serverless and edge platforms like AWS Lambda, Google Cloud Functions, Vercel, and Cloudflare Workers. You bring your code, and nots
deploys it using the best-suited runtime — be it Bun, Docker, or a standalone binary.
The focus is on simplicity: You provide an artifact, and nots
takes care of the rest. Unlike other platforms, nots
doesn't require you to build a new Docker image for every app version, and it doesn't force you to use a specific language or framework. Additionally, it manages your secrets and environment variables, keeping them secure. Plus, it smartly routes traffic to your apps.
All of this without any "magic" - no special runtime or framework is required to run your apps.
$ curl -fsSLO https://nots.dev/install.sh
$ chmod +x install.sh && ./install.sh
The nots
CLI is the primary way to interact with the nots
platform. It's a single binary that you can use to deploy, manage, and monitor your apps. it is available for Linux, macOS, and Windows.
Before installing, make sure you have Docker installed on your machine, as it's currently the only backend supported by nots
(Firecracker based runtimes are coming soon).
Alternatively, you can download the latest binary from the releases page. The installation script just downloads the latest binary and places it in ~/.local/bin
(You can als read the script before running it to make sure it's safe).
Every nots
installation requires a server daemon. It's a small binary that runs on your server and manages your apps. You can install it by running the following command:
$ nots server init
This will guide you through the installation process. You can also use the --help
flag to see all available options.
The nots
CLI automatically connects to the server daemon running on your machine. Remote connections are not yet supported, but they're coming soon.
Warning
This feature is not yet implemented.
Apps are the primary unit of deployment in nots
. By default, all apps are in the same, global namespace, but you will soon be able to organize them into different projects, like a separate namespace for your personal projects and another one for your company's apps.
You can create a new app by running the following command:
$ nots app create
Warning
This feature is not yet implemented.
Once you've created an app, you can deploy an artifact to it. An artifact is a binary or any archive that contains your app's code. You can deploy an artifact by running the following command:
$ nots deploy --app=example-app ./index.ts # Single Files
$ nots deploy --app=example-app ./app.tar.gz # Archives
$ nots deploy --app=example-app ./dist # Directories
Warning
This feature is not yet implemented.
Currently, nots
only supports a single server, but you will soon be able to scale your apps across multiple servers and even multiple regions. Nots however will not balance requests between servers - load balancing can be done on the DNS level, or you can use CDN providers like Cloudflare to route traffic to the closest server. Simplicity is key - most projects will never need a complex load balancing setup and simple and efficient code can handle a lot more traffic than you might think.
By default, nots
keeps your apps running indefinitely. However, you will soon be able to configure it to shut down your apps after a certain period of inactivity. This is useful for apps that are only used occasionally, like small side projects. The time it takes to boot up an app is heavily dependent on the runtime. For example, a Rust binary takes a few milliseconds to start, while a Node.js app can take up to a few seconds.
To reduce this for slow runtimes, nots
will also support hot boots using cgroup freezer. This will allow you to keep your apps running indefinitely while saving cpu resources when they're not in use.
nots
supports essentially any programming language or framework.
We provide a set of official runtimes, but you can use any OCI image as a runtime.
Nots just creates a VM or container for a given OCI image, and then runs your app inside it (and provides some additional features like automatic routing, secrets, and more).
Official runtimes (optimized for performance and security):
- Bun
- Node.js
- Deno
- Binary - any standalone binary
- Docker (you don't even need a 'runtime' for this, runtimes are just OCI images)
A NotsTs runtime based on Bun is also in the works, which will offer a WinterCG based runtime for TypeScript and JavaScript.
You can also create your own runtime based on the existing ones. Check out the runtimes repository for more information.
The current roadmap is available here.
Nots is licensed under the terms of both the MIT License and the Apache License (Version 2.0). See LICENSE-APACHE and LICENSE-MIT for details. Any contribution intentionally submitted for inclusion in Nots shall be dual licensed as above without any additional terms or conditions.