Matt's Dev Log

I took a bit of a break from #WriteFreely development over the past few months, after our v0.12 release. Now I'm back to it.

First, personally, I took a step back from almost everything in June — I needed to spend more time around other people, friends and family, and less time thinking about code. But when I was in front of a computer, I had my focus on the new “collaborative blogs” feature we recently launched on This was a crucial step for us as we work toward sustainability as a project.

Now I'll be addressing bug reports and pull requests over the next several days / week. Keep an eye on the GitHub repo and for updates!

Our next release of #WriteFreely, v0.12, is shipping with OAuth 2.0 support! This will make it even easier for people to join your instance, and use WriteFreely as a complement to other tools.


Right now, we have a pause on major features in WriteFreely. I've finally started to work through the backlog of outstanding pull requests, some of which were from mid-2019, and now am getting to more of the polishing side of things. So coming soon, there will be some small new visual changes in WriteFreely /, particularly that affect user blogs.

  • Dates on blog posts. It's been missing for years. They'd show on the blog home page, but not blog posts. Well, this is no longer the case. Soon, posts on blogs that use the Blog display format will consistently show dates both on their home page and individual posts. Other display formats will continue not showing dates, because that's exactly what they're there for: not showing dates.
    • Also, dates are now correct, relative to your device's timezone!
  • <table> style. These elements were previously unstyled. Now they'll have some improved, basic styling that you can easily override with custom CSS. See #194.
  • Consistent user page headers. User pages (Blogs, Drafts, Account Settings, etc.) were all over the map with their headers. I'd start using a new style on new pages and not update the old ones. Well, now that's fixed in #262. users will notice this change is already live.
  • Slightly more line height. We've added 10% more space between lines of text. It's perhaps too small to really notice, but large enough to make a nice improvement. Changes in #263.

On the admin side, we're redesigning the dashboard to make it much more user friendly, and optionally less technical, in cases where an instance is in a hosted environment and the admin doesn't care about getting into the weeds. See #264. We need this change in for Teams, but it should also prove helpful for other WriteFreely hosts.

Particularly since these are visible changes that affect users, we want your feedback! Please jump into those pull requests on GitHub, try things out, and let us know what you think. We want to be sure people are happy with these upcoming changes before they get released to everyone.

#wfdev #design #WriteFreely

Dates on this blog should now be correct to your current timezone. This post is set as published just a bit after midnight UTC, so it should change to the day before (January 28) for anyone in the Americas.


Dates on this blog should now be correct to your current timezone. This post is set as published just a bit before midnight UTC, so it should change to the day after (January 29) for anyone in Europe, Africa, Asia, etc.


Just merged writefreely#235 (Add dates to blog post pages) to the develop branch, which closes T669.

It's a small change that'll make it over to soon (before WriteFreely v0.12), but you can see what that looks like on this blog post!

A recent idea I had: what if WF federated Notes instead of Articles in certain situations? I just tweaked this instance so that if there's no newline in a post, it'll come out as a Note. Otherwise it'll be an Article, like normal. Thoughts? Reply to

This should be fixed now:

And just testing Socialhome:

I created an account and searched for (this blog).

SocialHome successfully pulled up the account and I was able to follow it. I made a test post that went out to all followers successfully and seems to have been successfully received on (according to the 202 Accepted in the response, shown below).

Here are the logs on my end from the post going out to

2019/11/27 13:01:19 POST
2019/11/27 13:01:19 POST /receive/public/ HTTP/1.1
User-Agent: Go (WriteFreely/0.11.1-13-gbbb7b28; +
Content-Length: 1348
Content-Type: application/activity+json
Date: Wed, 27 Nov 2019 13:01:19 GMT
Digest: SHA-256=OdKi+5fNxiOZMV/xl8u3o+wQHPenx/VoL/4BQYMiu/Y=
Signature: keyId="",algorithm="rsa-sha256",headers="(request-target) date host digest",signature="yL+tw87IQF9FaPW05Smq1/4+rPg0qAcVD3N124PXZ7ubG1NOVdU1y2og0HbQp4LYEIutzE5vmMUCtNcg62ETFOrjAGW3fzwmpld+lspnhnq/YOXfXbMf7E9NXfLlgamsSx4Rtimt1tAwAMD8HzO5kiHW1O5MNOxRpsDhXCaoHkB/gnJW4T3SfMISgEfREN3/Ix1CtNkzxHQflV/9aKZKN0YvR33ruvvk9UKtJwDY2lDvfcQqPlKOAo+7gu8KwVz8lNjfIyXmjc/23A4QZVTFrey9Ru8vQC7UFuzdbIX+8mcgQ9ERrJ+EfEr3R0DiG6NGgUOtGsPUwYitdmRHOtvycg=="
Accept-Encoding: gzip
[1B blob data]
{"@context":["",{}],"type":"Create","id":"","actor":"","published":"2019-11-27T13:01:18Z","to":[""],"cc":[""],"object":{"type":"Article","id":"","published":"2019-11-27T13:01:18Z","inReplyTo":null,"url":"","attributedTo":"","to":[""],"cc":[""],"name":"Testing SocialHome","content":"\u003cp\u003eThis is just a \u003ca href=\"\" class=\"hashtag\" rel=\"nofollow\"\u003e\u003cspan\u003e#\u003c/span\u003e\u003cspan class=\"p-category\"\u003etest\u003c/span\u003e\u003c/a\u003e post.\u003c/p\u003e\n","contentMap":{"en":"\u003cp\u003eThis is just a \u003ca href=\"\" class=\"hashtag\" rel=\"nofollow\"\u003e\u003cspan\u003e#\u003c/span\u003e\u003cspan class=\"p-category\"\u003etest\u003c/span\u003e\u003c/a\u003e post.\u003c/p\u003e\n"},"tag":[{"type":"Hashtag","href":"","name":"#test"}]}}
2019/11/27 13:01:19 Resp status : 202 Accepted
2019/11/27 13:01:19 Resp body   :