Rymtech.net encrypted decentralised computer
Rymtech.net
Rymnet is an encrypted decentralised computer
Rymtech.net / wiki / rymscript-and-desktop

RymScript & Desktop

The rymwin graphical desktop and RymScript: a curated Python dialect for building .run and .win apps.

The graphical desktop

If you're on a real desktop (not a headless server), window (or gui) from rymsh launches rymwin — a small retro desktop shell with its own independent login (install once with cargo install --path crates/rymwin --force). Its Start menu opens five apps:

AppWhat it's for
File ManagerFolder tree, create/read/update/delete on your virtual computer.
RymcodeA small editor for writing and running RymScript programs.
BrowserAn early-Internet-Explorer-style browser for .rym sites — no JavaScript, no forms, just HTML/CSS content and links.
TerminalMost of rymsh's command set in a black-background window, already logged in — no separate login needed.
MailAn Outlook-alike client: folders, message list, reading pane, and a full compose window.

What RymScript is

RymScript is Rymnet's app language: real Python syntax, running on an embedded RustPython interpreter, restricted to a small curated API. There is no real filesystem, network, or process access from a RymScript program — only a sandboxed file API and (as of the latest update) a hand-picked slice of the Python standard library.

Two program types, by file extension:

  • *.run — terminal programs. Run from rymsh with run <name> (looks for /Programs/<name>.run). print() and real, interactive input() both work, since a terminal is right there.
  • *.win — desktop programs, run only inside rymwin (Rymcode's Run button, or opened from File Manager). A .win script defines def draw(events): returning a list of widget dicts (heading, label, button, text input, checkbox); the runtime calls it once per frame and reacts to what the user did last frame.

File API (both program types)

read_file(path) -> str
write_file(path, text)
append_file(path, text)
list_dir(path='.') -> list[str]
exists(path) -> bool
remove_file(path)
mkdir(path)

Standard library

Importable today: math, cmath, unicodedata, zlib, binascii, csv, struct, random, and per-algorithm hashing (sha256, md5, sha1, sha3, sha512, blake2), plus json_loads(text)/json_dumps(obj) as plain functions rather than a real json module.

Two things behave a little differently than real Python, on purpose: random has no module-level random.random() — make an instance first, random.Random().random(). And hashing is one small module per algorithm rather than a single hashlib dispatcher — sha256.sha256(data).hexdigest(), not hashlib.sha256(data).

Everything that could reach the real filesystem, network, or process table (os, socket, subprocess, ctypes, and the rest) is left out on purpose — not just unregistered, not even compiled into the binary.

Starter examples

Every fresh account's /Programs folder comes seeded with four examples, ready to open and run:

FileTypeShows
hello.runterminalBasic print()/input() and the file API.
counter.windesktopThe draw(events) widget contract with a click counter.
checksum_tool.runterminalsha256, random, and csv working together — hashes a file, generates a confirmation code, logs the result.
notes.windesktopA JSON-backed checklist app using json_loads/json_dumps for persistent storage.