Myco
app.myco
Arjen Tap phones to share apps and communicate through them — all offline, no app store, no accounts.
Share small apps with the people around you by tapping your phones together — like handing someone a card. It works completely offline: no internet, no app store, no sign-up. Tap to share, and the app lands on their phone, ready to open. Everything travels straight from phone to phone over Bluetooth, so it keeps working with no signal at all — on a plane, at a festival, off in the mountains, or when the network goes down. Once you've connected with someone you're in each other's circle: pass apps back and forth, chat, and see what others nearby are sharing — all without a connection. Apps open instantly and live on your phone; pin your favourites to the home screen like any other app. Comes with a built-in chat to get started, plus a growing set of community apps — from group messaging to tools for coordinating in an emergency. Your identity is a key that stays on your device, not an account in someone's database. Nothing needs a server. Nothing phones home. Built for anywhere the internet isn't.
First release: Jun 27, 2026, 15 total releases.
Most recent release: Sep 27, 2026.
Appears in 4 app stacks.
4,200 sats / 2 zaps received in the past year.
Sats Received
Underlying data available via MCP: app_zaps, app_releases.
Zap Count
Underlying data available via MCP: app_zaps, app_releases.
Releases
- Sep 27, 2026 0.8.1v0.8.1 makes apps **fast** and **complete** when the public relays aren't cooperating. - Apps show what your phone already has straight away, instead of waiting for the slowest relay. - Apps published on their author's own relays are found. - Broken relays are left alone for a while instead of slowing every lookup. - Open apps keep receiving new posts while you look at them. **No wire-format change from v0.8.0.** v0.8.1 and v0.8.0 phones pair and exchange apps and messages as before. Everything upgrades in place. ## At a glance
More…
- **A smooth first run.** The AppStore that comes with Myco keeps working after it updates itself: preinstalled apps start with the permissions they're known to need, so a same-author update that asks for no more doesn't stop to ask. When an app does ask for something new, it asks over the app itself, not on Myco's main screen, and its Install button is no longer refused because of a question waiting elsewhere. - **Instant reopen.** An app that reads Nostr data (the AppStore, for one) shows what your phone already holds at once, and waits only a moment for relays that answer quickly, so a newer profile still wins. Relays that answer later aren't wasted: what they send is saved for next time. - **Apps are found where their author publishes.** Myco now looks on the relays an app's author lists as theirs, and on the index relays where people's relay lists live. "Could not find app" for napplets like Minesweeper is fixed. - **Broken relays don't slow you down.** A relay that refuses Myco, is down, or has a bad certificate is skipped for a minute at first, up to half an hour if it keeps failing. Losing signal, switching networks or a Wi-Fi login page never counts against a relay. - **One bad relay can't cut you off.** A single relay answering with an error used to make Myco believe the internet was down and stop using every public relay for half a minute. Now any answer from the internet counts as the internet working. - **Live views stay live.** Relays stay connected while an app is watching (a feed, a chat, someone's app list), so new events arrive as they're published. - **Fewer connections.** A view with dozens of people now connects to a handful of relays that reach each person twice, instead of every relay any of them listed (up to forty). ## On your phone - **Profiles and app listings you've seen are kept.** The next look is instant and works offline, and people in your Circle can get them from your phone. Nothing is installed and no app files are downloaded. "Delete cache" in Storage clears these copies. With a custom relay set, nothing is kept. - **Installed apps keep the version you have files for.** A newer listing that reaches your phone doesn't replace the version an installed app runs, or the one it shares with your Circle, until its files are here. "Delete cache" no longer breaks an app that has a newer version waiting. ## Accounts - **A new guest gets better default relays**: relay.damus.io, relay.ditto.pub and relay.primal.net for posting and receiving, plus a direct-message relay list so other Nostr apps know where to send it private messages. Its profile and lists also go to four index relays, where other apps look people up. - **Guests made before this version keep their relay list.** Log out and start a new guest to get the new defaults. Accounts you log in to with an `nsec` or a signer app keep their own lists; Myco never creates or changes them. ## Known issues - **Profile pictures and app sizes in AppStore.** Napplets can only load files by their hash (`blossom:`); plain web images, including anything on nostr.build, show a placeholder, and an app page may show "Unknown" for size. `https:` image support is next. [#67](https://github.com/Origami74/myco/issues/67) covers finding Blossom servers properly. - **Busy apps still read some relays once instead of live.** An app with many open views can reach Myco's limit on live relay connections; past it, relays are read once rather than kept open. A shared connection per relay (roadmap N8) removes the limit. - **Paid relays.** Relays that require a paid account (nostr.wine, for one) refuse Myco's reads, so apps published only there can't be found. - **Open nsite windows and updates.** A napplet offers a restart when it's updated while open. An nsite doesn't yet, and an update can mix old and new files in an open nsite window until it reloads: [#71](https://github.com/Origami74/myco/issues/71). - **No "recently updated" mark on the Apps screen yet:** [#69](https://github.com/Origami74/myco/issues/69). - **A phone in your pocket finds nobody.** Myco winds its radios down when it isn't on screen. - **Wi-Fi Aware is shut off by deep Doze** on Android 13 and later after a long idle period: [#30](https://github.com/Origami74/myco/issues/30). - **A napplet's relay access is all-or-nothing,** and with the outbox grant it may name its own relays. Review the install sheet. ## Getting it - **Android:** install the APK from the [v0.8.1 release](https://github.com/Origami74/myco/releases/tag/v0.8.1), or via [Zapstore](https://zapstore.dev/apps/app.myco). - **From source:** run `cd android && ./gradlew assembleDebug` from a checkout of the v0.8.1 tag, with fips on its `feat/multi-path-switchover` branch. See [CONTRIBUTING.md](https://github.com/Origami74/myco/blob/main/CONTRIBUTING.md) for build prerequisites. Phones don't need updating together. The full per-release change history lives in [CHANGELOG.md](https://github.com/Origami74/myco/blob/main/CHANGELOG.md). Issues and discussion are at [github.com/Origami74/myco](https://github.com/Origami74/myco). ## Contributors Thanks to [@Origami74](https://github.com/Origami74) for maintaining the project, and to everyone who tested on real phones in real rooms. <!-- This file is published verbatim as the GitHub Release body by .github/workflows/release.yml — the leading `# Myco vX.Y.Z` heading and `**Released**:` line are stripped, and the auto-generated "What's Changed" section is appended below. Two consequences when writing the next one: 1. Keep the version in the H1 matching the tag, or the workflow falls back to generated notes rather than publishing stale text. 2. Use absolute links — relative paths 404 on a release page. --> ## What's Changed * feat: default inbox/outbox relays and a DM relay list for new guests by @Origami74 in https://github.com/Origami74/myco/pull/78 * fix: find napplets and nsites on their author's own relays (NIP-65) by @Origami74 in https://github.com/Origami74/myco/pull/79 * chore: index relays for relay lists and profiles, not app lookups by @Origami74 in https://github.com/Origami74/myco/pull/80 * perf: keep profiles, relay lists and manifests that pass through by @Origami74 in https://github.com/Origami74/myco/pull/81 * perf: stream napplet reads local-first; answer one-shot queries early by @Origami74 in https://github.com/Origami74/myco/pull/82 * fix: stamp a relay list as checked only after the refresh stored it by @Origami74 in https://github.com/Origami74/myco/pull/84 * perf: skip internet relays that keep failing by @Origami74 in https://github.com/Origami74/myco/pull/83 * fix: preinstalled napplets don't ask for their own updates; reviews open over the app by @Origami74 in https://github.com/Origami74/myco/pull/86 * chore: v0.8.1 release prep by @Origami74 in https://github.com/Origami74/myco/pull/85 **Full Changelog**: https://github.com/Origami74/myco/compare/v0.8.0...v0.8.1 - Sep 27, 2026 0.8.0v0.8.0 is about **you** and **your apps**. - Every install now has an account from the first launch. You can log in with your own key or with a signer app like Amber. - Apps find their own updates and share them with your Circle. - The built-in Discover tab is replaced by an app store that is itself an app. - The Apps screen now looks like the rest of Android. **No wire-format change from v0.7.0.** A v0.8.0 phone and a v0.7.0 phone still pair and exchange apps and messages. A v0.7.0 phone passes napplet updates along as plain events. Only v0.8.0 phones download and share them. Everything upgrades in place. ## At a glance
More…
- **Your own account.** Every install has a Nostr identity from the first launch: a guest with a name and a picture. Show your key, log out, or log in with your own `nsec`. - **Log in with Amber.** Sign in through a signer app (NIP-55). Your key never enters Myco, and every app signs through the signer. - **AppStore, an app store that is an app.** Browse napplets, read recommendations from people you follow, curate your own stacks, and install from a store-style page. It comes preinstalled and replaces the Discover tab. - **Updates find you.** Myco checks for app updates when you open it and every few hours. A napplet update one phone gets is passed to the rest of your Circle, even with no internet. - **A launcher-style Apps screen.** Round icons, five across on a phone and sized properly on a tablet. A small globe marks the apps that are websites. - **Back works inside apps.** The back gesture goes back a page inside a napplet, and never closes it. ## Your account Every install now has a Nostr identity from the first launch: a guest named `Myco Guest NNNNN`, with a picture made from the Myco logo in colours drawn from your key. When you're online, the profile goes out to the public relays, so other Nostr apps see you too. The top of Settings shows who you are. It opens the **Account** page, where you can: - **Show your secret key**, behind a warning never to share it. - **Log out.** The key is removed from the phone. Myco offers to show it first, because a guest key you never copied is gone for good. - **Log in** as a new guest, by pasting an `nsec`, or with a signer app. **Signer apps (NIP-55, e.g. Amber).** Your key stays in the signer and never enters Myco. Napplets sign through it, in the background once you let the signer remember them, otherwise on its approval screen. Every event it signs is checked against what was asked for before Myco uses it. A napplet that publishes now waits while you approve, instead of timing out after 30 seconds. A new guest follows three default accounts, so an app's friends feed isn't empty on day one. Open napplets hear about a login or logout straight away. ## AppStore The Discover tab is gone. In its place is **AppStore**, an app store for napplets that is itself a napplet. It comes preinstalled, and it reaches phones that were set up before this release too. - **Feed.** Napplets published to your relays, newest first, with search. An app's page shows its description, the permissions it asks for, and its details. **Install** opens Myco's own install review, and nothing installs until you tap Add. - **Stacks.** Curated lists of apps (NIP-51 app sets, the same kind Zapstore uses), shown as a carousel. A person's own recommendations are their default stack. Stacks come from you and the people you follow, plus two featured ones. - **Recommend.** Tap Recommend on an app to add it to your default stack. Apps your community recommends are marked with who recommended them, and only people you follow count. - **My stacks.** Create, rename and delete your own stacks, and add any app with **Add to stack**. - **Profiles.** Tap anyone's name to see their stacks and the napplets they published. - **Around you.** Napplets the phones near you hold, over the mesh. If you switched the Mesh permission off, AppStore shows how to turn it back on. After you tap **Add to my apps**, the review stays up with **Open** and **Done**, so you can start the app right away. An installed app's review now says **Already installed**. If it's missing from the phone, it offers **Download again**. Either way, the permissions you changed are kept. ## Updates that find you - **Automatic checks.** Myco checks installed nsites and napplets about 20 seconds after it comes to the foreground, and every 6 hours while it runs. Automatic checks are quiet and run at most every 30 minutes. **Check for updates** still runs straight away and shows its result. - **Through your Circle.** A newer version of a napplet you have, heard from a paired phone, is fetched (from that phone first), checked and kept, then passed on. It's the same way nsite updates already travelled. Updates found by the check are shared the same way. - **Restart when it suits you.** If you come back to an app that was updated while it was open, it offers a restart once. **Restart** opens the new version. **I'll restart later** keeps what you have, and you aren't asked again for that version. - **Safe to accept.** - Only the author's newer versions are taken, and a version never moves backwards. - An update never gets a permission you didn't review. Anything new it asks for goes through the review sheet when you next open it. - Downloads pushed by a peer are size-capped. ## The Apps screen The Apps screen now looks like a stock Android launcher: - Round icons, one size per screen: phone size on a phone, a step larger on a tablet. - Five across on a phone, and more on a tablet. - A website favicon sits on a white disc, the way the launcher frames older icons. - Napplets are the default and carry no mark. An **nsite**, a website Myco serves, has a small globe on the edge of its icon. ## Napplets - **Back goes back.** Myco delivers the back gesture to the napplet as an Escape key. An app that handles it stays open and goes back itself. One that doesn't is sent to the background: you land where you came from, and the app keeps running in Recents. An app can't trap you: after three backs it absorbed without a touch in between, the next back leaves it. Only a crashed or hung window is closed. For app authors: handle Escape and call `preventDefault()` when you went back. - **Mesh on by default, for now.** The tools authors publish with drop Myco's own permissions from what an app asks for, so no app could ask for Mesh. Until they keep it, every app gets Mesh like Relays and Identity. It's still on the install sheet, capped by App reach, and you can switch it off per app. Apps you already have get it at their next open, unless you switched it off. - **Links.** A napplet can ask to open a web link (your browser, after a one-tap confirm unless you just touched it). It can also point you at another napplet, which opens Myco's install review over the running app. - **Theme.** Napplets can match Myco's light or AMOLED look. A switch while the app is open reaches it without a restart. - **Who you follow.** Napplets can read your follows and mutes. - **Faster publishing.** A napplet's publish answers once the event is stored here and two relays have it. The rest finish in the background. - **Faster adding.** Adding a napplet fetches only its manifest for the review. The app itself downloads when you tap Add. ## Fixes - Napplets saw nobody logged in: `identity.getPublicKey` answered in the wrong field. - A removed app that nobody could deliver came back on its own. Remove now closes its window and keeps it gone until you add it again. - A manifest a napplet published over the mesh ignored the hop budget it chose. It now keeps to it. ## Known issues - **Profile pictures and app sizes in AppStore.** Napplets can only load files by their hash (`blossom:`). A picture on a server Myco doesn't know about, or any plain web image, shows a placeholder. An app page may show "Unknown" for size. [#67](https://github.com/Origami74/myco/issues/67) covers finding servers properly. - **Open nsite windows and updates.** A napplet offers a restart when it's updated while open. An nsite doesn't yet, and an update can mix old and new files in an open nsite window until it reloads: [#71](https://github.com/Origami74/myco/issues/71). - **No "recently updated" mark on the Apps screen yet:** [#69](https://github.com/Origami74/myco/issues/69). - **Nearby nsites aren't listed anymore.** The old Discover tab showed nsites your Circle held. AppStore lists napplets only. An nsite still arrives by a share, a scan or a link. - **A phone in your pocket finds nobody.** Myco winds its radios down when it isn't on screen. - **Wi-Fi Aware is shut off by deep Doze** on Android 13 and later after a long idle period: [#30](https://github.com/Origami74/myco/issues/30). - **A napplet's relay access is all-or-nothing,** and with the outbox grant it may name its own relays. Review the install sheet. ## Getting it - **Android:** install the APK from the [v0.8.0 release](https://github.com/Origami74/myco/releases/tag/v0.8.0), or via [Zapstore](https://zapstore.dev/apps/app.myco). - **From source:** run `cd android && ./gradlew assembleDebug` from a checkout of the v0.8.0 tag, with fips on its `feat/multi-path-switchover` branch. See [CONTRIBUTING.md](https://github.com/Origami74/myco/blob/main/CONTRIBUTING.md) for build prerequisites. Phones don't need updating together. The full per-release change history lives in [CHANGELOG.md](https://github.com/Origami74/myco/blob/main/CHANGELOG.md). Issues and discussion are at [github.com/Origami74/myco](https://github.com/Origami74/myco). ## Contributors Thanks to [@Origami74](https://github.com/Origami74) for maintaining the project, and to everyone who tested on real phones in real rooms. <!-- This file is published verbatim as the GitHub Release body by .github/workflows/release.yml — the leading `# Myco vX.Y.Z` heading and `**Released**:` line are stripped, and the auto-generated "What's Changed" section is appended below. Two consequences when writing the next one: 1. Keep the version in the H1 matching the tag, or the workflow falls back to generated notes rather than publishing stale text. 2. Use absolute links — relative paths 404 on a release page. --> ## What's Changed * fix: NAP-IDENTITY answers in the fields the spec names by @Origami74 in https://github.com/Origami74/myco/pull/54 * perf: answer outbox.publish at a two-relay quorum by @Origami74 in https://github.com/Origami74/myco/pull/55 * fix: removing an unreachable app makes it disappear and stay gone by @Origami74 in https://github.com/Origami74/myco/pull/56 * fix: napplet review on the manifest alone; download only on Add by @Origami74 in https://github.com/Origami74/myco/pull/57 * Account: a guest identity from first launch, nsec login and logout (N1) by @Origami74 in https://github.com/Origami74/myco/pull/58 * Log in with a signer app (NIP-55, Amber) (N2) by @Origami74 in https://github.com/Origami74/myco/pull/59 * feat(napplet): NAP-LINK and NAP-THEME, granted by default by @Origami74 in https://github.com/Origami74/myco/pull/60 * feat(napplet): ship Discover as a default napplet by @Origami74 in https://github.com/Origami74/myco/pull/61 * fix(napplet): let a publish wait for signer-app approval by @Origami74 in https://github.com/Origami74/myco/pull/62 * feat(napplet): review sheet says when an app is already installed by @Origami74 in https://github.com/Origami74/myco/pull/63 * feat: retire the native Discover tab for the Discover napplet (N5) by @Origami74 in https://github.com/Origami74/myco/pull/65 * feat: check for app updates on foreground and every 6 h by @Origami74 in https://github.com/Origami74/myco/pull/64 * feat(napplet): forward napplet updates to the Circle like nsite updates by @Origami74 in https://github.com/Origami74/myco/pull/66 * feat(apps): stock-launcher grid with round icons by @Origami74 in https://github.com/Origami74/myco/pull/68 * fix(napplet): deliver back to the napplet as Escape before closing by @Origami74 in https://github.com/Origami74/myco/pull/70 * feat(napplet): offer a restart when an open window's napplet was updated by @Origami74 in https://github.com/Origami74/myco/pull/72 * fix(napplet): grant mesh by default until the tooling keeps it in requires by @Origami74 in https://github.com/Origami74/myco/pull/74 * feat(napplet): keep the review sheet up after Add and offer Open by @Origami74 in https://github.com/Origami74/myco/pull/75 * chore: seed the AppStore napplet under its new name by @Origami74 in https://github.com/Origami74/myco/pull/77 * fix(napplet): back sends a napplet to the background, never closes it by @Origami74 in https://github.com/Origami74/myco/pull/76 * chore: v0.8.0 release prep by @Origami74 in https://github.com/Origami74/myco/pull/73 **Full Changelog**: https://github.com/Origami74/myco/compare/v0.7.0...v0.8.0 - Sep 16, 2026 0.7.0v0.7.0 is three releases in one. Myco turns from an nsite viewer into an app runtime: alongside nsites it runs **napplets** — single-file programs published on Nostr — each in its own sandbox, with the capabilities it uses granted by you. You can **send a file to a friend's phone** from any app, encrypted over the mesh, no hotspot and no internet. And **peers stay connected**: the mesh now holds every link it has to a phone and switches between them, which on real phones in a real room is the difference between a peer that flickers and one that stays. **No wire-format change from v0.6.x.** A v0.7.0 phone and a v0.6.1 phone still
More…
exchange apps and messages and pair. The new multi-path link messages are ignored by an older phone, which keeps linking over a single path as before. Everything on the device upgrades in place; the event store is migrated on first open. ## At a glance - **Peers stay connected.** A phone next to you is usually reachable more than one way; Myco now keeps every path, probes the spares, and moves traffic when the active one degrades instead of dropping the peer and finding it again from scratch. Built on fips's multi-path branch. The status panel shows each link, the active one lit. - **Send a file.** Share anything from another app, pick a paired phone, and it arrives encrypted over the mesh — or tap a contact on the Circle tab. The other phone is asked first; the file lands in Downloads/Myco. Two phones on the same Wi-Fi move it in seconds rather than minutes. - **Napplets.** Add one by pasting an `naddr`, scanning a QR, or bumping a friend's phone — the friend's phone is asked first, so it arrives with no internet. Review what it asks for, and it lands on the Apps grid with a 🦆 badge and its own full-screen window. Discover suggests three to start with, and DingDong comes preinstalled. - **Permissions you can see and change.** The install sheet lists everything a napplet will be able to do before you agree. Hold a tile → Manage permissions to switch each capability off or on; a change is live. An update that asks for more than you were shown goes back through the sheet first. - **Same-Wi-Fi discovery has a switch,** and peers that dropped off the network come back on their own. - **A crashed page cannot take Myco down.** A window whose renderer dies closes on its own; the mesh, the relay and your other windows keep running. ## Napplets An nsite is a website Myco serves from the mesh. A napplet is a program: one HTML file, signed by its author, that asks the phone running it for things — who you are, what your relays hold, what is on the phones around you, a picture by its hash. NIP-5D defines the shape; Myco implements the runtime. Each napplet runs in a sandboxed frame inside a trusted page Myco ships. It has no network of its own: no fetch, no WebSocket, no storage. Everything it does goes through a message channel to Myco, which checks the request against what you granted and does the work on the napplet's behalf. This release implements five capability families, in the words the install sheet uses: - **Identity** — a user key, separate from the mesh device key, created the first time a napplet opens. Napplets learn who you are socially; the device is never named in anything signed by that key. - **Relays** — read and post as you on the relay pool: this phone's relay and the public relays when reachable. Posting excludes your profile, contacts, relay list and deletions for now; a napplet that tries gets a refusal, not a silent drop. - **Outbox** — an author's notes from the relays they publish to, whether that is a phone across the room or a public relay, with an honest `incomplete` when a relay never answered. - **Mesh** — Myco's own: publish to everyone nearby with a chosen hop count and pull what was missed. Settings › App reach caps how far apps may send and look. - **Pictures and files** — by content hash: this phone first, then a friend's phone over the mesh, then the public servers. What is fetched is kept for the next app and the next phone in the room. Versions are pinned to bytes: the napplet you open is always the one whose file is on your phone, and a newer manifest with nothing behind it cannot take an app off the air. "Check for updates" refreshes napplets beside the nsite check. ## Send a file Share a photo, a document, anything, from any app on the phone: Myco appears in the system Sharesheet, you pick one of your paired phones, and the file goes out over the mesh — encrypted to that phone's key, over whichever path reaches it, with no hotspot and no internet. The Circle tab has the same door: tap a contact and choose **Send a file**. The receiving phone is asked before anything is transferred and can say no. A transfer in flight shows on the Circle tab beside pairing requests, so a send that is still waiting is visible from anywhere in the app and can be cancelled; an offer nobody answers gives up after ten minutes. Received files land in Downloads/Myco. Two phones on the same Wi-Fi now find each other over the network rather than Bluetooth — Myco announces itself on the local network the way a fips node does — and a file that took minutes over Bluetooth takes seconds over UDP. Bluetooth still works when there is no shared network; it is just slower. A transfer survives a flaky link. If a control message — the offer, the accept, the "ready" — is lost while Bluetooth is re-dialling, each side keeps re-sending what it is waiting to hear until the transfer moves on, and a large file over a slow hop is only given up when nothing has arrived for thirty seconds, not on a fixed clock. ## The mesh holds more than one link This is the change that matters most in a room. A phone next to you is usually reachable more than one way — Bluetooth and Wi-Fi Aware, or Bluetooth and the local network. Until now Myco used one and forgot the other, and when that one failed the peer was gone until it was found again from scratch: a Bluetooth hiccup, a Wi-Fi Aware teardown, a phone walking behind a wall, each one a disconnect and a re-discovery. The mesh now keeps every path to a peer, probes the standbys so they are known to work before they are needed, and switches when the active one degrades. Two connected phones stay connected through the hiccups that used to drop them, without re-pairing or re-discovering. In testing on real phones this is the largest single reliability gain Myco has had; the peers pill stops flickering. The status panel shows it directly: one icon per lane, the lit one carrying traffic, the standbys faded. A phone on Bluetooth and Wi-Fi at once is listed under both, and peers that never told us a name are shown by their shortened npub instead of a placeholder. This is the first release built on fips's `feat/multi-path-switchover` branch, which is experimental upstream. The link messages it adds are ignored by older nodes, so mixed rooms keep working; the multi-path link itself only forms between two v0.7.0 phones. ## Storage The relay Myco keeps inside the app is now an LMDB database. Queries are indexed, writes are one small transaction per event, and the store is ready for the mesh sync that comes next. Chat and other expiring messages stay in memory and never touch disk, as before. A store from an earlier version is migrated on first open; if any event fails to migrate, the old file is kept and nothing is lost. ## Known issues - **A phone in your pocket finds nobody.** Myco winds its radios down when it is not on screen, so two idle phones in a room will not discover each other until one is opened. - **Wi-Fi Aware is shut off entirely by deep Doze** on Android 13 and later after a long idle period — [#30](https://github.com/Origami74/myco/issues/30). - **A napplet's relay access is all-or-nothing.** The `relay` grant lets a napplet read everything your relay holds, including what other napplets stored. A finer permission model is next on the roadmap. - **A napplet may name its own relays.** With the outbox grant it can ask Myco to talk to a relay it chooses; that is by the specification, and it is an exfiltration channel. Review the install sheet. - **Napplets do not replicate over the mesh yet.** A friend's phone can hand you one at install time; keeping them in sync afterwards is roadmap. - Phones still do not always connect to every peer around them. - The interface can lag while the mesh is syncing. - Exit-node mode still covers proxy-aware apps only; other apps and QUIC/UDP traffic keep using the phone's normal connection. ## Getting it - **Android**: install the APK from the [v0.7.0 release](https://github.com/Origami74/myco/releases/tag/v0.7.0), or via [zapstore](https://zapstore.dev/apps/app.myco). - **From source**: `cd android && ./gradlew assembleDebug` from a checkout of the v0.7.0 tag, with fips on its `feat/multi-path-switchover` branch. See [CONTRIBUTING.md](https://github.com/Origami74/myco/blob/main/CONTRIBUTING.md) for build prerequisites. Phones do not need updating together, but the multi-path link only forms between two phones on v0.7.0. The full per-release change history lives in [CHANGELOG.md](https://github.com/Origami74/myco/blob/main/CHANGELOG.md). Issues and discussion at [github.com/Origami74/myco](https://github.com/Origami74/myco). ## Contributors Thanks to the napplet authors whose apps were the test bed — Mapplets found two runtime gaps on the first run — and to [@Origami74](https://github.com/Origami74) for maintaining the project. <!-- This file is published verbatim as the GitHub Release body by .github/workflows/release.yml — the leading `# Myco vX.Y.Z` heading and `**Released**:` line are stripped, and the auto-generated "What's Changed" section is appended below. Two consequences when writing the next one: 1. Keep the version in the H1 matching the tag, or the workflow falls back to generated notes rather than publishing stale text. 2. Use absolute links — relative paths 404 on a release page. --> ## What's Changed * Test/hotspot file share on main by @shaibearary in https://github.com/Origami74/myco/pull/33 * Feat/paired myco file sharing by @shaibearary in https://github.com/Origami74/myco/pull/34 * feat(aware): carry several Wi-Fi Aware peers with a chipset-sized socket pool by @Origami74 in https://github.com/Origami74/myco/pull/35 * chore(fips): build against fips master by @Origami74 in https://github.com/Origami74/myco/pull/42 * feat(android): send a file from a Circle contact's sheet by @fr34aky in https://github.com/Origami74/myco/pull/36 * fix(core): re-send a file transfer's pending control message by @fr34aky in https://github.com/Origami74/myco/pull/37 * fix(core): bound a file download by silence, not total time by @fr34aky in https://github.com/Origami74/myco/pull/38 * feat(android): advertise the LAN lane over mDNS by @fr34aky in https://github.com/Origami74/myco/pull/39 * fix: stop calling a peer "Wi-Fi Aware" when Aware is neither carrying it nor running by @Origami74 in https://github.com/Origami74/myco/pull/44 * fix(android): self-heal the LAN mDNS browse by @fr34aky in https://github.com/Origami74/myco/pull/41 * fix(ui): add clear icon to FirstRunNameDialog for easier name management by @shaibearary in https://github.com/Origami74/myco/pull/46 * fix(ui): invite a nearby peer under their name, not your own by @shaibearary in https://github.com/Origami74/myco/pull/47 * build: add a Nix flake for the toolchain by @Origami74 in https://github.com/Origami74/myco/pull/48 * docs: update CLAUDE.md to build against fips master by @shaibearary in https://github.com/Origami74/myco/pull/49 * Multi-path peer view, Network discovery switch, and tunnel/LAN/Aware reliability fixes by @Origami74 in https://github.com/Origami74/myco/pull/50 * ci: gate clippy; exclude reference/fips from the workspace by @Origami74 in https://github.com/Origami74/myco/pull/51 * Napplets: a NIP-5D runtime beside nsites by @Origami74 in https://github.com/Origami74/myco/pull/52 * chore: v0.7.0 release prep by @Origami74 in https://github.com/Origami74/myco/pull/53 ## New Contributors * @shaibearary made their first contribution in https://github.com/Origami74/myco/pull/33 * @fr34aky made their first contribution in https://github.com/Origami74/myco/pull/36 **Full Changelog**: https://github.com/Origami74/myco/compare/v0.6.0...v0.7.0 - Aug 21, 2026 0.6.1A maintenance release with one fix in it. v0.6.0 stopped Wi-Fi Aware links from dying every minute; this one stops the fast lane from carrying only a single phone. Everything else in v0.6.0 is unchanged. **No wire-format change.** A v0.6.1 phone and a v0.6.0 phone pair and exchange events exactly as before, and a phone that has not updated is still reachable. Upgrade in place, one device at a time if you like. ## At a glance
More…
- **Wi-Fi Aware reaches every phone in the room, not just one.** In a room of three, the fast lane carried one and quietly refused the rest. Each phone now gets a connection of its own, as many at once as its chipset supports. ## One phone at a time Wi-Fi Aware is the fast lane — two phones talking directly over Wi-Fi, no router and no internet. In a room with several Myco phones it carried exactly one, and requests for the others came back refused in about three milliseconds while Android reported seven of eight connections free. The obvious reading is a hardware limit, and it was wrong. Asking the phones directly: a Pixel 7 Pro supports eight simultaneous Aware connections and a Galaxy A52s two. Neither was anywhere near its ceiling. The limit was Myco's own. Android delivers each Aware connection as a separate network, and a network socket can be attached to exactly one of them. Myco had a single socket for the whole lane, so the moment a second phone connected, the first stopped being reachable — its link still up, carrying nothing. Faced with that, the app deliberately refused to open a second connection at all, which was the right call for a design that could not have used one. Now the lane opens a socket per phone, and asks the chipset how many it can hold rather than assuming. On a Pixel that is eight; on an A52s, two. Each phone is told which one to talk to as part of the introduction the two devices already exchange, so older builds keep working unchanged. Confirmed on three phones in a room, all connected over the fast lane at once. ## Known issues - **A phone in your pocket finds nobody.** Myco winds its radios down when it is not on screen, so two idle phones in a room will not discover each other until one is opened. This is the largest remaining gap between how the mesh behaves in a test and how it behaves in a day. - **Wi-Fi Aware is shut off entirely by deep Doze** on Android 13 and later after a long idle period — [#30](https://github.com/Origami74/myco/issues/30). - **Aware links still churn for the first few minutes** after launch. - **A custom Blossom server has not been tested against a third-party implementation.** The relay side has been confirmed with Citrine; the blob side has only been run against Myco's own. - **A relay shared with another Nostr app will not deliver its messages live.** They arrive when a screen is reopened rather than as they happen. Only affects a relay something else also writes to. - Phones still do not always connect to every peer around them. - The interface can lag while the mesh is syncing. - Exit-node mode still covers proxy-aware apps only; other apps and QUIC/UDP traffic keep using the phone's normal connection. ## Getting it - **Android**: install the APK from the [v0.6.1 release](https://github.com/Origami74/myco/releases/tag/v0.6.1), or via [zapstore](https://zapstore.dev/apps/app.myco). - **From source**: `cd android && ./gradlew assembleDebug` from a checkout of the v0.6.1 tag. See [CONTRIBUTING.md](https://github.com/Origami74/myco/blob/main/CONTRIBUTING.md) for build prerequisites. **Phones do not have to be updated together this time.** The wire format is unchanged from v0.6.0. The full per-release change history lives in [CHANGELOG.md](https://github.com/Origami74/myco/blob/main/CHANGELOG.md). Issues and discussion at [github.com/Origami74/myco](https://github.com/Origami74/myco). ## Contributors Thanks to everyone running builds on real phones — the one-peer limit was found by reading a capability report off two devices and noticing it disagreed with what the app believed — and to [@Origami74](https://github.com/Origami74) for maintaining the project. <!-- This file is published verbatim as the GitHub Release body by .github/workflows/release.yml — the leading `# Myco vX.Y.Z` heading and `**Released**:` line are stripped, and the auto-generated "What's Changed" section is appended below. Two consequences when writing the next one: 1. Keep the version in the H1 matching the tag, or the workflow falls back to generated notes rather than publishing stale text. 2. Use absolute links — relative paths 404 on a release page. --> **Full Changelog**: https://github.com/Origami74/myco/compare/v0.6.0...v0.6.1 - Aug 19, 2026 0.6.0v0.6.0 is the release where the previous one's instrumentation pays off. v0.5.0 could tell you *that* peers were failing; this one identifies why the fastest lane kept collapsing and fixes it. Alongside that, Myco's data stops being locked inside the app: you can point it at a Nostr relay you run and keep using it exactly as before. **This release changes the mesh wire format.** Two phones must both be on v0.6.0 to exchange anything — an older build and this one will not pass events or pair. Everything on the device upgrades in place with no data loss.
More…
## At a glance - **Wi-Fi Aware links stop dying every minute.** The fast lane was being torn down by phone firmware on a 64-second cycle. It turned out to be Myco's own doing, not radio interference, and teardowns are now roughly one in seven minutes. - **Your data can live on a relay you run.** Settings → Storage → Advanced takes a relay URL — [Citrine](https://github.com/greenart7c3/Citrine) on the same phone, or a relay on your own network — and Myco uses it as its store. A Blossom server for app files can be set the same way. Both are optional and off by default. - **Pairing has its own door.** Devices you have not paired with can no longer reach the port that serves your apps and messages at all. - **Nobody can add themselves to your Circle.** A pairing acceptance is only acted on if it answers an invitation you actually sent. - **Apps open without waiting on a slow phone in the room.** ## The 64-second death Wi-Fi Aware is the fast lane: two phones talking directly over Wi-Fi with no router and no internet. It had a habit of coming up, carrying traffic for about a minute, and being killed by the phone's own firmware — then repeating, forever. Radio interference was the obvious suspect. Wi-Fi and Bluetooth share one chip and one antenna on these phones, so a Bluetooth scan drowning out a Wi-Fi data path is exactly the sort of thing that happens. Backing the Bluetooth scan right off changed nothing at all: the teardowns kept coming on the same cycle. The real cause was Myco arguing with itself. It kept re-establishing the same peer alternately over Bluetooth and over Wi-Fi Aware, and the firmware answered that churn by ending the data path. Myco now leaves a peer alone on Aware instead of also dialling it over Bluetooth — and with *both* radios scanning harder than before, teardowns dropped from one a minute to one in seven. That the fix works while Bluetooth is busiest is what rules interference out for good. Some churn remains in the first few minutes after launch, when Bluetooth legitimately connects a peer before Aware is ready. ## Your data, your relay Myco keeps everything in a small Nostr relay and blob store built into the app. That is still the default and still what most people should use. But it meant your apps and messages lived somewhere only Myco could reach. The reason it had to be Myco's own relay was that Myco wrote its mesh bookkeeping — how far a message should travel, which query it belongs to — *into* the messages themselves. Any relay holding that data had to understand Myco. That bookkeeping now travels alongside messages rather than inside them, so what gets stored is ordinary Nostr, and an ordinary relay can hold it. Under **Settings → Storage → Advanced** you can now point Myco at a relay you run. It has been confirmed working with Citrine on the same phone. If the relay becomes unreachable, Myco says so plainly — with a warning on the Settings screen rather than apps that silently refuse to load. Two things are worth knowing before you switch. Myco trusts a relay you choose to check signatures, so only use one you control. And *Delete* only ever clears what is on this device; a relay you run is not Myco's to empty, and it says so. ## Pairing became its own thing Pairing is what creates your Circle, and your Circle is what grants access to everything else. Until now it arrived on the same port that serves your apps — which meant that port had to stay open to strangers, and every pairing request was written into your event store as a side effect. Pairing now has a service of its own, and it is the only thing an unpaired device can reach. The ports that serve your content refuse anyone you have not paired with before a connection is even established. While separating it, one weakness became obvious and is fixed here: a pairing *acceptance* used to be taken at face value, so a device could send one unasked and land in your Circle. Myco now only acts on an acceptance that answers an invitation you actually sent, and that was addressed to your device. ## Known issues - **A phone in your pocket finds nobody.** Myco winds its radios down when it is not on screen, so two idle phones in a room will not discover each other until one is opened. This is the largest remaining gap between how the mesh behaves in a test and how it behaves in a day. - **Wi-Fi Aware is shut off entirely by deep Doze** on Android 13 and later after a long idle period — [#30](https://github.com/Origami74/myco/issues/30), separate from the teardown fixed above. - **Aware links still churn for the first few minutes** after launch. - **A custom Blossom server has not been tested against a third-party implementation.** The relay side has been confirmed with Citrine; the blob side has only been run against Myco's own. - **A relay shared with another Nostr app will not deliver its messages live.** They arrive when a screen is reopened rather than as they happen. Only affects a relay something else also writes to. - Phones still do not always connect to every peer around them. - The interface can lag while the mesh is syncing. - Exit-node mode still covers proxy-aware apps only; other apps and QUIC/UDP traffic keep using the phone's normal connection. ## Getting it - **Android**: install the APK from the [v0.6.0 release](https://github.com/Origami74/myco/releases/tag/v0.6.0), or via [zapstore](https://zapstore.dev/apps/app.myco). - **From source**: `cd android && ./gradlew assembleDebug` from a checkout of the v0.6.0 tag. See [CONTRIBUTING.md](https://github.com/Origami74/myco/blob/main/CONTRIBUTING.md) for build prerequisites. **Update every phone together.** The mesh wire format changed, so a v0.6.0 phone and an older one cannot exchange events or pair. The full per-release change history lives in [CHANGELOG.md](https://github.com/Origami74/myco/blob/main/CHANGELOG.md). Issues and discussion at [github.com/Origami74/myco](https://github.com/Origami74/myco). ## Contributors Thanks to everyone running builds on real phones — the Wi-Fi Aware teardown was found and narrowed by watching two devices rather than by any test — and to [@Origami74](https://github.com/Origami74) for maintaining the project. <!-- This file is published verbatim as the GitHub Release body by .github/workflows/release.yml — the leading `# Myco vX.Y.Z` heading and `**Released**:` line are stripped, and the auto-generated "What's Changed" section is appended below. Two consequences when writing the next one: 1. Keep the version in the H1 matching the tag, or the workflow falls back to generated notes rather than publishing stale text. 2. Use absolute links — relative paths 404 on a release page. --> ## What's Changed * Rebuild on current FIPS, and make the radios actually hold by @Origami74 in https://github.com/Origami74/myco/pull/27 * Status panel behind the pill, and a device name that is actually yours by @Origami74 in https://github.com/Origami74/myco/pull/29 * Swappable relay and blob store, and Wi-Fi Aware links that hold by @Origami74 in https://github.com/Origami74/myco/pull/31 * chore: v0.6.0 release prep by @Origami74 in https://github.com/Origami74/myco/pull/32 **Full Changelog**: https://github.com/Origami74/myco/compare/v0.5.0...v0.6.0 - Aug 9, 2026 0.5.0v0.5.0 is about two things: being able to see *why* phones fail to find each other, and links that carry you to a place inside an app rather than just to the app. The peering work in this release is deliberately diagnostic rather than curative. Myco could tell you a peer was unreachable but not why, which meant every fix was a guess. The Dev tab now reports what the radios are actually doing and what each connection attempt did, so the next release can fix causes instead of symptoms. Three real bugs fell out of building that instrumentation and are fixed here.
More…
It upgrades from v0.4.2 in place with no data loss, and changes no ports or wire formats. ## At a glance - **Deep links reach inside an app.** `myco://app/<host>/<path>` opens an app at a particular place in it. If you don't have that app, Myco fetches it from whoever nearby is carrying it and then opens it where the link pointed — five seconds later if a peer is in the room, or after a reboot next week if nobody was. - **Apps can have their own routes.** A path an app doesn't list as a file now reaches the app's own router instead of a 404. - **The Dev tab answers "is it me or is it them"** before you scroll: a radio self-check first, then peers you can expand in place to see why a connection failed — the BLE role chosen, how long discovery took, dropped sends, signal strength, and recent attempts with outcomes and timestamps. - **That history survives a force-stop**, so a failure you saw yesterday is still there today. - **Distant peers are reachable again.** Anyone who was not a direct neighbour had been unreachable since mesh names were introduced. - **Opening the Discover tab no longer installs everything in it.** - **Wi-Fi Aware is on out of the box** — a peering lane nobody switches on is a lane that silently never carries anyone. - **A first-run intro**: a spark, filaments growing into the Myco mark, and a pupil you fall through into the app. ## Links that survive the wait The interesting half of a deep link is what happens when the app isn't installed. The link is kept — through the sync, through the app being swiped away, through a reboot — and spent on that app's **first** open, whether Myco opens it for you the moment it lands or you tap it in the Apps grid yourself a week later. Deep links deliberately carry **no pairing secret and no sender identity**. They travel through channels nobody controls — a chat message, a printed QR, someone's screenshot — so anything inside one is public and replayable, which is the opposite of what a pairing secret needs to be. Pairing keeps its own face-to-face carrier. Losing the sender hint costs nothing: Myco already asks every peer in your Circle in turn, so a link with nobody attached still finds the app through whoever happens to have it. Two things to know before you rely on them: - Android does not make `myco://` links tappable in most chat apps — only `http`/`https` and a few others get that treatment. QR, an NFC tap, and Myco's own scanner are the channels that work today. - If Myco itself isn't installed, a `myco://` link does nothing at all. Both need an `https://` companion link, which is not in this release. Design notes are in [docs/design/deep-links.md](https://github.com/Origami74/myco/blob/main/docs/design/deep-links.md). ## Honest instruments A fact the app genuinely cannot observe now reads `unknown` rather than guessing `off`, and a peer with nothing recorded says so rather than showing a fabricated history. That distinction matters more than it sounds: the previous release's peering bugs were hunted with inference, and inference is what produced the wrong theories. The attempt log is written one JSON record per line, so a truncated or damaged file costs the damaged lines and not the whole history — and a file that mostly fails to parse is copied aside before anything is rewritten, rather than being quietly replaced with a shorter one. ## Known issues Nothing in this release fixes the following. The next one is about mesh reliability, and it is what the instrumentation above was built for. - **Phones still do not always connect to every peer around them.** Some devices connect to none, or to one or two out of many nearby. The suspected cause is handshake role selection; it is now being investigated with device evidence rather than guesses. - **Peering can stall after a phone's Wi-Fi address rotates**, until the other node's previous entry expires — about a minute. The equivalent Bluetooth case is fixed in this release; the Wi-Fi side is tracked upstream as [fips#130](https://github.com/jmcorgan/fips/issues/130). - **The interface can lag while the mesh is syncing.** - **The deep-link round trip is unverified across two devices.** Its parts are covered by tests, but the end-to-end path — follow a link on a phone without the app, wait for the mesh fetch, land on the right page — has not yet been run on hardware. - Exit-node mode still covers proxy-aware apps only; other apps and QUIC/UDP traffic keep using the phone's normal connection. - On macOS, an exit node's proxy needs allowing through the Application Firewall before it accepts mesh connections. ## Getting it - **Android**: install the APK from the [v0.5.0 release](https://github.com/Origami74/myco/releases/tag/v0.5.0), or via [zapstore](https://zapstore.dev/apps/app.myco). - **From source**: `cd android && ./gradlew assembleDebug` from a checkout of the v0.5.0 tag. See [CONTRIBUTING.md](https://github.com/Origami74/myco/blob/main/CONTRIBUTING.md) for build prerequisites. The full per-release change history lives in [CHANGELOG.md](https://github.com/Origami74/myco/blob/main/CHANGELOG.md). Issues and discussion at [github.com/Origami74/myco](https://github.com/Origami74/myco). ## Contributors Thanks to everyone who contributed testing and bug reports — the Discover install bug and the distant-peer failure were both found by users rather than by tests — and to [@Origami74](https://github.com/Origami74) for maintaining the project. <!-- This file is published verbatim as the GitHub Release body by .github/workflows/release.yml — the leading `# Myco vX.Y.Z` heading and `**Released**:` line are stripped, and the auto-generated "What's Changed" section is appended below. Two consequences when writing the next one: 1. Keep the version in the H1 matching the tag, or the workflow falls back to generated notes rather than publishing stale text. 2. Use absolute links — relative paths 404 on a release page. --> ## What's Changed * Phase 01: Make Peering Observable — plus early PEER-05/UX-01/PEER-03 fixes by @Origami74 in https://github.com/Origami74/myco/pull/25 * First-run intro: grow the mark, dive through the pupil into the app by @Origami74 in https://github.com/Origami74/myco/pull/24 * Deep links: myco://app/<host>/<path>, and an app that arrives before it opens by @Origami74 in https://github.com/Origami74/myco/pull/26 **Full Changelog**: https://github.com/Origami74/myco/compare/v0.4.2...v0.5.0 - Aug 4, 2026 0.4.2v0.4.2 is a small, cosmetic release: Myco now follows your phone's light or dark theme, and its dark theme is true AMOLED black. Nothing about the mesh, the protocol, or your data changed. It upgrades from v0.4.1 in place with no data loss, and changes no ports or wire formats. ## At a glance - **Myco follows the Android system theme** — set your phone to dark and the app
More…
is dark, with no setting to find inside Myco. - **Dark is pure black** (`#000000`) for backgrounds, surfaces, elevated containers, and the launch screen, so an OLED panel actually turns those pixels off. - **Both themes stay legible.** Fixed light colours were replaced with Material 3 semantic roles across every screen, so text and controls keep their contrast either way. - **The colours that mean something still mean it** — emerald is still the brand accent, and pending and warning states keep their own distinct amber rather than collapsing into the theme. - **System bars adapt**, so the status and navigation icons stay readable edge-to-edge in both themes. ## Scanning still works The QR card stays white in dark mode on purpose. Scanners read a dark code on a light field far more reliably than the inverse, and pairing is not the place to lose a scan to aesthetics. ## Known issues Nothing in this release addresses the following. They are the subject of the next release, which is about mesh reliability. - **Phones do not always connect to every peer around them.** Some devices connect to none, or to one or two out of many nearby. The suspected cause is a failure during handshake role selection; it is being investigated with instrumentation rather than guesses. - **Peering can stall after a phone's Wi-Fi or Bluetooth address rotates**, until the other node's previous entry expires — about a minute. Phones that rotate their address per connection (GrapheneOS by default) hit this most. Tracked upstream as [fips#130](https://github.com/jmcorgan/fips/issues/130). - **Opening one app from Discover can pin others** into your Library alongside it. - **The interface can lag while the mesh is syncing.** - Exit-node mode still covers proxy-aware apps only; other apps and QUIC/UDP traffic keep using the phone's normal connection. - On macOS, an exit node's proxy needs allowing through the Application Firewall before it accepts mesh connections. ## Getting it - **Android**: install the `myco-v0.4.2-arm64.apk` attached below, or get it via [zapstore](https://zapstore.dev/apps/app.myco). - **From source**: `cd android && ./gradlew assembleDebug` from a checkout of the v0.4.2 tag. See [CONTRIBUTING.md](https://github.com/Origami74/myco/blob/main/CONTRIBUTING.md) for build prerequisites. The full per-release change history lives in [CHANGELOG.md](https://github.com/Origami74/myco/blob/main/CHANGELOG.md). ## Contributors Dark mode was contributed by @Datawav in https://github.com/Origami74/myco/pull/23. Thanks also to everyone who contributed testing and bug reports, and to @Origami74 for maintaining the project. **Full Changelog**: https://github.com/Origami74/myco/compare/v0.4.1...v0.4.2 - Jul 29, 2026 0.4.1## What's Changed * Reach Circle members at any hop count, and address peers by npub by @Origami74 in https://github.com/Origami74/myco/pull/21 * Circle, Discover and pairing UX — and stop the AP lane evicting its own session by @Origami74 in https://github.com/Origami74/myco/pull/22 **Full Changelog**: https://github.com/Origami74/myco/compare/v0.4.0...v0.4.1
- Jul 29, 2026 0.4.0# Myco v0.4.0 **Released**: 2026-07-29 v0.4.0 is about **reaching the mesh by name**. A node's npub is now an address any app on the phone can use: type `http://<npub>.fips/` into an ordinary browser and it loads, over Bluetooth or Wi-Fi, with no internet involved. Building on that, an experimental **exit-node mode** lets a phone with no connection of its own browse the public web through a mesh node that egresses for it.
More…
It also fixes the Wi-Fi AP lane, which could fail to connect on any phone that also had mobile data — the node saw every handshake arrive while the phone saw nothing come back. It upgrades from v0.3.0 in place with no data loss; your identity (nsec), Circle, and installed apps are preserved. No ports or wire formats changed, so a v0.4.0 phone and a v0.3.0 phone still sync over the mesh. ## At a glance - **`<npub>.fips` works everywhere on the device** — any browser or app can open a mesh node by name, not just Myco's own gateway. - **Exit-node mode (developer preview)** — browse the public internet through a mesh peer, addressed by its npub. For a phone with no internet at all. - **Wi-Fi AP lane actually connects** — no longer defeated by having mobile data on at the same time, and no longer stuck dialling an unreachable address. ## What's new ### Mesh nodes have names now Every node's npub doubles as a hostname: `<npub>.fips`. Myco's tunnel advertises an in-mesh resolver, and answers those names by deriving the address from the public key — pure computation, no lookup, no upstream server, works fully offline. Because the answer comes from the tunnel rather than from Myco, **every app on the phone** gets it. Open `http://<npub>.fips/` in your browser and you are talking to that node over the mesh. Names that are not `.fips` are passed to your normal resolvers untouched, so this does not take over DNS on the device. ### Exit-node mode (developer preview) A phone with no internet — only a Bluetooth or Wi-Fi link to the mesh — can now browse the web, by routing through an HTTP proxy on a mesh node that does have a connection. Set the exit under **Settings → Developer → Exit node**, addressed by npub: ``` <npub>.fips:8080 ``` The exit does the DNS and the egress, so the phone never needs to resolve a public name or hold a route to one. It also need not be a direct peer — FIPS forwards multi-hop to it. `.fips` addresses bypass the exit and stay on the mesh. This covers **proxy-aware apps** — browsers. Other apps and QUIC/UDP traffic keep using the phone's normal connection. The runbook, including how to run the exit daemon, is in [docs/how-to/exit-node-demo.md](docs/how-to/exit-node-demo.md). ## Reliability: the Wi-Fi AP lane connects Two separate faults, either of which was enough to stop it: The mesh socket **was not bound to the Wi-Fi network**. A local-only access point never passes the system's internet-validation check, so with mobile data also up the OS steered the socket to the validated network and quietly discarded the AP's replies. The symptom was maddening from either end: the node's counters showed every handshake arriving, while the phone re-sent them forever. The socket is now pinned to the network the peer is actually on. Myco also **dialled the wrong address**. A fips node advertises one address per interface, and only the interface facing you answers — nothing in the advert says which that is. Myco took the first and could sit retrying an unreachable one indefinitely. It now keeps every advertised address and works through them until the peer connects, then stays on the one that worked. ## Known issues - **Peering can stall after a Wi-Fi reconnect** until the node's previous peer entry expires, about a minute. Phones that rotate their Wi-Fi MAC on every connection — GrapheneOS does by default — hit this most, because the phone's mesh-facing address changes each time and the node keeps answering the old one. Turning the mesh off, waiting for the peer to disappear on the node, and turning it back on clears it. Tracked upstream as [fips#130](https://github.com/jmcorgan/fips/issues/130). - **Exit mode is browsers-only.** `setHttpProxy` is the only system-wide proxy hook available to a VPN app, so non-proxy-aware apps and UDP/QUIC traffic are unaffected by it. Capturing everything needs a userspace network stack, which is the next step. - On macOS, an exit node's proxy will not accept mesh connections until the binary is allowed through the Application Firewall — inbound TCP is dropped silently while ICMP still works, which makes it look like a routing problem. ## Getting it - **Android**: install the v0.4.0 APK from the [release page](https://github.com/Origami74/myco/releases/tag/v0.4.0), or via [zapstore](https://zapstore.dev/apps/app.myco). - **From source**: `cd android && ./gradlew assembleDebug` from a checkout of the v0.4.0 tag. See [CONTRIBUTING.md](CONTRIBUTING.md) for build prerequisites. The full per-release change history lives in [CHANGELOG.md](CHANGELOG.md). Issues and discussion at [github.com/Origami74/myco](https://github.com/Origami74/myco). ## Contributors Thanks to everyone who contributed code, design, testing, or bug reports to this release — and to [@Origami74](https://github.com/Origami74) for maintaining the project. - Jul 25, 2026 0.3.0# Myco v0.3.0 **Released**: 2026-07-25 v0.3.0 is about **staying up and staying honest**: the mesh survives the crashes, stalls, and silent failures that used to bite in the field, and the app now tells you plainly when a transport is enabled but can't actually run. It also brings the mesh on/off control and live reachability into the top status pill, and adds an experimental **Wi-Fi AP lane** for connecting to LAN fips nodes over Wi-Fi.
More…
It upgrades from v0.2.0 in place with no data loss; your identity (nsec), Circle, and installed apps are preserved. Unlike v0.2.0, this release changes no ports or wire formats — a v0.3.0 phone and a v0.2.0 phone still sync over the mesh — but update every device in a Circle to get the reliability fixes on both ends. ## At a glance - **No more GrapheneOS / secondary-user crash** — a Wi-Fi Aware permission refusal no longer kills the whole app; the lane shuts down gracefully and warns instead. - **Transport warnings** — Settings shows a red dot and a tappable warning when mesh, Bluetooth, or Wi-Fi Aware is switched on but can't run (VPN slot taken, Bluetooth off, Wi-Fi off). - **Mesh control in the status pill** — a mesh on/off slider, a live `reachable/total` Circle count, and the current peer count, all top-right. - **Battery drain cut** — background BLE duty-cycles down, GATT priority relaxes when idle, and the once-a-second poll stops when the app isn't visible. - **Relay links self-heal after a stuck rekey** — a wedged mesh session no longer kills a Circle link permanently; dials time out and back off, then rebuild. - **Wi-Fi AP lane (developer preview)** — auto-discover and connect to fips nodes on a joined Wi-Fi network over mDNS + UDP. Off unless the network carries a node. ## What's new ### The app stops lying about transports When a transport was enabled but physically couldn't run, Myco used to look fine while quietly doing nothing. v0.3.0 surfaces it: a **red dot on the Settings tab** and a tappable warning row for each broken transport — mesh enabled without the VPN slot (another VPN app took it), Bluetooth transport on while the phone's Bluetooth is off, or Wi-Fi Aware on while Wi-Fi is off. Each warning jumps to the fix. Declining the VPN consent dialog now turns the mesh preference **off** instead of pretending the mesh is up. ### Mesh control in the status pill The top-right status pill grows a **mesh on/off slider** and now shows, at a glance, how many Circle members are reachable right now (`reachable/total`) alongside the live peer count — so you can see and toggle mesh state without diving into Settings. ### Wi-Fi AP lane (developer preview) When the phone joins a Wi-Fi network that carries a FIPS node — such as a router broadcasting the open `!FIPS` access SSID — Myco discovers the node via its mDNS advert (`_fips._udp`) and connects to it over UDP automatically. It requires LAN discovery/rendezvous enabled on the router's fips node. The Developer screen gains a **Wi-Fi AP** panel (Wi-Fi/SSID state, mDNS browse state, discovered nodes), and the Wi-Fi Aware panel now lists live data paths. See [docs/design/ap-lane.md](docs/design/ap-lane.md). Developer preview — treat it as experimental. ## Reliability: the mesh holds under stress - **No crash on GrapheneOS / secondary users.** The system can refuse Wi-Fi Aware calls for lack of the nearby-devices permission *even after* the app's own check passed; the resulting `SecurityException` on the Aware callback thread used to kill the whole app. The lane now shuts down gracefully and surfaces a warning. - **Mesh starts even right after granting VPN access.** Enabling the mesh immediately after granting VPN (e.g. reclaiming the slot from another app) no longer silently fails when the mesh address isn't ready yet — the VPN start retries until the node has published its address. - **Relay links self-heal after a stuck rekey.** A mesh session wedged mid-rekey used to kill a Circle relay link permanently. Peer relay dials now time out at 10s and back off per peer (8s up to 3min) after consecutive failures, reclaim the stale session, and rebuild a fresh one on the next dial. - **Bluetooth toggle no longer knocks out Wi-Fi Aware.** Turning the Bluetooth toggle off used to stop the embedded mesh node out from under the Aware lane. The node's lifecycle now follows the mesh **Enable** switch; radio toggles only gate their own radios. ## Battery Background drain is cut substantially: BLE discovery duty-cycles down (low-power scan with batched delivery) while the app isn't visible, the per-link GATT connection priority drops to balanced after 30s without bulk traffic, and the once-a-second state poll no longer runs backgrounded (and no longer walks the blob cache directory on every read). ## Notable bug fixes - **App crash on GrapheneOS / non-admin users** — Wi-Fi Aware `SecurityException`; see Reliability above. - **Mesh silently down after VPN grant** — start now retries until the address is ready; declining consent turns the preference off. - **Permanent relay stall after a stuck rekey** — dials now time out and back off. - **Developer panel reshuffle** — peer/advert rows keep a stable alphabetical order instead of reordering on every refresh. ## Getting it - **Android**: install the v0.3.0 APK from the [release page](https://github.com/Origami74/myco/releases/tag/v0.3.0), or via [zapstore](https://zapstore.dev/apps/app.myco). - **From source**: `cd android && ./gradlew assembleDebug` from a checkout of the v0.3.0 tag. See [CONTRIBUTING.md](CONTRIBUTING.md) for build prerequisites. The full per-release change history lives in [CHANGELOG.md](CHANGELOG.md). Issues and discussion at [github.com/Origami74/myco](https://github.com/Origami74/myco). ## Contributors Thanks to everyone who contributed code, design, testing, or bug reports to this release — and to [@Origami74](https://github.com/Origami74) for maintaining the project. - Jul 14, 2026 0.2.0## What's Changed * fix(myco-core): persistent bidirectional peer-relay connection by @Origami74 in https://github.com/Origami74/myco/pull/6 * fix(android): recover BLE scanning after a scan failure by @Origami74 in https://github.com/Origami74/myco/pull/7 * fix(myco-core): fan chat to the whole Circle, not just direct neighbours by @Origami74 in https://github.com/Origami74/myco/pull/8 * fix: keepwarm Circle relay links + resubscribe on reconnect by @Origami74 in https://github.com/Origami74/myco/pull/9 * feat: Wi-Fi Aware bulk-lane transport + adaptive peer speedtest by @Origami74 in https://github.com/Origami74/myco/pull/10 * chore: bump embedded relay/Blossom ports to 4870 / 24243 by @Origami74 in https://github.com/Origami74/myco/pull/11 * feat(android): Discover as an icon grid with a Suggested apps row by @Origami74 in https://github.com/Origami74/myco/pull/12 * chore: v0.2.0 release prep — changelog bump and release notes by @Origami74 in https://github.com/Origami74/myco/pull/13
More…
**Full Changelog**: https://github.com/Origami74/myco/compare/v0.1.0...v0.2.0 - Jul 1, 2026 0.1.0## What's Changed * chore: format the workspace and gate cargo fmt in CI by @Origami74 in https://github.com/Origami74/myco/pull/1 * Bottom-sheet menus for Circle members + share/add, with NFC sharing by @Origami74 in https://github.com/Origami74/myco/pull/2 * Settings sub-pages with storage controls, plus Circle Nearby polish by @Origami74 in https://github.com/Origami74/myco/pull/3 * Add a peer speedtest to the Dev menu by @Origami74 in https://github.com/Origami74/myco/pull/4 * fix(ble): make the L2CAP radio a transparent byte pipe for the core's FMP reframer by @Origami74 in https://github.com/Origami74/myco/pull/5 ## New Contributors * @Origami74 made their first contribution in https://github.com/Origami74/myco/pull/1
More…
**Full Changelog**: https://github.com/Origami74/myco/compare/v0.0.3...v0.1.0 - Jun 30, 2026 0.0.3**Full Changelog**: https://github.com/Origami74/myco/compare/v0.0.2...v0.0.3
- Jun 27, 2026 0.0.2**Full Changelog**: https://github.com/Origami74/myco/compare/v0.0.1...v0.0.2
- Jun 27, 2026 0.0.1**Full Changelog**: https://github.com/Origami74/myco/commits/v0.0.1