Synchronize selected Helium browser profile data across devices using Amazon S3.
helium-sync copies a strict subset of Helium browser profile data to and from an S3 bucket. It runs as a systemd user timer, performing incremental syncs at a configurable interval.
Synced data: Preferences, Bookmarks, History, Extensions/, Local Extension Settings/
Never synced: Cookies, Login Data, Web Data, Network/, Cache/, GPUCache/, Code Cache/, Service Worker/, Sessions/, *.ldb files
git clone https://github.com/stonespren/helium-sync.git
cd helium-sync/packaging/arch
makepkg -si
Requirements: Go 1.21+, AWS CLI v2
git clone https://github.com/stonespren/helium-sync.git
cd helium-sync
CGO_ENABLED=0 go build -o helium-sync ./cmd/helium-sync/
sudo install -Dm755 helium-sync /usr/bin/helium-sync
Run the setup script:
./scripts/setup.sh
The script will:
- Install required dependencies (if on Arch Linux)
- Configure AWS credentials (uses existing
~/.aws/credentialsor creates new) - Select or create an S3 bucket
- Set the Helium browser config path (default:
~/.config/net.imput.helium/) - Detect existing profiles
- Set the sync interval
- Create and enable the systemd timer
- Optionally run an initial sync
./scripts/setup.sh --non-interactive --config /path/to/config.json
./scripts/setup.sh --uninstall
# Sync all profiles
helium-sync sync
# Sync a specific profile
helium-sync sync --profile Default
# Interactive profile selection
helium-sync restore
# Restore all profiles
helium-sync restore --all
Restore always prompts before overwriting local data.
helium-sync status
Displays: last sync time, next scheduled sync, sync enabled/disabled, tracked profiles, health status.
# Show config
helium-sync config
# Edit config
helium-sync config --edit
helium-sync config -e
helium-sync logs
helium-sync --enable
helium-sync --disable
helium-sync help
Config file: ~/.config/helium-sync/config.json
{
"helium_dir": "/home/user/.config/net.imput.helium",
"s3_bucket": "my-helium-sync-bucket",
"s3_region": "us-east-1",
"aws_profile": "default",
"sync_interval_minutes": 15,
"log_level": "info",
"sse_s3": true
}Logs: ~/.local/state/helium-sync/helium-sync.log
Device ID: ~/.config/helium-sync/device_id
- Scan local profile for allowed files
- Compute SHA256 checksums for each file
- Download the remote manifest from S3
- Compare checksums to determine what changed
- Upload new/changed local files, download new/changed remote files
- Update the remote manifest
- Record the last sync timestamp locally
Only changed files are transferred. Files larger than 8MB use multipart upload.
s3://<bucket>/helium-profiles/<profile_name>/
├── manifest.json
└── files/
├── Preferences
├── Bookmarks
├── History
├── Extensions/...
└── Local Extension Settings/...
- Background sync uses last-writer-wins (based on
last_sync_timestamp) - Manual sync shows a summary of differences when both sides changed
- The
restorecommand always prompts before overwriting
Helium browser is running and holds a lock on the profile directory. Close Helium or wait for the next sync cycle.
A previous sync process is still running or crashed without releasing its lock. If no sync is running, remove the lock file:
rm ~/.config/helium-sync/helium-sync.lock
Verify your credentials:
aws sts get-caller-identity --profile <your-profile>
Re-run setup to reconfigure:
./scripts/setup.sh
Check timer status:
systemctl --user status helium-sync.timer
systemctl --user status helium-sync.service
Re-enable:
helium-sync --enable
helium-sync logs
Or read the log file directly:
cat ~/.local/state/helium-sync/helium-sync.log
- Sync is not real-time. It runs on a timer interval.
- Concurrent edits to the same profile from multiple devices between syncs will result in last-writer-wins for each file.
- Extension data in
Extensions/andLocal Extension Settings/may be large, increasing sync time. - The application does not sync while Helium holds a profile lock (browser is running).
- Log rotation keeps only one rotated file (10MB max per file).
This tool modifies browser profile data. While it only touches files in the allowlist, there is inherent risk in synchronizing profile data across devices:
- A corrupted file on one device can propagate to others
- Last-writer-wins conflict resolution may discard changes
- Restoring from S3 overwrites local profile data
Back up your profile data before first use. The developers are not responsible for data loss.
File issues at the project repository. Include:
- Output of
helium-sync status - Relevant log entries from
helium-sync logs - Your OS and Helium version
- Steps to reproduce the issue
Do not include AWS credentials or other secrets in bug reports.