A native Linux RSS/Atom feed reader built with Swift and GTK4/libadwaita, inspired by NetNewsWire.
- π° RSS/Atom Support: Full RSS 2.0 and Atom 1.0 feed parsing
- π¨ Native GNOME UI: Built with GTK4 and libadwaita for seamless desktop integration
- π Smart Folders: Built-in All, Unread, and Starred article collections
- π Three-Column Layout: Familiar feed reader interface with feeds, articles, and reader panes
- πΎ SQLite Database: Persistent storage for feeds and articles
- π Async Networking: Modern Swift concurrency with AsyncHTTPClient
- π― Swift 6: Built with the latest Swift language features
GNewsWire/
βββ Sources/
β βββ GNewsWire/
β βββ Models/ # Feed, Article, Author data models
β βββ Views/ # Adwaita UI views
β βββ Services/ # Feed parsing and fetching
β βββ GNewsWireApp.swift
βββ Package.swift # Swift package manifest
βββ run.sh # Build and run script
- Adwaita for Swift: SwiftUI-like declarative UI framework for GNOME
- SQLite.swift: Type-safe SQLite database layer
- AsyncHTTPClient: Modern async HTTP networking
- XMLCoder: XML parsing for RSS/Atom feeds
# Install GTK4 and libadwaita development packages
sudo apt install libgtk-4-dev libadwaita-1-dev # Debian/Ubuntu
sudo dnf install gtk4-devel libadwaita-devel # Fedora
sudo pacman -S gtk4 libadwaita # Arch
# Swift 6.0+ is required
# Visit https://swift.org/install for installation instructions# Clone the repository
git clone https://github.com/yourusername/GNewsWire.git
cd GNewsWire
# Build
swift build
# Run
./run.sh
# or
.build/debug/GNewsWire- Launch: Run the app to see the three-column interface
- Smart Folders: Browse built-in collections:
- π All Articles: View all available articles
- π¨ Unread: Filter to unread articles only
- β Starred: View your starred/favorited articles
- Adding Feeds: Click the + menu in the toolbar:
- Select "Add Hacker News" for tech news
- Select "Add BBC News" for world news
- Reading: Click any article to read it in the right pane
- Article Actions: Use buttons in the reader to:
- Mark as Read/Unread
- Star/Unstar articles
- Open in browser
This project showcases modern Swift development for Linux desktop:
- Full Swift 6.0 language features and concurrency
- Native Linux implementations (no Foundation/AppKit dependencies)
- GTK4/libadwaita integration through Swift bindings
Using declarative UI patterns similar to SwiftUI:
NavigationSplitView(sidebar: {
FeedListView(feeds: $feeds, selectedFeed: $selectedFeed)
}) {
ArticleListView(articles: $articles, selectedArticle: $selectedArticle)
}SQLite.swift with namespace-aware types to handle Swift 6 changes:
// Avoid Foundation.Expression conflict with explicit namespace
private let feedIdCol = SQLite.Expression<Int64>("id")
private let feedTitle = SQLite.Expression<String>("title")Comprehensive RSS/Atom parsing with XMLCoder:
- RSS 2.0 with enclosures and categories
- Atom 1.0 with multiple link relations
- Automatic feed type detection
- Multiple date format support (RFC822, ISO8601)
- Complete three-column UI layout
- RSS/Atom feed parser with full spec support
- SQLite database with feeds and articles tables
- Smart folders (All, Unread, Starred)
- Feed selection and article viewing
- Sample article data for testing
- Article read/unread status
- Star/favorite functionality
- Basic feed management menu
- Live feed fetching with progress indicators
- OPML import/export
- Feed categories and folders
- Full-text search
- Keyboard shortcuts (j/k navigation)
- WebKit article rendering
- Feed edit/delete functionality
- Sync service integration
- System notifications
- Offline reading mode
The project follows Swift API Design Guidelines with Linux-specific adaptations:
- Declarative UI with Adwaita's SwiftUI-like syntax
- Protocol-oriented design for services
- Async/await for network operations
- Value types for models
swift testContributions are welcome! Areas needing help:
- Feed fetching robustness
- UI polish and animations
- Keyboard navigation
- Performance optimization
- Documentation
| Feature | NetNewsWire | GNewsWire |
|---|---|---|
| Platform | macOS/iOS | Linux/GNOME |
| UI Framework | SwiftUI/AppKit | GTK4/libadwaita |
| Database | Core Data | SQLite |
| Sync | iCloud/Feedbin | Planned |
| Feed Formats | RSS/Atom/JSON | RSS/Atom |
| Swift Version | 5.x | 6.0 |
GNU General Public License v3.0 - See LICENSE file for details
This ensures GNewsWire remains free software for the community.
- Inspired by NetNewsWire by Brent Simmons
- Built with Adwaita for Swift by David MΓΌller
- Uses SQLite.swift by Stephen Celis
- XML parsing by XMLCoder
The app features a clean GNOME-native interface:
- Left sidebar: Feed list with unread counts and icons
- Center: Article list with read/unread indicators
- Right: Article reader with action buttons
(Live screenshots coming soon - run the app to see it in action!)
Note: This is a proof-of-concept demonstrating Swift's viability for Linux desktop development. While functional, it's not yet ready for daily use. Contributions and feedback are highly encouraged!