Skip to content

Releases: Orcaryn/Apargon

Apargon 0.4.0

Choose a tag to compare

@HaMMeRSI HaMMeRSI released this 01 Nov 09:58

Security

  • Apargon now reads a page's tags the way a browser reads <meta> tags. A tag counts only if papp- is in its name. Write name="…" and content="…" with quotes and no spaces around the =.
  • papp-run refuses two programs with the same name. A full path must be plain (no ., .. or //) and point to a file.
  • papp-net refuses a port that starts with 0.
  • A page could type commands into the terminal that started Apargon. Now it gets no input from it, and its output shows as plain text.
  • papp.saveAs refuses folders where files run on their own: hidden folders, ~/Library on macOS and AppData on Windows.
  • A page's file API no longer shows or changes Apargon's own data.
  • papp-net refuses localhost:* and 127.0.0.1:* on every OS. Any port there includes other pages' connections.
  • Red in the popup now means one thing: the page can send data to places its tags don't name. Full Node and "any server" are red. Secrets, screen recording and hidden folders are yellow.
  • Running programs is now yellow. On Linux and Windows it is red if the page can also write files, because its programs can then change any file in those folders. A page that runs programs still needs you to tick "I trust this page".
  • Windows: programs and papp-node pages can send any file they see to the internet, through Windows itself. Apargon cannot stop this. You must tick "I trust this page" before such a page opens.
  • The popup's warning names the programs a page runs and the sockets it talks to.

New

  • Apargon now runs on Windows. There is an installer for x64 and arm64, but only arm64 is tested.
  • The Windows installer is not signed, so Windows shows a warning. Check the file against SHA256SUMS in the release before you run it.
  • On Windows, pages can use papp-run, papp-env and papp-node. Programs must be .exe or .com files. Pages with papp-socket, or papp-net to localhost, do not open.
  • On Windows, stopping a program does not stop the programs it started. They keep running until they finish.
  • Pages can open links. papp.open, target="_blank" links and window.open open http(s) links in your browser. Apargon shows the address and asks first, unless the page lists the site in papp-open or you ticked "Always".
  • Pages can open files (images, video, audio, PDF, text) and folders in their usual app, if the page may see them.
  • A page keeps its storage (localStorage, IndexedDB) when you move or rename it, if the file hasn't changed since it was last open. So after you edit a page, open it once before you move it. A copy starts with empty storage.

Changed

  • papp-net with localhost:* or 127.0.0.1:* no longer opens. Name the port, as in localhost:11434.
  • macOS: a page's programs can't open a terminal. Tools that need one may fail.
  • Download file names no longer include the version, for example Apargon-arm64.dmg and apargon_amd64.deb. If a script downloads them by name, update it. install.sh and Homebrew already use the new names.

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.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.