Repository navigation
Releases: Orcaryn/Apargon
Release list
Apargon 0.3.0
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
osascriptor 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.debagainst the release'sSHA256SUMSand installs it with apt. It also installs the papp skill for coding agents;sh -s -- --no-skillleaves that out. - macOS: Homebrew.
brew trust --cask orcaryn/tap/apargon, thenbrew 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
Security
papp-netno 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,curland 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<scriptor<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,/tmpor/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
/devthey see only the GPU, plus the camera, microphone or sound devices when a tag asks for them. Withpapp-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-usegives a page one more ability per tag:notifications, shown withpapp.notifyclipboard, to read it from code (pasting always worked)location, macOS onlysound,cameraandmicrophonescreen, the whole main screen throughgetDisplayMedia, 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-shortcutnames a key combination the page answers in every app, such asCommandOrControl+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 takeCtrl+Cfrom other apps. -
papp-socketnames 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.pappare refused.appendFileandcopyFile. 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 filechangedor wasremoved.runtakes and returns bytes withencoding: null, and stops the program aftertimeoutmilliseconds.spawnruns 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
runandspawnstop 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/pappand~/.agents/skills/papp.
Changed
- resworb is now Apargon. Rename pages from
.lmthto.papp, tags fromresworb-*topapp-*, andwindow.resworbtowindow.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
apargonpackage, then runsudo 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-netwith a local device's name, such asnas.local:5000, no longer connects. Use its address in numbers, such as192.168.1.5:5000.- A tag after the first
<scriptor<body, or inside a comment, is no longer read. Move it into<head>before any script. - Linux:
papp-read,papp-writeandpapp-socketare refused for/tmp,/var/tmp,/runand 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.