Sign in

Joshua Yoes

@joshuayoes.com
407 followers 139 following 69 posts

Staff Software Engineer at @infinite.red @jamon.dev's professional tweet booster Contributor to Ignite, Reactotron Author of github.com/joshuayoes/ios-simulator…

PostsRepliesMedia
Joshua Yoes @joshuayoes.com · 05/05/2026
I don’t usually take ticket-buying advice from men who have spent decades seeking revenge, but Inigo makes a compelling case.
100
Joshua Yoes @joshuayoes.com · 31/03/2026
A community contributor just added MCP support to Reactotron. Claude Code can now see your React Native app's network calls, state, logs, and timeline in real time.
1155
Joshua Yoes @joshuayoes.com · 19/12/2025
I finally found a good place to put all of my twitter bookmarks
Meme of a man splashing water from a hose into his face with the caption "React Native News in 2025"
131
Joshua Yoes @joshuayoes.com · 01/10/2025
install_app tool: your agent can install .app or .ipa files into the simulator
110
Joshua Yoes @joshuayoes.com · 01/10/2025
open_simulator tool: your agent can now boot up Simulator on your mac if it isn't already running on your computer
110
Joshua Yoes @joshuayoes.com · 01/10/2025
launch_app tool: your agent can now launch different apps to switch gears or try newly installed apps
110
Joshua Yoes @joshuayoes.com · 01/10/2025
🚀 iOS Simulator MCP v1.5.0 is here! Now your agent has more iOS powers. 🛠️ New Tools: open_simulator → Launch the Simulator app install_app → Install .app / .ipa bundles launch_app → Start apps by bundle ID Release notes and demos in 🧵
A graphic in landscape orientation with a brown textured background. In the foreground, a white mobile phone is connected to a stylized, abstract rendering of the Apple logo made from blue and black lines. The mobile phone screen displays a squiggly black line. To the left of the Apple logo, there are several white, geometric shapes.
1136
Joshua Yoes @joshuayoes.com · 07/07/2025
Now Cursor can actually see what's going on in your iOS Simulator for you 👀🤖 The new `ui-view` tool in v1.4.0 inputs image data into your conversation context automatically so you don't need drag and drop images manually into your conversation.
1239
Joshua Yoes @joshuayoes.com · 06/06/2025
Know a React Native dev (~2 yrs experience) looking for a new job? A small but growing team at a mature startup in the pet health space is hiring — remote on EST, looking for someone who is excited to both teach & learn from teammates. If you think you are a good fit, send a DM.
Cartoon-style image of a young female software developer in glasses, working on a laptop. She wears a navy React logo t-shirt. The laptop has a heart-shaped dog logo, hinting she’s building an app for pet health. Beige background.
72610
Joshua Yoes @joshuayoes.com · 15/05/2025
React Native: “I think I forgot something.”
Apple: “If you forgot, then it wasn’t important.”
React Native: “Yeah, you’re right.”
[Cut to Android, abandoned in the rain, next to a crash dialog and a broken permissions modal]
2134
Joshua Yoes @joshuayoes.com · 21/03/2025
An iOS QA agent is coming to a Cursor near you 🍎🤖👷 Announcing ios-simulator-mcp, a Model Context Protocol server for interacting with the iOS Simulator github.com/joshuayoes/i...
1102
Joshua Yoes @joshuayoes.com · 13/02/2025
The same E2E tests on web AND mobile?? It might not be hard as you think I got an Ignite Cookbook recipe for you to cook it up at home ignitecookbook.com/docs/recipes...
4134
Joshua Yoes @joshuayoes.com · 14/01/2025
I'm glad that Apple has finally come to their senses
Apple system dialog: "Docker" will damage your computer. You should move it to the Trash. This file was downloaded on an unknown date. "Move to Trash" button. "Cancel" button. "Report malware to Apple to protect other users" checkbox, checked.
131
Joshua Yoes @joshuayoes.com · 30/12/2024
You know the article is going to be good when it’s got this header
110
Joshua Yoes @joshuayoes.com · 23/12/2024
December finances be like:
207 new transactions notification in a budgeting app
130
Joshua Yoes @joshuayoes.com · 07/12/2024
And last but not least: authentication! This is perhaps the most clever: it piggy backs off the same system that domain names use. An App View has an ID tied to a profile and then it checks to see if a domain actually has that ID, which shows proof of ownership.
3.5. User Identity

The DNS-based user identity in atproto is decoupled from hosting and indexing. Anybody owning a domain name can issue subdomains as atproto handles, and this does not require running a PDS or any other service besides DNS.To prove ownership of a handle, the user must have a bidirectional link between their DID and their domain name handle, as shown in Figure 2:

• A link from the handle to the DID is established either by storing the DID in a DNS TXT record on that domain name, or by returning the DID in response to a HTTPS request to a /.well-known/ URL on that domain name (Liu, 2023).
• A link from the DID to the handle is established by including the handle in the DID document that is returned when the DID is resolved
160
Joshua Yoes @joshuayoes.com · 07/12/2024
Then there is Labelers and Feed Generators: servers look at the data and decide what is interesting to users! People can do this already with feeds in the app kinda like follow lists, but people can build more sophisticated ones, such as labeling and generating feeds of entirely cat photos
3.4. Labelers and Feed Generators

Relay and App View aim to provide a mostly “unopinionated” service: they compute indexes over repositories in a neutral way, without attempting to rank or classify content. However, a good user experience also requires “opinionated” judgements for the purposes of content filtering (e.g. detecting sexually explicit images or spam) and curation (e.g. selecting posts on a particular topic).
160
Joshua Yoes @joshuayoes.com · 07/12/2024
Another interesting part is that if people don’t like how Bluesky, the company, does moderation or indexes the data, they can build their own. Normally all of this data or algorithms are privately held by companies, but the AT Protocol makes it fundamentally public and remixable by other parties
The App View is also responsible for enforcing moderation controls: for example, if one user has blocked another, and one of the users’ repositories contains a record of an interaction that should not have been allowed due to the block, then the App View drops that interaction so that nobody can see it in the client apps. This behavior is consistent with how blocking works on Twitter/X (X Help Center, [n. d.]), and it is also the reason why blocks are public records in Bluesky: every protocol-conforming App View needs to know who is blocking who in order to enforce the block (Bluesky Social PBC, 2023h; Newbold, 2023). If users are unhappy with the moderation rules applied by the App View operated by Bluesky Social PBC, it is always possible for third parties to operate alternative App Views that index the same firehose and present the data in a different way.
1100
Joshua Yoes @joshuayoes.com · 07/12/2024
This data is consumed by an App View, which takes all of the data and arranges it into useful structures, like threads, profiles, and lets other service query for it.
3.3.2. The App View

The App View is a service that consumes the firehose, and processes the records that are relevant to the Bluesky social app (records in the com.atproto and app.bsky lexicons). For example, the App View counts the number of likes on every post, and it collates the thread of replies to each post.
180
Joshua Yoes @joshuayoes.com · 07/12/2024
Then there is a concept called the Relay, which indexes all the data and shoots it out in the “firehose”: a flurry of updates of user data as it happens
3.3.1. The Relay

The first component is the Relay, which crawls the user repositories on all known PDSes and consumes the streams of updates that they produce. The Relay checks the signatures and Merkle tree proofs on updates, and maintains its own replica of each repository. From this information, the Relay creates the firehose: an aggregated stream of updates that notifies subscribers whenever records are added or deleted in any of the known repositories.
170
Joshua Yoes @joshuayoes.com · 07/12/2024
All of the data is hosted in user repositories. Possibly the most interesting part of Bluesky is the fact that ALL the data is public: anyone can index it like Google does with the web. Currently Bluesky the company does this, but users can host their own user data for cheap as well
3.1. User Data Repositories

All data that a user wishes to publish is added to their repository, which stores a collection of records. Whenever a user performs some action – making a post, liking another user’s post, following another user, etc. – that action becomes a record in their repository.The AT in atproto stands for Authenticated Transfer, which reflects the fact that repositories are cryptographically authenticated. The records in a repository are organized into a Merkle Search Tree (MST), a type of Merkle tree that remains balanced, even as records are inserted or deleted in arbitrary order (Auvolat and Taïani, 2019). After every change to a repository, the root hash of the MST is signed; the public verification key for this signature is part of the user identity described in Section 3.5. This enables an efficient cryptographic proof that a given record appears within a given user’s repository. Moreover, when a user updates or deletes a record, the MST enables a proof that the old record no longer appears in the repository.3.3. Indexing Infrastructure

On the web, websites are crawled and indexed by search engines, which then provide web-wide search and discovery features that the websites alone cannot provide. The AT Protocol is inspired by this architecture: the repositories hosted by PDSes are analogous to websites, and the indexing infrastructure is analogous to a search engine. User repositories are primary data (the “source of truth”), and the indexes are derived from the content of the repositories.

At the time of writing, most of Bluesky’s indexing infrastructure is operated by Bluesky Social PBC (indicated by a shaded area in Figure 1). However, the company does not have any privileged access: since repositories are public, anybody can crawl and index them using the same protocols as our systems use. If Bluesky Social PBC were to violate users’ expectations – for example, by censoring (omitting from the index) accounts that users wish to see – other parties would be free to provide their own indexes that do not perform this censorship. Client apps could switch to reading from a different index, or even use a combination of multiple indexes.
180
Joshua Yoes @joshuayoes.com · 07/12/2024
The AT Protocol allows for multiple social networks, which they call social modes. Functionally, it’s like how Facebook can use their own infrastructure to post multiple social media networks like Facebook and Instagram
150
Joshua Yoes @joshuayoes.com · 07/12/2024
Modern software is too large to run on individual computers, so different features like storing data, relaying that data, aggregating it into feeds and showing those feeds are broken up into individual parts
Figure 1. The main services involved in providing Bluesky, and data flows between them. Icons from Flaticon.com.

Client apps send posts, likes, etc. to the user’s home PDS. A stream of records from each PDS is consumed by the Relay, and aggregated to form the firehose. The firehose is consumed by the Bluesky App View as well as labelers and feed generators. PDSes read from the App View to obtain threads of replies, like counts, etc. Bluesky Social PBC currently hosts several PDSes, the Relay, the App View, and some of the labelers and feed generators. The Bluesky App View also pulls data from external labelers and feed generators. Other providers can set up alternative PDSes, aggregators, and app views if they wish (including app views for social modes other than microblogging).
180
Joshua Yoes @joshuayoes.com · 06/12/2024
Vancouver, Washington. I love hiking in the Columbia River Gorge nearby 👋
000
Joshua Yoes @joshuayoes.com · 25/11/2024
I logged back into Twitter today after giving Bluesky a test run for this last week. My notifications tab on twitter is all bots and my notifications on 🦋 are real people. I think I'll be here to stay for a while.
bluesky notifications tabtwitter notifications tab
020
Joshua Yoes @joshuayoes.com · 25/11/2024
031
Joshua Yoes @joshuayoes.com · 21/11/2024
Time to start hiding these everywhere and post about them for people to find
The Legend of Zelda Link (Tears of the Kingdom) amiibo
010