New implemention of diaspora starting soon.
I will be starting a Go implementation of diaspora* in May. I will probably call it Treehouse, and the treehouse.pub pod is likely to eventually move to it when it reaches feature parity with the reference implementation and enough folks seem happy about it. The code and project will live at https://github.com/emmaly/treehouse.
There will, eventually, be a test pod running for anyone interested to try it out during early development. It will be written to work well in containerized environments, and especially Kubernetes-friendly. I intend to break out as many pieces into microservices where possible, as well as provide a native ability to scale to additional nodes as needed.Here's my wishlist, which is mostly also my intended feature set:
- Easy deployment of new pod in Kubernetes clusters, either on-prem, cloud hosted, or some hybrid mix of whatever
- Easy deployment of new pod without Kubernetes via clear setup instructions
- Easy-enough deployment outside of a containerized environment, though that's never going to be the official method of deployment
- Super easy version upgrades (probably with zero downtime) for Kubernetes hosted pods
- Ability for users to install their own themes/styles for both their own feeds as well as their profile page
- Ability to cross-post to other social networking services (aside from Facebook, which presently seems to be impossible for some reason)
- Easy ability for individual users to blacklist certain post text, tags, specific users, and specific pods
- Ability for podmins to blacklist certain tags, users, or pods (yes, I know this is frowned upon as censorship in diasporaland, but spambots and bad-faith users are a very serious problem)
- Ability to only allow certain tags from certain pods, such as allowing "newhere" tags from only the local pod (useful for tight-knit groups that are on a single pod, but cutting down on "newhere" tagging spam/abuse)
- Full federation support
- Full feature set from diaspora*'s reference implementation
- Not break federation support/standards
- Attempt to support other reactions aside from just a ❤, but not cause broken behavior on other pod servers (a 👎 on Treehouse should appear as a 👎 on other pod servers, not as a ❤ instead, for example)
- Push/webhook event notifications for geeky users (so they aren't having to poll the server; possibly provide IFTTT webhook service support)
- Provide a friendly post editor interface (possibly with live styling, with Markdown output), or at least provide an option to switch to a more friendly editor (not everyone likes using Markdown directly)
- Provide an ability to upload images to show as inline
images all in one shot, instead of having to host the image elsewhere first or having to only upload as an attachment to the post (this means having to host it for federated access too, which is probably fine)
- Provide ability to automatically migrate from other pods to Treehouse (as best as I can manage, whatever that might be)
- Provide ability to export all data from Treehouse (as best of an export as possible, but I don't know what that looks like yet; I'm not ever going to want to lock anyone in)
- Write in a package-friendly manner so others can use pieces of Treehouse in their own Go programs as they wish. This could make writing a diaspora* client easier, for example.Separately, an Android app:
I intend to build an Android app as well. This wouldn't necessarily be to replace the web version. In fact, I want the web version to be wonderful to use on mobile, with all features available. But I want to be able to use the native sharing features of Android in order to share to Treehouse. This is something I haven't put effort into yet, but the lack of easy native sharing is a big reason why I haven't been very active on diaspora* lately.Preexisting Go implementation:
Yes, I'm aware that there is already a Go implementation in existence. What I have in mind is very, very different from that implementation, which is why I'm not just picking up an oar on that project. But if there are any opportunities for sharing between the two projects, I will likely be very interested in making that happen.What do you want?
If you have features that you want me to consider, please let me know. I'll post more about this in the future as I go. There will definitely be opportunities for others to contribute to the project, so let me know if that's interesting to you.
Let me know what you want to see from a project like this.