v7.13.0
Overview
We're ecstatic to introduce the latest version of Tribler, packed with exciting features and significant enhancements! Here's a rundown of the most notable changes:
Instant search with superior result quality:
- Experience lightning-fast local search queries, now 100x faster than in the previous release (because of broken feature) (#7166);
- Enjoy real-time, remote results from other peers as they appear instantly (#7025);
- Benefit from an advanced ranking algorithm that considers multiple factors, such as title structure, creation date, and the number of seeders/leechers (#7025);
- Discover similar results for known content categories, now conveniently grouped for an improved UI experience.
We're confident that you'll love the revamped search experience. As more peers upgrade to the new version, the distributed search will deliver even higher-quality results with the enhanced ranking system!
With these updates, Tribler is gradually evolving into a decentralized search engine, rivaling the speed of YouTube's video search.
Introducing the Knowledge Component: A Leap Towards Decentralized Search Excellence
Google's power resides in its PageRank algorithm. Creating a decentralized alternative to Big Tech has proven challenging, but with this release, we take another small step on this journey. Our ultimate goal is to achieve self-organizing trust, the fundamental building block for a decentralized PageRank system. The concrete use-case we aim to address is collective decision-making in the peer-to-peer world, such as determining whether Justin Bieber is gay.
Is Justin Bieber gay?
Explore the details of this scientifically serious issue related to trust, spam, and crowdsourcing. For the record, we believe Justin Bieber's music is neither Black Metal
nor gay
. We consider this an exemplary use-case for Tribler's zero-trust architecture to solve. Our distributed trust ledger has been under incremental development since before Bitcoin. We have not yet deployed our decentralized reputation and trust framework, as our MeritRank algorithm is still not ready for production. However, we have upgraded the BitTorrent tag-based metadata enrichment from pure text labels into the KnowledgeComponent
(#7070). As a test, we offer semantic clustering within Tribler when searching for "Ubuntu," providing cleaner search results and filtering duplicates.
No other peer-to-peer project, such as IPFS, Mojo Nation, or Freenet, has ever cracked semantic search. With the KnowledgeComponent
, we take another challenging step towards a Google-quality search engine. It signifies a move towards semantics, a search engine that understands your preferences and helps you discover content without interference from lawyers or governments.
Creative Commons licensed promotional picture:
Enhanced Torrent Health: Accurate Sharing Between Peers
Tribler peers exchange information about torrent popularity, allowing torrents with a substantial number of seeders to appear on the "Popular" page and receive priority in search results. We identified several critical bugs (#7295) in the previous algorithm, causing invalid torrent health records to spread across the network and skew the results on the "Popular" page. These bugs have now been fixed, and the gossiping algorithm has been optimized for efficient sharing of popular torrents (#6950).
Improved Stability for a Smoother Experience
This release of Tribler is set to be the most stable in recent times. Our development team has successfully identified and resolved numerous obscure bugs that previously led to crashes and freezes. We're confident that this version of Tribler will impress you with its enhanced stability and reliability.
Features
- 100x speedup for full-text search queries with better quality by @kozlovsky in #7025, #7166, #7259
- Upgrade the
TagComponent
to theKnowledgeComponent
by @drew2a in #7070 - #2455 Added edit metadata GUI elements by @devos50 in #7112
- Update Popularity community by @xoriole in #6950
- Add Tribler translation to Spanish by @Manuel-Senpai in #7235, #7246
Bugfixes
(click to view)
- Fix #7295 invalid health records infect Tribler nodes and spread from machine to machine fixed by @kozlovsky & @drew2a in #7286, #7313, #7322
- Add ProcessLocker to ensure that no more than one Tribler GUI/Core process runs locally at any moment by @kozlovsky in #7212
- Hopefully fix #7137 CoreConnectTimeoutError: Could not connect with the Tribler Core within 120 seconds by @kozlovsky in #7251
- #6994 Tribler Core process continues to work after the GUI process crash by @kozlovsky in #6995
- Fix TriblerProcess.is_running() by @kozlovsky in #7461
- #7556 ConnectionResetError: Connection lost by @kozlovsky in #7566
- #7547 TimeoutError on getting torrentinfo by @xoriole in #7553
- #7564 OSError in SocksServersComponent: error while attempting to bind on address by @kozlovsky in #7565
- #7538 Incorrect tracker status shown on Tracker tab by @xoriole in #7555
- Add Logging for Slow Database Sessions by @kozlovsky in #7494
- Handle no space available situation on upgrade by @xoriole in #7496
- Consider HealthInfo with negative seeders and leechers as invalid by @drew2a in #7487
- The
get_circuit_slots
method ofDebugEndpoint
should handle the case whentunnel_community
isNone
by @kozlovsky in #7504 - Properly stop the non-primary process by @kozlovsky in #7349
- Detect slow coroutines and freezes in the asyncio loop by @kozlovsky in #7414
- Fixes #7344: AssertionError "transport is not None" in aiohttp/web_request.py by @kozlovsky in #7385
- Temporarily increase the core manager API port check timeout to be sure it is big enough by @kozlovsky in #7419
- Profiling of slow coroutines by @kozlovsky in #7446
- Fix the step interval of DiscoveryBooster by @kozlovsky in #7449
- 100x speedup of EdgeWalk.take_step() by caching results of GigaChannelCommunity.guess_address() by @kozlovsky in #7450
- Add extended logging to RESTManager.site.start() call by @kozlovsky in #7451
- Send events to GUI only before shutdown and in the proper order by @kozlovsky in #7364
- Skip
on_tribler_exception
if EventsEndpoint is shutting down. by @drew2a in #7357 - Decrease the frequency of the
downloads
request by @drew2a in #7377 - Check on the ancient version by @drew2a in #7383
- Fix #7386 "The connection to the Tribler Core was lost" by @xoriole in #7387
- Ignore old responses for the DownloadsPage by @drew2a in #7391
- Stop sending requests after shutdown by @drew2a in #7405
- Suppress
ConnectionResetError
by @drew2a in #7404 - Make
KnowledgeRulesProcessor
less aggressive by @drew2a in #7418 - Add queue for multithread processing by @drew2a in #7417
- Fix crash on Ubuntu while selecting File Chooser by @xoriole in #7484
- Fix empty
saveas
issue by @drew2a in #7346 - Read the language file in
utf-8
encoding. by @drew2a in #7355 - Check EditMetadataDialog on closed by @drew2a in #7371
- Fix KeyError for translations by @drew2a in #7370
- Refactor the Downloads page by @drew2a in #7378
- Add a description to the error when trying to download a newer version of the channel by @kozlovsky in #7380
- Fixes #7395 "Labels on Discovered channels are missing" by @kozlovsky in #7402
- Fix
FileNotFoundError
by @drew2a in #7401 - Fix #7453 KeyError when clicking on a personal channel by @xoriole in #7454
- Fix invalid handle when there is no torrent metadata by @xoriole in #7415
- Use a separate
misc
table for the KnowledgeDB by @drew2a in #7413 - Add reprocess feature for
KnowledgeRulesProcessor
by @drew2a in #7379 - Add
CONTENT_ITEM
relation by @drew2a in #7445 - Fixes the download torrent dialog behavior after closing it by clicking somewhere outside the dialog area by @kozlovsky in #7465
- Fixes #7473 FileNotFoundError when displaying the settings page by @kozlovsky in #7474
- Handle
IndexError
by @drew2a in #7480 - Fixes #7462 The Tribler window does not unminimize when clicking on a torrent file by @kozlovsky in #7463
- Fixes #7467 ConnectionResetError by @kozlovsky in #7472
- Fixes the space bug in the Sentry Scrubber by @drew2a in #7470
- Fixes #7406 UnicodeDecodeError in on_tracker_error_alert by @kozlovsky in #7468
- Print
Queue is full
once per 5 seconds by @drew2a in #7493 - Accept error values of any type in TriblerProcess.set_error by @kozlovsky in #7537
- #7558 creating large torrent files by @xoriole in #7559
- #5833 WatchFolder PermissionDenied by @drew2a in #6966, #7016
- #6884 Add Magnet Dialog disappears until restarted by @drew2a in #6885
- #6890 Fix Eva InvalidStateError by @drew2a in #6891
- #6833 Avoid incorrect padding by @drew2a in #6898
- #6973 Rewrite window geometry restoring by @drew2a in #7008
- #6987 Handle incorrect tracker URLs by @drew2a in #7012
- #3037 Fix "bencoded item count limit exceeded" by @drew2a in #7015
- #7051 Fix stack overflow for a torrent with a deep directory structure by @kozlovsky in #7052
- #5816 RuntimeError: nested asn1 error by @drew2a in #7128, #7302
- Fix initialization of Ipv8Endpoint in RESTComponent by @kozlovsky in #7044
- #7053 Tribler becomes unresponsive with a large tags.db by @drew2a in #7062
- Fix #7065 error while attempting to bind on address by @drew2a #7071
- #7080 The Upgrader might not copy some files by @drew2a in #7083
- #7077 Tribler is asking to upgrade version too frequently by @drew2a in #7101, by @vi in #7102
- #7107 Error on rendering tablecontentdelegate by @xoriole in #7108
- #6699 the width of the Size column on Windows when the display scaling is more than 100% by @kozlovsky in #7131
- #7056 adding torrent with invalid magnet link to channel by @xoriole in #7058
- #7106 crash when file progress is empty by @xoriole in #7114
- #7149 Core Tribler notifier should work in async mode by @kozlovsky in #7151
- #7154 Error on clicking blank space below the item list on personal channel by @drew2a in #7155
- #7157 RuntimeError: invalid torrent handle used by @drew2a in #7157
- #7172 ValueError: invalid literal for int() with base 10 by refactoring get max_lines logic by @drew2a in #7173
- #7181 Enable token balance refresh only if widget is available by @xoriole in #7201
- #7059 Handle non-existing file in torrent info endpoint by @xoriole in #7203
- Link detection fix by @Dmole in #6716
- #7041 Request Error while pressing the "download" button by @drew2a in #7211
- #7177 Tribler does not close if left idle for a few hours by @xoriole in #7202
- #7213 ValueError: invalid literal for int() with base 10 in TorrentDef.is_private() by @kozlovsky in #7214
- #7216 AssertionError in RestManager.stop() by @kozlovsky in #7217
- #7218 Do not load Debug Window if settings is not available yet by @xoriole in #7219
- #7223 UnicodeDecodeError in on_metadata_received_alert by @drew2a in #7224
- #7225 ClientConnectorError: Cannot connect to host by @drew2a in #7226
- #7117 RuntimeError: invalid torrent handle used by @drew2a in #7230
- #7231 Ignore payout in the case of the
OrmError
happens by @drew2a in #7236 - #7271 ValueError: "Unable to convert 222222 to QColor" by @kozlovsky in #7272
- #7253 Tribler does not run if the state directory does not already exist by @kozlovsky in #7257
- #7187 A download in GUI fluctuates between "0%" and "Seeding" by @drew2a in #7205
- #7318 GUI downloads status update by @drew2a in #7319
- #7316 mathematical mistake in the download progress bar drawing by @drew2a in #7317
- #7321 KeyError while surfing through a channel's content by @kozlovsky in #7323
- Fix item_rank(), torrent_rank(), freshness_rank() functions by @kozlovsky in #7338
- #7333 On GUI side, handle Core REST API responses without data by @kozlovsky in #7334
- Rename the column with a torrent's creation date from "Updated" to "Created" to avoid confusion by @kozlovsky in #7340
- #6842 Some settings are not used if torrent loaded from watch folder by @drew2a in #6863
- #7314 long shutdown by @drew2a in #7315
- #7188 Add shutdown for the KnowledgeRulesProcessor by @drew2a in #7189
- #7192 Task was destroyed but it is pending! Transfer.start_request() by @drew2a in #7193
- Remove streaming related sentences from main README.md by @drew2a in #6826
Code improvements
(click to view)
- #7158 Limit the log size by @drew2a in #7160
- Obfuscate machine name for Sentry events by @drew2a in #7023
- Add core stdout breadcrumb by @drew2a in #7022, #7033
- #7066 Extract a real core error from
CoreError
for the Sentry Reporter by @drew2a in #7072 - Simplify Session class by @drew2a in #6955
- Add "subclass match" for session.get_instance() by @drew2a in #7060
- Improve the EVA protocol by @drew2a in #6831, #6889, #6878, #6882, #6883, #6887
- Config refactoring by @drew2a in #6879
- Add typings to the
Download
class by @drew2a in #6880 - Add logging for LibTorrent events by @drew2a in #6867
- Add
format_error_message
function by @drew2a in #6881 - Simplify base64 conversion in
get_pieces_base64
by @drew2a in #6897 - Stricter signature for ErrorHandler.gui_error() by @kozlovsky in #6846
- Extract the
run_threaded
function to thepony_utils.py
by @drew2a in #7150 - Refactoring of the
tail
function by @drew2a in #7159 - Remove
asyncio
logger level specification. by @drew2a in #7175 - [Snyk] Security upgrade setuptools from 39.0.1 to 65.5.1 by @xoriole in #7165
- Refactor hi-level
VersionHistory
logic. by @drew2a in #7182 - Add
resource_type
for subjects in queries in theKnowledgeDatabase
by @drew2a in #7153 - Refactoring of the
tiny_tribler_service.py
by @drew2a in #7200 - Add EventsEndpoint.shutdown() by @drew2a in #7196
- Disable BEP33 health check by @xoriole in #7275
- Fix
asyncio.create_task()
calls by @drew2a in #7300 - Improve the AsyncGroup by @drew2a in #7306
- Fix critical issues reported by Codacy by @drew2a in #7309
- Apply autoformat + optimise imports by @drew2a in #7320
- Update
ipv8
to the version2.10
by @drew2a in #7285 - Bump pillow from 9.0.1 to 9.3.0 by @dependabot in #7198
- Bump setuptools from 60.0.2 to 65.5.1 by @dependabot in #7241
- Bump cryptography from 35.0.0 to 39.0.1 by @dependabot in #7301
Build/CI improvements
(click to view)
- Fix ImportError: DLL load failed while importing libtorrent: The specified module could not be found by @kozlovsky in #7533
- Fixes #7047: Update the build documentation by @drew2a in #7244
- Build Tribler by using GitHub Actions by @drew2a in #6903
- Build updates by @xoriole in #6905
- Update requirements.txt by @drew2a in #6839
- Refactoring of workflows by @drew2a in #6913
- Add GitHub actions for PR (documentation, pytest, coverage) by @drew2a in #6850
- Add .codeclimate.yml by @drew2a in #6849
- Add codacy by @drew2a in #6860
- Add coverage badge by @drew2a in #6868
- Add codecov by @drew2a in #6869
- Add bandit.yml by @drew2a in #6871
- Add guitest.yml by @drew2a in #6902
- Use project-token for codacy by @drew2a in #6870
- Fix upload_coverage.yml by @drew2a in #6861
- Swap download action by dawidd6/action-download-artifact@v2 by @drew2a in #6864
- Fix PR event by @drew2a in #6922
- Add pip cache for GitHub Actions by @drew2a in #6923
- Add
windows_dependencies
action by @drew2a in #6925 - Add
workflow_dispatch
for ubuntu build by @drew2a in #6927 - Build Tribler binaries for win by @drew2a in #6920
- GitHub Actions: Change order of upload value by @drew2a in #6931
- Build Tribler binaries for macOS by @drew2a in #6928, #7276
- Add LOG_LEVEL variable for win and ubuntu build by @drew2a in #6933
- [mac] Fix Tribler.app is damaged by @drew2a in #6935
- Add
pytest_custom_ipv8.yml
by @drew2a in #6943 - Add
invalidate-cache
flag by @drew2a in #6949 - Pass secrets to callable workflows. by @drew2a in #6953
- Add the sign step to the windows build by @drew2a in #6946
- Fix
extract_swagger.py
by @drew2a in #6965 - Fix failing GUI test on Linux Github action by @drew2a in #6999
- Add the
requirements-key
parameter to the pyenv GitHub Action by @drew2a in #7028 - Specify the
requirements-key
parameter fordocumentation.yml
by @drew2a in #7029 - Add the action for screenshots publishing by @drew2a in #7084
- Fix pyenv GitHub Action by @drew2a in #7094
- Add
scripttest.yml
by @drew2a in #7105 - Update GitHub Actions versions by @drew2a in #7113
- Add Windows and macOS GUI tests to GitHub Actions by @drew2a in #7115
- Run checks only if it is necessary by @drew2a in #7130
- #7174 Add support for unannotated tags in GitHub Actions builds by @drew2a in #7176
- Use shared env variables in !PR.yml by @drew2a in #7239
- Update
yappi
version by @drew2a in #7249 - Update versions of Qt libraries by @drew2a in #7256
- Fix workflows context by @drew2a in #7267
- Specify ubuntu and win versions by @drew2a in #7273
- Add
github.ref
for the events:push
andworkflow_dispatch
by @drew2a in #7277 - Remove
codacy
check by @drew2a in #7279 - Add a workaround for Apple Silicon by @drew2a in #7281
Test improvements
(click to view)
- Add a specific label to unlock PR checks for outside collaborators by @drew2a in #7243
- Add profiling for
pytest
by @drew2a in #7135 - Add looptime by @drew2a in #6894
- Add
--reruns 1
for pytests by @drew2a in #7169 - Add
--reruns-delay 1
by @drew2a in #7183 - Add an ability to send Sentry reports for developers by @drew2a in #6886
- Remove
await
statements fromwith db_session
blocks by @drew2a in #7170 - Fix terminated by timeout exception by @drew2a in #6848
- #6854 timeouts in tests by @drew2a in #6855
- Override
windows-latest
pytest timeout by @drew2a in #6862 - Set asyncio_mode=auto by @drew2a in #6866
- Add tests for the Transfer class by @drew2a in #6888
- Fix random frozen ProcessChecker tests by @drew2a in #6954
- Fix
speed_test_e2e.py
by @drew2a in #7092 - Remove spam from pytest logs by @drew2a in #7110
- #7118 by removing
caplog
from async functionstest_gui_process_watcher.py
by @drew2a in #7119 - Increase
EvaSelectRequest
timeout fortest_remote_select_channel_contents_happy_eyeballs
by @drew2a in #7121 - Divide
pytest
into two categories: for a draft PR and for a ready PR by @drew2a in #7123 - Add macOS and windows builds as PR checks by @drew2a in #7129
- Remove unnecessary
async
statements by @drew2a in #7139 - #7132 timeouts in Windows GUI tests by @drew2a in #7141
- Call
app.shutdown()
for rest_api fixture by @drew2a in #7144 - Update "io" and "pytest" dependencies by @drew2a in #7145
- Fix unstability in test_default_sorting_with_fts by @kozlovsky in #7152
- Change
loop
fixture by @drew2a in #7127 - Fix #7140 Remove mocks of stdout and stderr by @drew2a in #7156
- Refactoring of the
test_drop_silent_peer
by @drew2a in #7163 - Change await event logic for the
test_remote_select_torrents
function by @drew2a in #7171 - Replace the
loop
fixture with theevent_loop
fixture. by @drew2a in #7168 - Extract environment variables into
shared.env
by @drew2a in #7185 - Add
pytest-sentry
for pytest runs to collect statistics about flaky test by @drew2a in #7186 - #7192 Transfer tests by @drew2a in #7227
- #7190 Add unload for Tunnel Community by @drew2a in #7191
- #7228 Add session.cleanup() by @drew2a in #7229
- Fix Ubuntu GUI tests tests by @drew2a in #7255
- Downgrade
pyqtgraph
version by @drew2a in #7265 - Fix unstable test_tribler_process_mark_finished by @kozlovsky in #7325
- Update pytest by @drew2a in #7326
- Modify the pytest output to include the execution duration for all tests by @drew2a in #7482
- Fix GUI Test non-zero exit code by @xoriole in #7501
- Fix calling
await app.shutdown()
in REST API tests by @kozlovsky in #7502 - Fix the
get_torrent_health
endpoint in GUI tests by @kozlovsky in #7505 - Use TestError instead of AssertionError in test to avoid confusion by @kozlovsky in #7503
- Fix print issue on core manager repeated test by @xoriole in #7511
- Disable logging in the faker module for pytest. by @drew2a in #7348
- Disable logging in tests for
faker.factory
andPyQT5.uic
by @drew2a in #7384 - Fix test check core API port timeout by @kozlovsky in #7420
- Add
tribler_stopped
tag to the Sentry by @drew2a in #7365 - Sentry: add the field
additional_information
by @drew2a in #7394 - Add an option to cease the collection of breadcrumbs by @drew2a in #7426
- Increase the size of log files from 100 kilobytes to 1 megabyte, and the number of log backups from 1 to 2 by @kozlovsky in #7455
- Pin pip version for the macOS build by @drew2a in #7375
- Remove events and requests from Sentry report by @drew2a in #7376
Thank You for Your Support
We sincerely appreciate your continued support and feedback, which help us make Tribler better with every release. Your engagement drives our mission to create a powerful, decentralized platform that respects users' privacy and freedom. We encourage you to download and try the latest version, and as always, please share your thoughts and suggestions with us. Together, we can make Tribler the ultimate peer-to-peer experience. Happy sharing!
Full Changelog: v7.12.1...v7.13.0