Repository navigation
Releases: Orcaryn/Apargon
Release list
Apargon 0.4.0
Security
- Apargon now reads a page's tags the way a browser reads
<meta>tags. A tag counts only ifpapp-is in itsname. Writename="…"andcontent="…"with quotes and no spaces around the=. papp-runrefuses two programs with the same name. A full path must be plain (no.,..or//) and point to a file.papp-netrefuses 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.saveAsrefuses folders where files run on their own: hidden folders,~/Libraryon macOS andAppDataon Windows.- A page's file API no longer shows or changes Apargon's own data.
papp-netrefuseslocalhost:*and127.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-nodepages 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
SHA256SUMSin the release before you run it. - On Windows, pages can use
papp-run,papp-envandpapp-node. Programs must be.exeor.comfiles. Pages withpapp-socket, orpapp-nettolocalhost, 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 andwindow.openopen http(s) links in your browser. Apargon shows the address and asks first, unless the page lists the site inpapp-openor 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-netwithlocalhost:*or127.0.0.1:*no longer opens. Name the port, as inlocalhost: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.dmgandapargon_amd64.deb. If a script downloads them by name, update it.install.shand 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
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.