{
  "version": 1,
  "apps": [
    {
      "id": "community/apple-music-winamp",
      "source": "community",
      "slug": "apple-music-winamp",
      "name": "Apple Music Winamp",
      "author": "Nachenko",
      "description": "macOS Apple Music controls with song, artist, progress, a time counter, decorative Winamp-style visualizers, and animated lightning credits.",
      "tags": [
        "music",
        "animation",
        "info",
        "effect"
      ],
      "preview": "/previews/community-apple-music-winamp-04caf2eb3881fc99.gif",
      "repo": null,
      "stillPreview": "/previews/community-apple-music-winamp-04caf2eb3881fc99.png",
      "socialImage": "/social/community/apple-music-winamp.jpg",
      "animated": true,
      "authorSlug": "nachenko-ffc00b",
      "revision": "04caf2eb3881fc99",
      "contentHash": "04caf2eb3881fc99387f00b967e1ef04ec3765967f0f6e5b88f4bf6349a77ee2",
      "status": "active",
      "createdAt": "2026-10-15T07:36:45-06:00",
      "updatedAt": "2026-10-15T07:36:45-06:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/apple-music-winamp",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/apple-music-winamp/",
      "downloadUrl": "/downloads/community/apple-music-winamp/04caf2eb3881fc99/apple-music-winamp.zip",
      "zipSha256": "acc070ccd111555aa0ed246e0dfbf46d03d2e4e0cb415e0c43d68af2cb870f2c",
      "zipBytes": 1297299,
      "files": [
        {
          "path": "LICENSE",
          "bytes": 1065,
          "sha256": "c0bd6853bc53b7dc0d7efa8f2382677519b3dbaa3bdb8a9d015417d14680a8c2",
          "url": "/downloads/community/apple-music-winamp/04caf2eb3881fc99/files/LICENSE.bin"
        },
        {
          "path": "README.md",
          "bytes": 2233,
          "sha256": "b9800299b95975450fa7f75be4d2c40cc257b0049f43dccbda1ed977b0fe6f0e",
          "url": "/downloads/community/apple-music-winamp/04caf2eb3881fc99/files/README.md.bin"
        },
        {
          "path": "app.py",
          "bytes": 23763,
          "sha256": "1e47359ac27f0ea2a948a0895864921e82c56c09a2d63f86194073806cbd4191",
          "url": "/downloads/community/apple-music-winamp/04caf2eb3881fc99/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 271,
          "sha256": "b2fbe67372cae5d63902c65aaabf89bb2308c905c99491e58faa64759381b2ac",
          "url": "/downloads/community/apple-music-winamp/04caf2eb3881fc99/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 1393482,
          "sha256": "3ae4796041e117f64776c3997e7323074d175b6d92eeb30fe32b63234655b3da",
          "url": "/downloads/community/apple-music-winamp/04caf2eb3881fc99/files/preview.gif.bin"
        },
        {
          "path": "test_app.py",
          "bytes": 4675,
          "sha256": "2c832760743b5ad08d8bc7d1235e429f825ce462c4e96db5851cbcf3f6011eb7",
          "url": "/downloads/community/apple-music-winamp/04caf2eb3881fc99/files/test_app.py.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/apple-music-winamp/04caf2eb3881fc99/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": "README.md",
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/audio-visualizer",
      "source": "community",
      "slug": "audio-visualizer",
      "name": "Audio Visualizer",
      "author": "maxswinkels",
      "description": "Live microphone spectrum on the LEDs: five render styles (bars, mirror, segments, dots, wave) and colour themes.",
      "tags": [
        "audio",
        "effect",
        "music"
      ],
      "preview": "/previews/community-audio-visualizer-dcb79ed8edd615e9.gif",
      "repo": null,
      "stillPreview": "/previews/community-audio-visualizer-dcb79ed8edd615e9.png",
      "socialImage": "/social/community/audio-visualizer.jpg",
      "animated": true,
      "authorSlug": "maxswinkels-6a7386",
      "revision": "dcb79ed8edd615e9",
      "contentHash": "dcb79ed8edd615e9ddd4f5a351ddf9abc7ef8224b412d9d7473ddf8a273cee98",
      "status": "active",
      "createdAt": "2026-07-27T22:40:13+02:00",
      "updatedAt": "2026-08-17T07:39:30+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/audio-visualizer",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/audio-visualizer/",
      "downloadUrl": "/downloads/community/audio-visualizer/dcb79ed8edd615e9/audio-visualizer.zip",
      "zipSha256": "5e6d70ee7f110bbd17e23bf66fde649f5c419f226a242eb42b99020a4702cbc2",
      "zipBytes": 767810,
      "files": [
        {
          "path": "app.py",
          "bytes": 21518,
          "sha256": "918de6e0e12de329fb5133fa3458f629cc305f3734ebb2c4608e19d55a3b522f",
          "url": "/downloads/community/audio-visualizer/dcb79ed8edd615e9/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 231,
          "sha256": "f5a2b7c996032c5c0618dd288a166136ea98bb826786dd8eb94c1852b3579e02",
          "url": "/downloads/community/audio-visualizer/dcb79ed8edd615e9/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 791956,
          "sha256": "3cafe7b08c95c0a0d273004514fe91781300d56d6cd80d6652ac7c833be84125",
          "url": "/downloads/community/audio-visualizer/dcb79ed8edd615e9/files/preview.gif.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/audio-visualizer/dcb79ed8edd615e9/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/bad-apple",
      "source": "community",
      "slug": "bad-apple",
      "name": "Bad Apple",
      "author": "codynhanpham",
      "description": "It has a screen? It can play Bad Apple. And yes, with audio, too!",
      "tags": [
        "animation",
        "meme",
        "music",
        "effect"
      ],
      "preview": "/previews/community-bad-apple-1b1fc68ae537929e.gif",
      "repo": "https://github.com/codynhanpham/BadApple/tree/main/busy-apple",
      "stillPreview": "/previews/community-bad-apple-1b1fc68ae537929e.png",
      "socialImage": "/social/community/bad-apple.jpg",
      "animated": true,
      "authorSlug": "codynhanpham-8d2da2",
      "revision": "1b1fc68ae537929e",
      "contentHash": "1b1fc68ae537929e03c54051029ba7a5e050a32344354bc265dee742451a2dca",
      "status": "active",
      "createdAt": "2026-08-07T01:33:41-05:00",
      "updatedAt": "2026-09-24T08:34:30-05:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/bad-apple",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/bad-apple/",
      "downloadUrl": "/downloads/community/bad-apple/1b1fc68ae537929e/bad-apple.zip",
      "zipSha256": "a77ca9fd994a230d9057b45871fea500bc23cc1c00afae84ba423dd3bd574e50",
      "zipBytes": 1188400,
      "files": [
        {
          "path": "app.py",
          "bytes": 13398,
          "sha256": "d34d1ffae47ca7cf1a2710925b841b4e37c3d92ee496848d1b1cf9f36d437bfb",
          "url": "/downloads/community/bad-apple/1b1fc68ae537929e/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 257,
          "sha256": "21e0d676e86a0e5e491447e364ddc810a480f877969934d452f6335d177d05cf",
          "url": "/downloads/community/bad-apple/1b1fc68ae537929e/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 1210093,
          "sha256": "5b305c8bc512805b93bc9281ae84e7600deeb806489ba87750e5833a250cafc1",
          "url": "/downloads/community/bad-apple/1b1fc68ae537929e/files/preview.gif.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/bad-apple/1b1fc68ae537929e/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/buienradar-alarm",
      "source": "community",
      "slug": "buienradar-alarm",
      "name": "Buienradar Alarm",
      "author": "maxswinkels",
      "description": "Dutch rain alarm that takes the screen only when rain is coming. Shows minutes until rain or until dry, plus a 2-hour Buienradar intensity timeline colored from drizzle to downpour.",
      "tags": [
        "weather",
        "info"
      ],
      "preview": "/previews/community-buienradar-alarm-8cf9e693e764e972.gif",
      "repo": null,
      "stillPreview": "/previews/community-buienradar-alarm-8cf9e693e764e972.png",
      "socialImage": "/social/community/buienradar-alarm.jpg",
      "animated": true,
      "authorSlug": "maxswinkels-6a7386",
      "revision": "8cf9e693e764e972",
      "contentHash": "8cf9e693e764e972f6f5785c312431d47a2b2ca3822f2b6a628594288ebd651e",
      "status": "active",
      "createdAt": "2026-07-27T07:26:53+02:00",
      "updatedAt": "2026-08-17T07:39:30+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/buienradar-alarm",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/buienradar-alarm/",
      "downloadUrl": "/downloads/community/buienradar-alarm/8cf9e693e764e972/buienradar-alarm.zip",
      "zipSha256": "4125463f9948ec8265bc9354681403d081ab4a9552cdf0f1bb9705bfcbede6a9",
      "zipBytes": 36478,
      "files": [
        {
          "path": "app.py",
          "bytes": 10257,
          "sha256": "45a384657eed3ccd299ba6a626dc2a04c8b0d0c8ac148c82b5dcc910332d587b",
          "url": "/downloads/community/buienradar-alarm/8cf9e693e764e972/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 288,
          "sha256": "fc9325567b3538eaa8711dbfc91333aef141191fe69536db33f65a555d5723b6",
          "url": "/downloads/community/buienradar-alarm/8cf9e693e764e972/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 31918,
          "sha256": "f3655a38bec450def753bc3d97fa6c8ececd6467d6f4804f57d949ba604ee430",
          "url": "/downloads/community/buienradar-alarm/8cf9e693e764e972/files/preview.gif.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/buienradar-alarm/8cf9e693e764e972/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/busy-codex",
      "source": "community",
      "slug": "busy-codex",
      "name": "Busy Codex",
      "author": "wowlocal",
      "description": "Live Codex task status, account limits and weekly progress, with a reasoning effort dial and START-button Fast mode control for Codex Desktop and a native-control CLI fork.",
      "tags": [
        "ai",
        "monitor",
        "info",
        "animation"
      ],
      "preview": "/previews/community-busy-codex-4f90057d292ebbd8.gif",
      "repo": "https://github.com/wowlocal/busy-codex",
      "stillPreview": "/previews/community-busy-codex-4f90057d292ebbd8.png",
      "socialImage": "/social/community/busy-codex.jpg",
      "animated": true,
      "authorSlug": "wowlocal-acb5e8",
      "revision": "4f90057d292ebbd8",
      "contentHash": "4f90057d292ebbd8020da32c459adc921a6f5c17d43a6530711c9c865869405a",
      "status": "active",
      "createdAt": "2026-09-07T09:17:25+03:00",
      "updatedAt": "2026-09-14T10:02:18+03:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/busy-codex",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/busy-codex/",
      "downloadUrl": "/downloads/community/busy-codex/4f90057d292ebbd8/busy-codex.zip",
      "zipSha256": "326021a62fef457c7c3b25dd4ad26c3234e0d41e1a304097260fc4a7997003ea",
      "zipBytes": 2909407,
      "files": [
        {
          "path": "LICENSE",
          "bytes": 1070,
          "sha256": "41e9217958abde104076431eb88a0d406d26b9384f75cede965382e90d0a6d73",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/LICENSE.bin"
        },
        {
          "path": "README.md",
          "bytes": 4479,
          "sha256": "9c5500357a9d21de0714db438ede69fba33ee132b28e38f2137b15b49b4ee3ac",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/README.md.bin"
        },
        {
          "path": "SOURCE.json",
          "bytes": 7107,
          "sha256": "ec7b9b5ba301fd8e02e4210b1dd5cd4303ee8a6330c993945e11c42d9a9144a2",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/SOURCE.json.bin"
        },
        {
          "path": "adapters/codex_status.py",
          "bytes": 12107,
          "sha256": "e33f16e1384f37eef6f3b045ddcdc99350da18dfbc8e1a45a0b6da8aa9e25275",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/adapters/codex_status.py.bin"
        },
        {
          "path": "ai_status.py",
          "bytes": 27601,
          "sha256": "a1d355d545d3670cb2ad78608abb641f43a5e0dc8ef3d4b755aea8f8c1917469",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/ai_status.py.bin"
        },
        {
          "path": "app.py",
          "bytes": 12418,
          "sha256": "74cb8afdb1954239d27c7be9193d275b7e2eeeeb9d28b83117ade479ffe1f312",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/app.py.bin"
        },
        {
          "path": "assets/astra.anim",
          "bytes": 37353,
          "sha256": "f8e036b59e2ce59e9cb16124a1dc4849b911b7210947e0407127ed7f4202b818",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/astra.anim.bin"
        },
        {
          "path": "assets/done.anim",
          "bytes": 13524,
          "sha256": "aa9ac7ea9eb4ab490c7c8c9c72383d47ba2995429f5e1c361b3cbf8a8466b8fa",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/done.anim.bin"
        },
        {
          "path": "assets/effort_clear.anim",
          "bytes": 111,
          "sha256": "72408efe98b924fc4497678eda1835f2239d6ffed019be916361c2d997244c3a",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_clear.anim.bin"
        },
        {
          "path": "assets/effort_v4_high_down_change.anim",
          "bytes": 184576,
          "sha256": "cc14c1065aa90533cf702d4bfc418fbe18642902d839d6f758554dc4ccf15c12",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_high_down_change.anim.bin"
        },
        {
          "path": "assets/effort_v4_high_down_in.anim",
          "bytes": 180399,
          "sha256": "635d8e78f7eaf4d7f2a07dccb2f71365a08b29a94a9c34d96521e01dd299a114",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_high_down_in.anim.bin"
        },
        {
          "path": "assets/effort_v4_high_up_change.anim",
          "bytes": 184567,
          "sha256": "0145dff48713f3fe50e4f29d92d8a198b08bde2bbf6ff9943e74b656225074c3",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_high_up_change.anim.bin"
        },
        {
          "path": "assets/effort_v4_high_up_in.anim",
          "bytes": 180385,
          "sha256": "42d7c1e0571b0ed259a1472cf06d0fa3cc948da1079767699caf2773451a3aa4",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_high_up_in.anim.bin"
        },
        {
          "path": "assets/effort_v4_low_down_change.anim",
          "bytes": 169042,
          "sha256": "e455fac32d35f594990d346781aada814b3a1de97887ac741d6b2aac2cb64b3f",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_low_down_change.anim.bin"
        },
        {
          "path": "assets/effort_v4_low_down_in.anim",
          "bytes": 165285,
          "sha256": "4567b1d3ce3cb648db61f9f3b85a2d1fd3e4806e2c52672c884bc26552786d55",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_low_down_in.anim.bin"
        },
        {
          "path": "assets/effort_v4_low_up_change.anim",
          "bytes": 169153,
          "sha256": "4e685ef3e51f202ddd978019906bcca8e78a4a4cd882891e4efcac55df40cb3d",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_low_up_change.anim.bin"
        },
        {
          "path": "assets/effort_v4_low_up_in.anim",
          "bytes": 165366,
          "sha256": "a57cae863649fb0904cb4f8bb0e55ba7ad4b42b868bb435da5a30645b3f5cd03",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_low_up_in.anim.bin"
        },
        {
          "path": "assets/effort_v4_max_down_change.anim",
          "bytes": 191418,
          "sha256": "46f5e15a6e31b63086bbbe6aa90508fef563ce14c1a6780f373dad23f52c9bc3",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_max_down_change.anim.bin"
        },
        {
          "path": "assets/effort_v4_max_down_in.anim",
          "bytes": 187053,
          "sha256": "36c15cfee4e41074b8d16c65b825b5599966c8d31551ac5949489d4ce380dcde",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_max_down_in.anim.bin"
        },
        {
          "path": "assets/effort_v4_max_up_change.anim",
          "bytes": 191409,
          "sha256": "1fe19f3ff180b36e9e9b9ae8ebb5d0d651ea95a3543e1e4d2d5240fb8aba966e",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_max_up_change.anim.bin"
        },
        {
          "path": "assets/effort_v4_max_up_in.anim",
          "bytes": 187042,
          "sha256": "f3323e604eb354e568348a2848647f6ebfda639224735b0c90bd13c48d103a3f",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_max_up_in.anim.bin"
        },
        {
          "path": "assets/effort_v4_medium_down_change.anim",
          "bytes": 178762,
          "sha256": "84db12a5cdff6d686424c5476c2da61729b145974c5a4470ded0f4b803333b54",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_medium_down_change.anim.bin"
        },
        {
          "path": "assets/effort_v4_medium_down_in.anim",
          "bytes": 174802,
          "sha256": "282a2139870ed780f226a0188702fe5a007b8fc9181267ab95e158970d840770",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_medium_down_in.anim.bin"
        },
        {
          "path": "assets/effort_v4_medium_up_change.anim",
          "bytes": 178753,
          "sha256": "11e70e09680703e125f866c2caaa206420eb079315d2c94b74a46db12df2de74",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_medium_up_change.anim.bin"
        },
        {
          "path": "assets/effort_v4_medium_up_in.anim",
          "bytes": 174762,
          "sha256": "afcc2f93942a037cf32a0a5bf99940c50b4518b757e9822d0befec1caf8a924e",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_medium_up_in.anim.bin"
        },
        {
          "path": "assets/effort_v4_minimal_down_change.anim",
          "bytes": 165818,
          "sha256": "fab080e4df2ca48358f65b3312780f8a8b1318e1a443c54a5f984cf3ca7dc885",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_minimal_down_change.anim.bin"
        },
        {
          "path": "assets/effort_v4_minimal_down_in.anim",
          "bytes": 162256,
          "sha256": "1435d484ad23ddcdd1e2800af5ad53930aad9b75a0c99b009481ebea185a78af",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_minimal_down_in.anim.bin"
        },
        {
          "path": "assets/effort_v4_minimal_up_change.anim",
          "bytes": 165804,
          "sha256": "c27c01c6ea0edb9274f59f4542f479069d011b6806f7304fed5b04b302eca2fd",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_minimal_up_change.anim.bin"
        },
        {
          "path": "assets/effort_v4_minimal_up_in.anim",
          "bytes": 162200,
          "sha256": "297b19e475e6f07e9f435e1eec5a3d4d44851795ec412d98855ef7355aace053",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_minimal_up_in.anim.bin"
        },
        {
          "path": "assets/effort_v4_none_down_change.anim",
          "bytes": 153592,
          "sha256": "8ba4d9b0f97e776879c96d056855d202665bcfa0d5ae0e2f22ddd0a47eb819c0",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_none_down_change.anim.bin"
        },
        {
          "path": "assets/effort_v4_none_down_in.anim",
          "bytes": 150112,
          "sha256": "e1d61bc6342eee677502554a25e298c294c7aee2d6255ab9cf3ea948ef98d5c4",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_none_down_in.anim.bin"
        },
        {
          "path": "assets/effort_v4_none_up_change.anim",
          "bytes": 153453,
          "sha256": "68045b14e12056726bc01f4c2d8f95324889be23a26636dce408b0bc1bfe1b78",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_none_up_change.anim.bin"
        },
        {
          "path": "assets/effort_v4_none_up_in.anim",
          "bytes": 149950,
          "sha256": "f84d24a70d240d9738f81f12bf369f23e6a7ff273bf7fb397329cf11cdab3ded",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_none_up_in.anim.bin"
        },
        {
          "path": "assets/effort_v4_ultra_down_change.anim",
          "bytes": 190864,
          "sha256": "7909ade81ec0cefe6ec2c62d98e034dbbcd999139d38087148ca3a107ccac34b",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_ultra_down_change.anim.bin"
        },
        {
          "path": "assets/effort_v4_ultra_down_in.anim",
          "bytes": 186567,
          "sha256": "0a6bb9ddb1c5f8dd69c0922b6e7bf65b6d43d9bb3b02199ad137c70bde70b7f7",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_ultra_down_in.anim.bin"
        },
        {
          "path": "assets/effort_v4_ultra_up_change.anim",
          "bytes": 190853,
          "sha256": "96346b11ab01139a7bdf4cf2967f6361d0e73de772272c27e1ab3d6894c9f74d",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_ultra_up_change.anim.bin"
        },
        {
          "path": "assets/effort_v4_ultra_up_in.anim",
          "bytes": 186556,
          "sha256": "43ebdd7e5218fe7ee3e440cf272827fa177f2aa6fd21a5d8ef2705eee4478765",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_ultra_up_in.anim.bin"
        },
        {
          "path": "assets/effort_v4_xhigh_down_change.anim",
          "bytes": 189253,
          "sha256": "37d51e8521538867ac399bd1308d1bfafc52b18c62a084a4b924e60eb0818dc0",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_xhigh_down_change.anim.bin"
        },
        {
          "path": "assets/effort_v4_xhigh_down_in.anim",
          "bytes": 184983,
          "sha256": "0b26e19a917e781c01b55e7d5d627c0a72564e763f8f18a36cf8e83a43659ddd",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_xhigh_down_in.anim.bin"
        },
        {
          "path": "assets/effort_v4_xhigh_up_change.anim",
          "bytes": 189285,
          "sha256": "c2650346ec9a6c283d4572452a326d4ba7b7b50e13d63dd6d278224c08a8247b",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_xhigh_up_change.anim.bin"
        },
        {
          "path": "assets/effort_v4_xhigh_up_in.anim",
          "bytes": 185007,
          "sha256": "e2469dd25f52d62f693f03bd1b75c922ee63fd9211774f81e8e70f2751c10610",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/effort_v4_xhigh_up_in.anim.bin"
        },
        {
          "path": "assets/error.anim",
          "bytes": 459,
          "sha256": "00d0d4f58804b0bedfdf2187ad82dbdb0f82207cae7e7b80447788a05a6774b7",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/error.anim.bin"
        },
        {
          "path": "assets/fast_v1_off_change.anim",
          "bytes": 128087,
          "sha256": "f21a3e387724860428e39958ee9efd15bfa457d66d0eb5201542554ee459ae26",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/fast_v1_off_change.anim.bin"
        },
        {
          "path": "assets/fast_v1_off_in.anim",
          "bytes": 125415,
          "sha256": "6d3450b7a52f147b2db36ba66895277c2926f013b622dd830abe4f1f1b934cc8",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/fast_v1_off_in.anim.bin"
        },
        {
          "path": "assets/fast_v1_on_change.anim",
          "bytes": 131886,
          "sha256": "773e974890d0db159c6df814651eb0a9966a54fd8c062bce2e740b0f943871fe",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/fast_v1_on_change.anim.bin"
        },
        {
          "path": "assets/fast_v1_on_in.anim",
          "bytes": 129000,
          "sha256": "c114d4a25cccfd775e72e7a6d8affa8214d2c4537d700e0db5edbbf524161189",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/fast_v1_on_in.anim.bin"
        },
        {
          "path": "assets/idle.anim",
          "bytes": 258,
          "sha256": "527c0888e9fd8a4912bdbeaa9c9038a8365adfa295db85bde6bb15f56bb942c6",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/idle.anim.bin"
        },
        {
          "path": "assets/think.anim",
          "bytes": 38303,
          "sha256": "a880d4d2483d98e3f800541fd410e12538523b269ebeea3c1afcf64be3317c97",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/think.anim.bin"
        },
        {
          "path": "assets/wait.anim",
          "bytes": 4479,
          "sha256": "434b3d31376de37f533a34718bdcdd9e8afd0aea80ec52331ad5e13f55b72aab",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/wait.anim.bin"
        },
        {
          "path": "assets/work.anim",
          "bytes": 62217,
          "sha256": "d9c9023f71dd81886b76bd62cfd617351ca49ec54ab879946c42bc67b5a026bc",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/work.anim.bin"
        },
        {
          "path": "assets/work_fast.anim",
          "bytes": 29817,
          "sha256": "50d37abb3ac55219e1e9dd400790277917817f9ba08693e2587931a293dd141d",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/assets/work_fast.anim.bin"
        },
        {
          "path": "busybar_http.py",
          "bytes": 4186,
          "sha256": "b36766dc37c6dfbef010290c679d137ef36a5cfdff08675ff32d8e2f7ac3e362",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/busybar_http.py.bin"
        },
        {
          "path": "busybar_input.py",
          "bytes": 15338,
          "sha256": "7ea6154d6f6b6d728e22fd3d33a2304aa513599aa8f5169644343c3956cd4c0d",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/busybar_input.py.bin"
        },
        {
          "path": "codex_cli_client.py",
          "bytes": 3808,
          "sha256": "2a500fb474652c1b8d06517c2dbb072fe33bb08c8fe251ba64e1402a76c8ae76",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/codex_cli_client.py.bin"
        },
        {
          "path": "codex_cli_native.py",
          "bytes": 4195,
          "sha256": "e2b24c28152d301967c14be2a48e4fa57d9ab7f7844631b4a1893c4a20c7edde",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/codex_cli_native.py.bin"
        },
        {
          "path": "codex_effort.py",
          "bytes": 21615,
          "sha256": "10a51775184f7b9594dd273156e254301290de6443f49db5bab60944c9e8b0dc",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/codex_effort.py.bin"
        },
        {
          "path": "codex_fast.py",
          "bytes": 1904,
          "sha256": "05edd7af9d34499abda32e424b8338268c341fa8d7fb80ebfad68315827bcb39",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/codex_fast.py.bin"
        },
        {
          "path": "codex_focus.py",
          "bytes": 6984,
          "sha256": "7dc54bfbe66a2b592e7cea1ca9f926e81a4a5294e24dbefd0cb13cfb2f17c0bf",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/codex_focus.py.bin"
        },
        {
          "path": "codex_target.py",
          "bytes": 8859,
          "sha256": "6f5cb4e86058cff29379867b4986f3200a88b5eb315846a0ce434d4adfad800a",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/codex_target.py.bin"
        },
        {
          "path": "codex_usage.py",
          "bytes": 7787,
          "sha256": "91f821bf535d76dcbff6180beb3cad334042b352ea9f91b7534827780a813321",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/codex_usage.py.bin"
        },
        {
          "path": "daemon.py",
          "bytes": 79256,
          "sha256": "10ca999adee5d8568434b4ee6bfc408cc6f31376e19ec3f9cf0c6e5eb9e8541b",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/daemon.py.bin"
        },
        {
          "path": "display_scene.py",
          "bytes": 1873,
          "sha256": "00a6c6356159366d7dd07d24e845e22b05e11226b8dc0337dccf79fe1410e812",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/display_scene.py.bin"
        },
        {
          "path": "effort_animation.py",
          "bytes": 4839,
          "sha256": "40b8fc16bedb86be1f5a5cb28d9100f4169ccd59818fff534cad1c9c57459d79",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/effort_animation.py.bin"
        },
        {
          "path": "fast_animation.py",
          "bytes": 2951,
          "sha256": "a3caabe3619a392a9880d02c10a2dc2653e28ae0895718631b961a516cbee125",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/fast_animation.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 336,
          "sha256": "cbf5b60260f22a5c9af8c64e58337b9a08cb5597ab0db605246ebca0a49d2063",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/manifest.yaml.bin"
        },
        {
          "path": "pixel_fonts.py",
          "bytes": 2565,
          "sha256": "b95a90b0ab824088448e41b319e3f579dbbd31e97c4ff242b8957f3bf03a7bb2",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/pixel_fonts.py.bin"
        },
        {
          "path": "pixel_ui.py",
          "bytes": 5903,
          "sha256": "3b7c7e992aba40f4ed5841f622e88d5726390805476bf272e1514966099614ea",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/pixel_ui.py.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 999844,
          "sha256": "45d86a0d240bdb66e056ff1bd56b23da11b3fcac62bcec262ab00e190f0c4707",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/preview.gif.bin"
        },
        {
          "path": "report.py",
          "bytes": 6827,
          "sha256": "2b579fa39940a9cdf567101f7d45fbc6ccded2a409d84095ebe4f5dd776f0729",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/report.py.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/busy-codex/4f90057d292ebbd8/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": "README.md",
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/busy-defaults",
      "source": "community",
      "slug": "busy-defaults",
      "name": "Busy Defaults",
      "author": "LuisWollenschneider",
      "description": "Activates a built-in BUSY Bar mode and releases it on exit. Themes: busy, keep_out, dnd, meeting, on_call, lunch, back_soon, booked, flow, chill_time, on_air, coding, low_social_battery.",
      "tags": [
        "utility",
        "info"
      ],
      "preview": "/previews/community-busy-defaults-02a3dfc313a13c1b.gif",
      "repo": null,
      "stillPreview": "/previews/community-busy-defaults-02a3dfc313a13c1b.png",
      "socialImage": "/social/community/busy-defaults.jpg",
      "animated": true,
      "authorSlug": "luiswollenschneider-e8251f",
      "revision": "02a3dfc313a13c1b",
      "contentHash": "02a3dfc313a13c1bdc268d33f960c3850f546e3dbae20e4d779da5190e0a55f0",
      "status": "active",
      "createdAt": "2026-08-11T10:14:57+02:00",
      "updatedAt": "2026-08-17T07:39:30+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/busy-defaults",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/busy-defaults/",
      "downloadUrl": "/downloads/community/busy-defaults/02a3dfc313a13c1b/busy-defaults.zip",
      "zipSha256": "2e6dd76895705a337a1d0285a900ddd7cee1f3bbbd0467b02f332ade5b2b25ca",
      "zipBytes": 442555,
      "files": [
        {
          "path": "app.py",
          "bytes": 7495,
          "sha256": "0d7d74f97616bfeef73812feb68532dcebccba0107064aee0ad686eb9f363067",
          "url": "/downloads/community/busy-defaults/02a3dfc313a13c1b/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 304,
          "sha256": "563da0414922080fd07ed936efdb583f289abab2f9e22325e34df8f3b20c09df",
          "url": "/downloads/community/busy-defaults/02a3dfc313a13c1b/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 440432,
          "sha256": "3df0b4b2f339d73830522017d9a15c5c9319ffa847280bb2a17a1e1797a377f2",
          "url": "/downloads/community/busy-defaults/02a3dfc313a13c1b/files/preview.gif.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/busy-defaults/02a3dfc313a13c1b/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/busybar-codex",
      "source": "community",
      "slug": "busybar-codex",
      "name": "BusyBar Codex",
      "author": "kylewhirl",
      "description": "Tactile Codex controller with live task status, actions, navigation, reasoning control, and push-to-talk dictation.",
      "tags": [
        "monitor",
        "productivity",
        "ai",
        "controller"
      ],
      "preview": "/previews/community-busybar-codex-d2341bb10d073f2a.png",
      "repo": "https://github.com/kylewhirl/busybar-codex",
      "stillPreview": "/previews/community-busybar-codex-d2341bb10d073f2a.png",
      "socialImage": "/social/community/busybar-codex.jpg",
      "animated": false,
      "authorSlug": "kylewhirl-2e8dcc",
      "revision": "d2341bb10d073f2a",
      "contentHash": "d2341bb10d073f2a0ab2163793a9c4ea645818b9228abf1ee646ac8bb8b0b205",
      "status": "active",
      "createdAt": "2026-08-03T04:36:09-07:00",
      "updatedAt": "2026-08-17T07:39:30+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/busybar-codex",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/busybar-codex/",
      "downloadUrl": "/downloads/community/busybar-codex/d2341bb10d073f2a/busybar-codex.zip",
      "zipSha256": "805df166b0a3948f6bbeca52997b3d5da14e3b82713992676ee6821e00d21451",
      "zipBytes": 13973,
      "files": [
        {
          "path": "app.py",
          "bytes": 2365,
          "sha256": "6ca48bd6cbbc10e91798fa0412f9fbeff2552d8824ab83b777b78cb766217f85",
          "url": "/downloads/community/busybar-codex/d2341bb10d073f2a/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 296,
          "sha256": "7d9375455956a99ae82107eb25f81d77b543963e48ad23bc82187a338f0d9fdb",
          "url": "/downloads/community/busybar-codex/d2341bb10d073f2a/files/manifest.yaml.bin"
        },
        {
          "path": "preview.png",
          "bytes": 11583,
          "sha256": "42a326aa3ea4d164d5f3ecd535fbd1db8f7d59935f513fc8aceff82bb911e72f",
          "url": "/downloads/community/busybar-codex/d2341bb10d073f2a/files/preview.png.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/busybar-codex/d2341bb10d073f2a/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/busybar-custom-scroll",
      "source": "community",
      "slug": "busybar-custom-scroll",
      "name": "BusyBar-Custom-Scroll",
      "author": "daninsc",
      "description": "Continuous scrolling ticker with network-synced date/time, weather, moon phase, NOAA tides, and season-aware sports scores. City, tide station, and teams are configurable via config.json.",
      "tags": [
        "info",
        "clock",
        "weather",
        "monitor"
      ],
      "preview": "/previews/community-busybar-custom-scroll-771e8287e2ff7a74.gif",
      "repo": "https://github.com/daninsc/BusyBar-Custom-Scroll",
      "stillPreview": "/previews/community-busybar-custom-scroll-771e8287e2ff7a74.png",
      "socialImage": "/social/community/busybar-custom-scroll.jpg",
      "animated": true,
      "authorSlug": "daninsc-0eb1da",
      "revision": "771e8287e2ff7a74",
      "contentHash": "771e8287e2ff7a74d3030b1beb0388d4116e5e481e96d85c0763b91040075bbd",
      "status": "active",
      "createdAt": "2026-07-25T20:39:28+02:00",
      "updatedAt": "2026-08-17T07:39:30+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/busybar-custom-scroll",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/busybar-custom-scroll/",
      "downloadUrl": "/downloads/community/busybar-custom-scroll/771e8287e2ff7a74/busybar-custom-scroll.zip",
      "zipSha256": "b962109761668fe1db3c1483bbf15f237822d9c737919a67b0cdf5cc831b43c4",
      "zipBytes": 276666,
      "files": [
        {
          "path": "app.py",
          "bytes": 43513,
          "sha256": "fb202e7e6bb81fea06d5ccd0e1af0aa44f3db6500947ea5184258c6b5ad5ad7f",
          "url": "/downloads/community/busybar-custom-scroll/771e8287e2ff7a74/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 372,
          "sha256": "5fdf924604ca9a826bf3d43eaee1b1fa385961ba34035062c73720bdac411750",
          "url": "/downloads/community/busybar-custom-scroll/771e8287e2ff7a74/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 262629,
          "sha256": "8ae8fb115079a1fce00e2938f7a4ad852a4d781e3dc89cf1991a81b54d4e095e",
          "url": "/downloads/community/busybar-custom-scroll/771e8287e2ff7a74/files/preview.gif.bin"
        },
        {
          "path": "requirements.txt",
          "bytes": 33,
          "sha256": "d798d688c9f3153f8ae9703119118e25b1dafcf0c0b19774eb91b22c59af1b56",
          "url": "/downloads/community/busybar-custom-scroll/771e8287e2ff7a74/files/requirements.txt.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/busybar-custom-scroll/771e8287e2ff7a74/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "requests\npillow\nwebsocket-client",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/busybar-pinball",
      "source": "community",
      "slug": "busybar-pinball",
      "name": "BusyBar Pinball",
      "author": "robynhub",
      "description": "A colorful 90s-style pinball DMD attract mode with scores, jackpots, bonus multipliers, racing animations, Extra Ball, and Insert Coin sequences.",
      "tags": [
        "pinball",
        "retro",
        "animation",
        "ambient"
      ],
      "preview": "/previews/community-busybar-pinball-44ab68dfe3490f6f.gif",
      "repo": null,
      "stillPreview": "/previews/community-busybar-pinball-44ab68dfe3490f6f.png",
      "socialImage": "/social/community/busybar-pinball.jpg",
      "animated": true,
      "authorSlug": "robynhub-e86f81",
      "revision": "44ab68dfe3490f6f",
      "contentHash": "44ab68dfe3490f6f2e4f927ab21cd5268c8d14e2b76353f1bb6de0126917128e",
      "status": "active",
      "createdAt": "2026-08-13T15:54:12+02:00",
      "updatedAt": "2026-08-18T14:56:34+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/busybar-pinball",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/busybar-pinball/",
      "downloadUrl": "/downloads/community/busybar-pinball/44ab68dfe3490f6f/busybar-pinball.zip",
      "zipSha256": "b733985851aa10ceb1198551659a1dcb336373cef1c1fec3b05a4e19144466d9",
      "zipBytes": 1219588,
      "files": [
        {
          "path": "app.py",
          "bytes": 26763,
          "sha256": "18e8d729db8a95f0cbe52bc9ead6bf8978b09acc3e966e2025381ffb396ab5df",
          "url": "/downloads/community/busybar-pinball/44ab68dfe3490f6f/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 275,
          "sha256": "5725454b5d91f4d33d5af16dc1e2d4d5b10487072bd8eade470422b704b0ee45",
          "url": "/downloads/community/busybar-pinball/44ab68dfe3490f6f/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 1316645,
          "sha256": "02dea77e410f303b81e182a2938b980fcdaeeffe5bd32b1ffe0ad7a90c42aef9",
          "url": "/downloads/community/busybar-pinball/44ab68dfe3490f6f/files/preview.gif.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/busybar-pinball/44ab68dfe3490f6f/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/character",
      "source": "community",
      "slug": "character",
      "name": "Character",
      "author": "antoninsmetana",
      "description": "A parametric face that reacts to your machine - CPU load, live Claude Code turns, battery, keyboard idle - and to the bar's buttons and wheel. It blinks, glances around, sweats, and takes a punch.",
      "tags": [
        "effect",
        "animation"
      ],
      "preview": "/previews/community-character-09d89baa387e1bd4.gif",
      "repo": null,
      "stillPreview": "/previews/community-character-09d89baa387e1bd4.png",
      "socialImage": "/social/community/character.jpg",
      "animated": true,
      "authorSlug": "antoninsmetana-fb544b",
      "revision": "09d89baa387e1bd4",
      "contentHash": "09d89baa387e1bd4e2cbb94c494dc63281e0b5395b0789b2f5ec109f6ab4d48d",
      "status": "active",
      "createdAt": "2026-08-12T15:12:59+02:00",
      "updatedAt": "2026-08-17T07:39:30+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/character",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/character/",
      "downloadUrl": "/downloads/community/character/09d89baa387e1bd4/character.zip",
      "zipSha256": "89609236ee45c274b767d6424697527181785930d0c314bafb0330ed9a2988e6",
      "zipBytes": 204237,
      "files": [
        {
          "path": "app.py",
          "bytes": 70667,
          "sha256": "41b9413cd3953c4bb035876997c620a3887d32603a18745300933c6c0064bcd9",
          "url": "/downloads/community/character/09d89baa387e1bd4/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 303,
          "sha256": "dd982ff0a41b89f223ad2120b8852870605bc33eecd617a0f90ec530d9d4e5b5",
          "url": "/downloads/community/character/09d89baa387e1bd4/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 181185,
          "sha256": "34819db22d34aa8602ddcb71f1f8dc73eea8dcb2aab25d73efcdc845d91b93cc",
          "url": "/downloads/community/character/09d89baa387e1bd4/files/preview.gif.bin"
        },
        {
          "path": "requirements.txt",
          "bytes": 621,
          "sha256": "dbf846d48fbbc98373ddc53a70656757a3eb13b94eff28c581fc37e5e308a3a0",
          "url": "/downloads/community/character/09d89baa387e1bd4/files/requirements.txt.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/character/09d89baa387e1bd4/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "# Runtime dependency for Character's input layer, and nothing else. The render\n# path, the sensors and the HTTP draw calls are all stdlib-only, so --no-input,\n# --preview, --signals and --simulate-input run without installing this.\n#\n#   python3 -m venv venv && venv/bin/pip install -r requirements.txt\n#\n# The device's input arrives as protobuf over a WebSocket; the standard library\n# speaks neither, and busylib hides both behind plain dicts. Pinned to the same\n# version HomeAssistant/requirements.txt is verified against on Python 3.14.2.\n\nbusylib==1.3.0    # BUSY Bar device client (AsyncBusyBar, stream_status_ws)",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/claude-approve",
      "source": "community",
      "slug": "claude-approve",
      "name": "Claude Approve",
      "author": "maxswinkels",
      "description": "Answer Claude Code prompts from the bar - permissions, plan approval and multiple-choice questions - with the wheel and START button.",
      "tags": [
        "ai",
        "controller",
        "productivity",
        "monitor"
      ],
      "preview": "/previews/community-claude-approve-f6ba7feb107a50e8.png",
      "repo": null,
      "stillPreview": "/previews/community-claude-approve-f6ba7feb107a50e8.png",
      "socialImage": "/social/community/claude-approve.jpg",
      "animated": false,
      "authorSlug": "maxswinkels-6a7386",
      "revision": "f6ba7feb107a50e8",
      "contentHash": "f6ba7feb107a50e861167ded096ba9438a4fe63b6b98181d00624425aab16c8b",
      "status": "active",
      "createdAt": "2026-10-15T15:37:48+02:00",
      "updatedAt": "2026-10-15T15:37:48+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/claude-approve",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/claude-approve/",
      "downloadUrl": "/downloads/community/claude-approve/f6ba7feb107a50e8/claude-approve.zip",
      "zipSha256": "f107afb88fbdc63e8495133c3e01153f7ec8fb345a6d6148b670fac79bdded0f",
      "zipBytes": 23827,
      "files": [
        {
          "path": "app.py",
          "bytes": 41459,
          "sha256": "4189477c5368cb729cf12b583de6b37c3f355317784a9836a1899973e19c9cde",
          "url": "/downloads/community/claude-approve/f6ba7feb107a50e8/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 268,
          "sha256": "3642370b44dcb53412632e57e800a42ce836378d259c0a9c91691f3666431451",
          "url": "/downloads/community/claude-approve/f6ba7feb107a50e8/files/manifest.yaml.bin"
        },
        {
          "path": "preview.png",
          "bytes": 10513,
          "sha256": "a0e1e5623cc2c64b31e7329fd67ded72ce0e73ad1491479f0a048ee9618fb61b",
          "url": "/downloads/community/claude-approve/f6ba7feb107a50e8/files/preview.png.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/claude-approve/f6ba7feb107a50e8/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/claude-limits",
      "source": "community",
      "slug": "claude-limits",
      "name": "Claude Limits",
      "author": "rbhbokka",
      "description": "Live Claude Code usage — 5-hour session and weekly limit bars with time to reset, an animated Clawd mascot, and a session-activity readout.",
      "tags": [
        "monitor",
        "info",
        "ai"
      ],
      "preview": "/previews/community-claude-limits-e5dba543e1324272.gif",
      "repo": "https://github.com/rbhbokka/busybar-limits",
      "stillPreview": "/previews/community-claude-limits-e5dba543e1324272.png",
      "socialImage": "/social/community/claude-limits.jpg",
      "animated": true,
      "authorSlug": "rbhbokka-ff67d5",
      "revision": "e5dba543e1324272",
      "contentHash": "e5dba543e13242720e8090dbb29587f70c950553239861516141253f568d48f2",
      "status": "active",
      "createdAt": "2026-08-04T21:51:47-07:00",
      "updatedAt": "2026-08-17T07:39:30+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/claude-limits",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/claude-limits/",
      "downloadUrl": "/downloads/community/claude-limits/e5dba543e1324272/claude-limits.zip",
      "zipSha256": "a3b3440e9c15740867fd518cb03ea2a0353df5c50de24881dc9b858385aede4b",
      "zipBytes": 81335,
      "files": [
        {
          "path": "app.py",
          "bytes": 44104,
          "sha256": "127eeec627c602d76ff1b1d8c86efbcc7d410b18f7ee63bd37e240892694a480",
          "url": "/downloads/community/claude-limits/e5dba543e1324272/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 298,
          "sha256": "7fd4a05a1c2c6b1e183eebc6f257491a13d23119c58c5cf74381d9121f6dad93",
          "url": "/downloads/community/claude-limits/e5dba543e1324272/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 80007,
          "sha256": "5b2a3f54f18d9757f1d60f6081b02f47b19f4ac359a41c5006c5d949c57ebb50",
          "url": "/downloads/community/claude-limits/e5dba543e1324272/files/preview.gif.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/claude-limits/e5dba543e1324272/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/clock",
      "source": "community",
      "slug": "clock",
      "name": "Clock",
      "author": "maxswinkels",
      "description": "Customizable Clock widget - customizable, big time, refreshed every second.",
      "tags": [
        "clock",
        "time",
        "customizable"
      ],
      "preview": "/previews/community-clock-521e0878e543f09d.gif",
      "repo": null,
      "stillPreview": "/previews/community-clock-521e0878e543f09d.png",
      "socialImage": "/social/community/clock.jpg",
      "animated": true,
      "authorSlug": "maxswinkels-6a7386",
      "revision": "521e0878e543f09d",
      "contentHash": "521e0878e543f09d00d6e303793701d8298672d6d2103901e3757aea425553e8",
      "status": "active",
      "createdAt": "2026-07-23T12:47:29+02:00",
      "updatedAt": "2026-09-24T15:34:50+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/clock",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/clock/",
      "downloadUrl": "/downloads/community/clock/521e0878e543f09d/clock.zip",
      "zipSha256": "1fb1ec47271591f766394767ff2059c79c298f4771ead222a69bb5151f57ff19",
      "zipBytes": 22763,
      "files": [
        {
          "path": "app.py",
          "bytes": 15597,
          "sha256": "80efc6d9f5aab2ab2fd4b409e990115472dc4015863c8811ac95c32e5aa80315",
          "url": "/downloads/community/clock/521e0878e543f09d/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 186,
          "sha256": "a43618d823b60e33252962e617bd9180209512d4bc5a8d76070d57c7227016f9",
          "url": "/downloads/community/clock/521e0878e543f09d/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 16455,
          "sha256": "653ff9d36042ab362832226f615b0d267c709e8ce1e78e5471aa629f7fc3f054",
          "url": "/downloads/community/clock/521e0878e543f09d/files/preview.gif.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/clock/521e0878e543f09d/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 1
    },
    {
      "id": "community/countdown",
      "source": "community",
      "slug": "countdown",
      "name": "Countdown",
      "author": "LuisWollenschneider",
      "description": "Animated countdown to any moment, coarse when far off and mm:ss in the final hour, with amber/red thresholds and a red count-up once it passes.",
      "tags": [
        "clock",
        "countdown",
        "info"
      ],
      "preview": "/previews/community-countdown-deeccee6b6656c7c.gif",
      "repo": null,
      "stillPreview": "/previews/community-countdown-deeccee6b6656c7c.png",
      "socialImage": "/social/community/countdown.jpg",
      "animated": true,
      "authorSlug": "luiswollenschneider-e8251f",
      "revision": "deeccee6b6656c7c",
      "contentHash": "deeccee6b6656c7cc5614decfc0a0f8e825fa0c52f0e1b42bee5721972f89a27",
      "status": "active",
      "createdAt": "2026-08-13T15:50:58+02:00",
      "updatedAt": "2026-08-17T07:39:30+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/countdown",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/countdown/",
      "downloadUrl": "/downloads/community/countdown/deeccee6b6656c7c/countdown.zip",
      "zipSha256": "dd4dce294870be03ca08ee9a04ad6f66b26586d5aa232243bbc2314d385e12b8",
      "zipBytes": 322192,
      "files": [
        {
          "path": "app.py",
          "bytes": 30795,
          "sha256": "a53f0c5ca1c99fa2960c914c71908a0969e1dcd750014efc93571322e6e67227",
          "url": "/downloads/community/countdown/deeccee6b6656c7c/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 263,
          "sha256": "553b4f273e82252e57efe9808d5a5e87d2390892e573a43b8077aa495bd2d4d1",
          "url": "/downloads/community/countdown/deeccee6b6656c7c/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 358989,
          "sha256": "79603c594cfc4436f4be88799397e2521d9dcd0894eaec5b91c0c83dedde7b84",
          "url": "/downloads/community/countdown/deeccee6b6656c7c/files/preview.gif.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/countdown/deeccee6b6656c7c/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/counter",
      "source": "community",
      "slug": "counter",
      "name": "Counter",
      "author": "LuisWollenschneider",
      "description": "A simple counter app with custom formatting and caching. For queue management, or just counting things.",
      "tags": [
        "utility",
        "counter",
        "info"
      ],
      "preview": "/previews/community-counter-8b09a03a986778f5.png",
      "repo": null,
      "stillPreview": "/previews/community-counter-8b09a03a986778f5.png",
      "socialImage": "/social/community/counter.jpg",
      "animated": false,
      "authorSlug": "luiswollenschneider-e8251f",
      "revision": "8b09a03a986778f5",
      "contentHash": "8b09a03a986778f539030f616d3f9b4f2d03678fa9b65b6d05904f49c642ce61",
      "status": "active",
      "createdAt": "2026-08-19T15:51:06+02:00",
      "updatedAt": "2026-08-19T16:55:49+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/counter",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/counter/",
      "downloadUrl": "/downloads/community/counter/8b09a03a986778f5/counter.zip",
      "zipSha256": "dc71c5f7a81a1910958475c26d42b728ec3b9387df0ea08dcad181ec457e5e7c",
      "zipBytes": 17794,
      "files": [
        {
          "path": ".gitignore",
          "bytes": 18,
          "sha256": "a156a65e047ed0e22462b26533e6b06a8f2194b5e75814c9fd69bc59e78d140c",
          "url": "/downloads/community/counter/8b09a03a986778f5/files/.gitignore.bin"
        },
        {
          "path": "app.py",
          "bytes": 34528,
          "sha256": "6e284e51effa360e3564c71cfa03483726abc28d06a3500613cc4d598f89734c",
          "url": "/downloads/community/counter/8b09a03a986778f5/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 221,
          "sha256": "29d20c4ef6b53c78d1d9a7342dd84d4c8deeca14c68f806c26ab84f03d0f90be",
          "url": "/downloads/community/counter/8b09a03a986778f5/files/manifest.yaml.bin"
        },
        {
          "path": "preview.png",
          "bytes": 5754,
          "sha256": "60b29203a5219a1f1fcf74e8e3923d9fad7e5c7cec5e20e2b9a04550aac46c8f",
          "url": "/downloads/community/counter/8b09a03a986778f5/files/preview.png.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/counter/8b09a03a986778f5/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/crypto-ticker",
      "source": "community",
      "slug": "crypto-ticker",
      "name": "Crypto Ticker",
      "author": "itsTylerIRL",
      "description": "Live crypto prices on the LED matrix -- logo, price and 24h change per coin, with a top-button pause and wheel scrubbing. Prices from CoinGecko.",
      "tags": [
        "crypto",
        "finance",
        "info"
      ],
      "preview": "/previews/community-crypto-ticker-09eefd690cb5679e.gif",
      "repo": null,
      "stillPreview": "/previews/community-crypto-ticker-09eefd690cb5679e.png",
      "socialImage": "/social/community/crypto-ticker.jpg",
      "animated": true,
      "authorSlug": "itstylerirl-c39f1e",
      "revision": "09eefd690cb5679e",
      "contentHash": "09eefd690cb5679e3a595dd44ab1f2604fc3a54409cab53c933d8c744f148d8e",
      "status": "active",
      "createdAt": "2026-08-07T02:15:42-05:00",
      "updatedAt": "2026-08-17T07:39:30+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/crypto-ticker",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/crypto-ticker/",
      "downloadUrl": "/downloads/community/crypto-ticker/09eefd690cb5679e/crypto-ticker.zip",
      "zipSha256": "c2ed294587741c52fc97d0ac5fb9684567343eb112c6d4adf99f4b2e5116f615",
      "zipBytes": 41640,
      "files": [
        {
          "path": "app.py",
          "bytes": 17596,
          "sha256": "737b7bbffeaaea166b6069fca45f6e31749ab6a840f6a4889fc2b0f42cae799a",
          "url": "/downloads/community/crypto-ticker/09eefd690cb5679e/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 267,
          "sha256": "d8fb75fee03aaf83f8a568e3bcfbce548a5fdfe58f94a619269ce7e8cc3048a0",
          "url": "/downloads/community/crypto-ticker/09eefd690cb5679e/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 34736,
          "sha256": "79282f99ed948af0b72800323a17fd8f2c9f21cbf9a3ff822b2c03b5d66d9062",
          "url": "/downloads/community/crypto-ticker/09eefd690cb5679e/files/preview.gif.bin"
        },
        {
          "path": "requirements.txt",
          "bytes": 30,
          "sha256": "9ec49fca37c05b29b9dc2b4d48f4f6a5ff172ce43933b5881767e96e2f6c1e04",
          "url": "/downloads/community/crypto-ticker/09eefd690cb5679e/files/requirements.txt.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/crypto-ticker/09eefd690cb5679e/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "busylib>=1.3.0\r\nPillow>=10.0",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/dvd-bounce",
      "source": "community",
      "slug": "dvd-bounce",
      "name": "DVD Bounce",
      "author": "EzraMoussa",
      "description": "The classic bouncing DVD screensaver. A colorful pixel logo ricochets around the bar, changes color at every bounce, and occasionally hits the perfect corner.",
      "tags": [
        "animation",
        "screensaver",
        "retro"
      ],
      "preview": "/previews/community-dvd-bounce-1ac85a63456cde58.gif",
      "repo": null,
      "stillPreview": "/previews/community-dvd-bounce-1ac85a63456cde58.png",
      "socialImage": "/social/community/dvd-bounce.jpg",
      "animated": true,
      "authorSlug": "ezramoussa-b574dc",
      "revision": "1ac85a63456cde58",
      "contentHash": "1ac85a63456cde58314c47aa253ee4e02e442ef667c6eb073dc39d9b495587ae",
      "status": "active",
      "createdAt": "2026-09-14T00:03:48-07:00",
      "updatedAt": "2026-09-14T00:03:48-07:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/dvd-bounce",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/dvd-bounce/",
      "downloadUrl": "/downloads/community/dvd-bounce/1ac85a63456cde58/dvd-bounce.zip",
      "zipSha256": "dcd45cdefd0c7b21176e140b683e67e2992bdf823d825e0a51f637a59ced228a",
      "zipBytes": 365728,
      "files": [
        {
          "path": "app.py",
          "bytes": 9820,
          "sha256": "dd2acce166fb6aee748e885624afb977e93631a18ad6db1ccb2eecd1b8820a66",
          "url": "/downloads/community/dvd-bounce/1ac85a63456cde58/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 277,
          "sha256": "d1a6291e9fbb8b324e7f27b57f78dd56545b27bdcbd8b2b1ab781ef4a1a1aeff",
          "url": "/downloads/community/dvd-bounce/1ac85a63456cde58/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 457089,
          "sha256": "70979d52b08cbbba28df26cfa75258f85dcde689d92f41cd66d685e9ed98c0cb",
          "url": "/downloads/community/dvd-bounce/1ac85a63456cde58/files/preview.gif.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/dvd-bounce/1ac85a63456cde58/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/flightradar",
      "source": "community",
      "slug": "flightradar",
      "name": "Flightradar",
      "author": "maxswinkels",
      "description": "Quiet until a plane flies over, then a split-flap board shows its callsign, aircraft type, route, and live altitude and speed, from live ADS-B data.",
      "tags": [
        "info",
        "monitor"
      ],
      "preview": "/previews/community-flightradar-bdce3f6bc3f33ce9.gif",
      "repo": null,
      "stillPreview": "/previews/community-flightradar-bdce3f6bc3f33ce9.png",
      "socialImage": "/social/community/flightradar.jpg",
      "animated": true,
      "authorSlug": "maxswinkels-6a7386",
      "revision": "bdce3f6bc3f33ce9",
      "contentHash": "bdce3f6bc3f33ce9edf775ca80b6fc203cb2e56ead927f49748908581fd70b51",
      "status": "active",
      "createdAt": "2026-07-30T10:58:21+02:00",
      "updatedAt": "2026-08-17T07:39:30+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/flightradar",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/flightradar/",
      "downloadUrl": "/downloads/community/flightradar/bdce3f6bc3f33ce9/flightradar.zip",
      "zipSha256": "6ebe4c98203ffb3a3762e635cdb8b104c2b5963e34eab9d5263eb13c282e20c8",
      "zipBytes": 65016,
      "files": [
        {
          "path": "app.py",
          "bytes": 43866,
          "sha256": "569364ce9f12dee087f0dbb6bdb54fa9352134bbac65d0697b7f05abfa689b4f",
          "url": "/downloads/community/flightradar/bdce3f6bc3f33ce9/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 250,
          "sha256": "7cf947fbb29b557f85e900ec30b0d05c603c746f1217332049fd26bd6e8a2d44",
          "url": "/downloads/community/flightradar/bdce3f6bc3f33ce9/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 51866,
          "sha256": "6db717da04cd19fd2b4ce19d55ee1174fccfe6259b523fd342ed078f24446a4e",
          "url": "/downloads/community/flightradar/bdce3f6bc3f33ce9/files/preview.gif.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/flightradar/bdce3f6bc3f33ce9/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/frt-ticker",
      "source": "community",
      "slug": "frt-ticker",
      "name": "FRT Ticker",
      "author": "robynhub",
      "description": "Live Internet routing statistics including IPv4/IPv6 prefixes, FRT size, RPKI status, AS-path length, top origin ASes, and IPv6 adoption.",
      "tags": [
        "network",
        "internet",
        "bgp",
        "info"
      ],
      "preview": "/previews/community-frt-ticker-dd66c0389c824469.gif",
      "repo": null,
      "stillPreview": "/previews/community-frt-ticker-dd66c0389c824469.png",
      "socialImage": "/social/community/frt-ticker.jpg",
      "animated": true,
      "authorSlug": "robynhub-e86f81",
      "revision": "dd66c0389c824469",
      "contentHash": "dd66c0389c824469e5459404b0ece862e9a7df822618c796d8d306248398883d",
      "status": "active",
      "createdAt": "2026-09-14T09:03:09+02:00",
      "updatedAt": "2026-09-14T09:03:09+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/frt-ticker",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/frt-ticker/",
      "downloadUrl": "/downloads/community/frt-ticker/dd66c0389c824469/frt-ticker.zip",
      "zipSha256": "56710e4309ba40b8d4fdc13a66e66f278a167169f42cdda72c15f951fc2a0081",
      "zipBytes": 647595,
      "files": [
        {
          "path": ".gitignore",
          "bytes": 23,
          "sha256": "28b0779ba7e8483b0447414822ba7afe5d7b1d73228f81871248975340be7d74",
          "url": "/downloads/community/frt-ticker/dd66c0389c824469/files/.gitignore.bin"
        },
        {
          "path": "app.py",
          "bytes": 35267,
          "sha256": "45b9d04aa03f66ad663c30620b7a5758d350f4e6894ef012691e73a71aa02564",
          "url": "/downloads/community/frt-ticker/dd66c0389c824469/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 256,
          "sha256": "3a80825c582e820eda3e506071f01624331c6deeb2a479c1ed4ff07c2a47cc30",
          "url": "/downloads/community/frt-ticker/dd66c0389c824469/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 1004790,
          "sha256": "a69e27532fb4b8cc4dd9f78096efa9ac176232660a80a68ca2f8a01df4f83cc5",
          "url": "/downloads/community/frt-ticker/dd66c0389c824469/files/preview.gif.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/frt-ticker/dd66c0389c824469/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/gcal-glance",
      "source": "community",
      "slug": "gcal-glance",
      "name": "GCal Glance",
      "author": "Kilo59",
      "description": "Ambient Google Calendar display for BUSY Bar — at-a-glance meeting countdowns, alerts, and live schedule awareness.",
      "tags": [
        "google-calendar",
        "calendar",
        "productivity",
        "info"
      ],
      "preview": "/previews/community-gcal-glance-e652e22c685e1727.gif",
      "repo": null,
      "stillPreview": "/previews/community-gcal-glance-e652e22c685e1727.png",
      "socialImage": "/social/community/gcal-glance.jpg",
      "animated": true,
      "authorSlug": "kilo59-fe18a1",
      "revision": "e652e22c685e1727",
      "contentHash": "e652e22c685e1727e342f2a32a747630d51248d6c6375d17255ad1c58c066931",
      "status": "active",
      "createdAt": "2026-08-18T08:56:22-04:00",
      "updatedAt": "2026-09-07T02:50:55-04:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/gcal-glance",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/gcal-glance/",
      "downloadUrl": "/downloads/community/gcal-glance/e652e22c685e1727/gcal-glance.zip",
      "zipSha256": "048fda0c7c646d800f95faa17f64abddbe1e513d3499de2dc8a1d60ade3d6b30",
      "zipBytes": 474530,
      "files": [
        {
          "path": ".env.example",
          "bytes": 502,
          "sha256": "802b2421e43ffc05e08369f39da49a03dfc8b912faf4cee4f45bc68a95f39a4f",
          "url": "/downloads/community/gcal-glance/e652e22c685e1727/files/.env.example.bin"
        },
        {
          "path": ".gitignore",
          "bytes": 89,
          "sha256": "84be986ef274b1da38913abf6797c136dcaa96750fe37c74ce0d11233251732f",
          "url": "/downloads/community/gcal-glance/e652e22c685e1727/files/.gitignore.bin"
        },
        {
          "path": ".pre-commit-config.yaml",
          "bytes": 280,
          "sha256": "1c8ddccd73d558babde4fd0c13bcae2e42cf8003d33f7e4dc2776bdc230bb89c",
          "url": "/downloads/community/gcal-glance/e652e22c685e1727/files/.pre-commit-config.yaml.bin"
        },
        {
          "path": "README.md",
          "bytes": 16764,
          "sha256": "be94560c5739a11ca0ba198d4a2441117160c6e2fa9defab49b2bf2febfc97cd",
          "url": "/downloads/community/gcal-glance/e652e22c685e1727/files/README.md.bin"
        },
        {
          "path": "app.py",
          "bytes": 103669,
          "sha256": "d55e1ad65ce32fc58a8c1bca33840343c3070c7cf42efb10c4044c169322ebbe",
          "url": "/downloads/community/gcal-glance/e652e22c685e1727/files/app.py.bin"
        },
        {
          "path": "conftest.py",
          "bytes": 406,
          "sha256": "5c8764d3c4d46d47e6c532174d265528d0035c1c35b93fb1c1f7c328c7797731",
          "url": "/downloads/community/gcal-glance/e652e22c685e1727/files/conftest.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 252,
          "sha256": "be281e5571f4d034a2f2412829c25249ae5d63e478af716dbbba495aec2be26d",
          "url": "/downloads/community/gcal-glance/e652e22c685e1727/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 285479,
          "sha256": "1307587d0155b0c9d54b1be97608f86e412aea65b5bccfa7e1d2a1b9e701c924",
          "url": "/downloads/community/gcal-glance/e652e22c685e1727/files/preview.gif.bin"
        },
        {
          "path": "preview.png",
          "bytes": 59735,
          "sha256": "7aa1b441504ac41c15decda34d4337086057e4dff232e445aef3f1660ca3e246",
          "url": "/downloads/community/gcal-glance/e652e22c685e1727/files/preview.png.bin"
        },
        {
          "path": "pyproject.toml",
          "bytes": 792,
          "sha256": "e07d1300963421cb4435f60954a76b982ab85b02712b7930a1745c94593dc0f3",
          "url": "/downloads/community/gcal-glance/e652e22c685e1727/files/pyproject.toml.bin"
        },
        {
          "path": "requirements.txt",
          "bytes": 235,
          "sha256": "9576e60616fbf67eb3e01c539a7761e2e7024f8673824f099aa9a859eb5cea0f",
          "url": "/downloads/community/gcal-glance/e652e22c685e1727/files/requirements.txt.bin"
        },
        {
          "path": "tests/__init__.py",
          "bytes": 0,
          "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
          "url": "/downloads/community/gcal-glance/e652e22c685e1727/files/tests/__init__.py.bin"
        },
        {
          "path": "tests/test_app.py",
          "bytes": 49213,
          "sha256": "d69977ea1b54a2fae109d09af78b5aadda0652292804dac0cac0945027510258",
          "url": "/downloads/community/gcal-glance/e652e22c685e1727/files/tests/test_app.py.bin"
        },
        {
          "path": "uv.lock",
          "bytes": 321886,
          "sha256": "71f53d7832746b0de13dfb913beaa50c9aa1d2522f1112f417ca018d22ce4fd8",
          "url": "/downloads/community/gcal-glance/e652e22c685e1727/files/uv.lock.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/gcal-glance/e652e22c685e1727/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": "README.md",
      "requirements": "# Note: All dependencies below (httpx, pydantic, pydantic-settings) are already\n# sub-dependencies of busylib, which is pre-approved according to project conventions.\nbusylib>=1.3.0\nhttpx>=0.28.0\npydantic>=2.11\npydantic-settings>=2.13",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/github-actions",
      "source": "community",
      "slug": "github-actions",
      "name": "GitHub Actions",
      "author": "maxswinkels",
      "description": "Live GitHub Actions status for the repos you pick: a progress bar while a run works, confetti when it passes, and a red hold naming the job that failed.",
      "tags": [
        "monitor",
        "utility",
        "info"
      ],
      "preview": "/previews/community-github-actions-fee70bdae3e0c7d0.gif",
      "repo": null,
      "stillPreview": "/previews/community-github-actions-fee70bdae3e0c7d0.png",
      "socialImage": "/social/community/github-actions.jpg",
      "animated": true,
      "authorSlug": "maxswinkels-6a7386",
      "revision": "fee70bdae3e0c7d0",
      "contentHash": "fee70bdae3e0c7d07aa943a3d7636bf07a18f4d5f30897b2021b82aefd0e3d7c",
      "status": "active",
      "createdAt": "2026-08-14T11:36:51+02:00",
      "updatedAt": "2026-08-14T11:36:51+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/github-actions",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/github-actions/",
      "downloadUrl": "/downloads/community/github-actions/fee70bdae3e0c7d0/github-actions.zip",
      "zipSha256": "bf34c7deb682bff4e08bd0de23587ae005c9f2d908573aeb8a4e6dd333ea24c3",
      "zipBytes": 209343,
      "files": [
        {
          "path": "app.py",
          "bytes": 25390,
          "sha256": "5d63e4bd92480d0b23afeba5016bc833fc4ab1351eed2c6c9a8206e80e8275fe",
          "url": "/downloads/community/github-actions/fee70bdae3e0c7d0/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 271,
          "sha256": "47c5733101041976e44f01a81ee441ccddd8ddb0a350f27930861fcb6ca2639b",
          "url": "/downloads/community/github-actions/fee70bdae3e0c7d0/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 415566,
          "sha256": "de439c1262581de34b2a24ac93a1f193bed9ba75bf35cd8d98bb07d4b070a371",
          "url": "/downloads/community/github-actions/fee70bdae3e0c7d0/files/preview.gif.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/github-actions/fee70bdae3e0c7d0/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/github-graph",
      "source": "community",
      "slug": "github-graph",
      "name": "GitHub Graph",
      "author": "maxswinkels",
      "description": "Your GitHub contribution graph on the bar. Username in a 7px pixel font above 72 weeks of history, one pixel per day. Long names scroll, and there are green, orange, and blue themes.",
      "tags": [
        "info",
        "monitor"
      ],
      "preview": "/previews/community-github-graph-81e11597bed7424f.gif",
      "repo": null,
      "stillPreview": "/previews/community-github-graph-81e11597bed7424f.png",
      "socialImage": "/social/community/github-graph.jpg",
      "animated": true,
      "authorSlug": "maxswinkels-6a7386",
      "revision": "81e11597bed7424f",
      "contentHash": "81e11597bed7424f66d2916d1853bb7cc442de04e0a47801851d457c3a36ed20",
      "status": "active",
      "createdAt": "2026-07-27T09:16:26+02:00",
      "updatedAt": "2026-08-17T07:39:30+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/github-graph",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/github-graph/",
      "downloadUrl": "/downloads/community/github-graph/81e11597bed7424f/github-graph.zip",
      "zipSha256": "a2f992fc85e920e70c8ac291beee8c71050cbed6753f77e79148b01d76a5bf52",
      "zipBytes": 67541,
      "files": [
        {
          "path": "app.py",
          "bytes": 12155,
          "sha256": "5286ec2379f8c3edd304083110d0593595ab714033dbb3d9548c5fe8f0103a25",
          "url": "/downloads/community/github-graph/81e11597bed7424f/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 285,
          "sha256": "d9b39e21c50c80e8932973cfd64fa68359969b4682ca5902615052c3cce47906",
          "url": "/downloads/community/github-graph/81e11597bed7424f/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 62106,
          "sha256": "48236538a46f3a58fdd34252b8037882d4291679b2557328a9525ee61b6715a3",
          "url": "/downloads/community/github-graph/81e11597bed7424f/files/preview.gif.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/github-graph/81e11597bed7424f/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/github-prs",
      "source": "community",
      "slug": "github-prs",
      "name": "GitHub PRs",
      "author": "JayMcConnon",
      "description": "Your open pull requests at a glance. Counts for ready, running, failing and waiting, a scrolling line of what needs you, and a banner when one is ready to merge, fails or gets merged.",
      "tags": [
        "github",
        "monitor",
        "info"
      ],
      "preview": "/previews/community-github-prs-043def681d2963d6.gif",
      "repo": null,
      "stillPreview": "/previews/community-github-prs-043def681d2963d6.png",
      "socialImage": "/social/community/github-prs.jpg",
      "animated": true,
      "authorSlug": "jaymcconnon-ba8fa5",
      "revision": "043def681d2963d6",
      "contentHash": "043def681d2963d693a52b9865f94015ec40c8a0e160c0c670b3a872c66f8b9e",
      "status": "active",
      "createdAt": "2026-10-15T08:55:00+01:00",
      "updatedAt": "2026-10-15T08:55:00+01:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/github-prs",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/github-prs/",
      "downloadUrl": "/downloads/community/github-prs/043def681d2963d6/github-prs.zip",
      "zipSha256": "383b70435f88f15a5dc68b9b2f677a0422a3865f2302702cbfc9428280a50358",
      "zipBytes": 112205,
      "files": [
        {
          "path": "app.py",
          "bytes": 21196,
          "sha256": "8886b4c7da9c4b10f3e6fc14839489ad59c9bb1252a294837c4dfde231ac6b3e",
          "url": "/downloads/community/github-prs/043def681d2963d6/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 295,
          "sha256": "e903918edde5f67dd43831c25f21be6c9865fa666f96411f274f01e896e200fe",
          "url": "/downloads/community/github-prs/043def681d2963d6/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 110455,
          "sha256": "83fc44fd1bf37c8f52e5010c436fcd7fb1fef91815253a3a0663f370509ffa9a",
          "url": "/downloads/community/github-prs/043def681d2963d6/files/preview.gif.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/github-prs/043def681d2963d6/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/github-repo",
      "source": "community",
      "slug": "github-repo",
      "name": "GitHub Repo",
      "author": "LuisWollenschneider",
      "description": "Display a single Github-Repo with stars, forks, open issues and open pull requests. Counts flash when they change.",
      "tags": [
        "info",
        "monitor",
        "github"
      ],
      "preview": "/previews/community-github-repo-ba7053d571dee176.png",
      "repo": null,
      "stillPreview": "/previews/community-github-repo-ba7053d571dee176.png",
      "socialImage": "/social/community/github-repo.jpg",
      "animated": false,
      "authorSlug": "luiswollenschneider-e8251f",
      "revision": "ba7053d571dee176",
      "contentHash": "ba7053d571dee1762c0dc74c2d8f4720c5d5e025a1fa563406fa04534d97c7f0",
      "status": "active",
      "createdAt": "2026-08-11T14:44:21+02:00",
      "updatedAt": "2026-08-17T07:39:30+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/github-repo",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/github-repo/",
      "downloadUrl": "/downloads/community/github-repo/ba7053d571dee176/github-repo.zip",
      "zipSha256": "240c295d74a338e00c5882f4fe2d8f2be7e337d1725d47de4d3b095c44411d83",
      "zipBytes": 83692,
      "files": [
        {
          "path": ".gitignore",
          "bytes": 18,
          "sha256": "6c6ba34ca3a6811bd5993dae615af311246ae07296ea1f0653631ed404d012c4",
          "url": "/downloads/community/github-repo/ba7053d571dee176/files/.gitignore.bin"
        },
        {
          "path": "app.py",
          "bytes": 37864,
          "sha256": "93a46df220e35195c5d165fd0343d3db7e29bf896f165aa7d43016ae4c2ccec8",
          "url": "/downloads/community/github-repo/ba7053d571dee176/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 235,
          "sha256": "ff66c5093f6d6781a7e506d96a693db1556652f9eebddfbafb1e2ab5728d54fa",
          "url": "/downloads/community/github-repo/ba7053d571dee176/files/manifest.yaml.bin"
        },
        {
          "path": "preview.png",
          "bytes": 69474,
          "sha256": "c8bb4abf10712ebe3dc574432ae664e391bb04e5a5a2d570d0cb33d424e576bb",
          "url": "/downloads/community/github-repo/ba7053d571dee176/files/preview.png.bin"
        },
        {
          "path": "requirements.txt",
          "bytes": 13,
          "sha256": "dce978a554b00caca70d59f539d25c61fcc89681e02d7fec42948cd5c3c0a127",
          "url": "/downloads/community/github-repo/ba7053d571dee176/files/requirements.txt.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/github-repo/ba7053d571dee176/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "Pillow>=10.0",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/home-assistant",
      "source": "community",
      "slug": "home-assistant",
      "name": "Home Assistant",
      "author": "kylewhirl",
      "description": "Browse and control Home Assistant lights with the BUSY Bar dial, Select, and Start controls.",
      "tags": [
        "home",
        "monitor",
        "info"
      ],
      "preview": "/previews/community-home-assistant-76572b9d276df000.png",
      "repo": "https://github.com/kylewhirl/busybar-home-assistant",
      "stillPreview": "/previews/community-home-assistant-76572b9d276df000.png",
      "socialImage": "/social/community/home-assistant.jpg",
      "animated": false,
      "authorSlug": "kylewhirl-2e8dcc",
      "revision": "76572b9d276df000",
      "contentHash": "76572b9d276df000831e00ce9e6282d026fd5524f4fc8df9816d529a20984e9b",
      "status": "active",
      "createdAt": "2026-08-01T16:18:59-07:00",
      "updatedAt": "2026-08-17T07:39:30+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/home-assistant",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/home-assistant/",
      "downloadUrl": "/downloads/community/home-assistant/76572b9d276df000/home-assistant.zip",
      "zipSha256": "80a53d2bd0a5ddb6ad07906b4247692298b2e5c09eb43b7900b9eee66779cb2c",
      "zipBytes": 37090,
      "files": [
        {
          "path": "app.py",
          "bytes": 23614,
          "sha256": "22906498bf29506ace32279237c2842beaa77478a66c059cff3bd345f6d55ef0",
          "url": "/downloads/community/home-assistant/76572b9d276df000/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 262,
          "sha256": "4aafe20bec7e67289b244365bbacaf3ed199bdee44a2d51bda3a47708f7e73f1",
          "url": "/downloads/community/home-assistant/76572b9d276df000/files/manifest.yaml.bin"
        },
        {
          "path": "preview.png",
          "bytes": 29889,
          "sha256": "ca570eb031d2c89f614155dead337611e1dec7bd7a069c9dae3b4ce5c1b0a5cf",
          "url": "/downloads/community/home-assistant/76572b9d276df000/files/preview.png.bin"
        },
        {
          "path": "requirements.txt",
          "bytes": 86,
          "sha256": "65801f572a31e18b17b249d8f93b350687311f960865515cc8361c4cecbe0e76",
          "url": "/downloads/community/home-assistant/76572b9d276df000/files/requirements.txt.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/home-assistant/76572b9d276df000/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "busylib==1.0.0\nmaterial-design-icons-pack==7.4.47\nrequests>=2.32.0,<3\nresvg_py==0.3.3",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/iss-alert",
      "source": "community",
      "slug": "iss-alert",
      "name": "ISS Alert",
      "author": "maxswinkels",
      "description": "Stays quiet until the space station passes near you. Then a pseudo 3D ISS slides across a twinkling starfield, hangs overhead with live distance, and drifts off the far edge as it leaves.",
      "tags": [
        "info",
        "animation"
      ],
      "preview": "/previews/community-iss-alert-8468af845dbd899a.gif",
      "repo": null,
      "stillPreview": "/previews/community-iss-alert-8468af845dbd899a.png",
      "socialImage": "/social/community/iss-alert.jpg",
      "animated": true,
      "authorSlug": "maxswinkels-6a7386",
      "revision": "8468af845dbd899a",
      "contentHash": "8468af845dbd899ad4d70a2096cf11d80e7883d04c92f496c29c40e7ed593015",
      "status": "active",
      "createdAt": "2026-07-27T10:38:15+02:00",
      "updatedAt": "2026-08-17T07:39:30+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/iss-alert",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/iss-alert/",
      "downloadUrl": "/downloads/community/iss-alert/8468af845dbd899a/iss-alert.zip",
      "zipSha256": "526d4377dff5d658f92eb123e421c3f3d16b9cc8e3bc815fd8f3c92e55abd7bc",
      "zipBytes": 191235,
      "files": [
        {
          "path": "app.py",
          "bytes": 14789,
          "sha256": "49c5063d1f39f319a532193be15ff90694eb1825a98625e45d2fa7d25a65dc42",
          "url": "/downloads/community/iss-alert/8468af845dbd899a/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 289,
          "sha256": "ba85fe5c68fc95f19e05da2c6f3bcc400bbc61028adacc34260eb4cfd41ca352",
          "url": "/downloads/community/iss-alert/8468af845dbd899a/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 187216,
          "sha256": "ba95542c232e0b5141844e08b5cc6f6b5fb61e71ffeba4a64221765c42c13068",
          "url": "/downloads/community/iss-alert/8468af845dbd899a/files/preview.gif.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/iss-alert/8468af845dbd899a/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/lava-lamp",
      "source": "community",
      "slug": "lava-lamp",
      "name": "Lava Lamp",
      "author": "robynhub",
      "description": "A procedural lava lamp for BUSY Bar with flowing metaballs, surface tension, natural merging and splitting, and highly customizable motion and colors.",
      "tags": [
        "ambient",
        "animation",
        "lava-lamp",
        "pixel-art"
      ],
      "preview": "/previews/community-lava-lamp-06a91c8ad64bf717.gif",
      "repo": null,
      "stillPreview": "/previews/community-lava-lamp-06a91c8ad64bf717.png",
      "socialImage": "/social/community/lava-lamp.jpg",
      "animated": true,
      "authorSlug": "robynhub-e86f81",
      "revision": "06a91c8ad64bf717",
      "contentHash": "06a91c8ad64bf7174e34d3a85b39c2ad8f9cf170eb6320425adffc5418ba0760",
      "status": "active",
      "createdAt": "2026-09-14T09:02:47+02:00",
      "updatedAt": "2026-09-14T09:02:47+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/lava-lamp",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/lava-lamp/",
      "downloadUrl": "/downloads/community/lava-lamp/06a91c8ad64bf717/lava-lamp.zip",
      "zipSha256": "03682b5c28b11eb3e8c0e2d281743fd6a1d73277607997b0ea2e9160a1e22ced",
      "zipBytes": 1004641,
      "files": [
        {
          "path": "app.py",
          "bytes": 35322,
          "sha256": "5a92d03c0bf63d1973a0944dda34f02eb9b2011a07aea4e77704ccefbb1c09b0",
          "url": "/downloads/community/lava-lamp/06a91c8ad64bf717/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 280,
          "sha256": "6f26a3eaba45f42aee20934a0ce6b5537a343a4c96681a972c5cc6afe9cb12de",
          "url": "/downloads/community/lava-lamp/06a91c8ad64bf717/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 993694,
          "sha256": "a26d01788985b97dbe0720f34dffdecf1f7fa831fa13bdda48223554dde3140d",
          "url": "/downloads/community/lava-lamp/06a91c8ad64bf717/files/preview.gif.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/lava-lamp/06a91c8ad64bf717/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/lunar-phases",
      "source": "community",
      "slug": "lunar-phases",
      "name": "Lunar Phases",
      "author": "robynhub",
      "description": "Animated lunar phases for BUSY Bar, showing the current Moon phase with multilingual labels, automatic replay, and button-triggered animation.",
      "tags": [
        "moon",
        "astronomy",
        "ambient"
      ],
      "preview": "/previews/community-lunar-phases-5250bb3c181fc430.gif",
      "repo": null,
      "stillPreview": "/previews/community-lunar-phases-5250bb3c181fc430.png",
      "socialImage": "/social/community/lunar-phases.jpg",
      "animated": true,
      "authorSlug": "robynhub-e86f81",
      "revision": "5250bb3c181fc430",
      "contentHash": "5250bb3c181fc430cb12c9d57847b1ca52f6029f273a2c551ef9d0505423eec2",
      "status": "active",
      "createdAt": "2026-08-17T09:42:21+02:00",
      "updatedAt": "2026-08-18T14:56:48+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/lunar-phases",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/lunar-phases/",
      "downloadUrl": "/downloads/community/lunar-phases/5250bb3c181fc430/lunar-phases.zip",
      "zipSha256": "4c179beb01ac5975f9562b9b8859b4316a1d70aaf1cb1dc535cf2bf7dd888897",
      "zipBytes": 986663,
      "files": [
        {
          "path": "app.py",
          "bytes": 32545,
          "sha256": "01770922a607f43e2d29a0d022ecd561c740e634e75f7871e9c532a5d2956a2b",
          "url": "/downloads/community/lunar-phases/5250bb3c181fc430/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 256,
          "sha256": "a3e427873075c06077b9b8b6811e1ed0da5326f61916639f2bf18ab5955b9be4",
          "url": "/downloads/community/lunar-phases/5250bb3c181fc430/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 1051615,
          "sha256": "f37bef71da6458d3c904a63e2489342104ca004df5a17161737a543e3819d4c9",
          "url": "/downloads/community/lunar-phases/5250bb3c181fc430/files/preview.gif.bin"
        },
        {
          "path": "requirements.txt",
          "bytes": 17,
          "sha256": "c86f41a08fa959300e885d41994ad7f7e0e1e2ed83f73b867ea26ecfab30d4a2",
          "url": "/downloads/community/lunar-phases/5250bb3c181fc430/files/requirements.txt.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/lunar-phases/5250bb3c181fc430/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "websockets>=15.0",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/mac-monitor",
      "source": "community",
      "slug": "mac-monitor",
      "name": "Mac Monitor",
      "author": "maxswinkels",
      "description": "Mac system monitor - CPU, memory and network as live bars.",
      "tags": [
        "monitor",
        "system"
      ],
      "preview": "/previews/community-mac-monitor-f7925694eceb4400.gif",
      "repo": null,
      "stillPreview": "/previews/community-mac-monitor-f7925694eceb4400.png",
      "socialImage": "/social/community/mac-monitor.jpg",
      "animated": true,
      "authorSlug": "maxswinkels-6a7386",
      "revision": "f7925694eceb4400",
      "contentHash": "f7925694eceb4400c10cb6b85b3c21d9e947e012ed40bcc3e1b81270c562c3a8",
      "status": "active",
      "createdAt": "2026-07-23T13:44:29+02:00",
      "updatedAt": "2026-08-18T15:47:10+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/mac-monitor",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/mac-monitor/",
      "downloadUrl": "/downloads/community/mac-monitor/f7925694eceb4400/mac-monitor.zip",
      "zipSha256": "0b8fa29cbb3d2a04bfaae325ea89b2470fb6adef6f26180c7147ff5dc4be0555",
      "zipBytes": 21574,
      "files": [
        {
          "path": "app.py",
          "bytes": 11166,
          "sha256": "294109e43ffb72179fe1a293ec344489f23263204abc0b551606d4566d0fe50c",
          "url": "/downloads/community/mac-monitor/f7925694eceb4400/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 162,
          "sha256": "806a391c0c8e0772cbbe20ef50e41946721410bd4f91e1ee9e8eaa6c8da5d034",
          "url": "/downloads/community/mac-monitor/f7925694eceb4400/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 16281,
          "sha256": "ad4d4e1a84b7ccef5bfba5cd67070b9a6871e7ca1b2cddf9ebae229de3d9c4dd",
          "url": "/downloads/community/mac-monitor/f7925694eceb4400/files/preview.gif.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/mac-monitor/f7925694eceb4400/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/magic-8-ball",
      "source": "community",
      "slug": "magic-8-ball",
      "name": "Magic 8-Ball",
      "author": "robynhub",
      "description": "Interactive Magic 8-Ball for BUSY Bar with animated rolling, multilingual answers, button control, and optional auto-roll.",
      "tags": [
        "game",
        "interactive",
        "fun"
      ],
      "preview": "/previews/community-magic-8-ball-c5276a26003caf06.gif",
      "repo": null,
      "stillPreview": "/previews/community-magic-8-ball-c5276a26003caf06.png",
      "socialImage": "/social/community/magic-8-ball.jpg",
      "animated": true,
      "authorSlug": "robynhub-e86f81",
      "revision": "c5276a26003caf06",
      "contentHash": "c5276a26003caf060dac2d0e7940246a6d4255b9c0831e94eeb2a742cdf0cdea",
      "status": "active",
      "createdAt": "2026-08-17T07:52:36+02:00",
      "updatedAt": "2026-08-18T14:56:48+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/magic-8-ball",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/magic-8-ball/",
      "downloadUrl": "/downloads/community/magic-8-ball/c5276a26003caf06/magic-8-ball.zip",
      "zipSha256": "b0a73c29c6e8f0ee9f0292023c098a4fd34d12938fcde965f4502eb1b848bf8a",
      "zipBytes": 285077,
      "files": [
        {
          "path": "app.py",
          "bytes": 27834,
          "sha256": "21e19841b819a375d948ec2b9bb46be61551b691e09c8185ca1d7d9f6bd8ef6b",
          "url": "/downloads/community/magic-8-ball/c5276a26003caf06/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 234,
          "sha256": "e1d1597462042952dffd980e8a2d19520e72c3ff50f3f94342c08c5efa40649d",
          "url": "/downloads/community/magic-8-ball/c5276a26003caf06/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 348434,
          "sha256": "e5cbda3dc4b5edfef0ccb9fe5470487537d23dffaf2983a58cf41dac8411e9d6",
          "url": "/downloads/community/magic-8-ball/c5276a26003caf06/files/preview.gif.bin"
        },
        {
          "path": "requirements.txt",
          "bytes": 17,
          "sha256": "c86f41a08fa959300e885d41994ad7f7e0e1e2ed83f73b867ea26ecfab30d4a2",
          "url": "/downloads/community/magic-8-ball/c5276a26003caf06/files/requirements.txt.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/magic-8-ball/c5276a26003caf06/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "websockets>=15.0",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/matrix-digital-rain",
      "source": "community",
      "slug": "matrix-digital-rain",
      "name": "Matrix Digital Rain",
      "author": "robynhub",
      "description": "Matrix-style digital rain animation for BUSY Bar, with configurable character size, speed, density, and color theme.",
      "tags": [
        "animation",
        "ambient",
        "matrix"
      ],
      "preview": "/previews/community-matrix-digital-rain-ef97f40f43d152fa.gif",
      "repo": null,
      "stillPreview": "/previews/community-matrix-digital-rain-ef97f40f43d152fa.png",
      "socialImage": "/social/community/matrix-digital-rain.jpg",
      "animated": true,
      "authorSlug": "robynhub-e86f81",
      "revision": "ef97f40f43d152fa",
      "contentHash": "ef97f40f43d152fa444f285e103ec9dc0bb55f98acac7f07789e78f1e0929988",
      "status": "active",
      "createdAt": "2026-08-11T16:18:19+02:00",
      "updatedAt": "2026-08-28T11:18:46+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/matrix-digital-rain",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/matrix-digital-rain/",
      "downloadUrl": "/downloads/community/matrix-digital-rain/ef97f40f43d152fa/matrix-digital-rain.zip",
      "zipSha256": "dc309ec79a1e53e06a43184395c5ec9aacd2d1442ac93fa217cb08d9e06565c7",
      "zipBytes": 257619,
      "files": [
        {
          "path": "app.py",
          "bytes": 11133,
          "sha256": "04dda43050dcbe453c62bb3d8119ec58b1e88e7992987b9124de90c9f6abe9c9",
          "url": "/downloads/community/matrix-digital-rain/ef97f40f43d152fa/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 239,
          "sha256": "6b0c76a24cc68e9068e3ff6a7b2bc8f8adfff412ea7f3b16bf4b68b838180c5a",
          "url": "/downloads/community/matrix-digital-rain/ef97f40f43d152fa/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 257360,
          "sha256": "9288bb1929038f80be3f486c06a24cf63918ce968b5fc4e38d5f5a2a4929560b",
          "url": "/downloads/community/matrix-digital-rain/ef97f40f43d152fa/files/preview.gif.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/matrix-digital-rain/ef97f40f43d152fa/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/media-player",
      "source": "community",
      "slug": "media-player",
      "name": "Media Player",
      "author": "robynhub",
      "description": "Displays system-wide Now Playing information and provides media controls for BUSY Bar.",
      "tags": [
        "media",
        "music",
        "now-playing",
        "controls"
      ],
      "preview": "/previews/community-media-player-128cc60648cc2ee0.gif",
      "repo": null,
      "stillPreview": "/previews/community-media-player-128cc60648cc2ee0.png",
      "socialImage": "/social/community/media-player.jpg",
      "animated": true,
      "authorSlug": "robynhub-e86f81",
      "revision": "128cc60648cc2ee0",
      "contentHash": "128cc60648cc2ee02adf701e8b3f9cab68be84e5fc78aa22e3fd980781bab7f9",
      "status": "active",
      "createdAt": "2026-08-12T15:03:56+02:00",
      "updatedAt": "2026-08-18T08:50:09+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/media-player",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/media-player/",
      "downloadUrl": "/downloads/community/media-player/128cc60648cc2ee0/media-player.zip",
      "zipSha256": "9000088abdb1e6e52cd856a74bdcb0fc35af7bc2da0813dd0fdb07d892bb7d64",
      "zipBytes": 552656,
      "files": [
        {
          "path": "app.py",
          "bytes": 43970,
          "sha256": "89725c0ec1604bf516c46bdacebcccbd34fb1cd5edde1328c879cfe32abe5b88",
          "url": "/downloads/community/media-player/128cc60648cc2ee0/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 214,
          "sha256": "e1f1fe9144e2fe2bcf9bd1696e1385ece907f6bf132b417361bde57d522ba3da",
          "url": "/downloads/community/media-player/128cc60648cc2ee0/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 933039,
          "sha256": "301deb8fc3b06739196dea460a80ee4d91bcb6576ce8cc342ffd5b56b0db544c",
          "url": "/downloads/community/media-player/128cc60648cc2ee0/files/preview.gif.bin"
        },
        {
          "path": "requirements.txt",
          "bytes": 17,
          "sha256": "c86f41a08fa959300e885d41994ad7f7e0e1e2ed83f73b867ea26ecfab30d4a2",
          "url": "/downloads/community/media-player/128cc60648cc2ee0/files/requirements.txt.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/media-player/128cc60648cc2ee0/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "websockets>=15.0",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/media-player-karaoke",
      "source": "community",
      "slug": "media-player-karaoke",
      "name": "Media Player Karaoke",
      "author": "robynhub",
      "description": "Shows synced song lyrics on BUSY Bar with karaoke highlighting, playback controls, scrolling metadata, and optional two-line lyric mode.",
      "tags": [
        "media",
        "music",
        "karaoke",
        "lyrics",
        "now-playing",
        "controls"
      ],
      "preview": "/previews/community-media-player-karaoke-34a1d02a90360de6.gif",
      "repo": null,
      "stillPreview": "/previews/community-media-player-karaoke-34a1d02a90360de6.png",
      "socialImage": "/social/community/media-player-karaoke.jpg",
      "animated": true,
      "authorSlug": "robynhub-e86f81",
      "revision": "34a1d02a90360de6",
      "contentHash": "34a1d02a90360de6f79a5391cf705b3159674d40bda16f31b5d82f0abe9effa1",
      "status": "active",
      "createdAt": "2026-08-18T09:19:11+02:00",
      "updatedAt": "2026-08-18T09:19:11+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/media-player-karaoke",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/media-player-karaoke/",
      "downloadUrl": "/downloads/community/media-player-karaoke/34a1d02a90360de6/media-player-karaoke.zip",
      "zipSha256": "cc191fad54574b3480a96e1e40ea518521ee356fcb27b97783301f2413707738",
      "zipBytes": 981249,
      "files": [
        {
          "path": "app.py",
          "bytes": 49745,
          "sha256": "f5f60556c1c8499f4564a1e08fce9f4799de1a26f49f75d5d33285188718f1a3",
          "url": "/downloads/community/media-player-karaoke/34a1d02a90360de6/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 295,
          "sha256": "e14d7b39104270d4c477eb9befb1cdfa00039ad74d846a0d83003dc7cfe1c3aa",
          "url": "/downloads/community/media-player-karaoke/34a1d02a90360de6/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 1125731,
          "sha256": "ad2c4965d5e01c11f1efc6b61712bd737fda36149d83ed85aef2ef0395fda1fc",
          "url": "/downloads/community/media-player-karaoke/34a1d02a90360de6/files/preview.gif.bin"
        },
        {
          "path": "requirements.txt",
          "bytes": 17,
          "sha256": "c86f41a08fa959300e885d41994ad7f7e0e1e2ed83f73b867ea26ecfab30d4a2",
          "url": "/downloads/community/media-player-karaoke/34a1d02a90360de6/files/requirements.txt.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/media-player-karaoke/34a1d02a90360de6/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "websockets>=15.0",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/moneybird-invoice-paid",
      "source": "community",
      "slug": "moneybird-invoice-paid",
      "name": "Moneybird Invoice Paid",
      "author": "maxswinkels",
      "description": "Watches your Moneybird administration and celebrates every newly paid invoice with a coin rain, an odometer count-up of the amount and a cash-register sound.",
      "tags": [
        "monitor",
        "info",
        "effect"
      ],
      "preview": "/previews/community-moneybird-invoice-paid-6524e555ddc63e8c.gif",
      "repo": null,
      "stillPreview": "/previews/community-moneybird-invoice-paid-6524e555ddc63e8c.png",
      "socialImage": "/social/community/moneybird-invoice-paid.jpg",
      "animated": true,
      "authorSlug": "maxswinkels-6a7386",
      "revision": "6524e555ddc63e8c",
      "contentHash": "6524e555ddc63e8c47c8ef3b6ccc815cd9a8c4911aeee261f806a2f6430a621d",
      "status": "active",
      "createdAt": "2026-07-24T12:19:00+02:00",
      "updatedAt": "2026-08-17T07:39:30+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/moneybird-invoice-paid",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/moneybird-invoice-paid/",
      "downloadUrl": "/downloads/community/moneybird-invoice-paid/6524e555ddc63e8c/moneybird-invoice-paid.zip",
      "zipSha256": "d25bc496461460a378e84e9f2b7732d5ee2244ac44ed9e4b2199106214a4730d",
      "zipBytes": 237021,
      "files": [
        {
          "path": "app.py",
          "bytes": 25069,
          "sha256": "957c90e38b95946d15fad3023b6fbc820722eeb56e7527afd599f36a3fa69160",
          "url": "/downloads/community/moneybird-invoice-paid/6524e555ddc63e8c/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 281,
          "sha256": "7d309485c32b603c884dfd3dedcb528467dea6a1b47430c1e01748ab5b940065",
          "url": "/downloads/community/moneybird-invoice-paid/6524e555ddc63e8c/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 233072,
          "sha256": "cc6b63651c18af64f43207850bfb042ce41279b335d60431ac635c334e515869",
          "url": "/downloads/community/moneybird-invoice-paid/6524e555ddc63e8c/files/preview.gif.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/moneybird-invoice-paid/6524e555ddc63e8c/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/nyan-cat",
      "source": "community",
      "slug": "nyan-cat",
      "name": "Nyan Cat",
      "author": "maxswinkels",
      "description": "The classic nyan cat - pop-tart cat with a rainbow trail and twinkling stars.",
      "tags": [
        "animation",
        "effect"
      ],
      "preview": "/previews/community-nyan-cat-979efbf16ecbd957.gif",
      "repo": null,
      "stillPreview": "/previews/community-nyan-cat-979efbf16ecbd957.png",
      "socialImage": "/social/community/nyan-cat.jpg",
      "animated": true,
      "authorSlug": "maxswinkels-6a7386",
      "revision": "979efbf16ecbd957",
      "contentHash": "979efbf16ecbd9570cc5307d43a8b4bcec89265b866d2ed8d58a8d45f78bbed4",
      "status": "active",
      "createdAt": "2026-07-24T16:06:45+02:00",
      "updatedAt": "2026-08-17T07:39:30+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/nyan-cat",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/nyan-cat/",
      "downloadUrl": "/downloads/community/nyan-cat/979efbf16ecbd957/nyan-cat.zip",
      "zipSha256": "a30043509efdbf1d8eb4b58529351f76d2ce4b0bf0f13519be8a491e3d7e1d76",
      "zipBytes": 220890,
      "files": [
        {
          "path": "app.py",
          "bytes": 8557,
          "sha256": "e2276d147740bdf1c53cd9933dcdf2e0a6025bd5145113e4beb3cfb0de159a0e",
          "url": "/downloads/community/nyan-cat/979efbf16ecbd957/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 180,
          "sha256": "c8de044eb1afb17bdaf44d4cf04bb84e97c6bee13de9576e49c16372a2aaa94c",
          "url": "/downloads/community/nyan-cat/979efbf16ecbd957/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 219257,
          "sha256": "e3891400f83d8ef8e730a29c485f63693af3b659c558aa006b7acb2fa454c702",
          "url": "/downloads/community/nyan-cat/979efbf16ecbd957/files/preview.gif.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/nyan-cat/979efbf16ecbd957/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/nyc-subway",
      "source": "community",
      "slug": "nyc-subway",
      "name": "NYC Subway",
      "author": "Pranav-Karra-3301",
      "description": "Live next-train departures for any NYC subway station — pick station, direction and lines; MTA route bullets, minutes to train, departure flash. GTFS-realtime, no API key.",
      "tags": [
        "transit",
        "info",
        "time"
      ],
      "preview": "/previews/community-nyc-subway-cb00d4e8bd8817d2.gif",
      "repo": "https://github.com/Pranav-Karra-3301/busybar-nyc-subway",
      "stillPreview": "/previews/community-nyc-subway-cb00d4e8bd8817d2.png",
      "socialImage": "/social/community/nyc-subway.jpg",
      "animated": true,
      "authorSlug": "pranav-karra-3301-8c3e1e",
      "revision": "cb00d4e8bd8817d2",
      "contentHash": "cb00d4e8bd8817d257af64d1c34fa4bc53dd7a17ceab3874392270dbb789ddfd",
      "status": "active",
      "createdAt": "2026-08-12T08:02:59-04:00",
      "updatedAt": "2026-08-17T07:39:30+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/nyc-subway",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/nyc-subway/",
      "downloadUrl": "/downloads/community/nyc-subway/cb00d4e8bd8817d2/nyc-subway.zip",
      "zipSha256": "db4816f0f0741566b7749eb110454258659a1f192d5842224aa323e36569db0b",
      "zipBytes": 89656,
      "files": [
        {
          "path": "app.py",
          "bytes": 107433,
          "sha256": "549eb19d11433ff9d404fbc5e261650e45ff3eda285264302cc39b9038936310",
          "url": "/downloads/community/nyc-subway/cb00d4e8bd8817d2/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 349,
          "sha256": "967545202e8ca5768425b90da6b67ac959b5d80499774fd801f63b422ae02a0f",
          "url": "/downloads/community/nyc-subway/cb00d4e8bd8817d2/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 54615,
          "sha256": "38ddc9a8fbc727e0199c37049a94ae3fd72b1ac5f6bb388fbd42f26b7467ace3",
          "url": "/downloads/community/nyc-subway/cb00d4e8bd8817d2/files/preview.gif.bin"
        },
        {
          "path": "requirements.txt",
          "bytes": 20,
          "sha256": "20419e382790937c0339d4ea98477923001dc7cd7e0f2f51fc6546102d46c858",
          "url": "/downloads/community/nyc-subway/cb00d4e8bd8817d2/files/requirements.txt.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/nyc-subway/cb00d4e8bd8817d2/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "requests\nwebsockets",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/pixel-aquarium",
      "source": "community",
      "slug": "pixel-aquarium",
      "name": "Pixel Aquarium",
      "author": "robynhub",
      "description": "A relaxing procedural pixel aquarium for BUSY Bar, with colorful fish, bubbles, swaying seaweed, and a smooth day/night cycle.",
      "tags": [
        "ambient",
        "animation",
        "aquarium",
        "pixel-art"
      ],
      "preview": "/previews/community-pixel-aquarium-b9ce0a9832af0482.gif",
      "repo": null,
      "stillPreview": "/previews/community-pixel-aquarium-b9ce0a9832af0482.png",
      "socialImage": "/social/community/pixel-aquarium.jpg",
      "animated": true,
      "authorSlug": "robynhub-e86f81",
      "revision": "b9ce0a9832af0482",
      "contentHash": "b9ce0a9832af04821e22a786f90f5dcd4fe39fbc384ae085fbbfbfc84371dc55",
      "status": "active",
      "createdAt": "2026-08-11T16:18:31+02:00",
      "updatedAt": "2026-08-17T07:39:30+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/pixel-aquarium",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/pixel-aquarium/",
      "downloadUrl": "/downloads/community/pixel-aquarium/b9ce0a9832af0482/pixel-aquarium.zip",
      "zipSha256": "9c8b9993a60b0284aebde262e9c23d490e0d07c29c953ce81c15f13f2127deaf",
      "zipBytes": 287593,
      "files": [
        {
          "path": "app.py",
          "bytes": 16619,
          "sha256": "892c3c283dd94313ba55b597f2b2a47cedc97f4e362fa2346df8044385ca75b0",
          "url": "/downloads/community/pixel-aquarium/b9ce0a9832af0482/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 260,
          "sha256": "62b12acc8820fcc185a6b4b106f312aabe8961fc95dae1ef345826240fbdb13b",
          "url": "/downloads/community/pixel-aquarium/b9ce0a9832af0482/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 285755,
          "sha256": "7c37e88d831993b897ca29269031ff28aaa125bb9adbe68a29e5c1a25b152f97",
          "url": "/downloads/community/pixel-aquarium/b9ce0a9832af0482/files/preview.gif.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/pixel-aquarium/b9ce0a9832af0482/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/pixel-fire",
      "source": "community",
      "slug": "pixel-fire",
      "name": "Pixel Fire",
      "author": "maxswinkels",
      "description": "Demoscene pixel effects - fire, matrix rain, and plasma.",
      "tags": [
        "effect",
        "animation"
      ],
      "preview": "/previews/community-pixel-fire-f72cf87a14d8bc75.gif",
      "repo": null,
      "stillPreview": "/previews/community-pixel-fire-f72cf87a14d8bc75.png",
      "socialImage": "/social/community/pixel-fire.jpg",
      "animated": true,
      "authorSlug": "maxswinkels-6a7386",
      "revision": "f72cf87a14d8bc75",
      "contentHash": "f72cf87a14d8bc75472abce05ef68d14e384db7ced4d1b0ac89040cfb7706ebf",
      "status": "active",
      "createdAt": "2026-07-23T12:47:29+02:00",
      "updatedAt": "2026-08-17T07:39:30+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/pixel-fire",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/pixel-fire/",
      "downloadUrl": "/downloads/community/pixel-fire/f72cf87a14d8bc75/pixel-fire.zip",
      "zipSha256": "794be5360d626c1bea0ff6a246d91baa5f7af15113db8e0cb5debe8f9d76af8c",
      "zipBytes": 270553,
      "files": [
        {
          "path": "app.py",
          "bytes": 9855,
          "sha256": "ac351de1f01dd18f62c35add926979c1f154c0d0e9d3efdcab3a542d5911b1b6",
          "url": "/downloads/community/pixel-fire/f72cf87a14d8bc75/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 161,
          "sha256": "2b130738571c6e235a66f7c72b921a7eefc1affabc4621d31d54065a2ddfc639",
          "url": "/downloads/community/pixel-fire/f72cf87a14d8bc75/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 273430,
          "sha256": "39c6fedc886282d2b7591f100c43c96c76417bb004fb0345da2d0133abef3470",
          "url": "/downloads/community/pixel-fire/f72cf87a14d8bc75/files/preview.gif.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/pixel-fire/f72cf87a14d8bc75/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/pixel-runner",
      "source": "community",
      "slug": "pixel-runner",
      "name": "Pixel Runner",
      "author": "antoninsmetana",
      "description": "An endless jump-and-duck runner on the 72x16 panel. START jumps, OK or BACK ducks; cacti and birds come at you, the world speeds up, day turns to night. Left alone it plays itself.",
      "tags": [
        "game",
        "animation"
      ],
      "preview": "/previews/community-pixel-runner-fc325815c324a6c4.gif",
      "repo": null,
      "stillPreview": "/previews/community-pixel-runner-fc325815c324a6c4.png",
      "socialImage": "/social/community/pixel-runner.jpg",
      "animated": true,
      "authorSlug": "antoninsmetana-fb544b",
      "revision": "fc325815c324a6c4",
      "contentHash": "fc325815c324a6c4d66f4064e09b2d5f229234b239a6d1f55461b76b011faf0e",
      "status": "active",
      "createdAt": "2026-08-14T11:27:33+02:00",
      "updatedAt": "2026-08-14T11:27:33+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/pixel-runner",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/pixel-runner/",
      "downloadUrl": "/downloads/community/pixel-runner/fc325815c324a6c4/pixel-runner.zip",
      "zipSha256": "2db24891f615a58c16ce0f0a511ef13ebcd300593ec3ff3867a0147f2020c02c",
      "zipBytes": 638774,
      "files": [
        {
          "path": "app.py",
          "bytes": 56913,
          "sha256": "a55304ca21cd41456fffd74c7ea5513c4f521ddeea604bffef972153b7c98455",
          "url": "/downloads/community/pixel-runner/fc325815c324a6c4/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 288,
          "sha256": "b0c0a8bc0dcdbeadd36bb89fce5414654510cf0a47ca7f810ef0416235c53765",
          "url": "/downloads/community/pixel-runner/fc325815c324a6c4/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 842722,
          "sha256": "0a0142c59221ddb625dbdbfb7a1bca925a82a28b037bdcec1ed2542e1a45d52f",
          "url": "/downloads/community/pixel-runner/fc325815c324a6c4/files/preview.gif.bin"
        },
        {
          "path": "requirements.txt",
          "bytes": 395,
          "sha256": "3a01d963b761f2e3838121984268cd1f8db7b0be5ce0c93e6e131efd95bb3535",
          "url": "/downloads/community/pixel-runner/fc325815c324a6c4/files/requirements.txt.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/pixel-runner/fc325815c324a6c4/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "# The buttons are the game. They arrive only as protobuf frames on\n# ws://<host>/api/status/ws, and the stdlib has no WebSocket client -- so this\n# is the one dependency, and the app degrades to playing itself without it\n# rather than refusing to start. Same pin as media-player's, the other app in\n# this repo reading the same stream. Everything else here is stdlib on 3.14.2.\nwebsockets>=15.0",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/pollen-alarm",
      "source": "community",
      "slug": "pollen-alarm",
      "name": "Pollen Alarm",
      "author": "maxswinkels",
      "description": "Hay fever alarm for Europe. Quiet while pollen is low, then the worst species with a 24 hour intensity timeline, a marker on the announced hour and drifting pollen specks. Data from Open-Meteo.",
      "tags": [
        "weather",
        "info"
      ],
      "preview": "/previews/community-pollen-alarm-79d76b2d6b9e2581.gif",
      "repo": null,
      "stillPreview": "/previews/community-pollen-alarm-79d76b2d6b9e2581.png",
      "socialImage": "/social/community/pollen-alarm.jpg",
      "animated": true,
      "authorSlug": "maxswinkels-6a7386",
      "revision": "79d76b2d6b9e2581",
      "contentHash": "79d76b2d6b9e25819daaf0fa33786be031b0d61af9032ae7a0951e13b6a3fad9",
      "status": "active",
      "createdAt": "2026-07-27T11:13:28+02:00",
      "updatedAt": "2026-08-17T07:39:30+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/pollen-alarm",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/pollen-alarm/",
      "downloadUrl": "/downloads/community/pollen-alarm/79d76b2d6b9e2581/pollen-alarm.zip",
      "zipSha256": "b12a35fdb83536c9345504887a90c6d1ed102b433ae1644c538096b5400f3436",
      "zipBytes": 149642,
      "files": [
        {
          "path": "app.py",
          "bytes": 14850,
          "sha256": "90bc0bff405b7ee2159882551e648ac8d45e865f98e2c8423c09fb2657e354ab",
          "url": "/downloads/community/pollen-alarm/79d76b2d6b9e2581/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 296,
          "sha256": "86bfb406f893079c4268b24b712a6912b8b5a30f5140f2f509d08df8fbac05ff",
          "url": "/downloads/community/pollen-alarm/79d76b2d6b9e2581/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 145906,
          "sha256": "ef3edc810101f7d4cb18fa290ac3694bd98fa81d0fee13574f745f082a3ce495",
          "url": "/downloads/community/pollen-alarm/79d76b2d6b9e2581/files/preview.gif.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/pollen-alarm/79d76b2d6b9e2581/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/revenue-bar",
      "source": "community",
      "slug": "revenue-bar",
      "name": "Revenue Bar",
      "author": "alexharston",
      "description": "Stripe + Paddle net revenue on your bar. Day, week, month and year to date with trend sparklines and same-point deltas.",
      "tags": [
        "business",
        "monitor",
        "info"
      ],
      "preview": "/previews/community-revenue-bar-e8a4172859ceebb0.gif",
      "repo": null,
      "stillPreview": "/previews/community-revenue-bar-e8a4172859ceebb0.png",
      "socialImage": "/social/community/revenue-bar.jpg",
      "animated": true,
      "authorSlug": "alexharston-675911",
      "revision": "e8a4172859ceebb0",
      "contentHash": "e8a4172859ceebb06e045fc2b94405592b021492327b98ed3d0512538afdce78",
      "status": "active",
      "createdAt": "2026-07-30T22:15:15+01:00",
      "updatedAt": "2026-08-17T07:39:30+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/revenue-bar",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/revenue-bar/",
      "downloadUrl": "/downloads/community/revenue-bar/e8a4172859ceebb0/revenue-bar.zip",
      "zipSha256": "6dab802e4c272178e19e9f81d512aba9e152ac6570cbc693f5b1e5e4d1eae225",
      "zipBytes": 116057,
      "files": [
        {
          "path": "app.py",
          "bytes": 34154,
          "sha256": "bbd6c9a5a8cf3a89dc5fcc0ddbc1abbd2222f2df64a95804c46986f43c160a0c",
          "url": "/downloads/community/revenue-bar/e8a4172859ceebb0/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 234,
          "sha256": "4b46aedc858d89184793d6663decfa925f13cf728d4e7e5b01078ebd1aa1388b",
          "url": "/downloads/community/revenue-bar/e8a4172859ceebb0/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 104340,
          "sha256": "cf6910c96692994b954f98e37ec2fd20607af260ce5822386f3d68fc1161850b",
          "url": "/downloads/community/revenue-bar/e8a4172859ceebb0/files/preview.gif.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/revenue-bar/e8a4172859ceebb0/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/rss-scroller",
      "source": "community",
      "slug": "rss-scroller",
      "name": "RSS Feed Scroller",
      "author": "robynhub",
      "description": "Fetch an RSS feed and show it",
      "tags": [
        "news",
        "rss",
        "info"
      ],
      "preview": "/previews/community-rss-scroller-ec3a0e1333647eac.gif",
      "repo": null,
      "stillPreview": "/previews/community-rss-scroller-ec3a0e1333647eac.png",
      "socialImage": "/social/community/rss-scroller.jpg",
      "animated": true,
      "authorSlug": "robynhub-e86f81",
      "revision": "ec3a0e1333647eac",
      "contentHash": "ec3a0e1333647eacb0ab2d7f5491d2a6fdb5d23368934f529e6061f2eb91517a",
      "status": "active",
      "createdAt": "2026-08-11T12:53:24+02:00",
      "updatedAt": "2026-08-18T14:56:48+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/rss-scroller",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/rss-scroller/",
      "downloadUrl": "/downloads/community/rss-scroller/ec3a0e1333647eac/rss-scroller.zip",
      "zipSha256": "6a59bacc136fb04fc8c36896c080c208d27082585124648cf0da4a5cb2e201ef",
      "zipBytes": 418760,
      "files": [
        {
          "path": "app.py",
          "bytes": 14293,
          "sha256": "5c21698ae4600e0b27b4f2b7102fc88aa8c9f7c2abe9d7987892e4e882ff6bca",
          "url": "/downloads/community/rss-scroller/ec3a0e1333647eac/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 139,
          "sha256": "4ae42c83815fd3e66d527096771da6a19cb0d33a7e5b5d6f93236fab272bea8a",
          "url": "/downloads/community/rss-scroller/ec3a0e1333647eac/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 426007,
          "sha256": "8a69950c18f2cd99f7eb6d04f599b98810d14dae361628703fbc49d277c3e1c5",
          "url": "/downloads/community/rss-scroller/ec3a0e1333647eac/files/preview.gif.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/rss-scroller/ec3a0e1333647eac/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/slot-machine",
      "source": "community",
      "slug": "slot-machine",
      "name": "Slot Machine",
      "author": "robynhub",
      "description": "Animated classic fruit-machine slot for BUSY Bar with automatic or START-button spins, cumulative score, win effects, jackpot animations, and sound.",
      "tags": [
        "game",
        "arcade",
        "retro",
        "slot-machine"
      ],
      "preview": "/previews/community-slot-machine-6251fadf9f6af75a.gif",
      "repo": null,
      "stillPreview": "/previews/community-slot-machine-6251fadf9f6af75a.png",
      "socialImage": "/social/community/slot-machine.jpg",
      "animated": true,
      "authorSlug": "robynhub-e86f81",
      "revision": "6251fadf9f6af75a",
      "contentHash": "6251fadf9f6af75ac82eb7a80f7765319a5d206530a2f0edc2930e292cd10ca8",
      "status": "active",
      "createdAt": "2026-08-13T21:11:50+02:00",
      "updatedAt": "2026-08-18T08:50:09+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/slot-machine",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/slot-machine/",
      "downloadUrl": "/downloads/community/slot-machine/6251fadf9f6af75a/slot-machine.zip",
      "zipSha256": "7369eaa779a307fbbdc3c559eedfb2c285710cef6caaef9c4ab96e94cbfe5582",
      "zipBytes": 865676,
      "files": [
        {
          "path": "app.py",
          "bytes": 27923,
          "sha256": "3c1bf402c26e7effd5053daf11aa4487f68c01e45f1f4ed3bbcf39be846e2d0a",
          "url": "/downloads/community/slot-machine/6251fadf9f6af75a/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 274,
          "sha256": "7e2d1749882f54824eebd0bba4e178610aca828d3cc7c736e2f161f71acb37e2",
          "url": "/downloads/community/slot-machine/6251fadf9f6af75a/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 906585,
          "sha256": "31865e344dea9d003cd2beee319cc541c9cc0e1b569aa0acb93d0af26a87d702",
          "url": "/downloads/community/slot-machine/6251fadf9f6af75a/files/preview.gif.bin"
        },
        {
          "path": "requirements.txt",
          "bytes": 17,
          "sha256": "c86f41a08fa959300e885d41994ad7f7e0e1e2ed83f73b867ea26ecfab30d4a2",
          "url": "/downloads/community/slot-machine/6251fadf9f6af75a/files/requirements.txt.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/slot-machine/6251fadf9f6af75a/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "websockets>=15.0",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/sonos-now-playing",
      "source": "community",
      "slug": "sonos-now-playing",
      "name": "Sonos Now Playing",
      "author": "bret@thewortmans.org",
      "description": "Shows the currently playing Sonos track and artist on the BUSY Bar. Auto-discovers speakers; clears the display when playback stops.",
      "tags": [
        "music",
        "audio",
        "monitor"
      ],
      "preview": "/previews/community-sonos-now-playing-da7998e8474d171b.gif",
      "repo": null,
      "stillPreview": "/previews/community-sonos-now-playing-da7998e8474d171b.png",
      "socialImage": "/social/community/sonos-now-playing.jpg",
      "animated": false,
      "authorSlug": "bret-thewortmans-org-b05ff8",
      "revision": "da7998e8474d171b",
      "contentHash": "da7998e8474d171bb63d30d6b1c253f119ee07470ebdec6e1cf740b912a0854b",
      "status": "active",
      "createdAt": "2026-10-15T04:21:21-04:00",
      "updatedAt": "2026-10-15T04:21:21-04:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/sonos-now-playing",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/sonos-now-playing/",
      "downloadUrl": "/downloads/community/sonos-now-playing/da7998e8474d171b/sonos-now-playing.zip",
      "zipSha256": "4719617a1cb77a6ca9ba0406706f37a631e5693700e08c88db10bc157578a643",
      "zipBytes": 13037,
      "files": [
        {
          "path": "app.py",
          "bytes": 7405,
          "sha256": "7bbf9b169f67d94f43cc32e8c9d4c6dae042695a34c74dee0ce04fc46811bf14",
          "url": "/downloads/community/sonos-now-playing/da7998e8474d171b/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 260,
          "sha256": "6039de71d46448e1fa8807c75ac2c010269f4ec902ee25ab4c025b46003c865a",
          "url": "/downloads/community/sonos-now-playing/da7998e8474d171b/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 9163,
          "sha256": "b7876adc011f88ce60880d3b0231c44179ecef25b932cfcec712671556193620",
          "url": "/downloads/community/sonos-now-playing/da7998e8474d171b/files/preview.gif.bin"
        },
        {
          "path": "requirements.txt",
          "bytes": 28,
          "sha256": "21ddaf4e0344f0304c85b9176f41c6a61ebd6213256fac6f90f5c62cdc665aed",
          "url": "/downloads/community/sonos-now-playing/da7998e8474d171b/files/requirements.txt.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/sonos-now-playing/da7998e8474d171b/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "busylib>=1.6.0\nsoco>=0.30.0",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/spotify-now-playing",
      "source": "community",
      "slug": "spotify-now-playing",
      "name": "Spotify Now Playing",
      "author": "kylewhirl",
      "description": "Shows Spotify now playing with progress, play/pause, skip, and volume controls from the BUSY Bar.",
      "tags": [
        "music",
        "info",
        "monitor"
      ],
      "preview": "/previews/community-spotify-now-playing-fad4ec338e3d8f2f.gif",
      "repo": null,
      "stillPreview": "/previews/community-spotify-now-playing-fad4ec338e3d8f2f.png",
      "socialImage": "/social/community/spotify-now-playing.jpg",
      "animated": true,
      "authorSlug": "kylewhirl-2e8dcc",
      "revision": "fad4ec338e3d8f2f",
      "contentHash": "fad4ec338e3d8f2f461f0ed8e6dd75556a19ca4e0f2f605c657048bf915d911c",
      "status": "active",
      "createdAt": "2026-09-14T00:01:32-07:00",
      "updatedAt": "2026-09-14T00:01:32-07:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/spotify-now-playing",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/spotify-now-playing/",
      "downloadUrl": "/downloads/community/spotify-now-playing/fad4ec338e3d8f2f/spotify-now-playing.zip",
      "zipSha256": "c5f19d7ca38fbb9050fdeb133df1618a1f34c2e33c466b64c7b11dc4d5f17b1b",
      "zipBytes": 133055,
      "files": [
        {
          "path": "README.md",
          "bytes": 1484,
          "sha256": "16e6ef340d5236f69a41af137670d94abf3e0890b2273ab0b2ea4e61a03854ef",
          "url": "/downloads/community/spotify-now-playing/fad4ec338e3d8f2f/files/README.md.bin"
        },
        {
          "path": "app.py",
          "bytes": 30812,
          "sha256": "68514d5c9c624831925fb1e68ca4bb18274993ea8d8a4115169b88b69b26fcaf",
          "url": "/downloads/community/spotify-now-playing/fad4ec338e3d8f2f/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 215,
          "sha256": "d666459b248aef3946a786dbf6a3d6397e409cf7cb89a17dd3b4ba09d4c4bcee",
          "url": "/downloads/community/spotify-now-playing/fad4ec338e3d8f2f/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 847257,
          "sha256": "dd7759afb84e23dc223b56b892c3dc0e568011e58fe93b6d21bfb75b1bbe69c5",
          "url": "/downloads/community/spotify-now-playing/fad4ec338e3d8f2f/files/preview.gif.bin"
        },
        {
          "path": "requirements.txt",
          "bytes": 16,
          "sha256": "ae2d1a87a8bc7634400cc797b9f595463e2a7132d06c9b8467835c5b80fc88af",
          "url": "/downloads/community/spotify-now-playing/fad4ec338e3d8f2f/files/requirements.txt.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/spotify-now-playing/fad4ec338e3d8f2f/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": "README.md",
      "requirements": "busylib>=1.0,<2",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/text-display",
      "source": "community",
      "slug": "text-display",
      "name": "Text Display",
      "author": "LuisWollenschneider",
      "description": "Show some text. That's it!",
      "tags": [
        "info",
        "text"
      ],
      "preview": "/previews/community-text-display-7b9d1c2928ce9589.gif",
      "repo": null,
      "stillPreview": "/previews/community-text-display-7b9d1c2928ce9589.png",
      "socialImage": "/social/community/text-display.jpg",
      "animated": true,
      "authorSlug": "luiswollenschneider-e8251f",
      "revision": "7b9d1c2928ce9589",
      "contentHash": "7b9d1c2928ce9589f8e9e93e4de022e46f23c03f9add20276dde962de4665bd1",
      "status": "active",
      "createdAt": "2026-08-11T11:46:42+02:00",
      "updatedAt": "2026-08-17T07:39:30+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/text-display",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/text-display/",
      "downloadUrl": "/downloads/community/text-display/7b9d1c2928ce9589/text-display.zip",
      "zipSha256": "8a1cf010eb4521581cd20a20ecb5a2212aee7534894aef73fdb39e94318c2019",
      "zipBytes": 768392,
      "files": [
        {
          "path": "app.py",
          "bytes": 5744,
          "sha256": "e1f85d91cff0bf6647c3d746ad44f409528984b948539c0690c926c7dfe5d426",
          "url": "/downloads/community/text-display/7b9d1c2928ce9589/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 134,
          "sha256": "345b5980c6742f2b5dc98247c6e9032c25680afae8a264331b7446f7d1fb5362",
          "url": "/downloads/community/text-display/7b9d1c2928ce9589/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 769853,
          "sha256": "e5e8a6417661cbcd2b6781e849f4e9bf5fb34557ce278108174a31724a1609a5",
          "url": "/downloads/community/text-display/7b9d1c2928ce9589/files/preview.gif.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/text-display/7b9d1c2928ce9589/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/tide-clock",
      "source": "community",
      "slug": "tide-clock",
      "name": "Tide Clock",
      "author": "daninsc",
      "description": "Alternates between a big clock and the next tide (high/low, height, time) for any NOAA station.",
      "tags": [
        "clock",
        "info"
      ],
      "preview": "/previews/community-tide-clock-310a1d12ca4df5fa.gif",
      "repo": null,
      "stillPreview": "/previews/community-tide-clock-310a1d12ca4df5fa.png",
      "socialImage": "/social/community/tide-clock.jpg",
      "animated": true,
      "authorSlug": "daninsc-0eb1da",
      "revision": "310a1d12ca4df5fa",
      "contentHash": "310a1d12ca4df5fa859d4da6f59a9002522bce4bad483074db8dced47aeedb93",
      "status": "active",
      "createdAt": "2026-08-12T09:05:21-04:00",
      "updatedAt": "2026-08-17T07:39:30+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/tide-clock",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/tide-clock/",
      "downloadUrl": "/downloads/community/tide-clock/310a1d12ca4df5fa/tide-clock.zip",
      "zipSha256": "0bf87965945900fa1597684799815fe7651df802891f4e2121ad07f39be9568b",
      "zipBytes": 19642,
      "files": [
        {
          "path": "app.py",
          "bytes": 6734,
          "sha256": "64d33da730b191b75a01399c38318d402a9287c5cb1592877ecf71971d004133",
          "url": "/downloads/community/tide-clock/310a1d12ca4df5fa/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 190,
          "sha256": "4ef99481653b22cfa95811abcdaa1380c3ca4a9a6cad9743195ccdd88073efe9",
          "url": "/downloads/community/tide-clock/310a1d12ca4df5fa/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 15703,
          "sha256": "ba345b5febf795e962d8ac4200222376b801b622856d3e48673284e23779b549",
          "url": "/downloads/community/tide-clock/310a1d12ca4df5fa/files/preview.gif.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/tide-clock/310a1d12ca4df5fa/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/uptime-bar",
      "source": "community",
      "slug": "uptime-bar",
      "name": "Uptime Bar",
      "author": "maxswinkels",
      "description": "Connects to your Uptime Kuma instance and draws every monitor as one cell in a wall of pixels: dim green while all is well, then a red takeover naming the site and its downtime when one fails.",
      "tags": [
        "monitor",
        "info",
        "utility"
      ],
      "preview": "/previews/community-uptime-bar-5733a86f14bfdaaa.gif",
      "repo": null,
      "stillPreview": "/previews/community-uptime-bar-5733a86f14bfdaaa.png",
      "socialImage": "/social/community/uptime-bar.jpg",
      "animated": true,
      "authorSlug": "maxswinkels-6a7386",
      "revision": "5733a86f14bfdaaa",
      "contentHash": "5733a86f14bfdaaa89abb7c5320d45d170b40d14e7a476e0ea1facef3a8d824b",
      "status": "active",
      "createdAt": "2026-08-14T11:27:56+02:00",
      "updatedAt": "2026-08-14T11:27:56+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/uptime-bar",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/uptime-bar/",
      "downloadUrl": "/downloads/community/uptime-bar/5733a86f14bfdaaa/uptime-bar.zip",
      "zipSha256": "9f62c2ba834d70687004aefba7dadc60d178f8d5ef2f8fda2e0a3fdfbe9f56b6",
      "zipBytes": 363770,
      "files": [
        {
          "path": "app.py",
          "bytes": 21324,
          "sha256": "abbf9306181f694c1525737b6d3a29962b831caea4929c7dfccbcad05e235954",
          "url": "/downloads/community/uptime-bar/5733a86f14bfdaaa/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 307,
          "sha256": "d98d00009a40b356b9bdb9eeda14dede858effdb5937a1c5a501d6ece0d9e4c0",
          "url": "/downloads/community/uptime-bar/5733a86f14bfdaaa/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 416232,
          "sha256": "07a58404006d8c355090cb93044afc5ae85a09d7fbdaeaa785ee1a3e6c3061df",
          "url": "/downloads/community/uptime-bar/5733a86f14bfdaaa/files/preview.gif.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/uptime-bar/5733a86f14bfdaaa/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/waves",
      "source": "community",
      "slug": "waves",
      "name": "Waves Simulator",
      "author": "robynhub",
      "description": "A lava-lamp-like ocean animation for BUSY Bar, with colorful moving waves, smooth transitions from calm to stormy seas, realistic gradients, foam, reflections, sound and configurable speed.",
      "tags": [
        "weather",
        "screensaver",
        "sound",
        "info"
      ],
      "preview": "/previews/community-waves-11137a6af17a3f9d.gif",
      "repo": null,
      "stillPreview": "/previews/community-waves-11137a6af17a3f9d.png",
      "socialImage": "/social/community/waves.jpg",
      "animated": true,
      "authorSlug": "robynhub-e86f81",
      "revision": "11137a6af17a3f9d",
      "contentHash": "11137a6af17a3f9d5c964a2f2fd2cdaf2746f5903f5ca29aaf882341631c7b91",
      "status": "active",
      "createdAt": "2026-08-11T16:17:20+02:00",
      "updatedAt": "2026-08-18T14:56:48+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/waves",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/waves/",
      "downloadUrl": "/downloads/community/waves/11137a6af17a3f9d/waves.zip",
      "zipSha256": "00e251049a1c21dfd0c72f72beeb16063f68c5e0e0cd596d253cd6fc11665ace",
      "zipBytes": 613462,
      "files": [
        {
          "path": "app.py",
          "bytes": 32049,
          "sha256": "c6be472938bbddb70bd7996e5d0e8282377005353e5e00d643ced9ee14e89877",
          "url": "/downloads/community/waves/11137a6af17a3f9d/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 318,
          "sha256": "0a7805c24ebdb49271d3f346ea51b4b89c35c08d4fccfec21251e66c5ce2b1bb",
          "url": "/downloads/community/waves/11137a6af17a3f9d/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 617512,
          "sha256": "4da49d76ca7b13d5e46e317342ab31760fba7f3434d54c3e8c83e4f883ff31eb",
          "url": "/downloads/community/waves/11137a6af17a3f9d/files/preview.gif.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/waves/11137a6af17a3f9d/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/weather-forecast",
      "source": "community",
      "slug": "weather-forecast",
      "name": "Weather Forecast",
      "author": "robynhub",
      "description": "Current weather and multi-day forecasts for BUSY Bar, with configurable location, units, and language.",
      "tags": [
        "weather",
        "info"
      ],
      "preview": "/previews/community-weather-forecast-25a76082db4138c4.png",
      "repo": null,
      "stillPreview": "/previews/community-weather-forecast-25a76082db4138c4.png",
      "socialImage": "/social/community/weather-forecast.jpg",
      "animated": false,
      "authorSlug": "robynhub-e86f81",
      "revision": "25a76082db4138c4",
      "contentHash": "25a76082db4138c47038961a02d17c25e3938720c895857eeb42e3090ea3fd8f",
      "status": "active",
      "createdAt": "2026-08-13T15:52:58+02:00",
      "updatedAt": "2026-08-17T07:39:30+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/weather-forecast",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/weather-forecast/",
      "downloadUrl": "/downloads/community/weather-forecast/25a76082db4138c4/weather-forecast.zip",
      "zipSha256": "06db19e1e90af2279dc5e8edd41cfc8a1f6e8bce441f65418389840400a3db96",
      "zipBytes": 8022,
      "files": [
        {
          "path": "app.py",
          "bytes": 15270,
          "sha256": "e47601cc6ee4f59e0a369b2da20d724f356f59bdbd7aae11c4dbc23c720b4d8f",
          "url": "/downloads/community/weather-forecast/25a76082db4138c4/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 206,
          "sha256": "8c0d00774f1a30adc37c4ae9da3b42024e9b0bbec9b8b0ca13f2469687d355c2",
          "url": "/downloads/community/weather-forecast/25a76082db4138c4/files/manifest.yaml.bin"
        },
        {
          "path": "preview.png",
          "bytes": 2033,
          "sha256": "98a8c26458b80ef32252bf417b746582c0ba73605e452ce3e8c35f9fe7788ba4",
          "url": "/downloads/community/weather-forecast/25a76082db4138c4/files/preview.png.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/weather-forecast/25a76082db4138c4/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    },
    {
      "id": "community/workout-timer",
      "source": "community",
      "slug": "workout-timer",
      "name": "Workout Timer",
      "author": "teunbruijnen",
      "description": "Interval timer for Tabata, fixed-rest (work at your own pace) and fixed-work (rest as long as you need) workouts, set up on the bar, with BUSY timer sounds and a recap.",
      "tags": [
        "timer",
        "fitness",
        "workout"
      ],
      "preview": "/previews/community-workout-timer-5f1a3e81ad5ca2c2.gif",
      "repo": null,
      "stillPreview": "/previews/community-workout-timer-5f1a3e81ad5ca2c2.png",
      "socialImage": "/social/community/workout-timer.jpg",
      "animated": true,
      "authorSlug": "teunbruijnen-1ca9b9",
      "revision": "5f1a3e81ad5ca2c2",
      "contentHash": "5f1a3e81ad5ca2c224074b833c1da2ea5a96bcd4ae6d0d3b422da4ed8298dcfb",
      "status": "active",
      "createdAt": "2026-10-15T09:53:28+02:00",
      "updatedAt": "2026-10-15T09:53:28+02:00",
      "provenance": {
        "repository": "maxswinkels/busybar-apps",
        "path": "apps/workout-timer",
        "commit": "26b19ba9ce2ba192c45b4c0eadcfad53df42b153"
      },
      "url": "/apps/community/workout-timer/",
      "downloadUrl": "/downloads/community/workout-timer/5f1a3e81ad5ca2c2/workout-timer.zip",
      "zipSha256": "7de7574e05e61141e080ca488b73101291c4c15245205d38d847f4be5794264d",
      "zipBytes": 277830,
      "files": [
        {
          "path": "app.py",
          "bytes": 60601,
          "sha256": "ac3ea0d30c8049fea9f98dbf3d2fa7595867d026acd7820175834083360e8d9c",
          "url": "/downloads/community/workout-timer/5f1a3e81ad5ca2c2/files/app.py.bin"
        },
        {
          "path": "manifest.yaml",
          "bytes": 286,
          "sha256": "acb7b895811f3c756da619c8cffedab6b6a7cd40b5eb3a980d68ec4e9df496c0",
          "url": "/downloads/community/workout-timer/5f1a3e81ad5ca2c2/files/manifest.yaml.bin"
        },
        {
          "path": "preview.gif",
          "bytes": 406980,
          "sha256": "172d2b0ab124f465ddcf97454826ed0b7329d6d3de6f31bd25d22166c3b8bc8b",
          "url": "/downloads/community/workout-timer/5f1a3e81ad5ca2c2/files/preview.gif.bin"
        },
        {
          "path": "LICENSES/UPSTREAM-MIT.txt",
          "bytes": 1083,
          "sha256": "aa14390813e9e3fc1bb0ee5b7a2fc6a8b2d6ff3efba9bba0f7100fe31ae4c3e6",
          "url": "/downloads/community/workout-timer/5f1a3e81ad5ca2c2/files/LICENSES/UPSTREAM-MIT.txt.bin",
          "generated": true
        }
      ],
      "readme": null,
      "requirements": "",
      "rating": 0,
      "comments": 0,
      "discussionNumber": null,
      "downloads": 0
    }
  ]
}
