MacKuba

🍎 Kuba Suder's blog on Mac & iOS development

A complete guide to Bluesky 🦋

Categories: Social Comments: 1 comment

(Last update: 12 Nov 2024.)

For the past year and a half, I’ve been a pretty active user of Bluesky. I enjoy it a lot, and I’ve managed to learn a lot about how it works, what works well and what doesn’t, and also what’s likely coming next.

I’ve decided to write down some of the tips & tricks that I often give to friends when I invite them there, or the advice and answers that I sometimes give to people that I find in some feed asking about things.

This of course got much longer than I planned 😅 so if only have a moment, here’s a TLDR:

  • there are official iOS and Android apps, but you can also use bsky.app in the browser, or try e.g. Graysky, deck.blue, Skeets (iOS) or Skywalker (Android)
  • if your timeline feels empty, check out the default algorithmic feed called “Discover” – or even better, go to the “Feeds” tab, scroll down to the “Discover New Feeds” section and look for some feeds on the topics that interest you (on the top list or in the search); follow these feeds, and then if you find some interesting people posting in those feeds, follow them too. You can also search for feeds on goodfeeds.co.
  • don’t be afraid to interact with people, repost good posts, like good comments, comment in threads and so on – that’s how you make friends! (but be nice :)
  • if you see too much NSFW stuff, look for “Content filters” settings in the Moderation tab
  • everything you post here is very public, so don’t share anything too private 😏
  • if you own some cool domain name like “taylorswift.com”, you can set it as your handle
  • hashtags, word muting, GIFs (from Tenor), DMs (simple version), videos, pinned posts, listing quotes, and thread composer are now available
  • trends, 2FA and more DM stuff are coming, post editing is planned; some kind of private profiles for sharing to limited audience are probably coming at some point, but not in near future
  • Jack Dorsey has nothing to do with Bluesky anymore ;)

And now the long version:


What is Bluesky?

(A bit of history, skip if you’re not interested :)

Bluesky is a project started originally by Twitter (now an independent company), whose goal is to create a decentralized Twitter-like social network, or more generally, a platform for building various decentralized social networks.

The project was started in Dec 2019 by Jack Dorsey, former Twitter CEO. The basic idea was to design a protocol on which you could build something that would work like Twitter, but which would not be under the control of a single company that makes unilateral decisions about everything on it. It would be more like web and email, which are open standards that anyone can build on – any company can set up an email service or write an email app, and anyone can sign up for an account and start sending emails. There’s no one central authority on the Internet that can ban you from email altogether.

Such network would consist of many servers owned by different companies and people connecting together, and the idea was that eventually, Twitter itself could become a part of that network, as just one of its elements.

(If this all sounds a lot like the Mastodon social network, or “the Fediverse”, then you’re right – there are a lot of similarities between these two. However, Bluesky is built on a completely different system they’ve designed from scratch, called the AT Protocol or ATProto. They’re hoping that this will let them build some things better than they are done in Mastodon, making the network less confusing, more useful and more user-friendly. Bluesky does not directly connect with Mastodon servers and apps, although there are some “bridges” being worked on.)

After an initial research phase, in 2021 a team was chosen to build the platform and the Bluesky company was formally created. A woman named Jay Graber, formerly a developer at Zcash, was chosen as the CEO. Thankfully, Jay had the foresight at that point to insist that they’d set it up as an independent company, which was funded, but not controlled by Twitter. Had they not, it almost certainly would have been shut down last year after Elon’s Twitter takeover.

The team has been working on designing and building the pieces of the system throughout 2022, and in February 2023 they’ve launched a very early and rough beta and started slowly letting in some users who wanted to try it out and have signed up on a waitlist. However, the whole Elon thing happened in the meantime and that was a moment when everyone was looking for a Twitter alternative, so the interest has wildly exceeded expectations and they weren’t ready yet to take in everyone.

Since then, the user base has been gradually growing, with people being let in from the waitlist and existing users inviting their friends using invite codes. Meanwhile, the team had to speed some things up to adapt to the new situation and has been working hard on adding the most important features, and building up the backend to allow for more and more traffic. Finally, almost a year later, in the first week of February Bluesky has opened up for registrations from everyone.

The Bluesky company

Bluesky is still a fairly small team at the moment. The dev team is probably something like a dozen people altogether, and that’s for the frontend, backend, protocol, servers and so on. So they just can’t add new features as fast as they’d like to, but they’re doing what they can.

The team members interact with people on the platform all the time, answering questions and just having fun in general. They’re also building almost everything in public – the source code of the app and servers is available on GitHub, so we can track in real time what they’re working on next, report bugs and sometimes submit code with some new features they can merge in.

The company is set up as a “public benefit corporation”, which basically means (in my non-US layman understanding) that it is a business and it’s meant to make profit, but that profit is not it’s only and main goal. It can and should have other, more noble goals that benefit the public, as the term implies, in this case: creating a protocol for decentralized social apps that everyone can build on.

At the moment, they don’t have a clear plan on how the company is going to make money on the platform – the general idea is to build some extra paid services on top for users and developers. They said they don’t plan to ever add ads and they promise they won’t “enshittify” the service in future. In any case, they’re explicitly building the network to be resilient even in the unlikely scenario that they themselves “turn evil” in the future – the network is meant to be “billionaire-proof”, impossible to completely take over by one guy with too much money. To quote the lead dev:

“Our culture doc includes the phrase “The company is a future adversary” to remind us that we won’t always be at the helm – or at our best – and that we should always give people a safe exit from our company. It’s weird at times to frame our priorities as protecting users from us, but that’s exactly what we’re trying to do.

The Bluesky team is made up of users. None of us come from big tech companies. We all came together because we were frustrated by the experience of feeling helpless about how our online communities were being run. We don’t want to give that same feeling to other people now that we’re the builders.

When we build an open protocol, we’re giving out the building blocks. We want to start from the premise that we’re not always right or best, that when we are right or best then it might not last, and that communities should be empowered to build away from us. Sometimes this can all feel very intangible and abstract, and for the average user the goal is to just feel like a good & usable network. But this is one big reason why we put all the Fancy Technology under the hood.

Also, contrary to what you might have heard, this isn’t “Jack Dorsey’s company”. Yes, he started the whole thing, but he isn’t running the company – Jay Graber is. Jack was very little involved in the project after they started building; he basically gathered a team, gave them a lot of money and let them do their thing.

In fact, he deleted his account on the platform last summer, after he was booed off it by the users, and now he’s mostly hanging out on Nostr instead. In early May 2024, it was announced that Jack has left the board of directors too – he’s been replaced by Mike Masnick later. Dorsey also doesn’t own any shares of Bluesky.


Apps

Bluesky has an official mobile app for iOS and Android. It’s written in React Native, so it doesn’t feel fully native in all places and some system integration features take a while to be added – the reason is that they’ve started with a very small team at first (I think initially just one guy did all the frontend), so the only way they could do it was to build for both platforms & the web from one codebase.

At this point, after various improvements over the last months, the mobile app is mostly ok and gets better with every update, it’s also obviously the most feature-complete one. One issue is that it doesn’t support iPad yet.

There is of course also a web interface, at bsky.app, which is pretty good – this is the main UI that I use Bluesky with (also works well on the iPad). At the moment it’s mostly meant to be used while logged in, although some pages like posts/threads and profile views can now be viewed unauthenticated.

But there is also a small but enthusiastic group of third party developers building various apps, tools and experimenting with the protocol. They’ve built several independent apps, libraries to access the API in various languages, and they often manage to build various new features in their apps before the Bluesky team gets around to doing that in official apps.

Here’s a few of these apps (in various stages of development):

  • Graysky – a mobile app, first full-featured third party app, though its dev is working for Bluesky now, so it hasn’t been updated much lately
  • deck.blue – a web-based “Tweetdeck” column UI, written in Flutter
  • SkyFeed – a web app with a column UI that also lets you build custom feeds
  • Skeetdeck – another web-based, more lightweight “Tweetdeck”
  • Skeets – native iOS app with iPad support and some interesting features
  • Skywalker – a native app for Android
  • Skychat – a webapp initially built to let people form a “chat” around a specific hashtag
  • Sora – a new multi-network client for iOS
  • Openvibe – another multi-network client with support for cross-posting and a unified timeline

Additionally, there is also a third party bridge service called SkyBridge that allows you to use Mastodon apps like Ivory to use Bluesky (although of course it only supports a subset of features).


Feeds & algorithms

Social networks generally include two kinds of feeds: a chronological one, showing all posts from the people you follow in order, and an algorithmic one, showing what the service thinks you will like (which often means though: what they think will bring them more profit). Centralized platforms generally push you towards an algorithmic feed and often make the chronological feed harder to reach (if at all). Mastodon on the other hand only includes chronological feeds and no algorithms.

Bluesky has both – and much, much more.

When you sign up, you start with two default feeds. “Discover” is Bluesky’s main algorithmic feed – it mixes some posts from the people you follow with some other posts that you might like. You can pick the option “Show more like this” or “Show less like this” from the menu on each post to give it some hints on what you like or don’t. The devs are constantly tweaking it and asking for feedback, so it should be getting better over time.

The second one, “Following”, is a classic chronological feed although with a twist – by default it shows you more replies from the people you follow than on Twitter or Mastodon. You can configure a lot of aspects of that feed in the settings (see the Settings section), e.g. how many replies you want to see in it.

(Note: there have been some changes made recently in the Following feed – the option to show all replies of your follows to everyone has been removed. If you really miss seeing those, I made two custom feeds that let you peek at those replies: Follows & Replies and Only Replies. Third party apps like Skeets still show it the old way too.)

But that’s just the tip of the iceberg. Bluesky has built a system where anyone with a server and some knowledge of coding can implement their own algorithmic feeds that they can share with everyone else. There are currently about 40 thousands custom feeds (as of Feb 2024) made by the Bluesky community that you can add to your app. And more importantly, the “Following” and “Discover” feeds are just what you start with by default – you can set any of the thousands of other feeds as your main feed, and you can even remove the two built-in feeds if you don’t like them, and leave e.g. only the “Cat Pics” custom feed as your only feed tab. Nothing here is forced on you.

The way a feed works is that it basically reads all new posts on Bluesky from a giant stream and decides which of them to keep and how to arrange them (this can be a shared feed, same for everyone, or a personalized feed that looks different to each user). Most feeds match posts by keywords – these are feeds on some specific topics like Linux, food, gardening, climate change, astronomy, and so on. They usually define some sets of words, phrases, hashtags, sometimes emojis, and include all posts that contain any of these, chronologically.

There are also various “top posts of the week / all time” feeds, posts using AI models to match some specific kinds of photos like pictures of cats, frogs, or moss, or personal algorithmic feeds that show you posts selected for you according to some specific idea: posts from your mutual follows, from people who follow you, posts with photos only, posts from your friends who post less than others, and so on. These are all feeds built by third party developers who just had an idea and implemented it, without having to register or apply anywhere or ask anyone for permission.

There is also a very popular web tool called SkyFeed, built by one German developer, which allows you to build some of the simpler feeds using a web form, without having to write code or host it yourself. This allowed a lot of people without programming knowledge to build their own feeds – currently around 85% of all feeds are built in and hosted by SkyFeed.

There is a nice guide to feeds that describes them in more detail, there is also a blog post about feeds on Bluesky’s blog.

Useful feeds

There is a feed search engine integrated in the official app, in the Feeds tab (the “Discover new feeds” section). You can also search for interesting feeds on these two external sites: goodfeeds and SkyFeed Builder Feed Stats.

Some general feeds that you might find useful:

And some “utility feeds”:

  • All-Time Bangers – posts with the highest number of likes on the whole platform
  • My Bangers – your own posts with the most likes
  • Quotes – all quotes of your posts
  • Mentions – all replies to you or mentions of you
  • My Pins – your “bookmarks” made by commenting with the 📌 emoji

Safety & moderation

Like on most other networks, you can mute someone if you find them annoying, or you can block them if you find them really annoying. It’s also possible to mute words, phrases or hashtags. You can now also mute words for a specific period of time (there’s no way to mute an account for a specific time yet).

(Note, the blocking mechanism here is pretty aggressive, in that it also hides all previous interactions between the two users *for everyone*; so don’t be surprised if someone blocks you and your reply or quote “disappears” – it wasn’t deleted, just hidden.)

There’s also a number of features added recently for controlling interactions with your posts or threads:

  • you can lock replies in a thread to your followers or disable them completely, also some time later after replies appear
  • you can choose to “hide” some specific negative replies, like on Twitter (they’re moved to a “hidden replies” section at the bottom of the thread)
  • you can disable the option of quoting your post
  • you can “detach” existing quote posts of your post – the quoting post stays visible, but without the embed showing your post
  • and finally, you can temporarily “deactivate” your whole account – this makes it appear deleted to others so people won’t bother you if you want to take a break

You can also create “moderation lists” for muting or blocking some groups of people at once, which can be shared with others. This is meant to let various communities on Bluesky build their own “defences”, by collecting lists of people who are unpleasant or annoying in some way and letting others mute or block them all at once before they come across them.

If you get added to a user list (the kind meant for following) or a starter pack that you don’t want to me on, and the author refuses to take you off it despite your request, you can solve the problem by blocking the author – you will “disappear” from their list then. For obvious reasons, this doesn’t apply to mute/block lists, since usually no one wants to be on those.

Bluesky’s own moderation seems to generally work ok from my perspective – they usually get rid of obvious trolls pretty quickly, and I’ve personally only ever come across a few of those. They claim to have around 20 people in the moderation team right now (as of February), which is about half the total company size.

The general high-level plan for moderation at Bluesky and on the AT Protocol is something they call “composable moderation” (old blog post) or “stackable moderation” (recent post). It’s an idea that moderation will have many layers – from server operators including the Bluesky company, through various tools and services provided by other companies, organizations, and communities, ending with some ways to privately personalize your experience according to your personal needs.

Labellers

A core part of this is a feature called “labellers” that they’ve released in March, which are basically third-party moderation services. They work by assigning a set of labels/tags (manually or automatically) to accounts and posts – this can be because one of the labeller’s moderators has come across an offending post, or because it was detected automatically using some custom software, or because the post or account was reported to the service by a user (users can send moderation reports to any set of these services).

All users on the platform can “subscribe” to one or more of these services and configure how they want these labels to affect their experience: for any label type, they can choose if the user/post marked with such label should be hidden from their view, just marked with a label, or if this kind of label should be ignored. (A labeller doesn’t have the full power of a built-in platform moderation in that it can’t just ban someone from the site and delete their account – but they can make someone effectively disappear for those users who trust and agree with the given service.)

Labellers will usually be specialized in some area: they could be protecting their users from things such as racism, antisemitism, or homophobia; they could be automatically detecting some unwanted behaviors like following a huge number of people quickly; marking some specific types of accounts like new accounts without an avatar, or accounts from a different network; fighting disinformation or political extremism; or they could be serving a community using a specific language or from a specific country.

A simple labeller can be run by one person, but bigger ones can be managed by a whole group of people that collaborate on processing the reports. This system allows different communities to handle moderation in their own way independently, to make their members feel safer and have a better experience in the aspects that are important for them. And most importantly, different communities could often have somewhat conflicting or even completely opposing views on some things – and Bluesky as a company doesn’t have to try to satisfy everyone (which is impossible) or always pick a side. They also don’t necessarily have to specialize in every country, language and culture on Earth. Of course they reserve the right to take down some accounts completely, because some things and some people have to removed from the platform for everyone (e.g. things that are just illegal), but in less serious or less clear cases, they can just use labels or defer to other labellers (the Bluesky built-in moderation is now “just” another labeller among many others, using the same API, and with only some special powers).

You can read more on this topic in the guide titled “Bluesky Crash Course: Labelers” written by Kairi, who used to run one of the most popular labellers called Aegis (now defunct).

There’s no easy way to search for labellers in the app yet, but I’m keeping a rough list myself on this page. I also made a “Label Scanner” tool where you can find all labels assigned to a given account from any labeller.

By the way, it’s fascinating how the open architecture of Bluesky allows its features to be used sometimes in completely unexpected ways. Labellers were initially designed to be used mostly for negative, unwanted things, but quite a lot of them ended up being built to let users label themselves with some badges they want to show to others: there are labellers to let you assign a country flag, pronouns, RPG class, Zodiac sign, Hogwarts house and other things.

Some other useful labellers:


Privacy of your data

One important thing from the privacy aspect that may not be obvious at first, which you need to be aware of: the underlying protocol on which Bluesky runs is extremely open. Anyone who knows how to code can write an app or tool that can read practically any data about anyone, without having to ask anyone for permission (since there’s no central authority that can require registration and payment to get API keys like on Twitter). This is by design, because all the different pieces of the network that make it work, apps, tools and services, need to be able to access the data to provide their functionality, and we want everyone to be able to build those to keep the network decentralized and not controlled by one corporation.

This has both advantages and disadvantages. For a developer, it means that the only limit is your time and imagination (and maybe API rate limits). You can build feeds that show all posts with cat photos, a bot that responds to the text “/honk” with a random photo of a goose, implement some new features before the Bluesky team gets around to that, count the statistics of how the percentage of languages used in posts has changed over time, and whatever else you can think of. You don’t have any monthly quotas or paid plans.

For a user though, this means that everything you do is very public – kind of like it was on Twitter, just more so, because there are fewer restrictions.

Specifically, all of these are publicly accessible (even if they aren’t all displayed in the official app):

  • your posts
  • your likes
  • the photos you’ve attached to posts
  • all the handles you’ve previously used (you can’t delete those)
  • the list of people you follow
  • the list of people you block (!)
  • the user lists and moderation lists (mute/block lists) that you’ve created
  • which moderation lists (yours or others’) you are blocking people with

And these things are private and known only to you (and the apps and tools that you’ve explicitly granted access to your account):

  • the people you’re muting (individually or through lists)
  • the words, phrases, hashtags etc. that you’re muting
  • your selected languages and other preferences
  • your email address, birthday and phone number
  • who invited you and who you have invited
  • the moderation services you’re subscribed to
  • the custom feeds that you’ve saved or pinned
    • one caveat though: the provider of the feed knows when you are opening it

DMs are private between you and the person/people you’re chatting with, but they’re not currently end-to-end encrypted, so the Bluesky team can theoretically access them. A fully encrypted version will come later.

The difference between muting and blocking is because muting is simply a filter applied only for you – nobody else needs to know that you’ve asked your app to hide some of the posts. On the other hand, blocking is inherently a two-way thing – that other person, their app/server and any other pieces of the network that process their posts need to be aware of the block, so that they can prevent them from interacting with you. So the fact that the block exists needs to be publicly known.

Now, what all of this can mean in practice:

  • anyone can download anyone’s posts and do various targeted or global analysis on it, track your likes and contact graph and so on
  • if you are posting personal photos, especially NSFW photos or photos that can be geolocated, anyone can be downloading all of them automatically (though the official apps strip metadata from photos)
  • some (any) companies can potentially train some kind of AI models on the data (speaking purely about technical possibility, not legality of course)
  • blocking someone only adds friction, but it can’t completely prevent them from seeing your posts (same as it always was on Twitter until recent changes, since you could always open a post in an “incognito” window)
  • there is no way to add a feature that would let you “lock” a profile for followers only, hiding your content from others, because all post data has to be public for the network to work
  • copies of any posts you delete might still remain on some third party servers

Some of this might sound scary, but most of this is or was always the case on other social networks too, those that have APIs at least – if you’re posting something publicly anywhere, you need to realize that anyone can record it forever. The main difference is that it’s easier to do it here, because the API has fewer restrictions than on centralized platforms, and that it’s currently not possible to do any semi-private content that’s visible to some people but not to others.


Account security

For logging in to third party apps and tools, Bluesky has initially added a temporary system of “app passwords”. Recently, they’ve also implemented more convenient OAuth authorization, where you authorize a service to use your account like on Twitter and other sites. However, not all third party apps and tools support it yet, so you might still need to use the app passwords for some of those.

An app password is a special one-time password that you can generate in the official app (Settings / App Passwords), which look something like this: abcd-ef56-vxyz-qq34. You can generate a separate password for every tool and app that you log into. Such password grants almost the same privileges as the main password, but without a few critical ones, and you can revoke it at any time from the Settings screen if you’re not using that app anymore, which disables access to your account for that app. You can also specify if the app password should give the app access to your DMs or not.

For additional security, there is for now a simple email-based Two-Factor Authentication (2FA) feature. A more complete 2FA system is coming soon.


Handles & IDs

Bluesky has a really cool system of handles. They couldn’t have just used single-element handles like “@donaldtusk”, because that wouldn’t really make sense in a decentralized system. They also didn’t want to bind your account permanently to the name of the server you’re on like in Mastodon, where you’re e.g. “ivory@tapbots.social” and you can’t change that unless you make a new account.

So here’s what they’ve come up with: internally, your account is identified by a unique identifier called “DID” (Decentralized Identifier), which is an ugly string of random letters. To that DID you assign a handle, which you can switch at any moment to a different one, and any contacts, references and connections will (mostly) stay intact; and the handle is actually just any domain name, usually displayed with an “@“ at the beginning, but without any additional username before it.

By default, when you first join Bluesky (the current official server) you’re given a handle which is a subdomain of bsky.social, e.g. “dril.bsky.social”. This is a real domain name, you can type it into the address bar of the browser and it will redirect you to your profile on Bluesky.

But at any moment you can switch to a different handle by assigning any domain name that you own. It can a very short name like retr0.id, or something long with one of those quirky new TLDs like .horse or .computer, or it can even be a very official sounding domain like washingtonpost.com.

There are two ways to assign a domain, either via HTTP by putting a file in a specific place on the website hosted on the domain, or via DNS by putting a new entry in your domain configuration – the complete instructions are here. (BTW, Bluesky also runs a service that resells and automatically configures domains through a partnership with Namecheap, which is the first of possibly many premium services that they want to actually make money on.)

This also means that you don’t need to rush to “reserve your handle” at ***.bsky.social – because custom handles are cooler anyway 😎 (although be aware that if you change your handle from *.bsky.social to a custom domain, that old handle becomes available for others again). This system also makes it much easier to move your account to a different server – you can take your content and connections with you and keep your existing identity, because your DID identifier never changes.

There’s even a number of “handle services” now that let anyone use a subdomain of their domain as the handle – e.g. go to swifties.social if you want your handle to be “yourname.swifties.social” 👩🏻‍🎤

Verification

It’s hard to implement verification in a decentralized network, but the good news is – there’s no need to! The system of domain names in handles serves as a way of verifying accounts.

If someone has a handle that matches the domain of e.g. some newspaper, organization or government branch that you recognize, you can assume that the account is operated by someone who was authorized by that entity. So e.g. @wyden.senate.gov is definitely US Senator Wyden (or at least his staff), and @nytimes.com is definitely The New York Times – no one has to manually verify their documents. We also have here e.g. the European Commision @ec.europa.eu, government of Brazil @brasil.gov.br, and @interpol.int 👮🏼‍♂️

If you’re setting up an account for some well known organization, it’s highly recommended to switch to your domain as the handle from the start to make it clear that it’s an official account.


How are things called here?

The app generally uses “neutral” terms like “post”, “repost”, “feed”, “timeline” and so on. That said, pretty early on someone came up with with the word “skeet” for posts, for “sky + tweet”, and it stuck, despite (or likely because of) the team’s protests. So the term is used pretty commonly, though maybe a bit ironically, despite being a bit controversial because of its existing, other slang meaning (see Urban Dictionary)… By analogy, you can also “reskeet”, “subskeet” and so on.

The timeline/home feed is also sometimes called a “skyline”.

New users that have joined Bluesky recently are often called “newskies” – there is even a Newskies feed, which includes every new user’s first post (and only their first post). On the opposite end, some folks sometimes jokingly call people with a long experience on the platform “Bluesky elders” (a reference to one post that was widely made fun of). There is a labeller that gives you an elder label if you had an account before summer 2023.

A “hellthread” is something that existed for some time in the spring of last year – the initial implementation of notifications notified you of any reply somewhere below your post or comment, to an unlimited depth. People have started creating extremely long and nested threads, which notified everyone involved of any reply, and there was no way to opt out of it. A certain community has formed around these hellthreads, of people who hang out together and sometimes waged wars in them. Eventually, the notifications were fixed, but due to protests, the devs have kept an option to still create hellthreads in one place, hardcoded in the app code. This was finally removed a few months later.

An “apocablock” or “nuclear block” is a name for the feature where when one user blocks another, it hides all previous replies between the two from everyone – it basically “nukes” the whole conversation to discourage other people from joining in (though you can still find the posts though if you’re determined, e.g. on the users' profile page feeds or in Skythread).

A “contraption” was an informal name for set of popular mutelists/blocklists maintained by a user named Kairi in 2023 (which were later turned into a widely used labeller called Aegis, which eventually shut down a few months later). So e.g. trolls and haters who have crossed a line were told “ok, you’re going into the contraption”.


What is this federation thing?

The goal of Bluesky is to be a network that consists of many, many servers run by a lot of different companies, organizations and people that connect with each other – that’s roughly what federation means. Initially, all the critical pieces were controlled by Bluesky PBC; however, this is now starting to change. They’ve taken the first big step towards federation in February 2024, by letting people migrate their accounts to self-hosted servers. This is still a technically complex process, and there aren’t really any public non-Bluesky servers which allow open signup, but there are currently a few hundred mostly personal “PDS” servers, where people keep their accounts and data.

If you’re worried that things will get more complicated, maybe you have some bad experiences from Mastodon – then don’t worry. They’ve specifically designed everything to be less confusing. The Bluesky-managed accounts have actually already been spread out internally on a number of separate servers – they’ve been migrated sometime in November 2023, and few people have noticed, because everything just kept working. Now, you will have an option to move your account to a server controlled by someone else, if you want to – but you’ll be able to just ignore the whole thing if you don’t care about it.

(Fun fact: the Bluesky servers are all named after different kinds of mushrooms, e.g. mine is “amanita” 🍄 – so if you see someone talking about mushroom servers, they’re probably talking about those :)

Bridgy Fed

Bluesky opening to federation does not mean that it will connect with Mastodon servers though, since they use different, incompatible protocols. There is however a third party “bridge” called Bridgy that has started operating recently.

The way it works is that it “mirrors” Mastodon accounts and their posts to Bluesky or Bluesky accounts to Mastodon (for accounts that have enabled the bridge). It’s possible to create whole threads where some replies are made by Mastodon accounts and some by Bluesky accounts, all of them being visible in both places. See e.g. here the bridged profile of Eugen Roshko (Gargron), creator of Mastodon, as seen on Bluesky.

If you want your Bluesky profile to be visible on the Fediverse, you need to “opt in” by following the official Bridgy account on Bluesky, @ap.brid.gy. Your profile will be seen on the Fedi side as @your.handle@atproto.brid.gy.

To follow Mastodon accounts that are already bridged (like Gargron’s) from the Bluesky side, just look them up in the search and follow them as normally. If someone you want to follow is not bridged yet, you need to either ask them yourself to enable Bridgy (by following the Mastodon equivalent of the Bridgy account, @atproto.brid.gy@atproto.brid.gy), or you can DM the @ap.brid.gy account on Bluesky and tell the bot the Mastodon handle of the user you want to follow, and it will ask them on your behalf.


Search

Search works pretty well now on Bluesky. You can search for words, phrases and hashtags, and sort by popular posts or by latest. This is a global search like on Twitter, so it finds posts from everyone everywhere, not like the limited full text search on Mastodon.

You can also add “from:some.handle” to find only posts from a given user, or “from:me” to search within your own posts. There are several more filters available, like filtering by date or by language, although there’s no easy UI for everything yet – but the Bluesky team has posted a tutorial “Tips and Tricks for Bluesky Search” on their blog recently.

Hashtags

Support for hashtags in the app was added in February. When you click on a hashtag you have an option to search for all posts with this hashtag, only posts from the given person, or to mute that hashtag.

One thing that’s defined in the protocol but not implemented in the official app yet is that hashtags will eventually have two forms: inline tags like on Twitter, and external tags which are shown below the post, which I think is the way they work on Tumblr (Mastodon also recently started showing trailing hashtags at the end of a post as somewhat separated visually from the text). You will be able to use either or both in a post according to your preference, and they will be interchangeable, with both being returned in the same search.

GIFs & video

Videos are now available since first half of September. They’re currently limited to 1 minute, but this limit will likely be raised in the future.

You can’t upload custom GIFs yet at the moment, but this should be coming soon too. For now there is a built-in support for adding Tenor GIFs in the post compose dialog, by pressing the GIF button and picking something from the search results.

You can also embed e.g. YouTube videos in posts, which will play inline inside a post when clicked. (This whole feature was actually implemented by a third party developer.)

Starter packs

Starter packs are a fairly new feature (released in June) which lets you create a list of accounts and feeds that you want to recommend to others. You can make e.g. a list of AT Protocol developers, climate scientists and reporters, or astronomers, and then people can use it to find some interesting new accounts to follow, or just follow them all at once with one click.

You can also share a link to a starter pack with people who don’t have a Bluesky account yet, and they can use it to sign up with to have some initial set of accounts to follow.

(There’s no list of starter packs at the moment, you’ll just need to come across one shared in a post somewhere.)


Settings

Some things that you may want to change in the settings:

  • Languages – turn on all the languages that you understand or want to see; Bluesky generally hides posts in languages that you don’t have enabled from most places like your home timeline or feeds. For your own posts, you set a post’s language yourself in the compose post window – you can switch between a few languages, and if you have the wrong one set when writing, a popup with a warning should appear.
  • Thread Preferences – you can choose to have threads sorted by newest, oldest or most liked comments; there is also an experimental nested (tree-like) thread view that I highly recommend enabling (although for longer threads you may want to use my tool Skythread instead :]
  • Following Feed Preferences – choose if you want to see replies, quotes, reposts etc. in the home feed. For replies, you can set a threshold of how many likes a reply needs to get to show up in the feed, and you can also choose to see all replies made by people you follow to anyone. This option is actually pretty nice when you don’t follow many people at the beginning, because it’s a great way to find new people to follow. (Some more options here were removed recently, see the Feeds section for more info & workaround.)
  • Chat Settings – who you want to be able to contact you via DMs: everyone, no one, or only people that you follow yourself (default is people you follow); conversations you’ve started before are accessible even if you change the setting
  • Moderation » Content Filters – here you can set what kind of potentially objectionable content you may want to show or hide – generally various NSFW things. I’m not sure what the defaults are currently, but it’s worth checking and tweaking to your preferences. (Watch out, there can be quite a lot of somewhat NSFW content there that you can randomly come across in some feeds, although it’s generally hidden behind a content warning.)
    In the “Advanced” section below, you can adjust which of the moderation labels from each specific labeller you want to apply in your feeds – this includes the built-in “Bluesky Moderation Service” labeller.
  • Accessibility » Require alt text before posting – you can turn this on to always be reminded to set an alt text on photos (it’s generally considered nice to add the alt text to images whenever possible, for people who use tools like screen readers or VoiceOver)
  • Accessibility » Disable autoplay for videos and GIFs – prevents videos and gifs from automatically playing in the feed, instead you get a play button on each that you have to press first to see it

Missing features

There are a few things missing on Bluesky that are available on some other networks. Some of these are limitations of the protocol, and some are just a matter of too much work and too few hands to do it – the team is still pretty small and they have a ton of things to build to catch up with more mature platforms (Mastodon) or those with more people and funds (Threads), and they need to prioritize and some things are always put off.

That said, in recent months they’ve started accepting outside contributions and some recent smaller features have actually been submitted as PRs from external developers.

Some things that are still missing:

Private profiles / circles

Like I’ve mentioned in the Privacy section, the AT Protocol as built currently requires all data apart from your private settings to be completely public. There is no way to make something that you only share with some people but not others. There may very well be something like this in the future, because a lot of people are asking for this and the team wants to look into it – but they will have to first invent some other, separate way to share content in the protocol, which will take a lot of time and thinking. So it’s likely to come at some point, but not anytime soon, because it’s much harder than it may look.

DMs on the protocol

For the same reason, sharing messages with only one or a few people using the AT Protocol is currently not possible. The team wants to eventually add DMs to the protocol, but this is something that will require a lot of research first.

But since *a lot* of people wanted to have some way of talking privately with friends, even if it’s an imperfect one, the team has recently added a simple implementation of DMs that isn’t currently a part of the protocol. The DMs are currently using a single centralized service hosted by Bluesky (although third-party apps can access this API), and are not end-to-end encrypted – so they basically work like on Twitter. The first version also doesn’t support group chats and images, only 1-to-1 text chat – but more features are coming soon.

Eventually, the team wants to figure out and add a more full-featured, decentralized and private version of DMs (which may involve integrating with some existing private messages standard). This is however pretty far down the list at the moment, so something not likely to come this year.

Post editing

This will definitely be added at some point, but it’s also a relatively complex feature, because of the need to store the previous versions of an edited post that you should be able to access somehow. They want to do it right and that will require some thinking on how to solve the problem in the most general and elegant way.

Soft-blocking / removing followers

There is an issue currently that there is no way to remove someone from your followers except by having them blocked. If you block-and-unblock them, what some people call “soft blocking”, they stay on the followers list. This is a current limitation of how follows are designed in the protocol – when someone follows you, they do it by adding a “follow record” to their account, and only they can update or delete their own records, you can’t do that from your side.

I think this is likely to get fixed at some point with some kind of workaround, but it’s not trivial to add and not high priority at the moment – but they’re thinking about it.

Polls

This might be a bit tricky, because we probably don’t want to have everyone’s poll choices public to everyone, and right now everything is public… But this is also one of those things that people ask about regularly, so I hope they’ll figure something out.

Trends

It would be nice to have some kind of “currently trending” screen like on Twitter. I think it would make Bluesky a better place for learning quickly about current events and hot topics, which was something that Twitter was always good at, and make it easier to find interesting things to read.

It should be pretty easy to implement technically – there’s already a bot that someone made at @nowbreezing.ntw.app, which posts “tag clouds” of trending words & phrases every 10 minutes, other developers have also implemented it e.g. in Graysky, Skeets or SkyFeed. The main problem is probably in deciding (automatically) which trending words to promote and which should be hidden… it will probably require a lot of manual control at first to keep it safe.

Two-factor authentication

Coming soon, see the “Account security” section.

Longer posts

This seems to have been a conscious decision that the team wanted to create a medium that’s more like Twitter than like Mastodon when it comes to post length. This isn’t a simple matter of a field length, because this affects the way people communicate, and allowing longer posts has advantages and disadvantages, it’s just a different text form. (See a comment from lead dev about this.)

So it looks like this won’t be changing – although there might later be other “apps” implemented on the AT Protocol that aren’t a part of Bluesky that will allow longer posts, even complete articles, and they might be somehow integrated into Bluesky in the future (e.g. posts bridged from Mastodon by Bridgy, which can be up to 500 characters long, include the full original content in the record data and apps may choose to display the full text inline).

Bookmarks

It’s on the list, but no timeline at the moment. As a workaround, you can reply to posts with a comment “📌” and there’s a special bookmark feed which shows you all your comments with that emoji.

Disabling reposts per user

It’s blocked by some other things right now, but should come sometime next year.

Links on the profile, scheduling, …

I haven’t heard much about those, but I’m assuming it’s all coming at some point once they get through the hard stuff they’re busy with now.


Other tools

Finally, here are a few tools written by third party devs that you might find useful:

  • Firesky – a site that shows you a live feed of every single new post made on Bluesky – feels like watching the Matrix screen
  • Clearsky – lets you look up the list of all people that are blocking you (or someone else), or the mute/block lists, user lists, and starter packs that you’ve been added to
  • wolfgang.raios.xyz – also shows your blockers, block statistics and can generate “interaction circle” images that show who you mostly keep in touch with
  • Jaz’s Profile Cleaner – lets you delete old data (old posts etc.) from your account
  • PLC handle tracker or internect.info – these let you look up the DID of an account and how the assigned handle has changed in the past
  • Jaz’s post stats (total count and daily posters), my stats (daily/weekly stats), and bskycharts (charts of firehose activity and daily/monthly active users)
  • Skythread – a thread reader by yours truly, mentioned earlier :]
  • Label Scanner, for checking if there are any labels assigned to an account or post
  • Bluesky quiet posters – shows the list of people you follow ordered by how long ago they’ve posted anything
  • Clean follow – lets you clean up your follows list of blocked and suspended accounts

--

And some other guides (some mentioned earlier in the blog post):


Thanks to Mozzius, Shreyan and Marshal for the feedback on the first draft :)

Changelog:

12 Nov 2024: added info about threads composer and the plans for disabling reposts

8 Nov 2024:

  • added info or mentions of new features: videos, starter packs, pinned posts, listing quotes, timed word muting, new safety features, and OAuth
  • added a list of popular labellers
  • added a mention of handle services
  • expanded the “how are things called” section a bit
  • updated section about feeds, added a list of recommended feeds
  • updated section about federation, added info about Bridgy Fed
  • updated info about Jack Dorsey’s involvement

24 Jun 2024: removed link to Aegis (rip)

19 Jun 2024:

  • added info about built-in Tenor GIFs and DMs
  • added new section about labellers
  • Jack Dorsey is no longer on the board
  • updated some mentions about the Mastodon bridge, which is now live
  • some changes to feeds section – defaults for Following have changed, Discover is now much better, and you can remove the default feeds

26 Mar 2024: added mention about handle history in the Privacy section

2 Mar 2024: hashtags and word muting are now available, updated the part about longer posts

23 Feb 2024: federation is live!

21 Feb 2024: search now returns results when you search for a hashtag.

1 comment:

Lou Plummer

Thanks for the tips and for your thread reader (bookmarked)!