New windows installer available

After a long time since twister windows installed was last updated (the windows port was basically orphaned since dec/2014), we should all thank @denis for taking care of it:



Posted in Uncategorized

File attachment and WebTorrent support

Hi folks!

I’ve just committed this weekend a quite experimental (and also very cool) feature: file attachment and embeded media displaying using WebTorrent.

For those who didn’t heard about it, WebTorrent is an amazing project by developer Feross who was bold enough to implement the entire BitTorrent protocol in Javascript. Not only he provides a full BitTorrent client in node.js but he also managed to have it working inside the browser. Of course, it’s not free of some limitations: due to lack of UDP support in browser DHT cannot be used so we have recourse to the old tracker mechanism (with some degree of centralization…). Also because extensions to the P2P protocol to with WebRTC API it is not compatible to older BitTorrent clients (except Azureus) so the two BitTorrent networks (standard and web) are still somewhat separated. I hope this will change over time, but currently you can’t post magnet links from standard BitTorrent clients to display them inside the browser and vice versa.

The WebTorrent support to twister-html was added to the experimental “blaster” branch. Even there, it is still disabled by default. One must go to the options page to enable it:


As you may notice we have 3 options to enable WebTorrent support. This first one is off by default, and disables WebTorrent entirely (the javascript file is not even loaded).

The default trackers are used to resolve the magnet link hashes into torrent data (and to announce new ones). Users must be aware that viewing media or download files will cause requests to those servers, besides the P2P traffic to other nodes to exchange the content pieces.

The last option (auto start download) will cause twister-html to join the swarm of every media your friends (ie. the users you follow) have posted to their timelines. twister-html will also remember these infohashes so they are automatically joined when you restart, even if the given post is not on your timeline anymore. Yes, yes, I know… Some interface will be needed to administer this… like disabling old torrents and limiting file sizes etc…. One step at a time.

The idea of the “auto download” is that your friends would help you sharing the content when your own computer is turned off. Let’s see if it works out.


This screenshot shows the user “Mr Burns” (@mf2) trying two embeded media: one is the same video shown in The other one the image Google displayed yesterday for the mother’s day.

On the left side one may notice the option to attach a new file. This will create and seed a new torrent containing the file. The shortened url is added to post text.

Because the browser FileApi provides no way of keeping the access to the file across page refreshes, it seemed quite easy to lose the content one just attached (just close the browser before any other peer could copy it). Therefore I’ve implemented another mechanism: every time a file is attached the twister-html will do a blob copy within the browser using the IndexedDB API. I have no idea of how well this will perform, including browser support and quota limits, but i’ve been told “IndexedDB is a low-level API for client-side storage of significant amounts of structured data, including files/blobs” so it just seemed the right thing to do…

So, if everything works, whenever you reopen twister-html it will scan for previously attached file and restart seeding them.

Have fun!


Warning: privacy concerned users should not use this feature. Seeding a file from your own computer with a public IP, or even downloading BitTorrent content, may be used to detect your location or web presence. Unlike the rest of twister traffic, this WebTorrent data cannot be tunneled through Tor.


Posted in Uncategorized

URL shortener and long posts are coming!


Latest work by @tasty and @mfreitas commited to twister repositories implement the first (afaik) decentralized URL shortener!

How it works:


Then, another experimental feature has just been added today: long (> 140 characters) post.

Long post is not yet (at time of writing) enabled in twister-html UI. There is an ongoing discussion here on what limits should be imposed instead of the old one.

Unfortunately, unlimited post size are not possible due to technical limitarions of the protocol.


Should I use URL shortener or a long post including the URL?

That´s a good question, both alternatives have advantages and disadvantages:

  • Long posts, which use more than 768 bytes after encoding may be recused by some nodes, causing then to not being added to “mentions”  lists, for example.
  • Note UTF8 may expand to more bytes on non-latin languages and some overhead is added as well (like sender fields, signature etc).
  • URL shortened special post is added to torrent and DHT. However DHT may expire it after two weeks, causing delays on URL resolver. posts with URL as text have no such problem.

So stay tuned! We´re working on these.


Posted in Uncategorized

twister-core 0.9.34: fix connectivity issues

twister-core repository has just been updated to 0.9.34 fixing a somewhat serious connectivity bug: due to an old logic inherited from Bitcoin, our client almost never tried connecting to peers with non-standard ports.

this might have been a reasonable idea at the time of fixed-port clients but since twister 0.9.30 (which adds random port support) this makes our p2p mesh pretty unbalanced. it is as if older peers were the only receiving connections, acting like a kind of “super-nodes” with a much higher load than needed.

0.9.34 also includes our latest torrent extension called “peek piece” which allows fast retrieval of single posts from remote peers. this is part of our upcoming url shortener feature.


Posted in Uncategorized

twister-core 0.9.31: security fixes and more


I’ve finally backported two security fixes from libtorrent: uTP vulnerability (also known as DRDoS in torrent world) and lazy_bdecode overrun.

These are already in github tagged with version 0.9.31.

Also notice that recent changes in twister-core are also required to enable the new twister-html features:

- RT with comments and
- Group Chat!

Thanks a lot @tasty and @erkanyuksel for their work!

Posted in Uncategorized

twister-core 0.9.30: random listening port

New twister-core 0.9.30 has just been tagged on github:

The most noticeable change from 0.9.29 is that we now listen to a random port number on initialization. So users who want to preserve the old behavior must now add the parameter “-port=28333” to their command line or edit ~/.twister/twister.conf (in config file don’t use “-” before keyword, just “port=28333“)

If you had to manually configure your firewall to allow twister port to receive external connections, you should use the “-port=” parameter as well. But don’t worry, twisterd will remember the parameter you’ve used last time and keep using this same port from now on…

The idea is that lazy firewallers will have a hard time blocking twister now. No more easy “just block port 28333 and we are done”. They now need real content detection. So here is twister’s contribution to fight the crisis and generate programmers’ jobs all around the globe ;-)

The current twister-core also defines Content-Security-Policy to twister-html to prevent Javascript injections. This is an important security fix for the html client.

Besides, I’d love to announce that with twister-core 0.9.30 we now have Private Group Chats and Favorites… However the user interface is not complete for those, so this is just a “half annoucement”…


PS to twister-seeders owners: we now have a newer twister seeder as well, supporting the reporting of non-standard ports., and have already been updated. See

Posted in Uncategorized

twisterd compiled for iPhone / iOS

Very cool: developer @erkanyuksel has successfully built twisterd for ios!

running twisterd on ios #339

We might not yet be ready to deliver an easy-to-install mobile client, but at least Erkan has proved it is possible to port twister to this architecture. Great job!

Posted in Uncategorized

twister paper published on IJPED

twister paper has just been published on International Journal of Parallel, Emergent and Distributed Systems:

twister: the development of a peer-to-peer microblogging platform

Thanks everybody that contributed!

The access to the revised version above is probably restricted to university and librarians domains. However an older pre-print version may be seen here

Posted in Uncategorized

twister user and promoter arrested in Shanghai. #FreeLoveChan!

Hi people,

I’m still trying to make complete sense of this, so please apologize me for any mistakes. I don’t read Chinese and automatic translations tools sometimes produce nonsense stuff. This is utterly complicated by Orwellian police procedures.

A Chinese guy known as @lovechan64 was arrested by Shanghai police last May 30, on charges of “the crime of destruction of computer information systems”. lovechan (known in twister by ids @lovechan, @z9 and @9z) is a well known twister promoter, having publicly talked about twister using his Twitter account multiple times.

According to some sites:

It is understood that 陈乐福 network called “love chan”, is committed to promoting social networking software twister, on May 30 was arrested by Shanghai police. twister is an open source P2P microblogging network, which is characterized by the message sent can not be blocked, not deleted after content publishing, publisher’s identity can not be tracked.

Chinese activist @wenyunchao reported on Jun 8:

Love Chan @ lovechan64 Chen Yuefu committed to promoting #Twister, authorities Detention he seems to be afraid of this thing. Another reason may be that he helped some of the dissidents face to face counseling over the wall.

I’ve asked chinese twister users about this. Some confirmed and others reported another reasons.

@chinanet explained:

@mfreitas @yangxiao no, it’s NOT because of twister, it’s because @lovechan (aka @z9 @9z ) helps @xiaolan spreading leak of 50-cent party. @xiaolan is anonymous but @lovechan is not, @lovechan even uses his own photo as avatar

I’ve tried to understand a bit more about this, and it seems “50-cent party” is a group of people who receive money from Chinese govt to post good things on public forums and stuff like that. This seems to be officially demised but recently someone (not @lovechan) obtained, and then leaked, a private email containing a list of these people. @lovechan is reported to have helped publicizing such leak.

Either way, this is serious stuff that we should bring awareness about. The guy is definitely detained as reported here. He is married to Lee Funchang who just gave birth to a baby last Jun 5th. The guy is still detained and has not yet seen the baby.

It looks like the guy was found by old police job (he apparently didn’t tried hard to hide his identity) not due to any twister failure. Anyway it is important to realize that, while it is ok to use twister over a plain networks for reading the news and casual chats, if you have really serious and dangerous shit to say by all means: create a new user and only connect twister on top of Tor. twister alone won’t protect you against Orwellian governments!! (note: i’m referring to public posts here, twister’s DM and Group Chat content should be safe even without Tor)


Stay safe and let me know for any corrections.

Update: No, I don’t think @lovechan was identified because he was not using Tor. He posted the leaked files using his wife’s account (see below for @chinanet’s comments). Of course, it doesn’t matter using Tor or not if one signs with his real name.

Update Jul 04 2015: by @chinanet(新人教程, 点我资料): @vegos @thedod @lohang @twister good news is @lovechan was granted bail pending trial with restricted liberty of moving. he used @9z to post just now.

Posted in Uncategorized

Upcoming new features: group chat and favorites

After another great climbing vacation (with two new summits climbed for the first time ;-) ) I’d like to post a quick update on latest twister developments…

Users following our github repositories commits may have noticed that two cool new features have been added to twister-core but are still lacking UI support (twister-html), these are:

  • Group chat: allows users to invite a party for a private group chat. All group chat messages are encrypted and only invited members are able to read them. Any current member may invite another user to join the chat (there is no “exclude” user feature, the alternative is to create a new group without people you want to exclude).
  • Favorites: users can mark some posts as “favorites”, either private (like a personal bookmark only you can see) or public (so everybody will know that you favorited that post). Many thanks to @erkanyuksel for this!

So what this mean, in practice? This means that these two new and experimental features are already available for the brave who want to play with twisterd command line interface. There is no time frame for these to appear in twister-html. In fact, I may attest that we currently have much more experienced Javascript contributors to twister-html than me. I’m not personally working on UI for any of that.

In case of group chat, it is an almost “invite only” feature so far. The thing is that if one invites you from the command line interface, you will then be able to join the group chat using standard twister-html DM screens…

Stay tuned!

Posted in Uncategorized