Skip to content

Releases: Orcaryn/Apargon

Apargon 0.3.0

Choose a tag to compare

@HaMMeRSI HaMMeRSI released this 29 Oct 07:05

Security

  • macOS: 0.2.0 cut the page's process off from the Apple Events service, which also stopped the events macOS sends to it: Dock → Quit, logout, and a page opened while another was open. Now only sending is blocked, so a page's programs still cannot script other apps with osascript or Apple Events, and Apargon answers macOS again.

New

  • Install from the terminal: curl -fsSL https://apargon.com/install.sh | sh. On macOS it checks the app's signature and notarization before it replaces the installed one; on Ubuntu 24.04 it checks the .deb against the release's SHA256SUMS and installs it with apt. It also installs the papp skill for coding agents; sh -s -- --no-skill leaves that out.
  • macOS: Homebrew. brew trust --cask orcaryn/tap/apargon, then brew install --cask orcaryn/tap/apargon. The cask follows each release.
  • The popup groups what a page asks for under Programs, Files, Network and This computer, shows the page's folder and where it came from under its name, and scrolls when the list is taller than the screen.

Changed

  • The window title no longer lists the servers a page may reach. The popup still does, and the approval does not change.

Apargon checks for a new version once a day when a page opens, unless you turned that off under Permissions. If you did, watch this repository to hear about security fixes: Watch → Custom → Releases.

Apargon 0.2.0

Choose a tag to compare

@HaMMeRSI HaMMeRSI released this 28 Oct 08:43

Security

  • papp-net no longer reaches your local network through a name or a wildcard. Private addresses, VPN ranges such as Tailscale's, NAT64 addresses (64:ff9b::/96) and the link-local range, where cloud machines keep their keys, are refused, as this computer already was. So a server cannot point a name you approved at your network.
  • A red line, or lines that together can send your files out, now need the checkbox for every page. Before, only downloaded pages did, but git clone, curl and USB sticks don't mark a file as downloaded.
  • A downloaded page with no tags is now asked about once, so you see where it came from before it reads its folder.
  • Approving a downloaded page covers its exact content. If the page changes, Apargon asks again.
  • Pages no longer share localStorage, IndexedDB or the cache.
  • A frame can no longer load another file, and a link to another file does not open: that file would run with the page's permissions.
  • Tags count only in <head>, before the first <script or <body, outside comments.
  • macOS: a page opens only once the sandbox has proved it is on. Before, a check that failed for any other reason counted as proof.
  • macOS: a page's programs can no longer script other apps (osascript, Apple Events), or get a system service to fetch a certificate's issuer from outside the sandbox.
  • Linux: a page and its programs no longer see /run, /tmp or /var/tmp. These hold sockets to programs outside the sandbox, such as D-Bus, name lookup, the sound server, tmux, screen and Docker. Only the display's socket and what the tags name come back.
  • Linux: a page and its programs can no longer make namespaces, which most Linux privilege escalations need. In /dev they see only the GPU, plus the camera, microphone or sound devices when a tag asks for them. With papp-use sound, the page's programs can also record from the microphone.
  • Linux: a page's programs can no longer read the environment Apargon started with.
  • Linux: two open pages can no longer use each other's declared servers.

New

  • papp-use gives a page one more ability per tag:

    • notifications, shown with papp.notify
    • clipboard, to read it from code (pasting always worked)
    • location, macOS only
    • sound, camera and microphone
    • screen, the whole main screen through getDisplayMedia, not on Wayland

    Clipboard, location, camera and microphone are yellow; screen is red. With papp-net, the popup says what can be sent. On macOS the system also asks the first time a page uses location, camera, microphone or screen.

  • papp-shortcut names a key combination the page answers in every app, such as CommandOrControl+Shift+N, and brings the page to the front. It needs two different modifiers, not only Option and Shift, or one modifier with a function key, so a page cannot take Ctrl+C from other apps.

  • papp-socket names a socket file, or a folder of them, that the page and its programs may connect to. It is always red: what answers runs outside the sandbox.

  • A page can reach a device on your local network, such as a smart-home hub, a NAS or a router, if the tag names its address in numbers and one port: 192.168.1.5:8123. The line is red, because Apargon cannot tell what answers.

  • New in window.papp:

    • pick() shows an Open dialog for files or folders. The page can read what you pick until it reloads. Links, names with * and your home folder or above are refused.
    • saveAs({ 'name.txt': data }) saves files to a folder you pick, Downloads by default. A taken name gets a number, so nothing is replaced. Names with a folder, a leading dot or .papp are refused.
    • appendFile and copyFile. A copy keeps only the bytes, so it is never a program to run.
    • readFile(file, encoding, { offset, length }) reads part of a file.
    • readdir(folder, { stats: true }) returns each entry's kind, plus size and date if the page may read it.
    • watch(folder, callback, { recursive: true }) watches subfolders too. The callback learns if a file changed or was removed.
    • run takes and returns bytes with encoding: null, and stops the program after timeout milliseconds.
    • spawn runs a long job: the page reads its output as it comes, writes to it and can stop it.
    • tray(title) puts Apargon's icon in the menu bar, with the title beside it on macOS or as its tooltip on Linux. A click brings the page to the front.

    Programs from run and spawn stop when the page closes or reloads.

  • window.open('#name') opens a second window of the page. Other files and sites still do not open.

  • With papp-node, require('@electron/remote') gives the page Electron's main process, so it can shape its own window, for example keep it on top. It stays offline.

  • A page's favicon becomes its icon, with Apargon's badge: in the Dock and app switcher on macOS, as the window icon on Linux. On macOS, a page made on this computer also gets it in Finder.

  • Apargon offers to install the papp skill, so coding agents such as Claude Code can build apps for it. It asks when you open Apargon without a page, the first time you open a page, and from Help → Install the papp Skill for Agents…. The skill goes in ~/.claude/skills/papp and ~/.agents/skills/papp.

Changed

  • resworb is now Apargon. Rename pages from .lmth to .papp, tags from resworb-* to papp-*, and window.resworb to window.papp. Approvals do not carry over, so Apargon asks again about each page with tags, and pages start with empty storage.
  • macOS: resworb 0.1.1 cannot update itself to Apargon. Download Apargon from this release, then delete resworb from Applications.
  • Linux: install the apargon package, then run sudo apt remove resworb. It needs bubblewrap 0.8.0 or later; Ubuntu 24.04 has it.
  • A page plays sound only with papp-use sound. Without it the window is muted, on every OS. On Linux the tag also brings the sound server into the sandbox.
  • papp-net with a local device's name, such as nas.local:5000, no longer connects. Use its address in numbers, such as 192.168.1.5:5000.
  • A tag after the first <script or <body, or inside a comment, is no longer read. Move it into <head> before any script.
  • Linux: papp-read, papp-write and papp-socket are refused for /tmp, /var/tmp, /run and anything in it, and folders that hold them, such as /. So is a page inside one of them. Move the files elsewhere.

Apargon checks for a new version once a day when a page opens, unless you turned that off under Permissions. If you did, watch this repository to hear about security fixes: Watch → Custom → Releases.