MacKuba

🍎 Kuba Suder's blog on Mac & iOS development

A complete guide to Bluesky 🦋

Categories: Social Comments: 1 comment

(Last update: 24 Jun 2024.)

For the past 10 months, 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 send them an invite code, 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, look for 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) and DMs (simple version) are now available, videos and more DM stuff are coming, post editing is planned; some kind of private profiles for sharing to limited audience may be coming, but not in near future
  • Jack Dorsey is not the CEO and does not run the company ;)

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 a 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 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 it, but he isn’t running it, Jay Graber is. Dorsey is still on the board with 1/3 of the vote, but He 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 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. 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 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, probably the most advanced one (though its dev is working for Bluesky now)
  • 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

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

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

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.

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.

The default “Following” feed 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.

The “Discover” feed 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.

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 of 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 default, 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 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 also has a nice guide to feeds that describes them in more detail, there is also a blog post on Bluesky’s blog.

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. There is no way to mute words and phrases yet It’s also possible (added in February) to mute words, phrases or hashtags. There’s currently no way to mute something or someone for a specific period of time, but that will hopefully come at some point.

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

You can also create whole “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.

Bluesky itself seems to be pretty light on moderation so far, which some people criticise them for. That said, I think they generally 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 are usually 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 the bigger ones are 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.

Privacy

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, there is currently a temporary system of “app passwords” in place. It will be replaced with something more robust (OAuth) soon.

At the moment, when you log in to an app other than the official one, you should use a special one-time password that you can generate in the official app (Settings / App Passwords). Those passwords look something like this: abcd-ef56-vxyz-qq34. You can generate a separate password for every tool and app that you log into.

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

There is now a simple email-based Two-Factor Authentication (2FA) feature, added recently. 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.

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. The team has been working hard preparing everything needed for the launch for the last few months (which is partly why some of the more user-facing features had to wait), and now they’ve taken a big step towards federation by letting people migrate their accounts to self-hosted servers. This will be a gradual, controlled rollout, so that they have a chance to test how things are working, but the network is really starting to open up now.

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 accounts on the platform have actually already been spread out on a number of separate servers for a while now (though all controlled by Bluesky) – they’ve been migrated sometime in November, 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.

Note, Bluesky opening to federation does not mean that it will connect with Mastodon servers, 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.

Search

It took a while, but 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 them yet – but the Bluesky team has posted a tutorial “Tips and Tricks for Bluesky Search” on their blog recently.

Hashtags

Hashtags have been partially implemented since last autumn – the protocol specifications were ready and the official app was actually encoding hashtag data into posts for a few months, but it wasn’t displaying them in the UI (although that did work in some third party apps). Full support was finally 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 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.

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 used to be the default, although now it’s turned off initially for new accounts). 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 – but it may get too noisy when you follow a lot of active people.
    So you can set this according to your preferences – if you’re just starting, you can turn on replies to everyone even with 0 likes, and if you want to trim your timeline a bit, set it to “followers only” to make it work like on Twitter, and/or increase the likes threshold.
  • 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 GIFs – prevents 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 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. 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.

GIFs & video

Another pretty obvious missing thing is a way to upload gifs (with a hard “g”) and video.

The problem with video is a lot higher bandwidth and storage use than with text and images, but more importantly, it’s also a lot more moderation work. There are all kinds of ugly things that people could upload in video form, and someone has to check it all if it’s reported… Gifs should generally be easier to do at first glance, but in practice they’re just another form of video, just shorter and without audio, so the above problems also apply.

For now, they’ve added two partial solutions to this. The first one is a way to embed e.g. YouTube videos and gifs from Giphy and Tenor in posts, which will play inline inside a post when clicked. For Giphy gifs, you need to paste a direct link to the image, and for Tenor gifs, a link to the page. This whole feature was actually implemented by a third party developer.

A more recent addition is a built-in support for adding Tenor gifs from the post compose dialog, by pressing the gif button and picking something from the gif search dialog. Here, only Tenor is supported. In both cases, they’re kind of offloading both the bandwidth/storage problem and the moderation problem to other services.

That said, they’ve recently started working on full support for (short) video and uploadable gifs. It will probably take some time, but this should be available in near future.

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.

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.

Showing post quotes

Bluesky has had support for quote-posting like on Twitter since the beginning and quotes are widely used on the platform. However, there’s currently no way to see a list of all quotes of a given post (although you do get notified when someone quotes you).

I’ve added a quote search to my tool Skythread – paste the link to the post into the search bar and then look for a “quotes” link below the post when it loads, and click it to see the list of all quotes. Alternatively, there is also a feed of all quotes of all your posts made by @flicknow.xyz (but this only works for your posts).

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.

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 to vouch for them.

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.

OAuth and full 2FA

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 (although Jack Dorsey apparently disagreed). 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.

Links on the profile, pinned posts, scheduling, disabling reposts per user…

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 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 (and mine)
  • Atlas, a “bird’s eye view” map of Bluesky (warning, takes some time to load)
  • Skythread – a thread reader by yours truly, mentioned earlier :]
  • Label Scanner, for checking if there are any labels assigned to an account or post

--

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:

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)!