aly.codes/appa at main · Tangled
aly.codes
appa
Star
35
Fork
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
Peer-to-peer file synchronization in Rust on iroh.
rust
p2p
iroh
sync
Star
35
Fork
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
Rust
99.3%
Nix
0.7%
main
No tags found
223
Code
Clone this repository
Use permalink
HTTPS
https://tangled.org/aly.codes/appa<br>https://tangled.org/did:plc:pfrzezs4hfdika6smuzqzpqo<br>getComputedStyle(s).display !== 'none').textContent)"<br>class="px-3 py-2 text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200"<br>title="Copy to clipboard"
SSH
git@tangled.org:aly.codes/appa<br>git@tangled.org:did:plc:pfrzezs4hfdika6smuzqzpqo<br>getComputedStyle(s).display !== 'none').textContent)"<br>class="px-3 py-2 text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200"<br>title="Copy to clipboard"
For self-hosted knots, clone URLs may differ based on your setup.
Download tar.gz
Download .zip
.forgejo
2 days ago
.github
2 days ago
.tangled
2 days ago
appa-cosmic
1 day ago
docs
1 day ago
src
1 day ago
.gitignore
2 days ago
Cargo.lock
1 day ago
Cargo.toml
2 days ago
LICENSE.md
2 days ago
README.md
1 day ago
flake.lock
2 days ago
flake.nix
1 day ago
Commits<br>223
Synchronize newly introduced peers immediately
:not(:empty)~:not(:empty)]:before:content-['·'] [&>:not(:empty)~:not(:empty)]:before:mx-1 [&>:not(:empty)~:not(:empty)]:before:select-none">
f9c6bc63
aly.codes
1 day ago
main
Scope LAN discovery to Appa
:not(:empty)~:not(:empty)]:before:content-['·'] [&>:not(:empty)~:not(:empty)]:before:mx-1 [&>:not(:empty)~:not(:empty)]:before:select-none">
87694f67
aly.codes
1 day ago
Update Rust dependencies
:not(:empty)~:not(:empty)]:before:content-['·'] [&>:not(:empty)~:not(:empty)]:before:mx-1 [&>:not(:empty)~:not(:empty)]:before:select-none">
ce9f0932
aly.codes
1 day ago
Drain paged audit replication
:not(:empty)~:not(:empty)]:before:content-['·'] [&>:not(:empty)~:not(:empty)]:before:mx-1 [&>:not(:empty)~:not(:empty)]:before:select-none">
cfeb0f42
aly.codes
1 day ago
clarify license
:not(:empty)~:not(:empty)]:before:content-['·'] [&>:not(:empty)~:not(:empty)]:before:mx-1 [&>:not(:empty)~:not(:empty)]:before:select-none">
3f136a95
aly.codes
1 day ago
Branches
main
1 day ago
Default
README.md
Appa#
Appa keeps folders in sync directly between your devices. It has no account and<br>no central file server. Each device runs one local daemon; the command line and<br>COSMIC app talk to that daemon.
Start the daemon#
Install the per-user service once:
appa service install<br>It starts now and at login. Use appa service status, restart, logs, or<br>uninstall to manage it.
For development or another process manager, run it in the foreground:
appa daemon serve<br>Share a folder#
On the first device:
appa folder add ~/notes<br>appa folder invite ~/notes<br>On another device, create the destination directory and join with the<br>invitation:
appa folder join ~/notes --stdin<br>An invitation grants access to one folder. Treat it like a password.
Check a folder at any time:
appa folder status ~/notes<br>appa folder peers ~/notes<br>appa folder members ~/notes<br>appa folder status --watch refreshes the display once a second.
Everyday commands#
Task<br>Command
Add a local folder<br>appa folder add
Invite a device<br>appa folder invite
Join a shared folder<br>appa folder join --stdin
View health<br>appa folder status [folder]
View conflicts<br>appa folder conflicts
View saved revisions<br>appa folder history
Restore a revision<br>appa folder restore
Verify the audit log<br>appa folder audit --verify
Remove local Appa state<br>appa folder remove
remove leaves files alone. It does not revoke the device from the shared<br>folder. Only the folder owner can revoke a member:
appa folder revoke ~/notes<br>Revocation rotates the folder capability. Create new invitations for members<br>who should retain access.
Local folder inventory#
Appa can export and import a small, non-secret list of local folders. It is for<br>setting up local paths and sync modes in bulk, not for sharing folders.
appa folder template<br>appa folder validate<br>appa folder import<br>The default file is appa.toml. Entries contain a path, optional display name,<br>and local mode. They do not contain invitations, capabilities, identities, or<br>membership. folder import is additive: it registers missing folders and<br>updates local modes, but never removes a folder absent from the file.
Files and conflicts#
Add .appaignore at a folder root to keep matching paths local. It uses<br>gitignore syntax. Symlinks are ignored and non-Unicode filenames are rejected.
When devices edit the same file while disconnected, Appa keeps both versions.<br>Use appa folder conflicts to find the additional copies, then choose the<br>content you want.
Appa keeps...