Convert Figma logo to code with AI

transmission logotransmission

Official Transmission BitTorrent client repository

12,996
1,257
12,996
872

Top Related Projects

1,612

Deluge BitTorrent client - Git mirror, PRs only

qBittorrent BitTorrent client

an efficient feature complete C++ bittorrent implementation

⚡️ Streaming torrent client for the web

[Unofficial] qBittorrent Enhanced, based on qBittorrent

37,431

aria2 is a lightweight multi-protocol & multi-source, cross platform download utility operated in command-line. It supports HTTP/HTTPS, FTP, SFTP, BitTorrent and Metalink.

Quick Overview

Transmission is a fast, easy, and free BitTorrent client. It is a lightweight, cross-platform, and open-source application that allows users to download and share files using the BitTorrent protocol.

Pros

  • Cross-platform: Transmission is available for multiple operating systems, including Windows, macOS, and Linux, making it accessible to a wide range of users.
  • Lightweight: The application has a small footprint and doesn't consume a lot of system resources, making it suitable for older or less powerful devices.
  • Open-source: Transmission is an open-source project, which means the code is freely available and can be inspected, modified, and contributed to by the community.
  • User-friendly: Transmission has a clean and intuitive user interface, making it easy for both novice and experienced users to navigate and use.

Cons

  • Limited features: Compared to some other BitTorrent clients, Transmission may lack certain advanced features or customization options that some users might desire.
  • Potential legal concerns: The use of BitTorrent technology can raise legal concerns in some jurisdictions, as it is often associated with the distribution of copyrighted material.
  • Dependency on third-party services: Transmission relies on the availability and reliability of the BitTorrent network, which can be affected by external factors beyond the control of the Transmission project.
  • Security concerns: As with any software that interacts with the internet, there are potential security risks that users should be aware of and take appropriate measures to mitigate.

Getting Started

To get started with Transmission, follow these steps:

  1. Download the appropriate version of Transmission for your operating system from the official website: https://transmissionbt.com/download/
  2. Install the Transmission application on your computer.
  3. Launch the Transmission application.
  4. To add a new torrent, click the "+" button in the toolbar and select "Open" to browse for the torrent file on your local system.
  5. Once the torrent is added, Transmission will automatically start downloading the files.
  6. You can monitor the download progress, adjust the bandwidth settings, and manage your downloads through the Transmission user interface.
  7. When the download is complete, you can choose to continue seeding the torrent to help others in the network.

For more detailed information and advanced configuration options, please refer to the Transmission documentation: https://transmissionbt.com/documentation/

Competitor Comparisons

1,612

Deluge BitTorrent client - Git mirror, PRs only

Pros of Deluge

  • More extensive plugin system, allowing for greater customization
  • Cross-platform support with native clients for Windows, macOS, and Linux
  • Supports both thin and full clients, enabling remote management

Cons of Deluge

  • Generally slower performance, especially with large numbers of torrents
  • Less intuitive user interface, steeper learning curve for new users
  • Less frequent updates and potentially slower bug fixes

Code Comparison

Deluge (Python):

class Core(component.Component):
    def __init__(self, config):
        component.Component.__init__(self, "Core")
        self.config = config

Transmission (C):

struct tr_session* tr_sessionInit(const char* configDir, bool messageQueueingEnabled)
{
    struct tr_session* session = tr_new0(struct tr_session, 1);
    session->configDir = tr_strdup(configDir);
    return session;
}

Both projects use different programming languages, with Deluge primarily using Python and Transmission using C. This affects performance, development speed, and ecosystem compatibility. Transmission's C-based core generally offers better performance, while Deluge's Python codebase allows for easier plugin development and customization.

qBittorrent BitTorrent client

Pros of qBittorrent

  • More feature-rich with advanced options like sequential downloading and torrent creation
  • Cross-platform GUI with a more modern interface
  • Supports plugins and extensions for added functionality

Cons of qBittorrent

  • Larger resource footprint, potentially slower on low-end devices
  • More complex interface, which may be overwhelming for casual users
  • Less suitable for headless or server environments compared to Transmission

Code Comparison

qBittorrent (C++):

void TorrentHandle::setSequentialDownload(bool b)
{
    if (b != isSequentialDownload()) {
        m_nativeHandle.set_sequential_download(b);
        m_session->handleTorrentSequentialDownloadChanged(this);
    }
}

Transmission (C):

void tr_torrentSetSequentialDownload(tr_torrent* tor, bool do_sequential)
{
    assert(tr_isTorrent(tor));

    if (tor->sequentialDownload != do_sequential) {
        tor->sequentialDownload = do_sequential;
        tr_torrentSetDirty(tor);
    }
}

Both implementations handle setting sequential download mode, but qBittorrent's approach is more object-oriented and includes session management, while Transmission's is more straightforward and C-style.

an efficient feature complete C++ bittorrent implementation

Pros of libtorrent

  • More flexible and customizable as a library, allowing integration into various applications
  • Supports a wider range of BitTorrent protocol extensions and features
  • Generally offers better performance and efficiency for high-volume torrent operations

Cons of libtorrent

  • Requires more development effort to create a full-featured client
  • Less user-friendly for end-users who want a ready-to-use application
  • May have a steeper learning curve for developers new to BitTorrent protocols

Code Comparison

libtorrent (C++):

#include <libtorrent/session.hpp>
#include <libtorrent/add_torrent_params.hpp>
#include <libtorrent/torrent_handle.hpp>

lt::session ses;
lt::add_torrent_params p;
p.save_path = "./";
p.ti = std::make_shared<lt::torrent_info>("test.torrent");
lt::torrent_handle h = ses.add_torrent(p);

Transmission (C):

#include <transmission.h>

tr_session* session = tr_sessionInit("config-dir", true, NULL);
tr_ctor* ctor = tr_ctorNew(session);
tr_ctorSetMetainfoFromFile(ctor, "test.torrent");
tr_torrent* tor = tr_torrentNew(ctor, NULL);
tr_ctorFree(ctor);

Both examples demonstrate basic torrent addition, but libtorrent's approach is more object-oriented and offers finer control over the process.

⚡️ Streaming torrent client for the web

Pros of WebTorrent

  • Browser-based: Runs directly in web browsers without additional software
  • JavaScript implementation: Easier integration with web applications
  • Supports WebRTC: Enables peer-to-peer connections in browsers

Cons of WebTorrent

  • Limited platform support: Primarily focused on web browsers
  • Smaller user base: Less widespread adoption compared to Transmission
  • Performance: May not match native client performance for large downloads

Code Comparison

WebTorrent (JavaScript):

const WebTorrent = require('webtorrent')
const client = new WebTorrent()

client.add(torrentId, function (torrent) {
  torrent.files.forEach(function (file) {
    file.appendTo('body')
  })
})

Transmission (C):

tr_ctor * ctor = tr_ctorNew(my_session);
tr_ctorSetMetainfoFromFile(ctor, torrent_file);
tr_torrent * tor = tr_torrentNew(ctor, &error);
tr_ctorFree(ctor);

Summary

WebTorrent offers a modern, web-centric approach to torrenting, making it ideal for browser-based applications and easy integration with web services. However, it may lack the robustness and widespread adoption of Transmission, which is a more traditional, native torrent client with broader platform support and potentially better performance for large-scale downloads.

[Unofficial] qBittorrent Enhanced, based on qBittorrent

Pros of qBittorrent-Enhanced-Edition

  • Enhanced features like IP filtering, tracker editing, and advanced torrent management
  • More customizable user interface with additional themes and layouts
  • Better support for private trackers and specialized torrent communities

Cons of qBittorrent-Enhanced-Edition

  • May have a steeper learning curve due to additional features and options
  • Potentially higher resource usage compared to Transmission's lightweight design
  • Less frequent updates and smaller development community

Code Comparison

qBittorrent-Enhanced-Edition (C++):

void TorrentHandle::setFilePriority(int index, DownloadPriority priority)
{
    if (!hasMetadata()) return;
    if ((index < 0) || (index >= fileCount())) return;

    m_nativeHandle.file_priority(lt::file_index_t {index}, static_cast<lt::download_priority_t>(priority));
}

Transmission (C):

void tr_torrentSetFilePriorities(tr_torrent* tor, tr_file_index_t const* files, tr_file_index_t fileCount, tr_priority_t priority)
{
    tr_torrentLock(tor);

    for (tr_file_index_t i = 0; i < fileCount; ++i)
    {
        tr_file_index_t const file = files[i];
        tor->files[file].priority = priority;
    }

    tr_torrentUnlock(tor);
}

Both projects use different programming languages and approaches to file priority setting, reflecting their distinct architectures and design philosophies.

37,431

aria2 is a lightweight multi-protocol & multi-source, cross platform download utility operated in command-line. It supports HTTP/HTTPS, FTP, SFTP, BitTorrent and Metalink.

Pros of aria2

  • Supports a wider range of protocols (HTTP/HTTPS, FTP, SFTP, BitTorrent, and Metalink)
  • Offers more advanced features like multi-connection downloads and segmented downloading
  • Highly customizable with extensive command-line options

Cons of aria2

  • Less user-friendly interface, primarily command-line based
  • Steeper learning curve for beginners
  • Lacks built-in torrent search functionality

Code Comparison

aria2:

void DefaultBtMessageDispatcher::addMessageToQueue(
    std::unique_ptr<BtMessage> msg,
    bool isPriority)
{
  queue_.push_front(std::move(msg));
}

Transmission:

static void tr_peerMgrAddIncoming(tr_peerMgr* manager,
                                  tr_address const* addr,
                                  tr_port port,
                                  struct peer_atom** atom)
{
    assert(tr_isAddress(addr));
}

Both projects use C/C++ for core functionality, but aria2 tends to use more modern C++ features, while Transmission leans towards C-style code. aria2's codebase is generally more complex, reflecting its broader feature set and flexibility. Transmission's code is often more straightforward, aligning with its focus on simplicity and ease of use.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

About

Transmission is a fast, easy, and free BitTorrent client. It comes in several flavors:

  • A native macOS GUI application
  • GTK+ and Qt GUI applications for Linux, BSD, etc.
  • A Qt-based Windows-compatible GUI application
  • A headless daemon for servers and routers
  • A web UI for remote controlling any of the above

Visit https://transmissionbt.com/ for more information.

Documentation

Transmission's documentation is currently out-of-date, but the team has recently begun a new project to update it and is looking for volunteers. If you're interested, please feel free to submit pull requests!

Command line interface notes

Transmission is fully supported in transmission-remote, the preferred cli client.

Three standalone tools to examine, create, and edit .torrent files exist: transmission-show, transmission-create, and transmission-edit, respectively.

Prior to development of transmission-remote, the standalone client transmission-cli was created. Limited to a single torrent at a time, transmission-cli is deprecated and exists primarily to support older hardware dependent upon it. In almost all instances, transmission-remote should be used instead.

Different distributions may choose to package any or all of these tools in one or more separate packages.

Building

Transmission has an Xcode project file (Transmission.xcodeproj) for building in Xcode.

For a more detailed description, and dependencies, visit How to Build Transmission in docs

Building a Transmission release from the command line

$ tar xf transmission-4.0.6.tar.xz
$ cd transmission-4.0.6
# Use -DCMAKE_BUILD_TYPE=RelWithDebInfo to build optimized binary with debug information. (preferred)
# Use -DCMAKE_BUILD_TYPE=Release to build full optimized binary.
$ cmake -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo
$ cd build
$ cmake --build .
$ sudo cmake --install .

Building Transmission from the nightly builds

Download a tarball from https://build.transmissionbt.com/job/trunk-linux/ and follow the steps from the previous section.

If you're new to building programs from source code, this is typically easier than building from Git.

Building Transmission from Git (first time)

$ git clone --recurse-submodules https://github.com/transmission/transmission Transmission
$ cd Transmission
# Use -DCMAKE_BUILD_TYPE=RelWithDebInfo to build optimized binary with debug information. (preferred)
# Use -DCMAKE_BUILD_TYPE=Release to build full optimized binary.
$ cmake -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo
$ cd build
$ cmake --build .
$ sudo cmake --install .

Building Transmission from Git (updating)

$ cd Transmission/build
$ cmake --build . -t clean
$ git submodule foreach --recursive git clean -xfd
$ git pull --rebase --prune
$ git submodule update --init --recursive
$ cmake --build .
$ sudo cmake --install .

Contributing

Code Style

You would want to setup your editor to make use of the .clang-format file located in the root of this repository and the eslint/prettier rules in web/package.json.

If for some reason you are unwilling or unable to do so, there is a shell script which you can use: ./code_style.sh

Translations

See language translations.

Sponsors

[MacStadium] macOS CI builds are running on a M1 Mac Mini provided by MacStadium
[SignPath] Free code signing on Windows provided by SignPath.io, certificate by SignPath Foundation