what is ix

What is ix

ix.dev is a pay-for-what-you-use VM cloud provider.

We do not have instance types, all machines boot with 64 vCPU and 8 GiB of memory, and can scale to 256 GiB of memory and 1 PiB of disk. You only pay for the per-second usage of these resources, idle resources are not billed.

We have only a few primitives for interacting with our machines: a machine can be snapshotted while it runs, a snapshot can be restored into any number of new machines, and a running machine can be live-migrated to another compute node.

Boot your first VM

Install the CLI, sign in, and boot a machine.

$ curl https://ix.dev | sh
$ ix login
✓ Logged in as user@ix.dev
$ ix new
◆ Creating ix/base:latest
 ✓ Resolve template  ix/base:latest     (18ms)
 ✓ Place VM          us-west-1          (37ms)
 ✓ Boot                                (505ms)
 ✓ Wait for ready                       (24ms)

Created loyal-fox                        (584ms)

Templates

A template is a repository whose flake evaluates to a NixOS system. ix builds it once and caches it per region, with #name picking the configuration.

$ ix new github:indexable-inc/index#web

Declare the machine

dev-03
1// JavaScript syntax, Nix semantics.
2// `ix apply` converges the machine to this file.
3export default ({ index }) => ({
4 packages: [index.rustc, index.cargo, index.rg],
5 services: {
6 postgres: { enable: true },
7 },
8 modules: [import("./modules/web.ix")],
9});
1# generated from default.ix by `ix apply`; do not edit.
2{
3 inputs.index.url = "github:indexable-inc/index";
4 outputs = { index, ... }: {
5 nixosConfigurations.dev =
6 index.lib.fromIx ./default.ix;
7 };
8}

default.ix declares every package, service, and open port in one file. Syntax is JavaScript, semantics are nix: edit, re-apply, converge. The first apply also writes flake.nix, pinning exactly what your machine builds from.

$ ix init
created default.ix
$ ix apply
created flake.nix
// default.ix - JavaScript syntax, Nix semantics.
export default ({ index }) => ({
  services: {
    minecraft: { enable: true, openFirewall: true },
  },
  packages: [index.rg, index.htop],
});

The world of ix

Underneath, ix is two primitives: machines that autoscale, and the virtual ethernet that wires them to each other and to the internet. Everything above that, firewall to web server, is open source and lives in github:indexable-inc/index.