{"id":15669741,"url":"https://github.com/alexgustafsson/rssbar","last_synced_at":"2025-06-15T11:05:27.557Z","repository":{"id":242094396,"uuid":"807810104","full_name":"AlexGustafsson/RSSBar","owner":"AlexGustafsson","description":"An application for RSS, Atom and JSON feeds in the macOS menu bar","archived":false,"fork":false,"pushed_at":"2025-02-09T18:53:51.000Z","size":5760,"stargazers_count":3,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-31T02:34:22.328Z","etag":null,"topics":["atom","jsonfeed","macos","menubar","rss","swift","swiftpm","swiftui"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AlexGustafsson.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":"SupportingFiles/RSSBar/icon.png","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-29T20:19:06.000Z","updated_at":"2025-02-09T18:53:54.000Z","dependencies_parsed_at":"2025-03-10T08:43:58.001Z","dependency_job_id":null,"html_url":"https://github.com/AlexGustafsson/RSSBar","commit_stats":null,"previous_names":["alexgustafsson/rssbar"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexGustafsson%2FRSSBar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexGustafsson%2FRSSBar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexGustafsson%2FRSSBar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexGustafsson%2FRSSBar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AlexGustafsson","download_url":"https://codeload.github.com/AlexGustafsson/RSSBar/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252761752,"owners_count":21800202,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["atom","jsonfeed","macos","menubar","rss","swift","swiftpm","swiftui"],"created_at":"2024-10-03T14:41:03.685Z","updated_at":"2025-05-06T20:20:52.671Z","avatar_url":"https://github.com/AlexGustafsson.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\".github/banner.png\" alt=\"Banner\"\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/swiftlang/swift/releases/tag/swift-6.0-RELEASE\"\u003e\u003cimg src=\"https://flat.badgen.net/badge/Swift/6.0/orange\" alt=\"Swift Version 6.0\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/AlexGustafsson/RSSBar/releases\"\u003e\u003cimg src=\"https://flat.badgen.net/github/release/AlexGustafsson/RSSBar\" alt=\"Latest Release\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/AlexGustafsson/RSSBar/blob/main/Package.swift\"\u003e\u003cimg src=\"https://flat.badgen.net/badge/platform/macOS%2015/gray\" alt=\"Platform macOS 15\" /\u003e\u003c/a\u003e\n  \u003cbr\u003e\n  \u003cstrong\u003e\u003ca href=\"#quickstart\"\u003eQuick Start\u003c/a\u003e | \u003ca href=\"#contribute\"\u003eContribute\u003c/a\u003e \u003c/strong\u003e\n\u003c/p\u003e\n\n# RSSBar\n\n### An application for RSS, Atom and JSON feeds in the macOS menu bar\n\n## Features\n\n- Native UI\n- Fast and efficient\n- Supports RSS, Atom and JSON Feed\n- Supports alternate links (finds feeds from a regular web page)\n- Supports Intel and Apple silicon\n- Supports macOS 15 (Sequoia) and later\n- Import and export of feeds\n\n## Quickstart\n\nTBD\n\n## Screenshots\n\n## Overview\n\n![menu bar screenshot](./docs/screenshots/overview.png)\n\n## Other\n\n| Light mode                                                                                | Dark mode                                                                               |\n| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |\n| ![menu bar screenshot light mode](./docs/screenshots/light/menu-bar.png)                  | ![menu bar screenshot dark mode](./docs/screenshots/dark/menu-bar.png)                  |\n| ![menu bar feed screenshot light mode](./docs/screenshots/light/menu-bar-feed.png)        | ![menu bar feed screenshot dark mode](./docs/screenshots/dark/menu-bar-feed.png)        |\n| ![settings feeds light mode](./docs/screenshots/light/settings-feeds.png)                 | ![settings feeds dark mode](./docs/screenshots/dark/settings-feeds.png)                 |\n| ![settings feeds details light mode](./docs/screenshots/light/settings-feeds-details.png) | ![settings feeds details dark mode](./docs/screenshots/dark/settings-feeds-details.png) |\n| ![settings advanced light mode](./docs/screenshots/light/settings-advanced.png)           | ![settings advanced dark mode](./docs/screenshots/dark/settings-advanced.png)           |\n\n## Contribute\n\n### Building\n\n```shell\n# Build and run the app\nmake run\n\n# Run tests\nmake test\n\n# Buld the app\nmake build\n\n# Lint and format code\nmake lint\nmake format\n\n# Build the app bundle\nmake app\n\n# Buld the installer (requires node and npm)\nmake installer\n```\n\n### Signing\n\n1. Create a self-signed certificate using the Keychain \u003e Certificate Assistant.\n2. Either use the basic / quick wizard and select the code signing type, or use\n   the advacned wizard and enable (at least) signatures and the code signing\n   extended usage.\n3. Mark the certificate as trusted for code signing.\n4. Build the installer with `CODESIGN_IDENTITY` set to the name of your\n   identity.\n\n### SwiftUI\n\n1. Extract To Separate Struct: Use when you want something, custom and reusable.\n2. Extract To Local Computed Property: Use when you want something private and internal.\n3. Extract To A Function: Also works for something private and internal, but personally I would prefer a computed property for that use case.\n4. Extract To an @ViewBuilder Function: Great for when you want to enable another View to pass you a View.\n5. Extract To an @ViewBuilder Computed Property: Great for when you need something internal and private, that also has some internal logic, especially if you need to erase Type.\n6. Extract To static func or var: Great for when you want mock example Views.\n7. Extract To A Style: Great for when you only want to extract custom styling but not custom logic.\n\n### SwiftData gotchas\n\n- Sometimes, you have to populate relationships before saving them, sometimes\n  not. Not doing so can make SwiftData crash.\n- Sorting an array of a SwiftData model does not always sort the array - not\n  even in the local scope. Always store a temporary array first, sort it, and\n  then assign it to the model.\n- Sometimes, if you look at SwiftData in the wrong way, it will look back and\n  crash. The crashes never come with helpful errors. You'll have to use a\n  debugger and try to correlate them (segfaults and what not), or comment out\n  code until you find the culprit.\n- This one is well documented, but always create a new `ModelContext` for every\n  thread. This includes completion handlers.\n\n### Resources\n\n- \u003chttps://book.hacktricks.xyz/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox\u003e\n- \u003chttps://developer.apple.com/documentation/bundleresources/placing_content_in_a_bundle\u003e\n\n## Similar software\n\nIn the past I've used both RSSBot and baRSS. Both of which work great. I decided\nto write RSSBar for a few different reasons:\n\n- Native support for Apple silicon. RSSBot, for example, requires Rosetta\n- Support additional feed formats, without any third-party dependencies. RSSBot\n  and baRSS, for example both only support RSS. baRSS uses RSXML.\n- Include an expressive, native UI that feels at home in macOS Sonoma and later\n\nRegarding the last point; the UI is made to look similar to the Wi-Fi menu bar\napplication as well as Safari's password settings.\n\nNote that RSSBar is not nor ever will be an \"RSS reader\". There are some great\nones out there, though:\n\n- \u003chttps://netnewswire.com\u003e\n- \u003chttps://www.vienna-rss.com\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexgustafsson%2Frssbar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexgustafsson%2Frssbar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexgustafsson%2Frssbar/lists"}