Freestyle Docs

Freestyle / Docs

Domain Mappings

Create, list, and delete mappings from custom domains to VM ports.

A domain mapping connects one public hostname to one port inside a VM. Use mappings when you want to attach or move domains after a VM already exists.

Create A Mapping

import { freestyle } from "freestyle";

await freestyle.domains.mappings.create({
  domain: "app.example.com",
  vmId: "your-vm-id",
  vmPort: 3000,
});

The VM service must listen on vmPort. For web servers, bind to 0.0.0.0 so traffic from outside the VM can reach the process.

List Mappings

const { mappings } = await freestyle.domains.mappings.list({
  domain: "app.example.com",
  limit: 50,
});

for (const mapping of mappings) {
  console.log(mapping.domain, mapping.vmId, mapping.vmPort);
}

Delete A Mapping

await freestyle.domains.mappings.delete({
  domain: "app.example.com",
});

Deleting a mapping stops new traffic from routing to that VM port. It does not delete the VM, DNS record, or domain verification.

Multiple Ports

Use separate domains for separate VM services:

await freestyle.domains.mappings.create({
  domain: "api.example.com",
  vmId,
  vmPort: 3000,
});

await freestyle.domains.mappings.create({
  domain: "terminal.example.com",
  vmId,
  vmPort: 8453,
});

Each domain gets HTTPS automatically after DNS and mapping are in place.

esc