Leaving development


It’s a long time since I don’t post, which is a consequence of changing interests and priorities in life over these years. I believe it is time to admit I won’t be able to keep leading the twister development for the foreseeable future.

Forking the project is always an option if anyone wants to take over since the code is fully open source. So this announcement only means I’m personally leaving the development not pulling the plug (the twister network is still running).

But since the web hosting plan is about to expire next month it is possible the website will go offline or get replaced by a static-only version.

I’d like to thank all users and friends I’ve come to meet over all these years! See you, take care.




Posted in Uncategorized

twister-core Boost 1.66 support


Thanks @erkanyuksel we now have support for compiling twister-core with Boost 1.66+.

(Erkan’s patch is also compatible with older boost releases)

Boost patch (merged): https://github.com/miguelfreitas/twister-core/pull/422

twister-core repo: https://github.com/miguelfreitas/twister-core


Posted in Uncategorized

twister-core 0.9.40: openssl 1.1.0 support

Some users have reported trouble compiling twister in recent distros that ship openssl 1.1.0 by default (instead of openssl 1.0.x). This is due to some incompatible api changes from openssl.

twister-core 0.9.40 finally brings openssl 1.1.0 support, so users shouldn’t need to force installing old packages anymore.

Enjoy! :)


Posted in Uncategorized

Blaster branch merged to twister-html: favorites, new features and fixes!

Blaster development branch was merged to twister-html master branch.


This branch includes new features (like favorites), fixes and optimizations. Many thanks to @tasty @erkanyuksel for their work!

Posted in Uncategorized

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 WebTorrent.io. 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. seed.twister.net.co, seed2.twister.net.co and seed3.twister.net.co. have already been updated. See https://github.com/miguelfreitas/twister-seeder

Posted in Uncategorized