├── .gitignore ├── Conclusion ├── Breaking up Facebook.md ├── Conclusion.md ├── Special thanks.md ├── Sticking to the mission statement.md └── The way out.md ├── Introduction ├── Introduction.md ├── Mission to movement.md ├── The way forward.md ├── Uses for a microblog.md └── What is microblogging.md ├── LICENSE ├── Part 1 ├── App.net.md ├── Full interview with Leah Culver.md ├── Interview with Leah Culver.md ├── Leaving Twitter.md ├── Part 1- Rewind.md ├── Penn Station.md ├── Pulled away from blogs.md ├── Toward decentralization.md └── WordPress and Tumblr.md ├── Part 2 ├── Alternative platforms.md ├── Blogging workflow.md ├── Domain names.md ├── External blogs with WordPress.md ├── Interview with Brent Simmons.md ├── Introducing Micro.blog.md ├── JSON Feed.md ├── Micro.blog and feeds.md ├── Migration.md ├── Part 2- Foundation.md ├── Part of the web.md ├── RSS for microblogs.md ├── Syndication.md └── Why indie microblogging.md ├── Part 3 ├── Blog archive format.md ├── Bridgy.md ├── Building blocks.md ├── Cross-posting.md ├── Full interview with Tantek Çelik and Aaron Parecki.md ├── IndieAuth.md ├── Interview with Tantek Çelik and Aaron Parecki.md ├── Microformats.md ├── Micropub.md ├── Owning your content.md ├── Part 3- IndieWeb.md ├── Permanence.md ├── Silos.md └── Webmention.md ├── Part 4 ├── Influence and reposts.md ├── Interview with Om Malik.md ├── Linkblogging.md ├── Part 4- Hypertext.md ├── Photography.md ├── Starting a new photo blog.md ├── Sunlit and photo feeds.md ├── UI impacts behavior.md └── Using HTML.md ├── Part 5 ├── ActivityPub.md ├── Indie readers.md ├── Mastodon.md ├── Notifications.md ├── Part 5- Decentralization.md ├── Pixelfed.md ├── WebSub.md └── Your blog.md ├── Part 6 ├── Banning users.md ├── Discovery.md ├── Full interview with Jean MacDonald.md ├── Harassment.md ├── Interview with Jean MacDonald.md ├── Misinformation.md ├── Open gardens.md ├── Part 6- Community.md ├── Popularity contests.md ├── Replies.md ├── Section 230.md └── Unattended algorithms.md └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .Ulysses-Group.plist 3 | -------------------------------------------------------------------------------- /Conclusion/Conclusion.md: -------------------------------------------------------------------------------- 1 | # Conclusion 2 | 3 | _"You choose the web you want." — [Brent Simmons][1]_ 4 | 5 | Bear with me for a paragraph as I summarize a scene toward the end of the 3rd Harry Potter movie, The Prisoner of Azkaban. Harry and Hermione are down by the lake watching the Dementors suck the life out of Sirius and the other Harry Potter. Harry doesn't do anything, because he thinks his dad will come to save them. He doesn't act at first, because he thinks someone else will solve the problem they're in. 6 | 7 | Hermoine cuts through the uncertainty, saying: 8 | 9 | > Harry, listen to me. No one's coming. 10 | 11 | We sometimes write code as if another developer will come in and clean it up later — improving it, removing the careless bits, the shortcuts. All we need to do is get the basics running as quickly as possible. Someone else will come in and refactor it later. 12 | 13 | But the truth is, no one is coming. If it's going to be done right, _we_ need to do it. Now, not later. 14 | 15 | So it is with social media. The big social media companies are never going to make changes that would risk undermining their dominance. Government is not going to step in and have all the answers. If there's a fix, it's up to us. 16 | 17 | [1]: https://inessential.com/2019/10/29/you_choose -------------------------------------------------------------------------------- /Conclusion/Special thanks.md: -------------------------------------------------------------------------------- 1 | ## Special thanks 2 | 3 | _“There's no such thing as a sure thing. At the end of the day, the only thing that matters is what you think.” — Ali from Draft Day_ 4 | 5 | In the summer of 2015, I wrote a reminder to myself on a little scrap of paper: 6 | 7 | > Quit August 1st no matter what. 8 | 9 | I folded the paper and put it in my wallet, carrying it around for weeks. I was nervous about quitting my job. After 14 years with the same company — a great team, the kind of place someone could just keep working for years and know they were working on something valuable — I knew I needed a hard deadline to move on to focus on Micro.blog. 10 | 11 | It was a big risk. So thanks first to my wife, Traci, who knew it was important to me and gave me the go-ahead to make the jump from a good job that supported our family to something unknown. At times Micro.blog has been a challenging journey that I couldn’t do without you there. 12 | 13 | To my kids, Alexandra, Meredith, and Julian, you make me want to leave the world a better place. Thanks for your jokes that I would never finish this book, but also for your perspective on how the next generation uses social media. 14 | 15 | To my mom, thanks for setting me on the path that decades later would lead me here. Believing I could do just about anything (maybe even write a book) started with family and friends believing in me. 16 | 17 | [To all 3000 Kickstarter backers][1], thank you for supporting the project early, for participating in the Micro.blog community, and for your patience. 18 | 19 | To my friends and beta testers, thanks for checking out Micro.blog even before it had its final name, and for your feedback in Slack and email. 20 | 21 | To my blog readers and podcast listeners who read the first published draft, you caught many typos and awkward grammar that I would’ve missed. The detailed editing notes from Nick Radcliffe were especially invaluable. 22 | 23 | To the IndieWeb community, the work you all have been doing for so many years is an inspiration. I'm so glad that Micro.blog can play a part. 24 | 25 | To Jean, thanks for wanting to be such a big part of Micro.blog from the beginning. From your leadership in the Micro.blog community to our discussions of platform features, Micro.blog would be missing something important without you. 26 | 27 | To Jon, thanks for Sunlit and Wavelength. I'm lucky that we still get to work on these apps together even years after first dreaming up the idea for Sunlit in Montreal, before Micro.blog was even a thought. 28 | 29 | To Vincent, thanks for your work on Gluon, and more recently for agreeing to join the Micro.blog team to make the whole platform better. Our support for Android would not be possible right now without you. 30 | 31 | To Daniel, we sometimes joke that our podcast is half entertainment for listeners and half therapy session for ourselves, but it’s true that talking through the development of Micro.blog and this book has been invaluable. 32 | 33 | It has been the highlight of my career to be able to work on Micro.blog. There is still a long road ahead to build the web we deserve. I hope to be working on Micro.blog for many years to come. 34 | 35 | [1]: https://www.kickstarter.com/projects/manton/indie-microblogging-owning-your-short-form-writing -------------------------------------------------------------------------------- /Conclusion/Sticking to the mission statement.md: -------------------------------------------------------------------------------- 1 | ## Sticking to the mission statement 2 | 3 | _“I won't look too far ahead  _ 4 | _It's too much for me to take  _ 5 | _But break it down to this next breath  _ 6 | _This next step  _ 7 | _This next choice is one that I can make.” — [The Next Right Thing][1]_ 8 | 9 | When someone new joins Micro.blog, they have a bunch of ideas for making it better. Not everyone agrees on which ideas are the ones to add first, because everyone naturally has different priorities. We could easily get distracted trying to solve many problems, implement all the features, and it would dilute everything that this book has been about. 10 | 11 | We could get lost in the weeds of feature requests, forgetting why we built Micro.blog. We could get pulled down a rabbit hole with the wrong optimizations, not knowing which next bug fix moves us closer to our goal. 12 | 13 | Micro.blog's goal is to encourage more people to post to their own blogs instead of only on big social media sites, and to have a great community where conversations can happen from those posts. The goal is not to completely replace any specific social network, but instead to help the future be a little more decentralized, with more variety and independence in the web. Important changes are possible if we don't concentrate so much of the web's content only on Facebook and Twitter. 14 | 15 | I've been happy to see so many people who have found that Micro.blog _does_ supplement existing social media so well that they can spend more time blogging, browsing the Micro.blog timeline, and participating in conversations. Other folks will jump in to Micro.blog from time to time, but might have most of their attention elsewhere, and that's fine too. 16 | 17 | Facebook's mission is different. They want to connect everyone in the world. Billions of people writing posts and sharing photos on a single domain name. Mark Zuckerburg talks about this often. Sure, some great things can happen when you do that, to bring people closer together, but also [terrible things][2]. The trade-off is not worth it. 18 | 19 | Micro.blog [leaves certain features out on purpose][3] because adding those features risks changing our mission from what it is to what _someone else's_ mission is. We do want the community on Micro.blog to keep growing so that it's more diverse and valuable to people, and for many more people to start new blogs that we can host on our platform. We can do that while staying true to our original goals and not falling for the trap of trying to become the next Facebook or Twitter. 20 | 21 | Every new feature should be judged based on whether it makes blogging easier. Does it move us a little closer to independence from the massive platforms, helping smaller blogs flourish? That is indie microblogging. 22 | 23 | [1]: https://embed.music.apple.com/us/album/the-next-right-thing/1487738280?i=1487738500 24 | [2]: https://www.manton.org/2019/06/19/facebook-content-moderators.html 25 | [3]: https://macgenie.micro.blog/2018/04/10/a-guide-to.html -------------------------------------------------------------------------------- /Conclusion/The way out.md: -------------------------------------------------------------------------------- 1 | ## The way out 2 | 3 | _“Two roads diverged in a wood, and I —  _ 4 | _I took the one less traveled by,  _ 5 | _And that has made all the difference.” — Robert Frost_ 6 | 7 | As I wrap up writing this book, there have been many articles published in the last few years about the role of social networks. Some even reach the obvious conclusion: that the top social networks are too big. [This interview on Slate][1] was fairly representative, covering monopolies and centralized power. 8 | 9 | But these articles always stop short before hitting on a solution. They always wrap up saying "it's tough to solve this". 10 | 11 | I think there are 4 parts to finding our way out of this mess with massive social networks: 12 | 13 | **Better features:** We should be careful before copying everything from Twitter. I don't want to take features that failed us and recreate them in a new environment. Micro.blog [leaves out features on purpose][2] that we think undermine a healthy community. 14 | 15 | **Open standards:** When I first stopped tweeting 6 years ago, it was largely because of the developer-hostile attitude from Twitter. Proprietary APIs reinforce the lock-in with content silos. This is why so much of Micro.blog is based on [IndieWeb][3] standards. It's why Mastodon uses APIs like ActivityPub. 16 | 17 | **Content ownership:** Controlling the writing and photos you post online isn't about open source or the technical experience to run a server. It's about using domain names for identity, so that you can move your data in the future without breaking URLs. I've written [more about this here][4] and it's a fundamental part of the book I'm writing about microblogging. 18 | 19 | **Smaller social networks:** Many people are looking for "the next Twitter", but it's not enough to replace Twitter with a new platform and new leadership. Some problems are inevitable when power is concentrated in only 2-3 huge social networks — ad-based businesses at odds with user needs and an overwhelming curation challenge. This might be Mastodon's greatest contribution: getting people used to the idea of many smaller, interoperable communities. 20 | 21 | There's not only one solution. Platforms like Micro.blog and Mastodon each have a role to play and can be complementary. Mastodon helps by encouraging smaller social networks, distributing the task of moderation, but doesn't prioritize content ownership. (An account on an instance like Mastodon.social has no more ownership of its content than an account on Twitter. Both let you export your data but both live at someone else’s domain name.) 22 | 23 | If you are frustrated with the state of social networks, I recommend blogging more. I love seeing new blogs [and photo blogs][5] just as we're having a serious debate in the mainstream about social networks. The way out isn't easy, but there's a clear path waiting for us to take it. 24 | 25 | [1]: https://slate.com/news-and-politics/2018/08/google-and-facebook-are-regulating-speech-by-booting-alex-jones-and-their-power-to-do-so-is-a-problem.html 26 | [2]: http://help.micro.blog/2018/twitter-differences/ 27 | [3]: https://indieweb.org/ 28 | [4]: http://manton.org/2018/03/23/indieweb-generation-and.html 29 | [5]: http://manton.org/2018/09/05/starting-a-new.html -------------------------------------------------------------------------------- /Introduction/Introduction.md: -------------------------------------------------------------------------------- 1 | # Introduction 2 | 3 | _“If there's a book that you want to read, but it hasn't been written yet, then you must write it.” ― Toni Morrison_ 4 | 5 | I was nervous as I drafted the email from my hotel room. A reception was starting downstairs at the Release Notes conference, held in 2016 at the Crowne Plaza hotel in the old Indianapolis Union Station. I would need to mingle, shake hands, try to remember everyone’s names even though I’m pretty good with faces and terrible with knowing what to say. I clicked send on the email to a handful of friends — announcing an early prototype for what would become Micro.blog, months before the Kickstarter campaign for the platform and this book — and then went downstairs, feeling the excitement of revealing something new. 6 | 7 | Micro.blog has steadily improved over the years. It has come a long way since the first public beta in 2017, with changes rolled out on a weekly basis. The book companion to Micro.blog that you hold in your hands had faltered, though, with improvements kept in my draft but not shared with the world. 8 | 9 | This book would’ve been more profound if it had been published in 2017 instead of 2024. The longer it took me to write it, the more well-understood the problems of massive social networks seemed to be with the general public. Years after Cambridge Analytica, the 2016 election, hate speech on Twitter, and Facebook CEO Mark Zuckerberg testifying before Congress, I started to wonder if I could even add anything unique to the conversation. 10 | 11 | But for all the known problems, there remain very few proposed solutions. In the debate about the role of platforms, there are offshoots into new technologies, web history, safe communities, even antitrust law. These are threads that we need to tie together with a cohesive framework. 12 | 13 | Big platforms like Twitter, Facebook, Instagram, and TikTok are built with small pieces of content. Lack of friction made posting easy. Amplification and engagement made creators influential. Native ads that are the same size as real content made platforms rich. That’s why the fix should also be rooted in small (micro) content: where it’s stored, who owns it, and how it flows across the web between much smaller, open platforms. 14 | 15 | ---- 16 | 17 | There's a conflict in the modern internet between the fast and the slow. It’s not the speed of networks or how fast a web site loads, though. It’s the pace of change. 18 | 19 | Startups move quickly. They experiment. Facebook founder Mark Zuckerberg famously described Facebook's motto as "move fast and break things". Speaking at [TechCrunch Disrupt in 2013][1] he talked about letting engineers run with an idea and quickly iterate, because they had a testing framework that measured new experiments. As long as a new feature met Facebook's metrics for whether people liked it or it generated more revenue: 20 | 21 | > What I really mean by "move fast" is that I want to empower people at the company to try things out, and I don't demand that every iteration of what we release is perfect. 22 | 23 | Framed that way, moving fast doesn't sound so bad. But the web as a whole doesn't work that way. The standards process moves slowly. Clever ideas implemented on a personal web site take time to catch on and spread, because most sites are small. 24 | 25 | It's because of this balance between the fast and the slow that a new social network like Facebook that seems at once exciting _and probably harmless_ can have a profound negative impact over years. Massive social networks steamroll over the natural, steady evolution of the web, because a single large site gains an outsized influence over progress. 26 | 27 | Today we face a web that is fundamentally broken. The web is increasingly centralized, corporate, and developer-hostile. Most writing happens on a small number of web sites that we do not control. 28 | 29 | In 2012, Anil Dash wrote about [the web we lost][2]: 30 | 31 | > In the early days of the social web, there was a broad expectation that regular people might own their own identities by having their own websites, instead of being dependent on a few big sites to host their online identity. In this vision, you would own your own domain name and have complete control over its contents, rather than having a handle tacked on to the end of [a huge company’s site][3]. 32 | 33 | Two years before his post, the first IndieWebCamp event was held. Founded by Tantek Çelik, Aaron Parecki, Amber Case, and Crystal Beasley, IndieWebCamp attendees had seen how the web was changing, the blogosphere fading away, and they wanted a return to simple, interoperable standards. The idea resonated immediately, but years later it still seems just on the edge of mainstream adoption. 34 | 35 | [In a conference talk at Web Directions in 2014][4], IndieWeb co-founder Tantek Çelik outlined what we could learn from old blogs and how to rebuild for the future, starting with the early days of blogging before silos took over: 36 | 37 | > In 2003 we kind of hit this moment of peak independent web. We kind of assumed that that was how it was always going to be. Everything was working; everyone had their own site. Why would we assume anything different? Well, what happened? Silos happened. 38 | 39 | The most popular web sites today make sharing more approachable. Millions of people communicate online now because it's easier. Silos like Facebook and Twitter promised to make people's lives better and more connected, but the cost was stagnation for the rest of the web. 40 | 41 | Twitter turned their back on developers. Instagram sold out and is full of ads. Snapchat and TikTok exist almost outside of the web, like so many new mobile apps built on web technologies but with accessibility from a web browser as an afterthought. 42 | 43 | It's time for a return to what made the web great. This book is about how. It's both a history and a guide. How the web used to be, and how it should be again. 44 | 45 | [1]: https://www.youtube.com/watch?v=V6urvN_4q9I 46 | [2]: http://anildash.com/2012/12/the-web-we-lost.html 47 | [3]: http://dashes.com/anil/2009/06/the-future-of-facebook-usernames.html 48 | [4]: https://www.youtube.com/watch?v=FNr0JNwsLy8 -------------------------------------------------------------------------------- /Introduction/Mission to movement.md: -------------------------------------------------------------------------------- 1 | ## Mission to movement 2 | 3 | _“Progress depends on our changing the world to fit us. Not the other way around.” — Halt and Catch Fire_ 4 | 5 | Basecamp started as the Chicago-based 37signals, a web design company known for pushing back against accepted conventions. They used to say that [copywriting is a form of user interface design][1]: 6 | 7 | > Great interfaces are written. If you think every pixel, every icon, every typeface matters, then you also need to believe every letter matters. 8 | 9 | The best products don’t just have marketing copy; they have a mission statement. They don’t just sell a tool; they sell a movement. 10 | 11 | Sometimes our products are confusing to new users — a UI that is too different, or trying to do too many things. These failures are an opportunity to improve beyond just bug fixes. Instead of only explaining what the product does, how can we pitch it in a way that strengthens a community around the idea, spreading through members in a more meaningful way than we can by ourselves. 12 | 13 | And unlike a one-way press release, a community is inherently two-way. Every mention of the idea is both marketing and feedback. Someone blogs about how they’re excited for the product, but also how they wish it had a certain missing feature. Someone in the press writes a review, but also with a list of pros and cons. 14 | 15 | This cycle means the product gets better. And if we’re thoughtful in that first approach to marketing copy, then every blog post, review, and tweet that follows is laced with a little part of our mission statement. 16 | 17 | Who doesn’t want to build products that resonate so well, that go from nice utilities or productivity apps to something our customers fall in love with? 18 | 19 | [Kyle Neath echoed this in a blog post][2], writing that it's about ideas, not products: 20 | 21 | > People want to be part of ideas. Being part of a company who builds a successful product is cool... but being part of an idea is a lot more attractive. If you can build a business where both your employees and your customers think they're part of an idea, you've created something special. 22 | 23 | The venture capitalist (and blogger) Fred Wilson [wrote about][3] focusing on work that is inspiring and that can have an impact: 24 | 25 | > You must work on something that inspires you and others, you must work on something with a significant impact, and you must do it in a way that makes getting where you want to go as easy as possible and keeps you there as long as possible. 26 | 27 | People are increasingly disillusioned with larger companies. When a company gets too big, that company inevitably forgets why they exist. Not even the greatest, mission-driven companies seem to be able to escape this fate. The only way to stay true to your roots is to stay small. And smaller companies will inherently discourage centralization. 28 | 29 | It might seem that short and often ephemeral posts have trained us with short-attention spans. To see the movement we must look over a longer period at the collection of all those posts — not just our own posts, but the potential for microblog posts all across the web. 30 | 31 | This book you're reading is longer than I had intended, especially ironic given that its subject matter is short posts. But the goal is big. It's not about any one new social network. It's about a new way of thinking about publishing on the web. 32 | 33 | Temporary, viral movements like `#DeleteFacebook` are not enough. We need something sustainable that permanently changes the narrative. 34 | 35 | What is the mission for indie microblogging? There are 4 guiding themes in this book that we will keep returning to: 36 | 37 | * **Better features.** Learning from the user interface innovations of social networks — both the good choices and what we can do better. 38 | * **Open standards.** How the work of the IndieWeb and even older blogging APIs can improve interoperability and freedom on the web. 39 | * **Content ownership.** Why nearly everything starts with personal domain names. 40 | * **Smaller social networks.** The technical overview of Micro.blog, Mastodon, and pushback against massive social networks. 41 | 42 | It's the combination of all 4 themes that will move the web forward. 43 | 44 | [1]: https://gettingreal.37signals.com/ch09_Copywriting_is_Interface_Design.php 45 | [2]: https://warpspire.com/posts/idea-businesses 46 | [3]: https://avc.com/2020/01/what-to-work-on/ -------------------------------------------------------------------------------- /Introduction/The way forward.md: -------------------------------------------------------------------------------- 1 | ## The way forward 2 | 3 | _“Most important things in life are a hassle. If life’s hassles disappeared, you’d want them back.” — Hayao Miyazaki_ 4 | 5 | The blog AltPlatform had published a number of articles about the open web and indie blogging. Brian Hendrickson [wrote about emerging protocols from the IndieWeb and Mastodon][1], and how these standards could eventually reach a scale that would "flip the iceberg" to become the more dominant way we communicate online: 6 | 7 | > Open source tools like WordPress, [1999.io][2] and Mastodon.social are creating many small networks of publishers, and popular tools like Twitter and Micro.blog could peer with them. If all of the social networks outside of Facebook interoperated at some level, they might eventually “flip the iceberg” and become the dominant form of social networking. 8 | 9 | Compatibility between new blog-focused platforms could eventually become bigger than any one social network. This compatibility comes from open standards. (I'll talk more about the IndieWeb and Mastodon in parts 3 and 5.) 10 | 11 | It is daunting to create a new microblog platform — to compete with Twitter and Facebook, to go up against more established companies with better funding — and creating a new social network from scratch usually does not work. The huge platforms are [super-aggregators][3], ad-based with little cost to acquire content or scale, and difficult to compete with network effects. 12 | 13 | For years many developers have wanted an alternative but have not been able to get mainstream traction. Developers and entrepreneurs with the best intentions, great talent, and a larger team than we have for Micro.blog. 14 | 15 | So to flip the iceberg, we must start with a simpler goal: encourage more people to blog. We must play the long game, building deliberately so that the foundation will last for years. 16 | 17 | It's not about leaving Twitter and moving to the next platform. It's about redistributing microblog posts across the web, with a diverse set of platforms. 18 | 19 | This redistribution is already happening. [Indie Map][4] took thousands of independent blogs and started mapping the relationships as people use their blog to link and reply across sites. Instead of a concentration of users on a single site like Twitter or Facebook, users are spread out, posting at sites they control. 20 | 21 | ![][image-1] 22 | 23 | Blogging at a personal domain name is a kind of investment in the future of the web. It's a statement that you value your own writing and are ready to contribute to making the web better. 24 | 25 | This book is divided into 6 major parts: 26 | 27 | * **Part 1: Rewind** takes us back to early social networks and blogging platforms. It also includes interview questions with Marco Arment about the early days of Tumblr, and a conversation with Leah Culver about Pownce. 28 | * **Part 2: Foundation** outlines the basics of indie microblogging, with a quick-start guide for WordPress and how Micro.blog fits into the ecosystem of indie microblogs. There’s an overview of JSON Feed and an interview with NetNewsWire developer Brent Simmons. 29 | * **Part 3: IndieWeb** is all about the IndieWeb movement. I’ll cover why we care about owning our content and the building block API standards of the IndieWeb. It’s capped off with an interview with IndieWeb co-founders Tantek Çelik and Aaron Parecki. 30 | * **Part 4: Hypertext** covers the unique nature of web formats, focusing on photography, UI, and HTML. 31 | * **Part 5: Decentralization** takes us to Mastodon, WebSub, and real-time notifications between blogs. 32 | * **Part 6: Community** is about the intersection between blogs and platforms. The impact of harassment, misinformation, and politics on healthy communities. We end with a conversation with Micro.blog community manager Jean MacDonald. 33 | 34 | Getting millions of new bloggers to post to their own site won't be easy. Nothing worthwhile ever is. It seems like a never-ending hassle to convince people to blog when Facebook onboards new users so effortlessly. But we've seen in the years since Micro.blog launched that this will work. There's no question that more people are blogging today because of Micro.blog and the larger IndieWeb movement, and we've only scratched the surface. 35 | 36 | [1]: http://web.archive.org/web/20170913190455/http://altplatform.org/2017/06/22/flip-the-iceberg/ 37 | [2]: http://1999.io/ 38 | [3]: https://stratechery.com/2017/defining-aggregators/ 39 | [4]: https://indiemap.org 40 | 41 | [image-1]: https://book.micro.blog/uploads/2020/458ccd0c59.png -------------------------------------------------------------------------------- /Introduction/Uses for a microblog.md: -------------------------------------------------------------------------------- 1 | ## Uses for a microblog 2 | 3 | _“You donʼt know if your idea is any good the moment itʼs created. Neither does anyone else. The most you can hope for is a strong gut feeling that it is. And trusting your feelings is not as easy as the optimists say it is. Thereʼs a reason why feelings scare us.” — Hugh MacLeod, [Ignore Everybody][1]_ 4 | 5 | Sometimes it’s hard to put words down. Staring at a large, empty text box from blog software that wants you to give your post a title, as if every thought is fully formed before you know what to say. Doubt and imposter’s syndrome creep in. 6 | 7 | The solution is easier, quick posting. Just start writing without the pressure of getting it all right. 8 | 9 | People who haven't been posting regularly to their own blog also often struggle with deciding what content should be on a social network and what should be posted to a microblog. My default is to post everything on my own site, and cross-post to other networks, which takes the guesswork out of where to post. But there are several types of content that are naturally well-suited to an indie microblog that you control. 10 | 11 | **Photos** 12 | 13 | Sharing photos is an important part of Micro.blog. I put a custom photo picker and filters in the original Micro.blog iOS app to encourage everyone to post photos to their blog, so that you end up with a great collection of your best photos at your own domain name. Because photos are square by default, they look great in the Micro.blog timeline, and with cross-posting Micro.blog can attach photos to your tweets or send posts to other social networks. 14 | 15 | Some people on Micro.blog focus almost exclusively on posting photos, like [Robert Brook][2]. Some people have even created separate blogs just for their photos at their own domain name hosted on Micro.blog, like [burk.photos][3]. There’s [a special section of our curated Discover section][4] that features photos from more Micro.blog users. 16 | 17 | We'll cover photos extensively in Part 4. 18 | 19 | **Linkblogging** 20 | 21 | Essentially two types of link blogs have evolved since the early days of blogging. The most traditional link blog can be seen in Dave Winer’s posts. These are links with a very short commentary. Many tweets are like this. In a way, this format is the purest form of microblogging. 22 | 23 | The second type of link blog starts to fall outside the limits of microblogging. Instead of just including a URL, authors use a quote from the linked material as the foundation for the post. The majority of Daring Fireball posts adopt this format. While author John Gruber is known for his full essays, those longer posts are infrequent today. He keeps his site active by linking to other interesting essays and tacking on his own brief opinion. 24 | 25 | **Books** 26 | 27 | Micro.blog has a Goodreads-inspired feature called Bookshelves that helps you track what books you’re reading or want to read. When you’re done reading a book, a quick click on the “New Post” button will prepare a microblog post with the book name, author, and link to the book details. It’s an easy way to share your favorite books and keep everything on your own blog. 28 | 29 | There’s also a books API and companion app for iOS and Android called Epilogue, plus third-party IndieWeb apps like IndieBookClub. If we put more of our content on our own blogs, services like Micro.blog can aggregate book data together, forming a more distributed version of centralized sites like Goodreads. 30 | 31 | **Travel blogs** 32 | 33 | Travel blogs tend to combine text about the trip and photos, with individual blog posts for days or major sections of the trip. This can be seen in microblogs like [this one from Mary Hatfield][5] as they travel and adventure across the world, but a microblog is also great for remembering short trips and vacations. 34 | 35 | We designed our Micro.blog companion app Sunlit for these kind of travel posts. The main interface on iOS allows grouping text and photos from multiple days into a blog post. 36 | 37 | ![][image-1] 38 | 39 | Travel blogs can be longer posts, or short check-in posts with just the venue name. This can often be automated. Many people use the service [OwnYourSwarm][6] to copy Swarm check-ins to a microblog. 40 | 41 | **Business blogs** 42 | 43 | A microblog can be used for a company's news updates or product release notes. For Micro.blog, we have [news.micro.blog][7] where we post about new features or server downtime. These posts are short and also easy to copy over to a company's account on social media. 44 | 45 | One advantage for businesses is that unlike social media, a microblog can be completely branded with the company's web site design and domain name. Posts can also be included automatically in a company's main web site using Micro.blog's [Sidebar.js][8] script. 46 | 47 | **Conversations** 48 | 49 | Blog posts are a great way to get feedback about an idea. Conversations around a blog post can take the form of replies on Micro.blog, or comments on external blog posts like WordPress. 50 | 51 | See Part 6 for more about replies and building communities. 52 | 53 | **Microcasting** 54 | 55 | Micro.blog is about making short-form content you own as simple to post as a tweet because we believe blogging should be easier. Podcasting should be easier too. 56 | 57 | Everyone had a story to tell, but for some people it's too daunting to even think about needing to talk for half an hour. Microcasts are short-form podcasts. Creating a microcast is fun because it's much easier to record and edit than the longer podcasts we’re all used to. 58 | 59 | Chet Collins has [published a microcast][9] where he shares bits from his day with his kids. He wrote [on his blog][10] about why a podcast is such a nice format for capturing these memories: 60 | 61 | > Audio recordings, in an open format, are about as future-proof as you can get. Even more than that, these recordings deliver the actual sound of my children’s voices, their laughter, and their unfiltered thoughts. They are the perfect time capsule of my children, recorded and preserved for the future. 62 | 63 | Using a podcast essentially provides some structure, transforming audio snippets from everyday life into a format that can be easily reviewed later. It's more organized than a digital junk drawer of random video clips, which for most people are unlikely to ever be edited. Podcasts inherently have a narrator to give context. 64 | 65 | **…and everything else** 66 | 67 | What you had for lunch. The movie you just watched. If it's something that could go on Twitter or Facebook, it can be a microblog post at your own site. 68 | 69 | [1]: https://hughcards.net/book/ 70 | [2]: https://micro.blog/robertbrook 71 | [3]: http://burk.photos/ 72 | [4]: https://micro.blog/discover/photos 73 | [5]: https://marydhat.micro.blog 74 | [6]: https://ownyourswarm.p3k.io 75 | [7]: https://news.micro.blog 76 | [8]: https://help.micro.blog/2016/sidebar-js/ 77 | [9]: https://chetjcollins.com/chetcast 78 | [10]: https://www.chetjcollins.com/2020/04/20/why-i-microcast.html 79 | 80 | [image-1]: https://book.micro.blog/uploads/2020/51a9bd6263.png -------------------------------------------------------------------------------- /Introduction/What is microblogging.md: -------------------------------------------------------------------------------- 1 | ## What is microblogging? 2 | 3 | _“The most valuable of all talents is that of never using two words when one will do.” — Thomas Jefferson_ 4 | 5 | In her 2002 book The Weblog Handbook, Rebecca Blood introduced readers to the growing niche of web sites that focused on chronological posts. She wrote about what made a blog different: 6 | 7 | > No one wants to scroll down to the bottom of the page (or even the current day’s section) to see if any new content has been posted. With new content at the top, a visitor can see at a glance whether your page has been updated and easily begin reading your latest entries without any additional effort. 8 | 9 | Spelling it out seems obvious today. We can similarly outline what microblogging is in a way that hopefully will be obvious years from now when indie microblogging is more common. 10 | 11 | We can approach defining the term micro logging from two sides: specific rules for feeds and platforms, and high level goals, the spirit of indie microblogging that all blogs can share even when the details vary. 12 | 13 | Wikipedia defines microblogging this way: 14 | 15 | > Microblogging is a broadcast medium that exists in the form of blogging. A microblog differs from a traditional blog in that its content is typically smaller in both actual and aggregated file size. 16 | 17 | But that’s not quite specific enough. A microblog post should have these qualities: 18 | 19 | * Should have a feed, usually RSS or JSON Feed 20 | * Does not have an RSS item title. 21 | * Contains short post text, usually 280 characters or less. 22 | 23 | Not having an RSS item title might take some getting used to for mainstream blogging clients and readers. Most RSS apps assume that all posts have a title, even though titles are technically optional in the spec. But I think this is an important distinction because if you think about Twitter-like posting, it should be fast and convenient; making up a title first interrupts the flow of posting. 24 | 25 | The specific rule for post length or which feeds you include can be useful. These should be thought of as more of a guideline than a rule, though — just something to shoot for. 26 | 27 | We focus on microblogging because it’s the easiest form of web publishing. Centralized services like Twitter and Facebook took off because they had better, simpler interfaces. 28 | 29 | If you stop reading after this page, here's what you need to know: 30 | 31 | * Publish short posts and photos to your own web site, at your own personal domain name. 32 | * Make sure your web site has an RSS or JSON feed, and add it to communities like Micro.blog. 33 | * If you want to participate in larger social networks, post to your own site first and then copy the post to Twitter, Facebook, or Instagram. 34 | * Massive centralized platforms create problems for society. By posting to your own site, you control your content, distributing it more evenly across the web and minimizing the power of big tech companies. 35 | 36 | This might seem like too much work for most people. With many of today's blogging tools, it is. We must work simultaneously on open standards and on making software that follows those standards as easy to use as possible for everyone. 37 | 38 | What we don’t want to do is reinvent the wheel with a new social media-like protocol that isn’t rooted in the web and blogs. Others have tried to come up with new systems for microblogging that _don’t use blogs_. But the word “blog” is part of “microblog” for a reason. They differ only in length. By using blogs, we get to keep everything that is valuable about blogging. We get to keep existing blog software and IndieWeb-friendly formats. 39 | 40 | Blogs are web sites with reverse-chronological posts written by people. The newest posts are always at the top of the web site. They can be news sites, corporate sites, travel sites, photo sites, tech sites. They are often personal, with an individual's voice. Readers want to keep visiting a blog because there's a story, unfolding with each post. The passing of time is a fundamental element to what defines a blog. 41 | 42 | This emphasis on time is even more obvious for microblogs. Microblogs are blogs with very short posts. Because short posts are easy to write, there are usually more of them. In the case of a microblogging service like Twitter or Micro.blog, friends' posts are combined together in a timeline. 43 | 44 | In an open platform based on indie microblogs, posts in the timeline come from blogs at the author's own domain name. This helps distribute content across the web and bypasses the bottleneck of posting only through big social networks, reducing their influence: 45 | 46 | ![][image-1] 47 | 48 | Recent posts are placed at the top of the timeline. Older posts fall to the bottom, and eventually drop off. With this focus on the new, some people consider microblogging ephemeral, but it doesn't have to be. 49 | 50 | Indie microblogging is about taking ownership of our microblog post content. It's about reclaiming the definition of what a microblog is from Twitter. Microblogs and social networks are big components of the web — too important to be contained in such a small number of closed, centralized platforms. 51 | 52 | An indie microblog is a blog that contains short posts at your own domain name. It can be hosted by multiple providers, but it is conceptually independent of any one platform. It's portable and you control it. 53 | 54 | [image-1]: https://book.micro.blog/uploads/2020/3cc64cccde.png -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | This work is licensed under the Creative Commons Attribution 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 2 | -------------------------------------------------------------------------------- /Part 1/App.net.md: -------------------------------------------------------------------------------- 1 | ## App.net 2 | 3 | _“Perhaps you think that Twitter today is a really cool and powerful company. Well, it is. But that doesn’t mean that it couldn’t have been much, much more.” — [Dalton Caldwell][1]_ 4 | 5 | If the first wave of alternatives to Twitter was as Twitter was still growing, the second wave of alternatives to Twitter came later, as Twitter was using their dominance to restrict the early openness to developers, and struggling to deal with harassment and other community issues on the platform. That period is best represented by App.net. 6 | 7 | App.net co-founder [Dalton Caldwell wrote an open letter to Mark Zuckerberg][2] in 2012. Dalton described a meeting he had at Facebook where executives made clear that what Dalton was building was similar to Facebook's App Center product. Facebook had to control it, in Dalton's view, because of ads: 8 | 9 | > Mark, I don’t believe that the humans working at Facebook or Twitter want to do the wrong thing. The problem is, employees at Facebook and Twitter are watching your stock price fall, and that is causing them to freak out. Your company, and Twitter, have demonstrably proven that they are willing to screw with users and 3rd-party developer ecosystems, all in the name of ad-revenue. Once you start down the slippery-slope of messing with developers and users, I don’t have any confidence you will stop. 10 | 11 | Facebook suggested they could compete with Dalton's product or buy his company. Dalton said he'd rather _reboot his company_ than be acquired. That reboot became App.net. 12 | 13 | Even before App.net was fully funded, they released a prototype Twitter clone called "Alpha" as a test for their new API. The API was modern and well-designed. Some features that might be left to third-party developers to extend, like my Tweet Marker API for timeline syncing, were built in as core parts of the API. 14 | 15 | App.net further embraced developers through in-person hack days and a developer fund that paid third-party developers based on usage in their apps. This lessened the risk of jumping into a new platform, making sustainability more of a possibility for new apps like Netbot, a port of the popular Tweetbot to App.net. 16 | 17 | ---- 18 | 19 | You could add blog feeds to App.net for "automatic" posting to App.net, but fundamentally the service was not structured around integrating with external blogs. There were no domain names for your content. 20 | 21 | [Dalton Caldwell wrote about App.net supporting open standards][3], without necessarily basing the API on those standards: 22 | 23 | > Activitystrea.ms Atom & JSON feeds, as well as RSS feeds, of public posts for individual users, hashtags, etc. (Note that this is different from making them the foundation of our read/write API, which we have decided not to do) 24 | 25 | There were minor differences to Twitter, such as a longer 256-character post length, but also deeper additions, such as annotation data, channels, and file storage. These API features enabled building new types of apps. Location check-in apps like Ohai by Steve Streza, which by using a common API could share data with other location-based apps, and chat apps like Whisper, which was spun off of the Riposte iOS client. 26 | 27 | Streza blogged about these benefits [in a post about Ohai 1.0 in 2013][4]: 28 | 29 | > This means other developers could build apps that recognize your journal. So, if the developer of your favorite camera app adds support for Ohai journals, they could save those photos into your journal. Then, the next time you open Ohai, those photos are available. Other developers could build journaling apps for other platforms like Android, or even write competitive apps for iPhone. 30 | 31 | The API was so flexible that the types of apps grew beyond what we were expecting as a Twitter-like platform. 32 | 33 | ---- 34 | 35 | I believed at the time that the next great app for App.net would come from the community, the developers who were passionate about the API's potential, just as early developers like [Iconfactory][5] who took a risk on Twitter years ago are still having an impact on that service today. The next great app would come from the developers who see App.net as a way to build new things. 36 | 37 | I was working on an app like that. It uses the App.net API, but not the timeline. It takes pictures, but isn’t really a photo app. It integrates with Ohai, but isn’t another location check-in app. It renders beautiful maps throughout, but isn’t about navigation. Some of the features I’m most proud of in the app wouldn’t be the same without App.net. 38 | 39 | There’s no way to know what apps will resonate with the mainstream, and which will remain niche or failures. But to have any hope of success, you have to start. You might even have to take a risk on a new platform if you want to build something new. 40 | 41 | The promise of App.net was bigger than one type of app. App.net wasn't just a blank slate; it was an amplifier. It was waiting to power the next new idea and help it grow into something big, but it could only wait so long. 42 | 43 | ---- 44 | 45 | Two years later the experiment was over. Dalton announced that subscription revenue was not enough to continue with a full-time staff, and App.net would be in maintenance-mode only. A few years after that, the service was completely shut down. 46 | 47 | [In an article for Wired][6], written a year into the App.net launch when many people still had great hope for the platform, Mat Honan said something was missing from App.net: 48 | 49 | > But there’s still something missing, that seems totally obvious: a game. App.net needs a Dots or a Candy Crush or a Words With Friends that plugs into its social sphere. Something that isn’t just useful, but fun. Something wonderful. 50 | 51 | Something _was_ missing, but not a game. The App.net team got so much right — the early crowdfunding, the well-designed API, the developer story — that I didn't notice what they had left out until much later. All data lived at `app.net` URLs, and when the platform was gone, all the posts and data went with it. There was no way to own your content. 52 | 53 | To learn from App.net, we should be inspired by its rich APIs, and especially its developer-friendly ecosystem. But it was too centralized. 54 | 55 | [1]: http://daltoncaldwell.com/what-twitter-could-have-been 56 | [2]: http://daltoncaldwell.com/dear-mark-zuckerberg 57 | [3]: http://daltoncaldwell.com/a-response-to-brennan-novak 58 | [4]: http://stevestreza.com/2013/07/16/ohai/ 59 | [5]: https://iconfactory.com/ 60 | [6]: http://www.wired.com/gadgetlab/2013/08/the-great-app-net-mistake/ -------------------------------------------------------------------------------- /Part 1/Part 1- Rewind.md: -------------------------------------------------------------------------------- 1 | # Part 1: Rewind 2 | 3 | _"This device isn't a spaceship; it's a time machine. It goes backwards, forwards. It takes us to a place where we ache to go again. It's not called the wheel; it's called the carousel. It lets us travel the way a child travels — around and around, and back home again, to a place where we know we were loved." — [Don Draper][1]_ 4 | 5 | I loved the old web. The simplicity, where knowing just a few HTML tags was enough to be at the forefront of web design. The playfulness, where experiments were not overshadowed by a fear of the future hanging over any attempt to try something new. 6 | 7 | But this book is more than nostalgia. Before we can take the next step forward, we must first look back. It won't help the web to blindly reinvent the same platforms with the same problems. 8 | 9 | Anything new is a reaction to what came before. I would not be writing this book if it weren't for all the social networks that have come and gone, and the bloggers who have stuck with publishing to their own site. 10 | 11 | What can we learn from older platforms? What good ideas from blogs can we bring forward, resurfacing them into the modern web? 12 | 13 | Tumblr and LiveJournal brought blogs together under a social graph. MySpace opened up the possibility of editing HTML and CSS to users who would never run a server. Pownce added a richer timeline of posts, events, and shared files. Google Reader provided a comprehensive UI for RSS feeds and centralized comments. And of course Twitter and Facebook made posting easy. 14 | 15 | Things were moving quickly. Years seemed to pass in a blink, until much of the naive enthusiasm for the web — the tinkering and the blog-based foundation — had slipped away to be supplanted by Twitter and Facebook at scale. It was gone before we noticed what had been lost to expired domain names and lapsed dreams of a more connected web. 16 | 17 | [1]: https://en.wikipedia.org/wiki/Mad_Men -------------------------------------------------------------------------------- /Part 1/Penn Station.md: -------------------------------------------------------------------------------- 1 | ## Penn Station 2 | 3 | _“The station structure, designed after the Qual d'Orsay, Paris, but twice as large, will be 1,500 ft. in length by 500 ft. in width, three decked, inclose 25 tracks at tunnel level, which will be approached by gradual carriage drive and walkway.” — The Brooklyn Daily Eagle Almanac, 1906_ 4 | 5 | When my family was visiting New York City a few years ago, we took a train out of Pennsylvania Station on the way up to Montreal for the second half of our vacation. It was raining a little as we walked from the hotel, but I thought we'd still have no trouble finding the station. After a few minutes we gave up and had to ask someone where the entrance was. 6 | 7 | We couldn't find it because it looked like every other street corner in Manhattan. But it wasn't always like that. It used to look like this: 8 | 9 | ![][image-1] 10 | 11 | The New York Times [recently described the old Penn Station this way][1]: 12 | 13 | > With its swarming crowds and dust motes dancing in shafts of smoky light, the station was catnip to midcentury photographers, filmmakers, artists and architects. It was the architectural embodiment of New York’s vaulted ambition and open arms. 14 | 15 | In the 1960s, facing declining train usage and financial problems, the Pennsylvania Railroad sold the rights to everything above ground and the incredible station pictured above was demolished. It was only afterwards, when it actually happened, that everyone fully realized what they had lost. Determined to not let other beautiful architectural landmarks get destroyed, the city passed a law to restrict similar demolition. Grand Central Terminal was preserved because of the lesson learned from letting Pennsylvania Station go. 16 | 17 | I was thinking about this story — failing to do the right thing, but applying that knowledge to the _next_ thing — while re-reading [Marco Arment's excellent post on the future of podcasting][2]. In it, he lays out the technical details for how podcasting works today, and makes the case for leaving it alone. I especially like this part, on his determination to keep Overcast a sort of pure MP3 client: 18 | 19 | > By the way, while I often get pitched on garbage podcast-listening-behavioral-data integrations, **I’m never adding such tracking to Overcast.** Never. The biggest reason I made a free, mass-market podcast app was so I could take stands like this. 20 | 21 | I should have realized it earlier, but I don't think I really connected all of Marco's goals with Overcast until Daniel Jalkut and I had him on our podcast Core Intuition, [episode 200][3]. We talked about many of these same themes as Marco was finishing up Overcast 2.0. Marco talked about larger podcast software teams that are trying to lock down podcasting: 22 | 23 | > They're trying to lock it down for themselves. Usually it's: let's build a closed platform, and our technology can power your podcasting. And it's like all these buzzwords that really just mean we are trying to lock down this open medium to a centralized close thing that we control. And then we are the gatekeepers, and we have all the power, and all the money flows through us. 24 | 25 | Everywhere I looked there seemed to be a debate about the role of podcast aggregators like Spotify and Apple. There was a great discussion [on Upgrade][4] with Myke Hurley and Jason Snell about this. It started [about halfway through][5], with Myke describing the potential for Apple to lock down podcasting: 26 | 27 | > For there to be more data about listeners — like to know stuff about where you are in the world, demographic information, how old you are, to know if you've listened to the whole show, what parts you've skipped — for Apple to know this information, they would have to kind of lock down a lot of the way that podcasts work. They would probably need to be hosting the files and reserving them on their own. They would need to do more tracking. 28 | 29 | And [in a response to Marco on MacStories][6], Federico Viticci wrote about the parallel trend in the web industry toward centralized services like Facebook and Medium that allow "content professionals" to monetize their writing. In doing so, those writers give up many of the benefits of the open web: 30 | 31 | > But the great thing about the free and decentralized web is that the aforementioned web platforms are optional and they're alternatives to an existing open field where independent makers can do whatever they want. I can own my content, offer my RSS feed to anyone, and resist the temptation of slowing down my website with 10 different JavaScript plugins to monitor what my users do. No one is forcing me to agree to the terms of a platform. 32 | 33 | While the open web still exists, we dropped the ball protecting and strengthening it. Fewer people's first choice for publishing is to start a web site hosted at their own domain. Like the destruction of Pennsylvania Station, sometimes you only know in hindsight that you've made a mistake. We were so caught up in Twitter and Facebook that we let the open web crumble. I'm not giving up — I think we can get people excited about blogging and owning their own content again — but it would have been easier if we had realized [what we lost][7] earlier. 34 | 35 | Reading posts like Marco's and Federico's, and listening to Jason and Myke on Upgrade, I'm convinced that podcasting will remain open because as a community _we know better now_. We can see the dominance of YouTube controlling nearly all web video. We can learn from the mistakes with the web and the threats of closed platforms, making sure that podcasting is preserved as a simple technology that no one controls. 36 | 37 | And we can take a fresh look at all the blogging platforms that have come before, learn from what worked well with previous social networks and what failed, and recommit to bringing the best parts back to today's web. This time, prepared for the future. 38 | 39 | [1]: https://www.nytimes.com/2019/04/24/nyregion/old-penn-station-pictures-new-york.html 40 | [2]: https://marco.org/2016/05/07/apple-role-in-podcasting 41 | [3]: http://coreint.org/200 42 | [4]: https://www.relay.fm/upgrade/88 43 | [5]: https://overcast.fm/+DeCngCgj8/43:07 44 | [6]: https://www.macstories.net/stories/a-podcasting-divergence/ 45 | [7]: http://anildash.com/2012/12/the-web-we-lost.html 46 | 47 | [image-1]: https://book.micro.blog/uploads/2019/30b89f1d7d.jpg "Pennsylvania Station in the 1910s" -------------------------------------------------------------------------------- /Part 1/Pulled away from blogs.md: -------------------------------------------------------------------------------- 1 | ## Pulled away from blogs 2 | 3 | _“You were the captain of a ship, sailing aimlessly through the wilds of the Web. Occasionally you would drop anchor and stop to peruse all the great content that netizens were putting out into the world.” — [The Web Is Fucked][1]_ 4 | 5 | If you wanted to publish anything on the web in the early 2000s, you created a blog. Blogs had personality. People commented on each others blog, helping build loose communities. They met in person at events like the SXSW Interactive conference. 6 | 7 | Slowly, the rise of larger platforms pulled attention away from blogs. More and more former bloggers posted their content on social networks first. 8 | 9 | Anil Dash was interviewed by Matt Mullenweg [on the Distributed podcast][2], talking about blogging less often because there were other venues to post to like Twitter: 10 | 11 | > the biggest thing chipping away at it is having other venues and other platforms 12 | 13 | When I talked to Tantek Çelik for [the interview in Part 3](), he acknowledged this period as Twitter was taking off where even he stopped blogging: 14 | 15 | > Just even personally, the last blog post I wrote on my old blog was in August of 2008. I did not have anything on my own site in 2009. 2009 was a really weird transitional period, because I both saw that happening and I saw it happening to myself. 16 | 17 | By 2010, you could see this pattern across the web. Many of the pioneers of blogging had either completely stopped posting, or cut back their posts to longer essays a few times a year. 18 | 19 | What happened? Social networks were simply easier to post to, and the feeling of engagement in getting likes or replies was more compelling than publishing into the void of the blogosphere, wondering if anyone was listening. 20 | 21 | At the same time, blog comments were getting harder to manage. There was more comment spam. Bloggers started pointing their readers to social networks if they wanted to reply to a post, effectively offloading user registration and moderation to other centralized platforms. 22 | 23 | It wasn't a stretch to embrace social networks because bloggers were already actively using some centralized platforms, like Flickr. If a blog was already leaning on Flickr for photo storage, it was a small step to go to other platforms for short text posts. 24 | 25 | Before Twitter was large enough and stable enough to dominate centralized microblogging, several competing social networks were launched with a focus on microblogging. 26 | 27 | ---- 28 | 29 | Twitter now has over 300 million monthly active users. Centralized platforms have become a winner-take-all game because you can't move your followers. Leaving Twitter or Facebook means starting over. 30 | 31 | Earlier it wasn't clear Twitter would dominate. In 2007, Twitter was still small enough that you and all your friends could try a new service without feeling like you were leaving everything behind. Twitter was often flaky, with the “fail whale” as a reminder that maybe a better, more stable network existed elsewhere. 32 | 33 | There was Pownce with private posts and more sharing options. Ello and App.net as reactions to Twitter’s developer-hostile API. LiveJournal, MySpace, Jaiku, and Diaspora. 34 | 35 | Every one of these competitors had their own unique take on microblogging. How long should a post be? Should the friends model by asymmetrical, so anyone can follow anyone, or require approval of friend requests? 36 | 37 | In 2009, Facebook overtook MySpace [in unique visitors in the US][4]. No other social network would reach the same scale until Instagram. 38 | 39 | ---- 40 | 41 | Google Reader had become the most popular platform for subscribing to RSS feeds. It was free and easy to use, but aspects of its centralized nature such as comments and favorites were stuck in a silo, difficult to migrate away from. 42 | 43 | Paid services that are as popular as Google Reader aren’t usually discontinued as Google Reader was, but Google Reader wasn’t a paid service. It’s because Google Reader was free and ad-supported — but just a small part of Google’s business — that they were able to drop it. 44 | 45 | When Google Reader shut down, there was no migration plan to other RSS readers. Marco Arment, early Tumblr developer and creator of the podcast app Overcast, [blogged in 2013][5] that developers needed to move quickly to fill the void left by Google, standardizing on a Reader-compatible API that could work with most apps without major API changes: 46 | 47 | > We need to start simple. We don’t have much time. And if we _don’t_ do it this way, the likely alternative is that a few major clients will make their own custom sync solutions that won’t work with any other company’s clients, which won’t bring them nearly as much value as it will remove from their users. 48 | 49 | A common API didn’t happen. Instead, we do have a few popular feed reader platforms like Feedbin and Feedly that tried to fill the void. Apps like NetNewsWire and Reeder have been updated to support multiple APIs. 50 | 51 | This modern feed sync ecosystem might be healthier than one dominated by a single player, but it created friction and doubt in what people should move to. It was easier to just use Twitter and convince yourself you weren’t missing anything from RSS feeds. 52 | 53 | Blogs survived in the background because they were still a better fit for people who wanted to own their content, carving out a little space for themselves on the web. The death of Google Reader was a reminder to indie-minded bloggers that ad-based platforms had advertisers as customers, not users. 54 | 55 | [1]: https://thewebisfucked.com/ 56 | [2]: https://distributed.blog/2019/12/12/transcript-episode-16-anil-dash/ 57 | [4]: https://www.pcworld.com/article/523618/facebook_overtakes_myspace_in_us.html 58 | [5]: https://marco.org/2013/03/14/baby-steps-replacing-google-reader -------------------------------------------------------------------------------- /Part 1/Toward decentralization.md: -------------------------------------------------------------------------------- 1 | ## Toward decentralization 2 | 3 | _“Nature uses only the longest threads to weave her patterns, so each small piece of her fabric reveals the organization of the entire tapestry.” — Richard P. Feynman_ 4 | 5 | Social networks that chased scale often stumbled under their own weight, artificially held up through funding that wouldn’t last. The web is at its best when decentralized, with many smaller platforms and communities. 6 | 7 | Small companies can provide personalized support because they know their customers. Small companies can manually curate the discovery experience because their content base is not overwhelming. 8 | 9 | Scale is inherently at odds with decentralization. Our takeaway from past social networks should be to learn from the individual features they might have gotten right even within the larger failures. 10 | 11 | ---- 12 | 13 | As New York City was realizing what they had lost with Penn Station, there was a push to preserve similar historic buildings, iconic structures like Grand Central Station and the James A. Farley Building, which finished construction in 1914. People learned the lesson of letting Penn Station go. They did not want a repeat of watching majestic, once-in-a-lifetime architecture torn down. 14 | 15 | The Farley building, across the street from Penn Station, later became a post office. And in what must be an ironic metaphor for Facebook taking up more and more attention on the web, [in 2020][1] during the COVID pandemic the Farley building was leased as office space for Facebook. 16 | 17 | Nothing stands still forever, unchanged. But technology can evolve without tearing everything down, instead preserving the good ideas that came before — ideas such as a more distributed, open web — just as these old buildings can be preserved even as they are reinvented with new shops or offices. 18 | 19 | Early platforms like Pownce, Tumblr, Flickr, Google Reader, and App.net each contributed their own innovation, emphasizing different features that would later influence social networks, blogging, and the formalized post types in the IndieWeb community that we’ll cover in Part 3. We can learn from those past experiments as we build modern tools. 20 | 21 | There was a little something in each early platform that was right. Pownce and Tumblr had subdomains for users — `username.tumblr.com` instead of `tumblr.com/username`, leaning more on DNS for identity than Twitter and Facebook do. LiveJournal and MySpace had more personalization, even HTML tinkering. 22 | 23 | MySpace allowed CSS in profile pages, letting users do almost anything with customizations like background colors, fonts, and new images. This potential for uniqueness became an important part of MySpace users expressing themselves. 24 | 25 | Personalization and independence go hand in hand, whether it’s customizing a blog design or controlling your own domain name. It’s a theme that runs through the W3C’s [Ethical Web Principles][2]. 26 | 27 | The principles are the work of the W3C Technical Architecture Group, formed to build high-level consensus around principles of the web. The ethics document is about giving individuals more control — that small developers should be able to build tools outside of large companies, and that small platforms are an important part of maintaining that balance of power. 28 | 29 | > We recognize that web technologies can be used by developers to manipulate people, complicate isolation and encourage addictive behaviors. We recognize these risks and seek to mitigate against them when creating these technologies and platforms. We will therefore favor a decentralized web architecture that minimizes single points of failure and single points of control. We will also build Web technologies for individual developers as well for developers at large companies and organizations. 30 | 31 | By the time the W3C published this in 2021, it felt like a formalization of principles that many developers were already following. It put into words something we already want and are working toward. 32 | 33 | We want smaller platforms again as was common in the height of Web 2.0. Back then it was more like a fabric of web tools, where one app might build on Flickr’s API, or another app might plug in missing features in early versions of Twitter like search or photo hosting. But with indie microblogging we want to go further, even more decentralized, where platforms fade away and all we have are our own blogs, woven together as a new foundation for the social web. 34 | 35 | [1]: https://www.nytimes.com/2020/08/03/nyregion/facebook-nyc-office-farley-building.html 36 | [2]: https://w3ctag.github.io/ethical-web-principles/ -------------------------------------------------------------------------------- /Part 2/Alternative platforms.md: -------------------------------------------------------------------------------- 1 | ## Alternative platforms 2 | 3 | _“In principle, I don’t believe anyone should own or run Twitter. It wants to be a public good at a protocol level, not a company.” — [Jack Dorsey][1]_ 4 | 5 | When you disentangle your content from a centralized service like Twitter, using your domain name as the identifier instead of the silo’s domain name, you have many more choices for where to host your data. In addition to WordPress and Micro.blog itself, here are some other options for microblog hosting. 6 | 7 | **Tumblr** 8 | 9 | Tumblr and Micro.blog share many principles. Everyone gets a hostname, which can be upgraded with your own custom domain name, and there are many built-in designs for your blog. 10 | 11 | Tumble RSS feeds include a post title even for post formats such as Quote or Photo that don’t actually have a title. Instead of leaving the title blank, Tumblr uses the first words of the blog post as the title in the RSS feed, truncated and then followed with an ellipsis. Micro.blog has special support for recognizing these synthetic titles and ignoring them. 12 | 13 | To participate in the Micro.blog community, Tumblr users can create an account and add their Tumblr RSS feed to Micro.blog under Account → Edit Feeds & Cross-posting. Tumblr RSS feeds have the form: 14 | 15 | yourusername.tumblr.com/rss 16 | 17 | But Micro.blog users can also follow Tumblr blogs directly, even if the Tumblr users haven't yet registered on Micro.blog, by searching for their Tumblr hostname. Tumblr photo blogs look great in the Micro.blog timeline: 18 | 19 | ![][image-1] 20 | 21 | **Ghost** 22 | 23 | Like WordPress, Ghost is an open source project that you can either self-host yourself or pay [Ghost.org][2] to host for you. By default Ghost uses the placeholder text "(untitled)" for blank title fields, so it's not well-suited for microblogging. You can add custom CSS to hide these titles in your blog's design. 24 | 25 | [Mike Haynes has documented][3] some additional work-arounds to Ghost’s default “(untitled)” behavior: 26 | 27 | > Using the custom RSS routing was tough for me to wrap my head around but I finally cracked it and, if you've struggled with the same, I want to share how I split out the post types into their own feeds and got them to display correctly 28 | 29 | Unfortunately Ghost chose to build a custom API instead of adopting a standard blog posting API. You can post to Ghost from some native apps such as Ulysses, but not from Micro.blog. 30 | 31 | **Blot** 32 | 33 | Blot is a service that takes text files on Dropbox and converts them into a web site. It's a convenient way to create photo albums and other sites that you might want to manage from files you have on your computer. Blot creates an RSS feed that works in Micro.blog. 34 | 35 | **Mastodon** 36 | 37 | Mastodon is a federated social network that we cover in much greater depth in Part 5. You can add the RSS feed for your Mastodon account to Micro.blog for those posts to show up in the timeline. You can also follow Mastodon users directly in Micro.blog. 38 | 39 | **Write.as** 40 | 41 | Write.as shares many of the same principles as Micro.blog. It has a clean, clutter-free writing UI. You can use your own domain name and the marketing highlights this: 42 | 43 | > Build a home from your writing, away from walled gardens and locked-down platforms. 44 | 45 | The pricing of Write.as is comparable to Micro.blog and the focus is around writing. There are plans for teams, but it’s about personal blogs first. It also supports ActivityPub and the fediverse. 46 | 47 | **Jekyll** 48 | 49 | Jekyll is a static-site generator that is well supported by GitHub. You write new blog posts as text files with Markdown. After checking the text files into a repository for your blog, GitHub Pages automatically generates the HTML and serves your blog for free. It also includes support for custom domain names. 50 | 51 | If you want to get started with a blank single-page web site, the IndieWeb also has the [blank-gh-site][4] repository that you can clone. 52 | 53 | **The challenge with static sites** 54 | 55 | Before WordPress took off, Movable Type was one of the most popular blogging platforms. It provided a web interface for managing posts but then generated static HTML pages that were served directly, without needing a server-side scripting language. Serving static HTML pages is fast and portable to many different platforms with few dependencies. 56 | 57 | Today's static-site generators take out the web interface and focus purely on building a series of HTML pages based on source files, usually written in Markdown. They have the performance advantages of being served directly by Apache or Nginx, but require running a script on your own computer instead of posting with other apps via an API. This makes posting from multiple computers or mobile devices more difficult. 58 | 59 | Micropub is an IndieWeb posting API that we cover in Part 3. There are [open source projects][5] that attempt to work around the limitation of static-site generators by providing a Micropub API proxy. This makes API endpoints available for apps such as Micro.blog to call, and then turns those requests into files that are checked in to GitHub for your static site. 60 | 61 | Static sites are by their definition not _dynamic_, and so not well-suited to get started with integrating APIs that need to process incoming web requests such as posting or comments. Micro.blog is powered by the static-site generator Hugo under the hood, but Micro.blog provides a layer on top that takes care of everything you need. If you’re rolling your own web site instead of using Micro.blog or WordPress, be prepared to jump through some hoops to get everything working. 62 | 63 | [1]: https://twitter.com/jack/status/1518772756069773313 64 | [2]: https://ghost.org 65 | [3]: https://mikehayn.es/displaying-posts-without-titles-in-ghost-rss-feeds/ 66 | [4]: https://github.com/indieweb/blank-gh-site 67 | [5]: https://indieweb.org/static_site 68 | 69 | [image-1]: https://book.micro.blog/uploads/2020/8570bf0d3a.png -------------------------------------------------------------------------------- /Part 2/Blogging workflow.md: -------------------------------------------------------------------------------- 1 | ## Blogging workflow 2 | 3 | _“kottke.org isn’t so much a thing I’m making but a process I’m going through. A journey. A journey towards knowledge, discovery, empathy, connection, and a better way of seeing the world. Along the way, I’ve found myself and all of you.” — [Jason Kottke][1]_ 4 | 5 | There’s no perfect blogging workflow that will work for everyone, all the time. There’s no single process, or even one goal, because everyone gets something different out of blogging. The strength of open standards is being able to pick the best tool for the job, rather than be locked into only one interface. 6 | 7 | I personally use a variety of different apps depending on what I'm trying to do: 8 | 9 | * If I'm posting a quick microblog post and know what I want to say, I type it into the Micro.blog app for Mac. 10 | * If I'm posting a single photo, I use Micro.blog on my iPhone. 11 | * If I'm posting a bunch of photos [like this post from Toronto][2], I use [Sunlit][3] to write a little something for each day. 12 | * If I'm writing a longer post and have it all in my head, so I know I will post it very soon, I type it directly into MarsEdit and publish it to Micro.blog from there. 13 | * If I'm writing a post and I'm not totally sure where it's going, or when I'm going to post it, I type it into Ulysses. This is the majority of my posts. Then I copy and paste it into Micro.blog. 14 | 15 | And this only scratches the surface. There's Wavelength for podcasts, Epilogue for books, and some people prefer apps like Gluon, Quill, or Lillihub. This is why we link third-party apps from the posting screen in Micro.blog. 16 | 17 | ---- 18 | 19 | Platforms that only allow a single, official app for browsing and posting — like Twitter and Instagram, and increasingly Reddit too — usually have that restriction because their business is showing ads. By controlling the timeline experience, they can have precise stats on active users and they can insert ads directly into the timeline, which would be more difficult to enforce with third-party apps. 20 | 21 | Blogs have no such restriction. Blogs are focused around your identity and your posts, freeing you to use whatever apps for posting fit your needs the best. 22 | 23 | ---- 24 | 25 | Third-party apps for Micro.blog bring their own UI that might be better suited for certain workflows. They also can expand Micro.blog to more platforms, such as the early Android app Dialog designed by [Mike Haynes][4], available before Micro.blog had an official app for Android. 26 | 27 | **Icro for iOS.** Icro from developer [Martin Hartl][5] is well-designed, fast, and takes a different approach to some features compared to the official Micro.blog app. In a few ways, it’s _better_ than the app I built. This is exactly what I hoped for. We wanted an official app so that there’s a default to get started, but there should be other great options for Micro.blog users to choose from. 28 | 29 | ![][image-1] 30 | 31 | **Gluon for iOS and Android.** Gluon was the first cross-platform mobile app for Micro.blog. It supports multiple Micro.blog accounts and features like local drafts, muting, and themes. Developer [Vincent Ritter][6] has documented the development process [on his blog][7] through several iterations of the app. 32 | 33 | ![][image-2] 34 | 35 | **Mimi Uploader for iOS.** [Sam Grover][8] built a new iOS app that is all about batch uploading photos to your blog. I love it because it takes a specific need and provides a really polished workflow just for that. After the upload finishes, you can copy Markdown or HTML to reference all the photos for easy pasting into another app or Micro.blog on the web. 36 | 37 | ![][image-3] 38 | 39 | **MarsEdit for macOS.** Long-time Mac developer [Daniel Jalkut][9] has continued to improve his app MarsEdit through the years to support multiple blogging platforms. Because it can use the MetaWeblog API that Micro.blog supports, you can post directly to Micro.blog from MarsEdit. 40 | 41 | ![][image-4] 42 | 43 | **Drafts for iOS.** Drafts by [Greg Pierce][10] of Agile Tortoise is a unique app designed to make it easy to write a quick text note and send it to other apps and services. Drafts comes with a built-in "Send to Micro.blog" action that will open the Micro.blog app on iOS. There is also an [actions directory][11] that includes additional actions from Drafts users, including a "Post to Micro.blog" that will publish a post directly to Micro.blog from within Drafts. When you use that action, it will prompt for an app token you can generate in your account on Micro.blog. 44 | 45 | ![][image-5] 46 | 47 | **iA Writer for iOS and macOS.** [iA Writer][12] can publish to Micro.blog-hosted blogs. It uses the Micropub API, which is Micro.blog's native API for posting. 48 | 49 | ![][image-6] 50 | 51 | **Ulysses for iOS and macOS.** Ulysses can post to Micro.blog from iOS and macOS. Ulysses supports publishing to a few blog systems, and you’ll configure them in the Preferences window on the Mac. You can start your longer drafts in Ulysses and then publish out to Micro.blog as needed. 52 | 53 | ![][image-7] 54 | 55 | ** Lillihub for the web.** [Lillihub][13] is a web-based app by [Loura][14] with a unique user experience, built just for Micro.blog. It has prominent links to conversations, bookmarks, and even special support for Micro.blog’s bookshelves feature. 56 | 57 | ![][image-8] 58 | 59 | ---- 60 | 61 | One of the things I'm most proud of with Micro.blog is that the API supports standards so you can use a variety of different apps for posting. There are so many different types of blogs out there, there shouldn't just be one way to post. 62 | 63 | [1]: https://kottke.org/18/03/twenty 64 | [2]: https://www.manton.org/2019/10/26/toronto-photos.html 65 | [3]: https://sunlit.io/ 66 | [4]: https://micro.blog/mikehaynes 67 | [5]: https://micro.blog/hartlco 68 | [6]: https://micro.blog/vincent 69 | [7]: https://vincentritter.com/projects/gluon-for-micro-blog/ 70 | [8]: http://micro.blog/samgrover/8104031 71 | [9]: http://micro.blog/danielpunkass 72 | [10]: http://micro.blog/agiletortoise 73 | [11]: https://actions.getdrafts.com/ 74 | [12]: https://ia.net/writer 75 | [13]: https://lillihub.com 76 | [14]: https://heyloura.com 77 | 78 | [image-1]: https://book.micro.blog/uploads/2020/84e5773d18.png 79 | [image-2]: https://book.micro.blog/uploads/2020/7939f0d1cb.png 80 | [image-3]: https://book.micro.blog/uploads/2020/4075f8370a.png 81 | [image-4]: https://book.micro.blog/uploads/2020/bf06025a04.png 82 | [image-5]: https://book.micro.blog/uploads/2020/8a2054d07c.png 83 | [image-6]: https://book.micro.blog/uploads/2022/c037eee590.png 84 | [image-7]: https://book.micro.blog/uploads/2022/fa55be37d2.png 85 | [image-8]: https://book.micro.blog/uploads/2023/lillihub-screenshot.png -------------------------------------------------------------------------------- /Part 2/Domain names.md: -------------------------------------------------------------------------------- 1 | ## Domain names 2 | 3 | _“Postel walked in because he had a job for Mockapetris. He wanted him to find a compromise between five different proposals for improving the way the APRAnet dealt with names and addresses. Mockapetris took the job, but he pretty much ignored the five proposals and built his own system.” — Cade Metz writing about [how Paul Mockapetris created DNS][1]_ 4 | 5 | For me and for most blogs, it all started with a domain name. [Dan Gilmore wrote for the Guardian][2] in 2013 about encouraging his students to register a domain name to control their content, because a domain name is your identity, the one thing that doesn't change as social networks come and go: 6 | 7 | > To the extent that they live public lives in any way – and like it or not, it's getting harder not to be public in some way – tomorrow's adults will need an online home that _they_ control. They need an online home, a place where they tell the world who they are and what they've done, where they post their own work, or at least some of it. 8 | 9 | A personal domain name is the most fundamental requirement of indie microblogging. You can start with `username.wordpress.com` or `username.micro.blog`, but at some point to be truly independent, a personal domain name must be mapped to your web site. 10 | 11 | Consider street addresses. Addresses on the web (URLs) are just like street addresses, right? You enter a web address in your browser to visit someone's web site, just as you would look up a street address to map directions to a physical location. 12 | 13 | If you ever need to move to a new neighborhood, you can forward mail to another street address. This is a feature the postal service provides. But if your content is on someone else's web site — on someone else's domain name, whether that's `medium.com` or a new social network — then there is no mechanism on the internet to forward readers to a new site. Here the analogy to street addresses starts to fall apart, but we already have a layer of the internet that is responsible for fixing this even better than your local post office: DNS. 14 | 15 | By using custom domain names as your web address — `yourname.com` instead of `medium.com/yourname` — you don't need to point your readers to a new location and have them resubscribe manually. The "forwarding" is a feature of how domain names work. When your identity on the web is a domain name, you have the flexibility to move content between web hosts and platforms without breaking links to old posts. 16 | 17 | Your domain name contains multiple DNS records, each of which maps a hostname like `www.yourname.com` to a server that can serve your posts to your readers. There are generally just 2 records you need to be aware of: 18 | 19 | * **A**: short for "address", this is used to map your root domain (`yourname.com` without the "www") to an IP address. 20 | * **CNAME**: this is used to map a subdomain (`www.yourname.com` or `microblog.yourname.com`) to another "canonical" hostname, such as `yourname.micro.blog`. 21 | 22 | A common set of DNS records to use Micro.blog servers for hosting would look like this: 23 | 24 | | Type | Hostname | Value | 25 | | ----- | -------- | ------------------- | 26 | | A | | 104.200.22.214 | 27 | | CNAME | www | username.micro.blog | 28 | 29 | Even one of the web’s newer social network platforms, Bluesky, has embraced domain names as usernames with the AT Protocol. By adding a DNS record or a special `.well-known` document at your domain name, you link your account with your domain name. 30 | 31 | Domain names are so important because they exist at a layer above any web hosting platforms. If you're no longer happy with your web host, or they go out of business, it's your domain name that allows you to move to another web host without breaking URLs, so that readers can still find your content. This level of indirection makes your content portable, which makes it your own. 32 | 33 | [1]: https://www.internethalloffame.org//blog/2012/07/23/why-does-net-still-work-christmas-paul-mockapetris 34 | [2]: https://www.theguardian.com/commentisfree/2013/mar/28/why-everyone-should-register-domain-name -------------------------------------------------------------------------------- /Part 2/Introducing Micro.blog.md: -------------------------------------------------------------------------------- 1 | ## Introducing Micro.blog 2 | 3 | _“All we have to decide is what to do with the time that is given us.” — J. R. R. Tolkien_ 4 | 5 | Micro.blog is built on this foundation of JSON and RSS feeds, the importance of content ownership through domain names, and a new UI inspired by social networks. 6 | 7 | Because of the technical hurdles of self-hosting your own blog, if we want to encourage more people to blog, it has to be much easier. Centralized platforms allow for that ease of use — nothing to install or maintain, with all the right defaults that use open standards. 8 | 9 | I’ve always thought of Micro.blog as glue. It’s a thin layer on top of blogs that provides a Twitter-like timeline experience, adding conversations and user discovery. It’s a social network from the idea that more people should be blogging and sites should talk to each other. 10 | 11 | Early on in the development of Micro.blog, I realized that building a social network on top of RSS feeds wasn't enough. Micro.blog had to be both a social network _and_ a blog hosting platform. I became committed to making Micro.blog the best place to write a blog. 12 | 13 | Micro.blog publishing is based on Hugo under the hood. On top of that foundation, it adds posting from the web or from iOS, default themes, and other customizations for microblogging. Micro.blog is one of the easiest ways to get started with a blog. 14 | 15 | ![][image-1] 16 | 17 | When you publish a new post, Micro.blog takes the following steps: 18 | 19 | 1. The new post is saved to a database in Micro.blog for your account. 20 | 2. Your posts are written to files that Hugo can process. Micro.blog first runs the latest posts through Hugo so that the new post shows up as quickly as possible, then processes the rest of your posts. 21 | 3. Your site is published to either `username.micro.blog` or your own custom domain name. This includes updating the feeds. 22 | 4. Micro.blog reads the feed and notices the new post, adding it to the Micro.blog timeline for anyone who follows you. 23 | 24 | The goal is for this to feel like a single step, just as if you were posting a tweet, but in reality Micro.blog separates out the blog publishing from the work of building the timeline. It is essentially 2 systems, working together, which means external blogs can also be plugged in to the timeline. 25 | 26 | ![][image-2] 27 | 28 | ---- 29 | 30 | Because Micro.blog is a bridge between centralized services and more distributed platforms, it needed many parts of a traditional API. Micro.blog’s JSON API allows for signing in, retrieving posts in the timeline, replying to posts, bookmarking posts, and more. 31 | 32 | The official Micro.blog apps and third-party apps use the Micro.blog JSON API. Most present a timeline interface, with separate sections for mentions, managing posts, and other features. 33 | 34 | ![][image-3] ![][image-4] 35 | 36 | Some of the popular third-party apps written specifically for Micro.blog include Gluon and Icro. Those apps and more are covered in the blogging workflow chapter. 37 | 38 | Alternatively, third-party apps can instead use IndieWeb APIs such as Micropub. This will make these apps compatible with Micro.blog, but also potentially compatible with other platforms. 39 | 40 | When Micro.blog was first launched, the IndieWeb APIs could not yet handle everything that Micro.blog needed. Over the years, as APIs such as Micropub have expanded, more and more functionality can be built on those standards. 41 | 42 | Eventually, all new apps should be built with IndieWeb standards and not use the original Micro.blog JSON API. For that reason, most proprietary parts of the Micro.blog API won’t be covered in detail in this book, although they are still documented on the [Micro.blog help site][1]. Micropub is covered in detail in part 3. 43 | 44 | ---- 45 | 46 | Micro.blog is not the only choice for microblogging. A core principle of Micro.blog is that you can bring an existing blog hosted somewhere else, such as using WordPress, and that the Micro.blog platform works nicely with the rest of the web. 47 | 48 | [1]: https://help.micro.blog/ 49 | 50 | [image-1]: https://book.micro.blog/uploads/2020/64d82327cd.png 51 | [image-2]: https://book.micro.blog/uploads/2020/5e218ee372.png 52 | [image-3]: https://book.micro.blog/uploads/2020/ed9043efb2.png 53 | [image-4]: https://book.micro.blog/uploads/2020/87ba0b1e20.png -------------------------------------------------------------------------------- /Part 2/JSON Feed.md: -------------------------------------------------------------------------------- 1 | ## JSON Feed 2 | 3 | _“I gave it a specification and a little web site. All the rest happened by itself.”_ 4 | _— [Douglas Crockford][1] on documenting JSON_ 5 | 6 | Twenty years after RSS was getting its start, [Brent Simmons blogged about][2] introducing a new format called JSON Feed. He started by pointing to Dave Winer's rules for new standards, that it's better to have fewer formats: 7 | 8 | > I agree completely — but I also believe that developers (particularly Mac and iOS developers, the group I know best) are so loath to work with XML that they won’t even consider building software that needs an XML parser. Which says to me that JSON Feed is needed for the survival of syndication. 9 | 10 | We believed that a new format would help the open web get a kick, bootstrapping new work. RSS is pervasive, but there are little quirks that still trip up developers, and XML has fallen out of favor. New APIs are being written in JSON. 11 | 12 | JSON Feed is an alternative to RSS. JSON Feed is easy to generate and was designed with microblogs in mind. The title in each post is optional: 13 | 14 | > Microblogs, which are often plain text and without titles. So much web writing today is Twitter-like, which is actually plain text. 15 | 16 | Another advantage of JSON is that HTML can be used without the special escaping that is required in RSS. Because HTML tags and XML elements both use angle brackets, they must be escaped in RSS, often producing unreadable markup. 17 | 18 | Here's an example JSON Feed with a single microblog post: 19 | 20 | { 21 | "version": "https://jsonfeed.org/version/1", 22 | "home_page_url": "http://www.manton.org", 23 | "feed_url": "http://www.manton.org/feed/json", 24 | "title": "Manton Reece", 25 | "items": [ 26 | { 27 | "id": "http://www.manton.org/2018/04/6721.html", 28 | "url": "http://www.manton.org/2018/04/6721.html", 29 | "content_html": "

No sweep. What a great game. Go Spurs.

", 30 | "date_published": "2018-04-22T21:56:28+00:00", 31 | "author": { 32 | "name": "manton" 33 | } 34 | } 35 | ] 36 | } 37 | 38 | This clarity led to quick adoption. Within weeks of releasing the specification, many popular apps had added support for JSON Feed. 39 | 40 | JSON Feed also helped achieve the goal of having more feed readers update to support title-less items. Feeds readers like Feedbin and Inoreader both have excellent support for short microblog posts. 41 | 42 | This is what my microblog looks like in Feedbin. Notice that the list has variable heights to accommodate the full text of a short post, including inline photos: 43 | 44 | ![][image-1] 45 | 46 | Micro.blog extends JSON Feed with a few extra fields that are appropriate for a microblogging service, such as account username and whether a post has been favorited by the current user. 47 | 48 | JSON Feed uses a special field naming convention to add custom objects to a feed. Fields that start with an underscore character are custom objects provided by a service like Micro.blog. Micro.blog uses the field name `_microblog` for its custom objects. 49 | 50 | "author": { 51 | "name": "Jonathan LaCour", 52 | "url": "https://cleverdevil.io", 53 | "avatar": "https://micro.blog/cleverdevil/avatar.jpg", 54 | "_microblog": { 55 | "username": "cleverdevil" 56 | } 57 | } 58 | 59 | Adding these custom fields to JSON Feed allows Micro.blog to use JSON Feed for its API, rather than inventing a new JSON format. The JSON APIs for Twitter, Facebook, Medium, and other social networks are all very different and not compatible with any other apps without custom support. Because Micro.blog uses JSON Feed for any API endpoint that returns a list of posts, Micro.blog's API can often be used directly by other feed readers. 60 | 61 | The following API endpoints all return JSON Feed: 62 | 63 | * `/posts/all` 64 | * `/posts/mentions` 65 | * `/posts/bookmarks` 66 | 67 | Further, the public sections of Micro.blog's API (such as the Discover feeds) also use JSON Feed. They do not need authentication so can be used in any feed reader that supports JSON Feed: 68 | 69 | * `/posts/discover` 70 | * `/posts/photos` 71 | * `/posts/discover/books` 72 | 73 | And finally, hosted blogs on Micro.blog also use JSON Feed for recent posts, posts, and the archive: 74 | 75 | * `yourdomain.com/feed.json` 76 | * `yourdomain.com/photos/index.json` 77 | * `yourdomain.com/archive/index.json` 78 | 79 | In some of the photo feeds, Micro.blog again extends JSON Feed to provide more information, such as a thumbnail version of photos. The photo is included in the HTML, so that all feed readers have everything they need to show the post, as well as a separate `image` field for clients that support it, and a `thumbnail_url` with a smaller version created by Micro.blog: 80 | 81 | { 82 | "id": "https://www.manton.org/2020/04/20/wildflowers.html", 83 | "title": "", 84 | "content_html": "

Wildflowers.

", 85 | "date_published": "2020-04-20T15:55:39-05:00", 86 | "url": "https://www.manton.org/2020/04/20/wildflowers.html", 87 | "image": "https://www.manton.org/uploads/2020/f53a913d74.jpg", 88 | "_microblog": { 89 | "thumbnail_url": "https://micro.blog/photos/400/https://www.manton.org/uploads/2020/f53a913d74.jpg" 90 | } 91 | } 92 | 93 | Adopting JSON Feed everywhere in Micro.blog allows the platform to be compatible with many feed readers, and brings consistency across most of the API. 94 | 95 | [1]: https://youtu.be/-C-JoyNuQJs 96 | [2]: http://inessential.com/2017/05/17/json_feed 97 | 98 | [image-1]: https://book.micro.blog/uploads/2020/4e6da441a3.png -------------------------------------------------------------------------------- /Part 2/Micro.blog and feeds.md: -------------------------------------------------------------------------------- 1 | ## Micro.blog and feeds 2 | 3 | _“As software developers and designers, we have a responsibility to the world to think these things through carefully and design software that makes the world better, or, at least, no worse than it started out.” — [Joel Spolsky][1]_ 4 | 5 | No matter which blogging platform you use, the posts flow into Micro.blog from RSS and JSON feeds. Even microblogs hosted by Micro.blog itself generate their own feeds — just like WordPress or any blogging platform — which Micro.blog then reads from. Abstracting the connection with feeds makes for a consistent experience across a variety of blogs. 6 | 7 | The central user interface in Micro.blog is the timeline. The timeline shows posts from your friends' microblogs. 8 | 9 | ![][image-1] 10 | 11 | When someone you're following publishes a new post, Micro.blog displays it in the timeline. Micro.blog does some minor processing on the post HTML, striping out HTML tags or JavaScript that aren't appropriate for the timeline. Photos are displayed inline for short posts, and longer posts with titles are linked back to the author's web site. 12 | 13 | **How feeds work** 14 | 15 | A single account on Micro.blog can have one or more feeds. Unlike a traditional RSS reader where adding feeds controls which blogs you're reading, adding feeds to your account on Micro.blog controls where _your own posts_ come from. (There's a separate interface for following other blogs.) 16 | 17 | When a new post appears in these feeds, the post is added to the timeline. Usually there is just one feed: the user’s microblog. If the user writes longer posts at a different blog, or they want to connect bookmarks or other extra posts into the timeline, they can add those feeds to their account too. 18 | 19 | The following screenshot shows the Edit Feeds screen. When your blog is hosted on Micro.blog, the feed for your blog is added to this screen automatically: 20 | 21 | ![][image-2] 22 | 23 | This screen also controls which feeds cross-post to other platforms like Twitter or Mastodon. When Micro.blog sees a new post in your feed, it adds it to the Micro.blog timeline and also cross-posts it those platforms that are enabled. 24 | 25 | Inside the feed are your recent posts in JSON or XML. Here's an example of what the latest post might look like in JSON: 26 | 27 | { 28 | "id": "http://manton.micro.blog/2020/01/11/starting-to-get.html", 29 | "content_html": "

Starting to get excited for IndieWebCamp Austin next month! If you’re interested in an open alternative to the big silos, I hope you’ll join us. You can register for $10.

\n", 30 | "date_published": "2020-01-11T13:56:56-06:00", 31 | "url": "https://www.manton.org/2020/01/11/starting-to-get.html" 32 | } 33 | 34 | Micro.blog checks your feed for new posts as soon as the post is published, or every few minutes for blogs hosted outside of Micro.blog. (Part 5 covers how we can speed up downloading new posts.) When Micro.blog finds the new post, it adds it to the timeline so everyone following you can see it: 35 | 36 | ![][image-3] 37 | 38 | **Timeline display rules** 39 | 40 | Micro.blog follows a few rules when processing your RSS or JSON Feed into microblog posts to show in the timeline: 41 | 42 | * If the post has no title and is 300 characters or less, the text is shown directly in the Micro.blog timeline. 43 | * If the post has no title and is _over_ 300 characters, the text is truncated with a link back to the full post on your site. 44 | * If the post includes a block quote, the limit is raised to 600 characters. 45 | * If there's a title and it looks like a date or number, Micro.blog ignores it, as if there were no title. It then tries to show the text in the timeline. 46 | * If there's a title but the entire post text is actually just a photo, it uses the title but also shows the photo inline. If there is a title, text, and photo, only the title is shown and linked back to your site. 47 | 48 | For any other kind of post with a title, the title is shown in the timeline with a link back to the full post on your web site. Micro.blog displays your domain name when it needs to append a link to your post. 49 | 50 | Micro.blog counts characters for the text version of your post, excluding the extra characters used in any HTML tags. 51 | 52 | Sometimes we hear the feedback that Micro.blog shouldn't be so picky about how it treats short microblog posts compared to longer posts with a title. Why not just show as much as possible in the timeline, and truncate as necessary? Why not allow a summary of a post to be used instead of the full post? 53 | 54 | But the reason is that Micro.blog is optimized for microblog posts. One of the things that makes it different than a traditional RSS reader is that Micro.blog is designed to encourage short posts. It's designed to provide the best, Twitter-like experience for short posts so that more people embrace indie microblogging. 55 | 56 | By having some rules about what a microblog post is, and making it easy to follow those rules in a Micro.blog-hosted blog, it will slowly start to change how people approach microblogging on their own site. If we didn't do anything special for microblog posts, nothing on the web would change, and microblogging would remain a feature of closed platforms only. 57 | 58 | Part 4 includes more details about why indie microblogs use HTML for posts. Support for HTML tags is an important part of making Micro.blog feel like an extension of the open web instead of a replacement for it. 59 | 60 | [1]: https://www.joelonsoftware.com/2018/01/12/birdcage-liners/ 61 | 62 | [image-1]: https://book.micro.blog/uploads/2020/5fc0025966.png 63 | [image-2]: https://book.micro.blog/uploads/2020/f7e6a1a29d.png 64 | [image-3]: https://book.micro.blog/uploads/2020/8264cb94dc.png -------------------------------------------------------------------------------- /Part 2/Migration.md: -------------------------------------------------------------------------------- 1 | ## Migration 2 | 3 | _“The magician takes the ordinary something and makes it into something extraordinary. But you wouldn’t clap yet, because making something disappear isn’t enough. You have to bring it back.” — The Prestige_ 4 | 5 | The more we can use open standards, the more we can avoid being locked in to any specific platform. Blogging tools will always have some support for importing and exporting posts. 6 | 7 | Micro.blog can import from WordPress, Medium, Tumblr, Ghost, Substack, Write.as, Twitter, and Markdown files. To upload a file from one of those platforms, go to Micro.blog on the web and click Posts → “…” → Import. 8 | 9 | When importing, Micro.blog will create new blog posts from the posts in the import file. If there are any `img` references in the HTML for those posts, Micro.blog will also attempt to download those images and store them on Micro.blog. It will then update the HTML to use the new URL for the image on Micro.blog. 10 | 11 | If the URLs for your previous blog posts are different than the URLs on Micro.blog, Micro.blog will keep a record of the old URLs and automatically set up redirects for them, so that no links will break. These redirects will become active once you've moved your domain name to point to Micro.blog. 12 | 13 | If you're moving from a blog system not supported by Micro.blog, you may be able to automate moving the posts over. [Kahlil Lechelt has created a script][1] that will work with static-site generators such as Jekyll or Hugo by importing from a folder of Markdown files. 14 | 15 | **Mirroring back to WordPress** 16 | 17 | Some people prefer to use Micro.blog because it's easier to post to, but still want those microblog posts to go back to their main WordPress blog. The [Feed Importer plugin][2] for WordPress by Michael Lichwa will load your microblog's RSS feed, looking for new posts and copying them over to your WordPress blog. 18 | 19 | RSS feeds on Micro.blog contain the most recent posts, not all posts. Feed Importer is best suited for ongoing mirroring of posts to WordPress rather than importing all previous posts. 20 | 21 | ---- 22 | 23 | If you are starting a new microblog hosted on Micro.blog in addition to maintaining a full blog outside of Micro.blog, you may want to integrate the microblog posts into your main blog. 24 | 25 | You can include your Micro.blog-hosted microblog posts in the sidebar of your main web site with our JavaScript include called Sidebar.js. In your main site's HTML template, add this JavaScript wherever you want to include the microblog posts: 26 | 27 | 28 | 29 | Sidebar.js will take your recent microblog posts and insert them directly into your blog, wherever the `