
Research
NPM targeted by malware campaign mimicking familiar library names
Socket uncovered npm malware campaign mimicking popular Node.js libraries and packages from other ecosystems; packages steal data and execute remote code.
R\ idiculously U\ ncomplicated m\ acOS P\ ython S\ tatusbar apps.
.. image:: https://raw.github.com/jaredks/rumps/master/examples/rumps_example.png
.. code-block:: python
import rumps
class AwesomeStatusBarApp(rumps.App):
@rumps.clicked("Preferences")
def prefs(self, _):
rumps.alert("jk! no preferences available!")
@rumps.clicked("Silly button")
def onoff(self, sender):
sender.state = not sender.state
@rumps.clicked("Say hi")
def sayhi(self, _):
rumps.notification("Awesome title", "amazing subtitle", "hi!!1")
if __name__ == "__main__":
AwesomeStatusBarApp("Awesome App").run()
How fun!?
rumps
can greatly shorten the code required to generate a working app. No PyObjC
underscore syntax required!
rumps
is for any console-based program that would benefit from a simple configuration toolbar or launch menu.
Good for:
Not good for:
Mac OS X 10.6 was shipped with Python 2.6 as the default version and PyObjC has been included in the default Python
since Mac OS X 10.5. If you're using Mac OS X 10.6+ and the default Python that came with it, then rumps
should be
good to go!
For creating standalone apps, just make sure to include rumps
in the packages
list. Most simple statusbar-based
apps are just "background" apps (no icon in the dock; inability to tab to the application) so it is likely that you
would want to set 'LSUIElement'
to True
. A basic setup.py
would look like,
.. code-block:: python
from setuptools import setup
APP = ['example_class.py']
DATA_FILES = []
OPTIONS = {
'argv_emulation': True,
'plist': {
'LSUIElement': True,
},
'packages': ['rumps'],
}
setup(
app=APP,
data_files=DATA_FILES,
options={'py2app': OPTIONS},
setup_requires=['py2app'],
)
With this you can then create a standalone,
.. code-block:: bash
python setup.py py2app
Using pip,
.. code-block:: bash
pip install rumps
Or from source,
.. code-block:: bash
python setup.py install
Both of which will require sudo
if installing in a system-wide location.
There are issues with using virtualenv
because of the way the Python
executable is copied. Although rumps
attempts to apply a fix (hack) during
the install process, it is not suggested to use virtualenv
.
To ensure proper functionality, either use venv
(packaged with Python 3) or
create a standalone app using py2app
.
.. code-block:: bash
python3 -m venv env
Documentation is available at http://rumps.readthedocs.org
"Modified BSD License". See LICENSE for details. Copyright Jared Suttles, 2020.
20twenty20 - eohomegrownapps <https://github.com/eohomegrownapps/20twenty20/>
_
42-CanITakeCoffee - avallete <https://github.com/avallete/42-CanITakeCoffee/>
_
air-quality-app - grtfou <https://github.com/grtfou/air-quality-app/>
_
Airplane - C-Codes <https://github.com/C-Codes/Airplane/>
_
allbar - raphaelhuefner <https://github.com/raphaelhuefner/allbar/>
_
allofthelights - kenkeiter <https://github.com/kenkeiter/allofthelights/>
_
attendee-tool-mlh - Bucknalla <https://github.com/Bucknalla/attendee-tool-mlh/>
_
Auroratain - Matt-McConway <https://github.com/Matt-McConway/Auroratain/>
_
AutoSSP - viktyz <https://github.com/viktyz/AutoSSP/>
_
AutoVPN - shadyabhi <https://github.com/shadyabhi/AutoVPN/>
_
BackgroundsForReddit - karlaugsten <https://github.com/karlaugsten/BackgroundsForReddit/>
_
bink - e40 <https://github.com/e40/bink/>
_
bitracker - JZChen <https://github.com/JZChen/bitracker/>
_
BluetoothEvent - lostman-github <https://github.com/lostman-github/BluetoothEvent/>
_
break-timer - jjmojojjmojo <https://github.com/jjmojojjmojo/break-timer/>
_
breaker - amloewi <https://github.com/amloewi/breaker/>
_
bundle-checker - jeffgodwyll <https://github.com/jeffgodwyll/bundle-checker/>
_
c1t1 - e9t <https://github.com/e9t/c1t1/>
_
CamAlert - MrBananaPants <https://github.com/MrBananaPants/CamAlert/>
_
camsketch - pdubroy <https://github.com/pdubroy/camsketch/>
_
casita - david-kuehn <https://github.com/david-kuehn/casita/>
_
ChargeMon - RhetTbull <https://github.com/RhetTbull/ChargeMon/>
_
ComicStreamer - beville <https://github.com/beville/ComicStreamer/>
_
commitwatch - chrisfosterelli <https://github.com/chrisfosterelli/commitwatch/>
_
ComMute - cwverhey <https://github.com/cwverhey/ComMute/>
_
computer-time - rbrich <https://github.com/rbrich/computer-time/>
_
crypto-ticker-macOS - mqulateen <https://github.com/mqulateen/crypto-ticker-macOS/>
_
cryptocoin-quotes - Sayan98 <https://github.com/Sayan98/cryptocoin-quotes/>
_
cuco - jjuanda <https://github.com/jjuanda/cuco/>
_
currency-converter - ahmedelgohary <https://github.com/ahmedelgohary/currency-converter/>
_
dns.app - damln <https://github.com/damln/dns.app/>
_
Dokky - rogierkn <https://github.com/rogierkn/Dokky/>
_
dolar_bitcoin - celis <https://github.com/celis/dolar_bitcoin/>
_
duplicati - duplicati <https://github.com/duplicati/duplicati/>
_
dysonMacOS - fhenwood <https://github.com/fhenwood/dysonMacOS>
_
earth - nickrobson <https://github.com/nickrobson/earth/>
_
ForceNapClone - hroftgit <https://github.com/hroftgit/ForceNapClone/>
_
freelan-bar - privacee <https://github.com/privacee/freelan-bar/>
_
g-assistant-mac - agucova <https://github.com/agucova/g-assistant-mac/>
_
gapa - ozlerhakan <https://github.com/ozlerhakan/gapa/>
_
GitSyncApp - jachin <https://github.com/jachin/GitSyncApp/>
_
Gumpy - RobGraham <https://github.com/RobGraham/Gumpy/>
_
Habitus - kmundnic <https://github.com/kmundnic/Habitus/>
_
HalfCaff - dougn <https://github.com/dougn/HalfCaff/>
_
happymac - laffra <https://github.com/laffra/happymac/>
_
harmenubar - vekkt0r <https://github.com/vekkt0r/harmenubar/>
_
hatarake - kfdm-archive <https://github.com/kfdm-archive/hatarake/>
_
HipStatus - jamfit <https://github.com/jamfit/HipStatus/>
_
hp-lorem - jamesrampton <https://github.com/jamesrampton/hp-lorem/>
_
hs100-status-bar - craig-davis <https://github.com/craig-davis/hs100-status-bar/>
_
iBatteryStats - saket13 <https://github.com/saket13/iBatteryStats/>
_
iBrew - Tristan79 <https://github.com/Tristan79/iBrew/>
_
idiot - snare <https://github.com/snare/idiot/>
_
interlocking - jrauch <https://github.com/jrauch/interlocking/>
_
istat - Lingdu0 <https://github.com/Lingdu0/istat/>
_
keynote_snap - sasn0 <https://github.com/sasn0/keynote_snap/>
_
Keypad - jelmer04 <https://github.com/jelmer04/Keypad/>
_
keyringo - tokenizecx <https://github.com/tokenizecx/keyringo/>
_
kizkiz - TkTech <https://github.com/TkTech/kizkiz/>
_
koinex-status-ticker - kirantambe <https://github.com/kirantambe/koinex-status-ticker/>
_
leaguefriend - pandarison <https://github.com/pandarison/leaguefriend/>
_
LifxController - mitchmcdee <https://github.com/mitchmcdee/LifxController/>
_
lil_ip_toolbar - mchlrtkwski <https://github.com/mchlrtkwski/lil_ip_toolbar/>
_
mac-shrew - mejmo <https://github.com/mejmo/mac-shrew/>
_
MacFaceID - vkalia602 <https://github.com/vkalia602/MacFaceID/>
_
majo-v - r4lv <https://github.com/r4lv/majo-v/>
_
MBatteryApp - Elliot-Potts <https://github.com/Elliot-Potts/MBatteryApp/>
_
McBing - bagabont <https://github.com/bagabont/McBing/>
_
Memcode - aroraenterprise <https://github.com/aroraenterprise/Memcode/>
_
memdam - joshalbrecht <https://github.com/joshalbrecht/memdam/>
_
MenuBarGmail - rcmdnk <https://github.com/rcmdnk/MenuBarGmail/>
_
MenuPing - Julien Bordet <https://github.com/julienbordet/MenuPing/>
_
midi2dmx - davidbistolas <https://github.com/davidbistolas/midi2dmx/>
_
monero-ticker - Cisplatin <https://github.com/Cisplatin/monero-ticker/>
_
MoodLight - kretash <https://github.com/kretash/MoodLight/>
_
MoonTicker - skxu <https://github.com/skxu/MoonTicker/>
_
musicbar - russelg <https://github.com/russelg/musicbar/>
_
narcissist - helmholtz <https://github.com/helmholtz/narcissist/>
_
Noise-Line - Dnncha <https://github.com/Dnncha/Noise-Line/>
_
nowplaying_statusbar - MataiulS <https://github.com/MataiulS/nowplaying>
_
obmenka - vlakin <https://github.com/vlakin/obmenka/>
_
OnAir - henrik242 <https://github.com/henrik242/OnAir/>
_
org-clock-dashboard - srid <https://github.com/srid/org-clock-dashboard/>
_
osx-bamboo-plan-status - spalter <https://github.com/spalter/osx-bamboo-plan-status/>
_
osx-myair - CameronEx <https://github.com/CameronEx/osx-myair/>
_
PennAppsX - yousufmsoliman <https://github.com/yousufmsoliman/PennAppsX/>
_
phd - ChrisCummins <https://github.com/ChrisCummins/phd/>
_
pokemon-go-status - pboardman <https://github.com/pboardman/pokemon-go-status/>
_
polly - interrogator <https://github.com/interrogator/polly/>
_
pompy - camilopayan <https://github.com/camilopayan/pompy/>
_
project_screen_to_lifx - emiraga <https://github.com/emiraga/project_screen_to_lifx/>
_
PSPEWC-mac - jacquesCedric <https://github.com/jacquesCedric/PSPEWC-mac/>
_
py-Timey - asakasinsky <https://github.com/asakasinsky/py-Timey/>
_
pymodoro - volflow <https://github.com/volflow/pymodoro/>
_
pySplash - Egregors <https://github.com/Egregors/pySplash/>
_
quick-grayscale - shubhamjain <https://github.com/shubhamjain/quick-grayscale/>
_
quiet - hiroshi <https://github.com/hiroshi/quiet/>
_
Radio-Crowd - EliMendelson <https://github.com/EliMendelson/Radio-Crowd/>
_
RadioBar - wass3r <https://github.com/wass3r/RadioBar/>
_
RadioBar (fork) - mdbraber <https://github.com/mdbraber/radiobar/>
_
rescuetime_statusbar - MauriceZ <https://github.com/MauriceZ/rescuetime_statusbar/>
_
rideindegochecker - josepvalls <https://github.com/josepvalls/rideindegochecker/>
_
RitsWifi - fang2hou <https://github.com/fang2hou/RitsWifi/>
_
safety-bar - pyupio <https://github.com/pyupio/safety-bar/>
_
SAT-Vocab-Quizzer - Legoben <https://github.com/Legoben/SAT-Vocab-Quizzer/>
_
sb-translate - leandroltavares <https://github.com/leandroltavares/sb-translate>
_
sharfoo - furqan-shakoor <https://github.com/furqan-shakoor/sharfoo/>
_
ShortyURLShortener - Naktrem <https://github.com/Naktrem/ShortyURLShortener/>
_
shotput - amussey <https://github.com/amussey/shotput/>
_
SingMenuData - ponyfleisch <https://github.com/ponyfleisch/SingMenuData/>
_
slack-status-bar - ericwb <https://github.com/ericwb/slack-status-bar/>
_
slackify - nikodraca <https://github.com/nikodraca/slackify/>
_
Snapgrid - VladUsatii <https://github.com/VladUsatii/snapgrid/>
_
snippets - quillford <https://github.com/quillford/snippets/>
_
sonostus - sarkkine <https://github.com/sarkkine/sonostus/>
_
Spaceapi-Desktop - UrLab <https://github.com/UrLab/Spaceapi-Desktop/>
_
SpaceSwitcher - SankaitLaroiya <https://github.com/SankaitLaroiya/SpaceSwitcher/>
_
SpotifyLyrics - yask123 <https://github.com/yask123/SpotifyLyrics/>
_
steemticker-osx - ZachC16 <https://github.com/ZachC16/steemticker-osx/>
_
Timebar - devonkong <https://github.com/devonkong/timebar>
_
Timebox - visini <https://github.com/visini/timebox/>
_
Telkom-ADSL-Data-Usage - parautenbach <https://github.com/parautenbach/Telkom-ADSL-Data-Usage/>
_
Telton - Yywww <https://github.com/Yywww/Telton/>
_
Textinator - RhetTbull <https://github.com/RhetTbull/textinator/>
_
these-days - hahayes <https://github.com/hahayes/these-days/>
_
time-tracking - willsgrigg <https://github.com/willsgrigg/time-tracking/>
_
timerbar - uberalex <https://github.com/uberalex/timerbar/>
_
tracker - jtxx000 <https://github.com/jtxx000/tracker/>
_
TrojanA - chrisxiao <https://github.com/chrisxiao/TrojanA/>
_
umma - mankoff <https://github.com/mankoff/umma/>
_
upbrew - stchris <https://github.com/stchris/upbrew/>
_
uptimeIndicator - paulaborde <https://github.com/paulaborde/uptimeIndicator/>
_
urstatus - kysely <https://github.com/kysely/urstatus/>
_
uStatus - kdungs <https://github.com/kdungs/uStatus/>
_
VagrantBar - kingsdigitallab <https://github.com/kingsdigitallab/VagrantBar/>
_
voiceplay - tb0hdan <https://github.com/tb0hdan/voiceplay/>
_
volsbb - akigugale <https://github.com/akigugale/volsbb/>
_
Volumio_bar - volderette <https://github.com/volderette/Volumio_bar/>
_
votingpowerbar - therealwolf42 <https://github.com/therealwolf42/votingpowerbar/>
_
VPN Handler - tsarenkotxt <https://github.com/tsarenkotxt/vpn-handler/>
_
WakeTime App - dleicht <https://github.com/dleicht/waketime/>
_
WallpDesk - L3rchal <https://github.com/L3rchal/WallpDesk/>
_
webcronic - josselinauguste <https://github.com/josselinauguste/webcronic/>
_
Whale - amka <https://github.com/amka/Whale/>
_
WhyFi - OzTamir <https://github.com/OzTamir/WhyFi/>
_
WordTime - Demonstrandum <https://github.com/Demonstrandum/WordTime/>
_
work_time_percent_applet - Benhgift <https://github.com/Benhgift/work_time_percent_applet/>
_
WorkWise - 8ern4ard <https://github.com/8ern4ard/WorkWise/>
_
xCodea - lowne <https://github.com/lowne/xCodea/>
_
yaca - drproteus <https://github.com/drproteus/yaca/>
_
Zero - beejhuff <https://github.com/beejhuff/Zero/>
_
Submit a pull request to add your own! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
If you've submitted a pull request and need it reviewed, please request a review from @daredoes <https://github.com/daredoes/>
_ (contributing in free time, so please be patient)
other
and icon_path
options to alert
secure
option to Window
action_button
, other_button
, and reply_button
options to notification
slider
Info.plist
file at executable directory with CFBundleIdentifier
on installation. If that failed, provide more information at runtime in the exception about how to fix the problem.clicked
decoratorstimers
that produced a list of weak references rather than objectskey
for clicked
debug
for App.run
Improvements and compatibility fixes
RuntimeError
quit_application
function to allow for both custom quit buttons and running clean up code before quittingAPI changes
None
as a parameter to use or restore a default settingTypeError
before less obvious exceptions occur in PyObjCcancel
parameter will change the button text to that stringWindow.add_button
now requires a stringname
parameter must be a string and title
must be either a string or None
quit_button
parameter allowing custom text or disabling completely by passing None
None
as callback
parameter to MenuItem.set_callback
method will disable the callback function and grey out the menu itemdimensions
parameter to MenuItem.set_icon
will no longer silently errorupdate
method of Menu works like old App.menu parsing - consumes various nested Python containers and creates menusseparator
global for marking menu separators (in addition to None in context of a menu)separator
or Noneclear
method for MenuItem + other irrelevant methods inherited from OrderedDict raise NotImplementedErrorexample_menu.py
to examples serving also as a test for new MenuItem changesdel
MenuItems of submenus and it will be reflected in the actual menuadd
method for more convenient addition of MenuItems to a MenuItem's submenuFAQs
Ridiculously Uncomplicated MacOS Python Statusbar apps.
We found that rumps demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Socket uncovered npm malware campaign mimicking popular Node.js libraries and packages from other ecosystems; packages steal data and execute remote code.
Research
Socket's research uncovers three dangerous Go modules that contain obfuscated disk-wiping malware, threatening complete data loss.
Research
Socket uncovers malicious packages on PyPI using Gmail's SMTP protocol for command and control (C2) to exfiltrate data and execute commands.