Finally squashed the stats peaks on The-Federation.info.

Now, if only the number of active users would go up instead of declining since the peak 2,5 years ago :(

#diaspora #friendica #hubzilla #socialhome #ganggo #thefederation

Jason Robinson

Implementing "shares" for #Socialhome. This will be (at least on protocol level) to satisfy Diaspora "Reshare". It will be more like Twitter "Retweet" or Mastodon "Boost". The idea is that reshares will not be shown as separate items on the stream, but instead the reshared content will be "lifted" up to streams it would not otherwise be visible to. Optionally the user would be able to "quote" the share, adding their own note to it, which would make it a separate content item shown in streams even if pure shares were already shown.

How does this sound? Comments targeting the reshare from Diaspora will be tricky, but we will think of something 🤔


Jason Robinson

The day is getting closer when I've got enough functionality in #Socialhome to be able to fully replace my #Diaspora account. I'll be posting less from this account from now on. If you like what I share, please throw a follow at jaywink@jasonrobinson.me (profile link).

Limited posts and mentions are not yet supported on Socialhome, so if you want to mention me - use this account still for a while! :P

Ps. For users on iliketoast.net - don't worry! The pod isn't going anywhere. Not at least until sometime in the future migration has been in place for a while so that users can safely migrate to other pods 👍

Jason Robinson

How to: creating content via shcli

Socialhome has an API which covers most of the use cases for building a client. There is also a Python library/cli client that allows creating content over the API. This is a short introductory on how to use that.

shcli requires Python 3.4+. The client has only been tested on Linux, though it should work on Windows and Mac too. The only real dependency it has is the requests library.

Create a Python environment

Either install shcli in a virtualenv or globally, depending on your use case. For desktop users, a global installation makes sense.


Install virtualenv for your system and create a Python 3 virtualenv and activate it.

Global install

Ensure you have a compatible Python 3 version of pip installed. For example on Ubuntu, this would be the python3-pip package.

Install shcli


 pip install shcli

Globally (for example on Ubuntu):

 sudo pip3 install shcli

Phew, now we're past the hard part.

Get API token

Go to your Socialhome account profile and find API token from the profile menu. Copy the token for later use. If you ever lose it, this is the place to generate a new token.

Post stuff!

Using the tool is easy. It currently only allows creating content, so commands and options are not plenty. More will be added in the future.

The client takes a command, a domain, a token and then parameters for text and visibility. The domain is your Socialhome account domain (for example socialhome.network) and token the API token copied in the previous step. To protect the token, the client always uses a HTTPS connection. This is why the protocol is not given in the command.

An example:

 shcli create socialhome.network 1234567890abcdefg \
     -t 'Hello world!' -v public

For complex creations, the client can retrieve the text from a file. Instead of -t, pass in the file name with the -f parameter. Visibility can be one of public, limited, self or site.

That's it pretty much! The response will be either the created content as JSON or some kind of error, if something went wrong.

Python API

You can also use the API through Python by importing shcli.create and passing in the same arguments as for the cli create command.


The repo for shcli is on GitHub licensed under MIT.

#socialhome #howto #python #api

Socialhome HQ

The Federation

The Federation refers to a global social network composed by nodes talking together. Each of them is an installation of a software which supports the #diaspora* protocol.

The site

Visit The-Federation.info for node lists, statistics and information how to list your own node.


This account will be posting out statistics on a daily/weekly basis. The posts will be tagged according to frequency, so instead of following the account you can also subscribe to the hashtags. At least the following hashtags will be used:

#thefederation #diaspora #friendica #hubzilla #ganggo #socialhome

The Federation

Hello, World! From #Socialhome CLI client.

Jason Robinson

First part of upcoming #VueJS rewrite of #Socialhome streams merged in. Thanks, christophehenry!

Down with #jQuery, bring up the modern JS stack!

Socialhome HQ


♲ mar_k83@mastodon.social:

https://mastodon.social/media/lvLWwqZ1xZiyUtr_Xn4 New network in the Föderation = socialhome.network #socialhome #network #social #facebook


Marian Kieper ✌

Socialhome is now on The-Federation.Info

You can now find and track #Socialhome nodes on https://the-federation.info 👍

On a related note. We don't have a logo. Anyone want to contribute one? Fame and fortune will be yours! <3

the federation - a statistics hub
Podlist and statistics for The Federation (diaspora*, Friendica, Hubzilla).

Socialhome HQ

Profile picture duly changed - love this new feature!

#socialhome #feature #profile #psychopony


Profile picture update lands!

Even though we like seeing more and more #Django ponies in the stream, we recognize users might want a slightly more personal picture for their profile. So, finally, you can set your own profile picture! Changing the picture also updates it to your remote followers through the #federation layer.

Access the profile picture upload page through the drop-down in your profile. First upload an image, after which it is possible to set a center point for the automatic crop that happens. All profile images are square shape, but your uploaded image doesn't have to be.

This addition is available in the development branch and on https://socialhome.network which runs on the development branch.

#socialhome #changelog #devdiary

Socialhome HQ - Socialhome

Socialhome HQ

Socialhome v0.3.1 released

In addition to new features and bug fixes, this release has several #security fixes for the way inbound remote #federation payloads are handled, especially regarding content update. All #Socialhome instances that we know of have been updated to this release.

Full changelog:

0.3.1 (2017-08-06)


  • Bump federation library again to fix a regression in reply relaying due to security fixes in the library 0.14.0 release.

0.3.0 (2017-08-06)


  • Reject remote content updates via the federation layer which reference an already existing remote content object but have a different author.

    Note that locally created content was previously safe from this kind of takeover. This, even though serious, affects only remote created content stored locally.

  • Reject remote reply updates via the federation layer which try to change the parent content reference.

  • Bump federation to ensure remote entity authorship is verified correctly.


  • API has two new endpoints, the "Content" and "Image Upload" routes. (#120)

    • Content API allows browsing content objects that are visible to self, or public for anonymous users. Content objects owned by self can be updated or deleted. Creating content is also possible.
    • Image Upload API allows uploading images via the same mechanism that is used in the content create UI form. The uploaded image will be stored and a markdown string is passed back which can be added to content created in for example mobile clients. Note, uploading an image doesn't create any content itself, it just allows embedding images into content, just like in the UI.
  • New API docs exposed by Django REST Swagger. These are in the same place as the old ones, at /api/. Adding to the documentation is still a work in progress.

  • Add image upload button to the create/reply editor. This makes it possible to upload images from mobile browsers. (#120)

  • Make profile "following" button link to "following contacts" page, if user is logged in and own profile.


  • Create and update content will now redirect to the content created or updated. Previous behaviour was user preferred landing page.
  • Delete content will now redirect back to the page where the delete was triggered from. Previous behaviour was user preferred landing page. If the content delete is triggered from the content detail page, redirect will happen to user preferred landing page as before. (#204)


  • Fix internal server error when replying to content that contained only characters outside the western Latin character sets.
  • Visual fixes for content rendering in content delete page.
  • Make direct profile handle search survive extra spaces before or after the searched handle.

#thefederation #changelog

Socialhome HQ

Chat with us on #Matrix

We've now a #socialhome:matrix.org room on Matrix too, in addition to our IRC and Gitter rooms. All these rooms are bridged, so you only need to join one to talk to participants in all three.

#Django developer?

Want to help build a cool social network site that federates with #Diaspora, #Friendica, #Hubzilla, and in the future #Mastodon too? Come talk and join in, help is required!

Here are some buzzwords from our technical stack: #Django, #Channels, #Bootstrap 4, #jQuery, #Masonry, #RQ, #PostgreSQL, #uWSGI, #Circus, #Mocha, #federation, #Haystack, #Whoosh. And coming up, #VueJS.


Socialhome HQ

#Socialhome image uploads are now available on mobile browsers too. Previously it was only possibly to drag'n'drop an image into the editor. Now you can embed in place by using the new "camera" icon.

This change is in the development branch and will be in the next release. The official public server https://socialhome.network runs on the development branch.

Btw, profile picture upload is almost ready, coming soon!

#devdiary #changelog

Socialhome HQ - Socialhome

Socialhome HQ

Nice to see some discussion starting to happen in our #Gitter and #IRC chats (which btw are bridged). Come join in if you have questions or comments regarding #Socialhome, or are just interested in following discussion regarding the project.

Gitter: https://gitter.im/socialhome/Lobby

IRC: #socialhome on Freenode (or webchat)

Where developers come to talk.

Socialhome HQ

як я зрозумів, будь який сервер, який підтримує будь який з протоколів обміну данних в Federation, може відправляти інфу в мережу (і вона буде пітдягуватись на серваки де є підписники), і відповідно отримувати. якщо сервак це підтримує, можна налаштувати крос-постінг своїх постів в фб, твітор та інші централізовані мережі, через їх апі. вищезгаданий скорі.нет підтримує трансляцію в твітор і тумблр, але фб не підтримується

#Ukrаine #Україна #Lviv #Львів #anarchy #анархія #diaspora #діаспора #socialhome


Test post via #Socialhome #API

Jason Robinson

OK #Django #REST #Swagger docs generator is pretty damn sweet. Just install and type some docstrings, everything else is automatic ✌

Docs still WIP, but that was literally 5 minutes of work.

In related notes, #Socialhome #API got content CRUD operations and image upload merged. Now I want to install an #Android SDK and start making a photo upload app 😁

Jason Robinson

Some of the old #Socialhome code is amazingly funky. I've either been tired, drunk or both when writing some of the early stuff :|

Jason Robinson

Socialhome v0.2.0 released

I think we said "release every few months".. It's been 3 days, so might as well :)

This release contains among the search feature and bug fixes, a #security fix for an XSS issue that was just discovered. If anyone is running a node that we don't know of, please upgrade your version ASAP.


Full changelog:


  • Fix XSS vulnerability in profile edit. Unsanitized profile field input was allowed and one place showed a field without escaping it. The fields are now sanitized and escaping has been ensured.

    The problem concerned only local users and not remote profile fields which were correctly sanitized already.


  • Added search for profiles (#163)

    There is now a global search in the right side of the header. The search returns matches for local and remote profiles based on their name and username part of the handle. Profiles marked with visibility Self or Limited are excluded from the search results. Profiles marked with visibility Site will be excluded if not logged in, leaving only public profile results. If a direct match happens with a full handle, a redirect is done directly to the searched profile.

    IMPORTANT for node maintainers. After pulling in this change, you MUST run the command python manage.py rebuild_index to create the search index. Not doing this will cause an error to be raised when trying to search. The indexes are kept up to date automatically after running this command once.

  • When searching for profiles based on handle, fetch profile from remote if it isn’t found locally (#163)


  • Improved content/reply create/edit form. Replies don’t contain visibility or pinned form elements any more. Added also some help texts regarding drag’n’drop image embed, visibility and content pinning.


  • Make reply notifications to local users not send one single email with all local participants, but one email per participant. Previous implementation would have leaked emails of participants to other participants.

  • Correctly send replies to remotes (#210)

    If parent content is local, send via the relayable forwarding mechanism. This ensures parent author signs the content. If parent author is remote, send just to the remote author. The remote author should then relay it.

  • Ensure calling Profile.private_key or Profile.key don’t crash if the profile doesn’t have keys. Now the properties just return None.

  • Fix regression in profile all content stream load more functionality. (#190)

  • Filter out “limited” visibility profiles from API list results. These profiles are not available in the search so they shouldn’t be available to list through the API either.

#socialhome #changelog

socialhome - A federated social home.

Socialhome HQ

Profile search lands in development branch

There is now a global #search in the right side of the header. The search returns matches for local and remote profiles based on their name and username part of the handle. Profiles marked with visibility "Self" or "Limited" are excluded from the search results. Profiles marked with visibility "Site" will be excluded if not logged in, leaving only public profile results. If a direct match happens with a full handle, a redirect is done directly to the searched profile. When searching for profiles based on handle, profile is fetched from remote if it isn’t found locally.

IMPORTANT for node maintainers. After pulling in this change, you MUST run the command python manage.py rebuild_index to create the search index. Not doing this will cause an error to be raised when trying to search. The indexes are kept up to date automatically after running this command once.

The future of search

In addition to profiles, search will be coming for tags and content too. There are some ideas how to represent the global search results page with these different kinds of items. It could be something like this:

In this #mockup, we break the results into their own result areas, making it easier to locate the result you were looking for. The profile and tags results would have pagination and the content grid below would scroll down, loading more results. This would make the search a kind of dynamic stream.

Opinions on this and searching social content in general welcome!


Test Socialhome at https://socialhome.network . This node follows the development branch and will always have the latest merged in features.

#socialhome #devdiary #changelog

Socialhome HQ - Socialhome

Socialhome HQ

Socialhome v0.1.0 released

The plan was to start doing releases either when 1) enough features are implemented to satisfy a certain level of use or 2) when the first non-project instance is running.

Since the latter happened (yay!) yesterday, I decided to push out the first initial release of #Socialhome today. The first version 0.1.0 includes the following main features:

  • Streams (followed, public, profiles)
  • Content creation
  • Content OEmbed / OpenGraph previews
  • Replies
  • Follow/unfollow of profiles
  • Contacts list
  • Pinning content to profile

The rationale of moving to releases is that other node maintainers will have an easier job running their node. A changelog will be kept for any noteworthy changes that users or node maintainers should be aware of. Releases will happen probably every few months, depending on what lands in master branch.

If you run an instance following the master branch, please keep an eye on the changelog for any important changes when pulling in fresh code.

Interested in trying Socialhome or participating?

#federation #thefederation

Socialhome HQ - Socialhome

Socialhome HQ

Anyway, this profile is likely to remain sparse for a while. The reason is simple: while I wanted to have a foothold in the #Federation, and #Socialhome appeals to me a lot more than the alternatives, I also want to remain relatively anonymous, and way too much of my activity online is tied to my real name.


Congrats to @{Erik; vertex@pod.togart.de} for setting up the first (that we know of) non-project #Socialhome instance 😍🌟

Welcome to the club, social.togart.net!

Socialhome HQ

Test post Socialhome instance

The setup of the Socialhome instance was pretty easy.

[ #test #post #socialhome ]


Your network is free. Su red está libre.

#diaspora #federal #socialhome #facebook #gif


Some basic #search on #Socialhome finally starting to come together. Only on my personal node atm though. Explains why many people got a follow from me just now as I'm eagerly searching and following people from my #diaspora contacts :) Remote direct match lookup is still to come though, so can't reach all pods who don't push over the relay system (btw, you should!). Currently the search is for profiles only. Tags will be added soon, after that full text for content.

On the technical side, after prototyping some solutions, went with django-haystack for the search framework and whoosh for the engine. Whoosh is a pure #Python backend with a file index. While this might not offer the performance we will need for large index full text search (from all content!), using Haystack on top means we can just switch transparently to #Elasticsearch at any time without touching pretty much any code - or even support using one or the other. Some people running nodes might not want to install ES.

Landing soon in master, you can try it at my own site if you are interested. It's basic but works.

#django #devdiary

Jason Robinson

Started a #Roadmap section in our documentation. Below the high level architecture of current and possibly future #Socialhome.

One of the central parts here is replacing the current streams with a #VueJS app, for performance and code architecture reasons.

This is a living draft that will be updated as time goes. Feedback welcome, especially from Vue hackers!

Thanks @{Augier; augierle42e@diaspora-fr.org} for the good discussion regarding this in our little #Helsinki #hackathon at the Anders office a few weeks back, and for kicking off this mammoth task 🍻

Socialhome HQ

Using Waffle.io for a #Kanban board in #Socialhome. Recently they introduced creating #GitHub labels via their UI. I've always felt GitHub makes creating labels unnecessarily complex, not being able to create one through the issue creation page. In Waffle you can now.

If you need a lightweight Kanban board for your project on GitHub, make sure to check out Waffle.

Jason Robinson

Contact management lands

You can now access contacts you follow via the navbar "Contacts" menu item. This allows visiting contact profiles and unfollowing them. Check it out and let us know of any improvement ideas!

Next will add contact search. Will also add a "followers" contacts version at some point in the future.

About the following model

Socialhome following is done the way it works on #Twitter, ie the asymmetric model. This is why we call it "following" instead of "sharing" as in #Diaspora. There is no requirement of creating a social connection with someone to share with them. Following basically just means "I want to see this persons posts in my followed stream". It doesn't give the followed person any extra visibility to your posts or profile.

In the future once non-public content support lands (currently everything is "public"), there will be a way to manage aspect like groups for purely targeting content. Adding a person to this kind of list is separate from following. In other words, you don't need to follow someone to include them in a contact list. This is the "sharing" side that for example Diaspora has included in the "follow" side.

The contact management page will be refined as different kinds of contacts are available. Currently there are only "people I follow" and "people who follow me".


Give Socialhome a try at https://socialhome.network

#devdiary #changelog #socialhome

Socialhome HQ - Socialhome

Socialhome HQ