runin.eu

Start with one Machine

Create a persistent Linux Machine, connect over SSH and share a web preview.

Get access

Runin is invite-only. Contact info@kultify.com with your SSH public key. Your account administrator registers it before your first connection. Keep the private key on your computer.

ssh runin.eu whoami

If SSH offers a different key, add -i /path/to/key -o IdentitiesOnly=yes. Keep host-key verification enabled. A public-key refusal means the offered key is not registered or the account is unavailable.

Create and connect

ssh runin.eu new --name demo

The default Template has a 10 GiB disk. For 30 GiB, use new --template base-30gib --name demo. These are the two customer disk sizes. The account default is 8 vCPUs and 16 GiB of memory across active Machines; paused Machines release compute but retain disk.

A Template build prepares the small, medium and large sizes on its own. Every prepared size starts in under a second, including a custom vCPU and memory size prepared with template prepare NAME --vcpus N --mem MiB. Other sizes and a larger disk start from scratch, which takes a few seconds. After template commit, run template prepare.

ssh runin.eu ls

Copy the destination from the SSH column, then run ssh MACHINE_ID@runin.eu. Replace MACHINE_ID with your actual ID. The name is a label; use the ID in management commands and connection addresses. Listings contain only your account's Machines.

Open a web preview

Inside the Machine, start your app listening on 0.0.0.0. For example, serve a directory on port 8000:

python3 -m http.server 8000 --bind 0.0.0.0

On your own computer, create a share link:

ssh runin.eu share MACHINE_ID --port 8000

Open the returned link. HTTPS access starts private; a share link grants access to whoever holds it. Keep credentials and private files out of the directory you serve. Use share ls MACHINE_ID and share revoke to manage links.

Command reference

Management commands work through both runin and ssh runin.eu. Run ssh runin.eu without a command for the interactive shell. Use command help for the complete flags, aliases and defaults:

ssh runin.eu help new
CommandWhat it does
new --name NAMECreate a Machine; -n is the name flag for new.
ls [--all | --failed]Show your Machines, including names and SSH destinations.
inspect IDShow configuration, lifecycle state, Snapshots and backup observations.
pause ID / resume IDPause or resume saved state. Resume also recovers an interrupted Machine from its surviving disk on the same Host.
fork ID -n N [--snapshot s]Create N Machines from a Snapshot -- the newest, or the one --snapshot names, such as one taken with snapshot ID. Here -n is the count.
rm IDDelete and wait for confirmation.
snapshot ID / snapshot ls ID / snapshot rm ID SNAPSHOTSnapshot a running Machine in one command (it pauses briefly, then resumes), or discover and remove saved Snapshots.
template ls / template versions NAMEDiscover available Template versions.
template build --name NAME --file PATH|-Build a Dockerfile in a builder Machine, one at a time; SSH receives input through --file -.
template commit ID --name NAME --version VERSIONPublish a Machine as a Template version; pauses it if needed.
template prepare NAME --version VERSION [--size SIZE | --vcpus N --mem MiB]Make a Template version start in under a second at a preset or custom size, or all presets when omitted. A build prepares the presets on its own.
template rm NAME VERSIONRemove an unused Template version you own.
share public|private|status|ls|revokeControl HTTPS visibility and access links.
usage [--history]Current allocations, quota remaining, or recorded daily/monthly usage.
tenant get / whoamiAccount settings and the identity in use.
keys add|ls|rmManage your SSH public keys.
tokens create|ls|revokeIssue, list and revoke your access tokens.
share reset ID --port PRemove one port override while preserving share links.
share default ID --port P [--clear]Select or clear the default port without changing visibility.

Add --json for structured output. Waits return only after the requested result is observed; --wait 0 accepts asynchronous work without claiming it has finished.

Any Linux image works: FROM alpine, python:3.12-slim, a distroless image or your own app image. You log in as runin. An image with systemd boots it as usual. An image without systemd runs its ENTRYPOINT and CMD as the workload, and the Machine stays up if the command exits. For systemd and the usual tools, start from our base Dockerfile and add your lines at the end.

curl -fsSL https://runin.eu/templates/base.Dockerfile > Dockerfile
ssh -T runin.eu template build --name my-app --file - < Dockerfile
ssh runin.eu usage --history --group month --csv > usage.csv

History starts when metering was enabled. Incomplete coverage is marked explicitly. It measures recorded allocations, not live CPU use or a bill.

Before you leave

ssh runin.eu pause MACHINE_ID

Pause keeps the Machine's disk and captured state. Deletion is a separate action. Read the durability statement before relying on a Machine as the only copy of your work.