Appa: P2P Syncthing Using Iroh

nerdypepper2 pts1 comments

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...

appa folder empty before codes local

Related Articles