Nasty little twitter client
Python CSS
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


bleeter - Nasty little twitter client


bleeter is a nasty little client for twitter, currently very much in a Works For Me state. It isn't intended to be used by others, but perhaps others will find it useful.

All it does is fetch your friends timeline and display notification popups for new tweets. If your system's notification daemon supports adding actions [1] to the popups then you'll be able to make a number of choices by clicking the buttons on the popup.

[1]Most common notification daemons support actions, including xfce4-notifyd and Galago's notification-daemon.


bleeter requires Python v2.6 or above. bleeter's mandatory dependencies outside of the standard library are the blessings, configobj, notify-python, pygtk and tweepy packages.

If you wish to have the process title reflect the current state of bleeter, then you will need setproctitle.

No significant effort has been put in to making bleeter work with Python 3, as few of the dependencies are ported yet.


The first time you run bleeter it will open an authentication link in your default web browser and prompt you for the twitter provided PIN. Should you wish, or need to generate a new authentication token, you can use the --get-token option.

It is possible to include tweets from users you are not directly following by adding them to the configuration file, which should be placed in ${XDG_CONFIG_HOME:-~/.config}/bleeter/config.ini. Its format should be:

stealth = NotThatInteresting,Boring

Where the stealth value should be a comma separated list of twitter usernames or numeric identifiers. This feature can be used to keep track of users for a short time without having to follow and then unfollow, for example when you're at a conference and want to follow the conference news items.

There is an ignore option that allows you to specify a list of keywords you wish to use as ignore filters for tweets you receive. Keywords can be normal words, @user usernames, #tag hashtags or any other word type. By default, tweets containing #nowplaying are ignored.

If you notification daemon supports it you can click on the popup to open the tweet in your browser of choice. The browser is opened using xdg-open from xdg-utils. It should use your default browser under KDE or gnome, or whatever you've configured in the BROWSER environment variable elsewhere.


I'd like to thank the following people who have contributed to bleeter.

Bug reports

  • Leal Hétu
  • Leon Bird
  • Matt Leighy
  • Rachel Holmes
  • Roy Jackson


  • Greg Lovell
  • Paul Murray

If I've forgotten to include your name I wholeheartedly apologise. Just drop me an email and I'll update the list!


Patches are most welcome, but I'd appreciate it if you could follow the guidelines below to make it easier to integrate your changes. These are guidelines however, and as such can be broken if the need arises or you just want to convince me that your style is better.

  • PEP 8, the style guide, should be followed where possible.
  • While support for Python versions prior to v2.6 may be added in the future if such a need were to arise, you are encouraged to use v2.6 features now.
  • All new classes, methods and functions should be accompanied by new doctest examples and reStructuredText formatted descriptions.
  • Tests must not span network boundaries, use of a mocking framework is acceptable.
  • doctest tests in modules are only for unit testing in general, and should not rely on any modules that aren't in Python's standard library.
  • Functional tests should be in the doc directory in reStructuredText formatted files, with actual tests in doctest blocks. Functional tests can depend on external modules, but those modules must be Open Source.

New examples for the doc directory are as appreciated as code changes.


If you find any problems, bugs or just have a question about this package either file an issue or drop me a mail.

If you've found a problem please attempt to include a minimal testcase so I can reproduce the problem, or even better a patch!