The goal of this document is to aid in the separation of transmission from two layers into three.


This text should probably be revised then placed in libtransmissionapp/README.txt

This should achieve the following three layers in transmission:

  • libtransmission
    • This will handle the core functionality of bittorrent. downloading torrents / networking etc
  • libtransmissionapp
    • All the non-bittorrent api specific functions. For example: Moving completed files, queuing, scheduling, groups, filters
  • Platform-specific front-end
    • This will contain anything platform specific, like the cocoa gui, or the GTK+ gui, etc

The addition of the middle layer should achieve a nicer code base, to provide a better entry for new developers, as well as ease the development of specific sections. developers will no longer have to deal with extraneous methods and code, when they're doing something like tweaking the downloading algorithm.

In addition to the developer aid, this should result in a more level feature set across the different platforms on which transmission resides, as new features would be implemented in the middle layer, then simply interfaced at the front-end, instead of implemented at the front-end in the first place. In turn, support for the application will become easier, as all interfaces will have the same feature set. (no worry about mistaking something not in one front-end)

In conclusion, separating Transmission from two to three layers should help both from a developer's point of view, and an end-user's.


In order to properly manage this enormous task, a multitude of tickets must be created:

  • Each ticket will be assigned the component "libtransmissionapp"
  • Summary should contain which feature is to be moved into libtransmissionapp


  • Move rpc/clutch/web to libtransmissionapp
  • Move tr-getopt to libtransmissionapp
  • Move tr_sessionLoad() and tr_sessionSave() to libtransmissionapp
Last modified 12 years ago Last modified on Dec 14, 2008, 7:24:54 AM