
Security News
Deno 2.6 + Socket: Supply Chain Defense In Your CLI
Deno 2.6 introduces deno audit with a new --socket flag that plugs directly into Socket to bring supply chain security checks into the Deno CLI.
rumps
Advanced tools
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 alertsecure option to Windowaction_button, other_button, and reply_button options to notificationsliderInfo.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 clickeddebug for App.runImprovements and compatibility fixes
RuntimeErrorquit_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 Nonequit_button parameter allowing custom text or disabling completely by passing NoneNone 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.

Security News
Deno 2.6 introduces deno audit with a new --socket flag that plugs directly into Socket to bring supply chain security checks into the Deno CLI.

Security News
New DoS and source code exposure bugs in React Server Components and Next.js: what’s affected and how to update safely.

Security News
Socket CEO Feross Aboukhadijeh joins Software Engineering Daily to discuss modern software supply chain attacks and rising AI-driven security risks.