Release notes for v0.6.3

We’re presenting today the latest v0.6.3. This version presents a few important improvements listed below.

New “GxsTrans” service

This new service uses GXS (the system that otherwise distributes forum and channel posts) to asynchronously  send authenticated pieces of data to any distant identity accross the connected network. The data is encrypted and the actual destination is hidden. In short, GxsTrans uses GXS groups that are distributed to friend nodes,and clients posts GXS messages in these groups which are accessed by every peer in the network to pick their own message. As a “meta service” GxsTrans forwards data to other client services in Retroshare (e.g. Messages). As GXS service, GxsTrans benefits from the spam control system and authentication of message’s sender.

Messages in GxsTrans groups are encrypted using the public key of their destination, and are signed by the sender. The encrypted packet only contains a symmetric AES128 key encrypted using the public key of the destination ID without header. Consequently there is no way to know who can decrypt this plain 16-bytes key and peers need to try their own keys to check whether they are the destination or not. A hint system however allows to limit the cost of trying all possible keys without fully disclosing the destination. We’re currently working on a way to implement Perfect Forward Secrecy within this system.

The Statistics/GxsTrans widget shows the list of messages currently sent by your own node with their status (top view) as well as the list of GxsTrans groups and their messages.

In order to make all peers agree on which groups to use (for efficiency reasons) subscription to groups is automatic and post are always sent into the group of largest ID. Because peers who do not already have a transport group will create one when needed, it’s expected to see a few subscribed GxsTrans groups in the statistics window.

GxsTrans can be used by any service to exchange long distance data asynchronously. It is currently used as a transport vector for distant messages. Messages  however still partly rely on the Global Router, which uses tunnels/routing matrix and is therefore faster but less reliable. It is unclear at this point whether we will keep the global router or not. In any case, messages now are very reliable and fully asynchronous.

Forum/Channel post editing

Users can now edit their own forum/channel posts. This is done by posting a new message with the mOrigMsgId field set to the previous version of the message. The tree of message versions is then unfolded by the GUI at the time of display, and all messages are packed into a single post with a list of version times for you to choose:

Old Retroshare versions will however not be able to see post edits, since they do not take are of the mOrigMsgId value properly. In channels, comments are merged between all versions of the same post and all displayed consistently:

Renamed executables and packages

In order to comply with standard unix naming systems, we had to rename a few things. We hope it’s not cause too much inconvenience. If you have scripts launching Retroshare, just make sure to update them with the correct executable names:

  • RetroShare06 -> retroshare
  • RetroShare06-nogui -> retroshare-nogui

ubuntu packages

The new packages have a different name that drop the “06” suffix (which was originally here to allow a smooth transition between v0.5 and v0.6). Because new and old packages contain common files, they are declared as incompatible. In practice that means you need to remove the old packages, and then install the new ones:

sudo apt-get remove retroshare06
sudo apt-get install retroshare

The new executables are /usr/bin/retroshare and /usr/bin/retroshare-nogui. These procedures *will not* impact your retroshare data. It’s quite similar to upgrading the package.

New serialization system

The serialization system has been re-wrote from scratch with the following goals: (1) serialization should be easy to implement, (2) consistent by design, and (3) 100% backward compatible.

The new system, implements a single method that overrides RsItem::serial_process() which does 4 different tasks with the same piece of code: serialize, deserialize, size computation and print (that’s the role of the SerialzeJob variable in the code below). Therefore, all 4 tasks are consistent by design, and it’s impossible to implement a serializer that e.g. forgets to deserialize a member, etc.

Declaring a new RsItem subsclass and its serializer only requires two actions:

(1) overload the RsItem::serial_process method:

class MyRsItemType: public RsItem
     virtual void serial_process(RsGenericSerializer::SerializeJob j,
                                 RsGenericSerializer::SerializeContext& ctx)
        RsTypeSerializer::serial_process<uint32_t>(j,ctx,sendTime,"sendTime") ;
        RsTypeSerializer::serial_process<uint32_t>(j,ctx,status  ,"status") ;

(2) write a serializer that only provides an object creator:

class RsStatusSerialiser: public RsServiceSerializer
     RsStatusSerialiser() :RsServiceSerializer(RS_SERVICE_TYPE_STATUS) {} 
     virtual RsItem *create_item(uint16_t service,uint8_t item_subtype) const
          if(item_subtype == RS_PKT_SUBTYPE_DEFAULT) return new RsStatusItem();

RsTypeSerializer::serial_process handles all traditional types (including stl container types, see the code in libretroshare/serializer/ for numerous examples). It is also possible to specialize this method to serialize additional types on demand. We will document this more extensively soon.

All existing classes have been converted to the new system, which should go absolutely transparent to the end user.

Improved command line tool

The command line tool needs to manage the login step of both the web interface and the terminal input, which makes it pretty complicated. We tried to make it as clear and smooth as possible. The -U option now only takes a location ID (the 160bits hash) which are listed when no options are specified on the command line.

Improved GUI

Login and certificate creation dialogs have been simplified to their strict minimum. Channel comments (including the ones that load in the news feed) are loaded asynchronously when displayed while keeping the filtering and search capabilities, which allows a much faster loading of channels.

Group network stats now show the last message time and count of forum posts more accurately. New settings allow to tweak “direct downloads” globally to override the friend-level setting.

Statistics have been improved in order to show individual packets (as bullets) and graphs are both less costly and better looking.

Of course the usual pass of code cleaning includes valgrind against memory leaks, and cppcheck for code consistency.

Upcoming tasks

The two upcoming tasks are:

  • re-design the chat system. This has been already started. The goal is to consistently merge chat rooms, distant chat, and broadcast into variants of the same object, which will allow for instance to add friends to a conversation, create private multi-peers conversations, etc.
  • expose GXS API. We have a really powerful tool, but only the devs know about it. This is going to change, and we plan to offer developpers a way to implement applications on top of Retroshare.


The software is available for windows, OSX, and all Ubuntu distributions.

[EDIT Aug 10, 2017] Because of a bug in the current version of sqlcipher on Debian stretch (See here) we need to provide special packages. You’ll find here the packages with dependency on libsqlcipher0-3.4.1 as well as the correct sqlcipher package to use.

[EDIT 2, Aug 20, 2017] Release on MacOS has been made possible through Travis-CI, which does both compilation and packaging. We’ve tested it: It works perfectly. Although we trust Travis, we cannot guaranty what is in the package.


One more release! The dev team would like to thank all contributors, testers and users for their valuable suggestions (Thanks to Ghibli for his really good advice on how to improve the GUI) and pull requests (especially Phenom for all his contributions).


About Cyril

I'm sharing the lead of the RetroShare project with G10H4CK. I've been working on RetroShare for four years now.
This entry was posted in Uncategorized. Bookmark the permalink.

11 Responses to Release notes for v0.6.3

  1. John says:

    Been using RetroShare with friends on and off for about 5 years now and this is a great development.
    GXS API sounds really exciting and can’t wait to try to build a few applications with it.

  2. Congratulations on the release of retroshare 0.6.3, I look forward to further community embracing of this project going forward. Activists, Journalists, Reporters and those living in serious privacy invasive regimes should also give Retroshare a try.

  3. Pingback: Release notes for #Retroshare v0.6.3 https://retroshareteam.wordpre… | Dr. Roy Schestowitz (罗伊)

  4. cgi says:

    no-gui login-phase is definetely smoother, and bottom-button in the webchat interface is much needed and very welcome addition. It was a nightmare to scrolldown long chat to the latest history. Also changing binaries and directory names back to just retroshare is a nice touch.

    A cli-chat interface for no-gui would be greatly appreciated!

  5. RaspberryPi_User says:

    Thx for release, can you please add raspberrypi builds? I dont understand why you dont develop any official raspberrypi support.

  6. Steve says:

    thank you for such an awesome and anonymous piece of software!
    I remember back a few years ago when WinMX used to be the top file sharing program of all time. It is still in use today, but unfortunately is closed source, as well as Fopnu which could have malware inside.
    However, Retroshare is the best one and only because its open source and more secure than any other p2p that i know of! Keep up the good work! Give the people the freedom they need!

    More public chatrooms would be greatly appreciated for those who are new to the platform!

  7. Steve says:

    Thank you for such an awesome p2p software!

    More public chatrooms if possible, for the newbies who only start using this for the first time would also be appreciated!

  8. lorem ipsum says:

    Hey, sorry for using this channel to ask for this, but Retroshare’s web forums are essentially dead and there’s not even an option to post a new topic/register even…

    First of all (and related to the above issue), what do you think about creating a more “mainstream” community, like a Discord channel?… For the general public to be in contact with developers or at least a couple of community maintainers and between each other, to address questions like mine and discussions that shouldn’t require to install and use Retroshare’s own channels/forums (in case you wanted to propose that option).

    2nd, I know it requires people and resources, but a facelift to the website I think is desperately needed… at least update the screenshots, place a roadmap, update if necessary any other information and that would be a start.

    And finally, my personal inquiry/question… As far as I know/understand, Retroshare doesn’t have a “synchronization” feature in the “file transfers” section… That feature would be absolutely fantastic… Is that even possible to develop in the current Retroshare form?

    Thank you in advance!

  9. Dipti says:

    but do not be aware that missing retroshare for ubuntu 17.10
    and I’ll give you my gmail so we can tell if it’s a retroshare for
    ubuntu 17.10 gmail:

    and keep an eye out when a new linux comes

  10. Pingback: RetroShare-Interview: Fileharing & Kommunikation undercover (Repost)

  11. Pingback: RetroShare-Interview: Filesharing & Kommunikation undercover (Repost)

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s