Pome gives Linux desktops a quiet iCloud Drive folder.
It runs in the background, mounts iCloud Drive through rclone, and keeps it available at ~/iCloud Drive. When the connection needs attention, Pome lets you respond from desktop notifications: retry the mount, sign in again, or leave it waiting in the background.
Install rclone before running Pome. Pome requires rclone 1.69.0 or newer (the first release with iCloud Drive support), check your installed version with:
rclone versionThe safest way to get a recent version is the official rclone installer:
sudo -v
curl https://rclone.org/install.sh | sudo bashIf your distribution already ships rclone 1.69.0 or newer, you can install it from your package manager instead:
# Fedora
sudo dnf install rclone
# Ubuntu/Debian
sudo apt install rclone
# Arch Linux
sudo pacman -S rcloneThen run Pome from your app launcher, or start it manually:
flatpak run io.github.gabrielpalassi.PomeOn first launch, Pome prepares an iCloud Drive remote for rclone and asks you to sign in. Click Sign In in the notification, complete the browser sign-in, and Pome will connect your iCloud Drive folder.
After the first launch, Pome adds itself to your desktop autostart entries so it can reconnect iCloud Drive when you log in.
If iCloud needs attention later, Pome will show a notification with actions:
Try Againretries the mount.Sign Inrefreshes your iCloud session.
Local builds use Flatpak Builder. You will need:
flatpakflatpak-builderflatpak-node-generatorrclone- a working desktop notification portal
- the Freedesktop runtime and SDK used by the manifest
Add Flathub if you do not already have it:
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepoInstall the runtime and SDK:
flatpak install flathub org.freedesktop.Platform//25.08 org.freedesktop.Sdk//25.08Build and install Pome locally:
npm run flatpak-installRun the local build:
flatpak run io.github.gabrielpalassi.PomeKeep changes focused and follow the existing TypeScript style. Pome intentionally keeps most host interaction in src/lib/host.ts, src/lib/rclone.ts, and portal-specific helpers. Prefer portals for desktop integration when one exists, and keep host-side commands limited to work that truly needs to happen outside the sandbox.
For regular code changes:
- Create a branch from the latest
master. - Install Node dependencies.
- Make the code change.
- Run the project checks and build.
- Open a pull request.
npm ci
npm run check
npm run buildnpm run check type-checks the code, applies ESLint fixes, and formats files with Prettier.
If npm dependencies changed, keep the Flatpak npm sources in sync and confirm the Flatpak can build offline:
npm install --package-lock-only --lockfile-version=2
flatpak-node-generator npm package-lock.json -o generated-sources.json
npm run flatpak-installKeep package-lock.json at lockfile version 2 so flatpak-node-generator can generate complete offline npm sources.
If the change touches Flatpak packaging, autostart, notifications, sign-in, or host commands, build and run the installed Flatpak, then test the affected desktop flow from inside the sandbox:
npm run flatpak-install
flatpak run io.github.gabrielpalassi.PomeThe main Flatpak manifest builds Pome from a tagged Git commit. Keep the local development manifest separate: npm run flatpak-install uses io.github.gabrielpalassi.Pome.local.yml, while io.github.gabrielpalassi.Pome.yml should point at a pushed release tag.
When preparing a release:
- Finish the release changes on a branch.
- Bump the app version in
package.json,package-lock.json, anddata/io.github.gabrielpalassi.Pome.metainfo.xml.
npm install --package-lock-only --lockfile-version=2- Merge the pull request into
master. - Pull the updated
masterbranch locally.
git checkout master
git pull origin master- Create and push the release tag from
master.
git tag -a v1.0.0 -m "Release v1.0.0"
git push origin v1.0.0- Open a follow-up pull request that synchronizes the release metadata in
package.json,package-lock.json,io.github.gabrielpalassi.Pome.yml, anddata/io.github.gabrielpalassi.Pome.metainfo.xml. Update the applicableversion,tag,commit,image, andreleasevalues to match the release that was just published.
git rev-parse HEAD