App kinds

The probe classifies what you dropped into one of these kinds and serves it accordingly. You never declare the kind, it is observed (and if it is ever wrong, you can pin it in the run contract).

Kind What it is How it’s served
web binds a port and speaks HTTP reverse-proxied at https://<id>.<domain>/
tcp binds a port, not HTTP reachable at a direct host:port address
worker stays alive producing output, no bind logs at /logs/<id>; never idled
job runs to completion and exits run on demand via the app or POST /run/<id>
interactive a REPL or TUI that waits on a terminal a fresh process per browser terminal session, no long-lived process
static a directory of files served as a static site
docs documents & media (pdf, csv, md, images, video) a generated viewer with a download link
oci a container image its entrypoint is run under a filesystem scope
gui a desktop / X11 app run headless and streamed to your browser over VNC

Content deploys

A drop made entirely of documents and media is treated as data, not code. Jollop generates a viewer: PDFs in a frame, images and video in native players, CSV parsed into a table, Markdown rendered, JSON pretty-printed, always with a download link for the original. An index.html you include is always respected and never overwritten.

Interactive apps

A REPL, shell, or terminal UI that stays alive only while a terminal is attached is classified as interactive. Each browser terminal session spawns its own fresh process, so there is no shared long-lived process to idle or wake.

Orphan frontend components

Drop a single frontend component (say, a lone Counter.jsx) with no package.json or index.html of its own, and Jollop scaffolds a minimal host app around it, builds it, and serves the result as a static site. This only kicks in for a genuine orphan: any manifest or HTML entry point means you already have a real app, and it is deployed as-is.

GUI apps

Drop a desktop app and Jollop runs it headless (a virtual display plus a VNC server) and streams the screen to your browser. It scales to zero when no one is watching and wakes on the next viewer.

Scale to zero

Web, tcp, and gui apps with no traffic for the idle window have their process stopped and their registration kept. The next request wakes them synchronously by replaying the frozen plan. Workers are exempt, staying alive is their whole job. Static, job, and docs apps have no long-lived process.