English | ไธญๆ็
DevRadar is a desktop application that turns GitHub into your personal developer radar. It monitors trending repositories, tracks developer activity in real time, and generates insightful reports โ all from a sleek dark-themed GUI, no browser needed.
Whether you're hunting for the next viral open-source project, keeping tabs on what your favorite developers are committing, or building a personal tech briefing, DevRadar puts the pulse of GitHub on your desktop.
| # | Feature | Description |
|---|---|---|
| ๐ฅ | GitHub Trending | Scrape and browse trending repos by language (daily / weekly / monthly) with automatic failover between HTML scraping and a fallback API |
| ๐ | Global Search | Search GitHub repositories with filters (language, stars range, sort order); rate-limit aware with exponential backoff retry |
| ๐ฏ | Targeted Monitoring | Monitor any GitHub user or repository for real-time events โ pushes, releases, issues, PRs, stars, forks, and more |
| ๐ก | Live Event Stream | Real-time event feed with importance-based highlighting (gold for releases/PRs, cyan for issues, gray for pushes) and desktop notifications |
| โญ | Star Snapshot & Chart | Automatic periodic star-count collection; visualize growth trends with matplotlib-powered dark-theme charts |
| ๐ | Project Insight | Deep-dive into any repo: star history, health metrics (open issues, forks, watchers, license), top contributors, and topic tags |
| ๐ | Personal Tech Briefing | One-click Markdown report generation covering your monitored repos, trending top 5, bookmarks, and search history |
| ๐ | Local Bookmarks | Save interesting repositories locally with notes, searchable offline |
| ๐ก | Full Fault Tolerance | Rate-limit warnings, auto-reconnect with exponential backoff, graceful degradation, and comprehensive logging |
[ Coming soon โ see the Chinese version for a preview image ]
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ DevRadar Desktop App โ
โโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโค
โ โ โ โ
โ ๐จ GUI Layer โ ๐ง Common Layer โ ๐ฅ Server Layer โ
โ (PyQt6) โ โ โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโโโโ โ
โ โ Search Panel โ โ โ Config Manager โ โ โ GitHub API โ โ
โ โ Trending Panel โ โ โ (env โ JSON) โ โ โ (REST, caching) โ โ
โ โ Monitor Panel โ โ โ Logger โ โ โ Trending Scraperโ โ
โ โ Stream Panel โ โ โ (Rotating file) โ โ โ (HTML + API) โ โ
โ โ Insight Dialog โ โ โ Protocol โ โ โ DB Manager โ โ
โ โ Report Generator โ โ โ (JSON Socket) โ โ โ (SQLite, WAL) โ โ
โ โโโโโโโโโโฌโโโโโโโโโโ โ โโโโโโโโโโโโโโโโโโโ โ โ Monitor Sched. โ โ
โ โ โ โ โ Snapshot Mgr โ โ
โ โผ โ โ โ Report Gen. โ โ
โ โโโโโโโโโโโโโโโโโโโ โ โ โโโโโโโโโโโโโโโโโโโ โ
โ โ Socket Client โ โ โ โฒ โ
โ โ (auto-reconnect) โ โ โ โ โ
โ โโโโโโโโโโฌโโโโโโโโโโ โ โ โโโโโโโโโโดโโโโโโโโโ โ
โ โ โ โ โ TCP Socket โ โ
โ โโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโผโโโค (JSON / \n) โ โ
โ โ โ โ 127.0.0.1:9669 โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโดโโโโโโโ โ
โ SQLite โ โ
โ devradar.dbโ โ
โ 6 tables โ โ
โโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
The client and server communicate over TCP Socket with JSON-delimited messages (\n-terminated). The protocol supports:
- Commands: add/remove/list monitors, search repos, fetch trending, generate reports, manage bookmarks
- Push events: real-time event delivery from server to client
- Heartbeat: keep-alive every 30 seconds
- Status: rate-limit warnings, connection state
- Python 3.10+
- A GitHub Personal Access Token (optional but recommended โ without it, API rate limit is only 60 req/hour)
# 1. Clone the repository
git clone https://github.com/TrueFurina/DevRadar-GitHub-Trending-Monitor.git
cd DevRadar-GitHub-Trending-Monitor
# 2. Install dependencies
pip install -r requirements.txt
# 3. (Optional) Configure your GitHub token
# Create data/config.json or set the GITHUB_TOKEN environment variable
echo '{"github_token": "ghp_xxxxxxxxxxxx"}' > data/config.jsonpython run.pyOr double-click ๅฏๅจDevRadar.bat on Windows.
Configuration is loaded with the following priority: Environment variable > config.json > Defaults.
| Key | Default | Description |
|---|---|---|
github_token |
"" |
GitHub Personal Access Token |
poll_interval_seconds |
300 |
Monitor polling interval (5 min) |
trending_refresh_seconds |
600 |
Trending auto-refresh interval (10 min) |
snapshot_interval_hours |
6 |
Star snapshot interval |
report_period |
weekly |
Default report period |
default_language |
python |
Default trending language |
notification_enabled |
true |
Desktop notifications |
max_history_days |
30 |
Event retention period |
socket_host |
127.0.0.1 |
Server bind address |
socket_port |
9669 |
Server port |
trending_source |
html |
Trending source: html or api |
# Windows
set GITHUB_TOKEN=ghp_xxxxxxxxxxxx
# Linux / macOS
export GITHUB_TOKEN=ghp_xxxxxxxxxxxx- Start the app โ
python run.py - Configure Token โ If not set, press Enter to continue (limited functionality)
- Browse Trending โ Select language/period in the Trending panel, click Refresh
- Search Projects โ Type in the search bar, use filters to narrow results
- Add Bookmarks โ Right-click on any result โ Bookmark
- Add Monitor โ In the Monitor panel, enter a username (e.g.,
torvalds) or repo (torvalds/linux) - Generate Report โ Menu
File โ Generate ReportorCtrl+R
| Action | Method |
|---|---|
| Search repositories | Search bar + Enter |
| Browse trending | Trending panel โ select language/period โ Refresh |
| Add monitor | Monitor panel โ enter username or repo |
| Edit filter rules | Monitor list โ right-click โ Edit filters |
| Bookmark a repo | Search/Trending result โ right-click โ Bookmark |
| Generate report | Menu File โ Generate Report (Ctrl+R) |
| View insight | Trending list โ right-click โ View Insight |
| Open in browser | Double-click any repo, or right-click โ Open in Browser |
The application uses SQLite (data/devradar.db, WAL mode) with 6 tables:
| Field | Type | Description |
|---|---|---|
| id | INTEGER PK | Primary key |
| target | TEXT UNIQUE | Target (username or owner/repo) |
| type | TEXT | user or repo |
| filters | TEXT (JSON) | Filter rules (event types, keywords) |
| added_at | TIMESTAMP | Created timestamp |
| Field | Type | Description |
|---|---|---|
| id | INTEGER PK | Primary key |
| monitor_id | INTEGER FK | References monitors |
| event_type | TEXT | GitHub event type |
| payload | TEXT (JSON) | Full event payload |
| repo_name | TEXT | Repository name |
| actor | TEXT | Event actor |
| url | TEXT | Event URL |
| received_at | TIMESTAMP | Received timestamp |
| Field | Type | Description |
|---|---|---|
| id | INTEGER PK | Primary key |
| language | TEXT | Programming language |
| since | TEXT | daily / weekly / monthly |
| repo_id | TEXT | Repository identifier |
| repo_full_name | TEXT | Full repository name |
| data | TEXT (JSON) | Full data payload |
| fetched_at | TIMESTAMP | Fetch timestamp |
| Field | Type | Description |
|---|---|---|
| id | INTEGER PK | Primary key |
| repo_full_name | TEXT | Repository name |
| star_count | INTEGER | Star count |
| recorded_at | TIMESTAMP | Recording timestamp |
| Field | Type | Description |
|---|---|---|
| id | INTEGER PK | Primary key |
| repo_full_name | TEXT UNIQUE | Repository name |
| repo_url | TEXT | Repository URL |
| description | TEXT | Description |
| language | TEXT | Language |
| stars | INTEGER | Star count |
| note | TEXT | Personal note |
| saved_at | TIMESTAMP | Save timestamp |
| Field | Type | Description |
|---|---|---|
| id | INTEGER PK | Primary key |
| query | TEXT | Search query |
| searched_at | TIMESTAMP | Search timestamp |
| Scenario | Handling |
|---|---|
| API Rate Limit | Check X-RateLimit-Remaining; orange warning at < 50, pause polling at < 20 |
| Network Timeout | timeout=15s, auto-retry 3 times with exponential backoff (1.5x) |
| Invalid Token | Clear 401 error message with guidance |
| Scraper Failure | Auto-fallback to backup API when HTML parsing returns empty |
| Socket Disconnect | Client auto-reconnects with exponential backoff (1s โ 30s), shows reconnection status |
| Database Error | All operations wrapped in try-except, logged, with user-friendly messages |
| Event Cleanup | Auto-purge events older than 30 days every 50 inserts to prevent DB bloat |
| Empty Chart Data | Shows "Data collecting (X/7 days recorded)" instead of crashing |
| Invalid Monitor Target | API validation before adding; 404 targets are rejected |
| Component | Technology |
|---|---|
| GUI Framework | PyQt6 |
| Network | TCP Socket (JSON protocol) |
| Database | SQLite (WAL mode, thread-safe) |
| Web Scraping | BeautifulSoup4 |
| HTTP Client | Requests (retry adapter, connection pooling) |
| Charts | matplotlib (dark theme) |
| Logging | RotatingFileHandler (5MB ร 3) |
| Packaging | PyInstaller (optional) |
Contributions are welcome! Here's how to get started:
- Fork the repository
- Create a new branch:
git checkout -b feature/your-feature-name - Make your changes
- Run the application and verify it works
- Submit a Pull Request
# Clone your fork
git clone https://github.com/YOUR_USERNAME/DevRadar-GitHub-Trending-Monitor.git
cd DevRadar-GitHub-Trending-Monitor
# Install dev dependencies
pip install -r requirements.txt
# Run in development mode
python run.pypip install pyinstaller
pyinstaller --onefile --windowed run.py --name DevRadarMake sure data/ directory is placed alongside the executable.
Q: Can't connect to server after launch?
A: Check if port 9669 is in use. If so, change socket_port in data/config.json and restart.
Q: Search returns no results? A: The search API needs network access. Check the status bar for remaining API calls. If 0, you've hit the rate limit.
Q: Trending data is empty? A: The scraper fetches from the GitHub Trending page. If the page changes, the system automatically falls back to a backup API.
Q: Too many notifications?
A: Go to Tools โ Settings and uncheck "Enable notifications".
Q: Where is the database file?
A: data/devradar.db. Deleting it will lose all monitors and bookmarks; the system will recreate it automatically.
This project is licensed under the MIT License โ see the LICENSE file for details.
Built with โค๏ธ using Python, PyQt6, and the GitHub REST API.
DevRadar โ Your personal window into the open-source universe.
Source-Available ยท All Rights Reserved
This project is source-available and all rights are reserved by the author. The code is provided for viewing and evaluation purposes only โ access does not grant any right to copy, modify, redistribute, use commercially, or create derivative works. Unauthorized reuse may carry legal risk. Contact the author for explicit written permission before any other use.
ๆฌไปๅบไธบใๆบ็ ๅฏๆฅใๆๅฉไฟ็ใ้กน็ฎ๏ผsource-available / all-rights-reserved๏ผใไปฃ็ ไป ไพๆฅ็ไธ่ฏไผฐ๏ผๆชๆๆไปปไฝๅคๅถใๅๅๅใไฟฎๆนใๅ็จๆ่ก็ๅไฝใๆ ่ชๅ็จไปฃ็ ๅญๅจๆณๅพ้ฃ้ฉ๏ผๅฆๆ้่ฆ่ฏทๅ ่็ณปไฝ่ ่ทๅๆ็กฎไนฆ้ข่ฎธๅฏใ