Extension Details

- GitHub
- by Toni Förster
- 179 Recent Installs | 702 Total Installs
- Browse, manage, and triage GitHub issues and pull requests directly from Nova’s sidebar.
- Repository
- Bug Reports
-
Read & Write Files
-
Send Network Requests
-
Read & Write Clipboard
-
This extension is allowed to:
Readme
GitHub for Nova
A native GitHub integration for Nova that brings issues and pull requests into
your sidebar — with full read/write capabilities and smart caching to avoid rate
limits.
This extension is still in early development.
Use with caution — although rate limit protection is built in, you may still
encounter GitHub API limits under heavy usage.
Features
-
Browse Repositories
View and switch between configured GitHub repositories directly from the sidebar. -
Issues & Pull Requests
See open and closed issues and PRs in real time, including: -
Author, assignees, labels, milestone
- Comments (up to 25 lines previewed)
- Special status: duplicate, not planned, completed, merged, etc.
-
Draft status for pull requests
-
Auto-Refresh with Smart Throttling
Refreshes automatically at your defined interval — but only if needed.
Skips API calls if data was recently fetched. -
Caching & Offline Support
Caches everything to disk: -
Issues and PRs
- Comments and review comments
-
ETags to minimize bandwidth
Falls back to cached data when rate-limited or offline. -
Actions
-
Create new issue or pull request
- Close or reopen issues (with reason support)
- Open any item in the browser
-
Copy URLs for sharing
-
Secure Token Storage
Your GitHub token is stored in the macOS Keychain. Never in plaintext.
Notes
- Pull requests are enhanced with merge and draft info via an extra API call per PR.
- The extension avoids unnecessary requests and skips fetching if the view is unchanged.
- Supports both public and private repositories (as long as the token is valid).
Multiple Accounts (Work & Personal)
Automatic detection: when you open a project that is a GitHub
checkout, the extension reads its .git/config and offers the repo:
- If it belongs to your configured account and is in your Repositories
list, it becomes this workspace's active repo automatically. - If it belongs to a different account (e.g. a work organization) or is
not in your list, a one-time notification asks whether to use it in
this workspace.
Detected repositories are stored by the extension itself — nothing is
written to Nova's settings or the project's .nova folder. To remove
one, right-click its row in the Repositories section and choose
Forget Detection.
The GitHub Username and Repositories settings can still be
overridden per Nova workspace manually. Nova reads the workspace value
first and falls back to the global setting:
- Open the project that should use a different account.
- Go to Project Settings → Extensions → GitHub.
- Set GitHub Username (e.g. your work organization) and the
Repositories list for that workspace.
Tokens are stored in the macOS Keychain per username, so each account uses
its own Personal Access Token automatically — paste the matching token once
per account. The token setting itself is deliberately global-only:
workspace configuration lives in the project's .nova folder, which is
often checked into source control, and tokens are never written there.
🔒 Privacy
All authentication is handled via your own GitHub token. No external servers or tracking.
Release Notes
Version 0.9.3
Fixes
- Closing or reopening an issue now moves it into the correct section
immediately: GitHub's list endpoints lag behind the state change, so
the previous immediate refetch put the item right back until the next
full cycle. The move is applied optimistically and re-asserted on
every fetched list until the server reflects it (at most 2 minutes).
Version 0.9.2
Fixes
- Forget Detection now cleans up properly: the workspace selection no
longer keeps pointing at the forgotten repo (its issues and PRs kept
loading, and the stale value lingered in the config). It is dropped —
auto-selecting the first remaining repository, or cleared when none
remain — and the issue/PR views are purged immediately. Repos that are
also configured manually keep their selection and row. - The repo-list fallback no longer claims the selection before
auto-detection applies: a fresh workspace now persists the detected
repository in its canonical owner/repo form instead of a bare name
racing the detection flow.
Version 0.9.1
Fixes
- The Repositories section now shows in both sidebars: the section was
declared twice (Issues and PRs) under one id with a single view
instance, so Nova left one sidebar's section without a provider until
a restart happened to re-bind it. The PR sidebar's section now has its
own view driven by the same provider — both render identical data,
list changes reload both, and selecting a repository in either
sidebar sets the current repo for both.
Version 0.9.0
Features
- Tokens are now stored per authenticated account: a personal login and all
organizations it can access share one Keychain entry, so rotating the
Personal Access Token updates every repository at once; existing installs
are mapped over automatically - Workspaces can hold their own Personal Access Token next to the workspace
Username override — a second account is finally a complete per-workspace
setup - Repository detection gained controls: a global on/off toggle (on by
default), and a declined prompt is remembered per workspace (clear the
workspace setting or run Forget Detected Repository to be asked again) - The auto-detected repository anchors the Repositories list — always shown
first, with manually configured repositories alongside; a new workspace
toggle can additionally include the globally configured repositories (off
by default, workspace entries win on duplicates)
Fixes
- A newly confirmed repository no longer sits empty until the next
auto-refresh: detection- and config-driven refreshes now repaint their
views - Freshness is tracked per repository instead of one global timestamp —
opening a workspace with a stale repo fetches once instead of serving
another workspace's data, and budget-low or rate-limited cycles no longer
suppress the retry - Failed logins (401) no longer trigger a 60-second fetch pause with a
misleading "rate limit reached" alert; the real token warning shows
instead - PR detail requests now respect the budget and rate-limit gates, and PR
details are cached on disk so unchanged PRs are not refetched after a
restart - The "Repository not found" alert no longer contradicts the add-repository
prompt when a stale selection points at a repo that isn't configured here - The Repositories section no longer shows a divider under its only repo
- Rate-limit log lines now include the HTTP status, a reset countdown, and
a message when the limit is released
Performance
- Opening a workspace costs 2 list requests plus only the PRs that actually
changed (previously one request per PR on every start)
Version 0.8.0
Features
- Detected repositories are now manageable: right-click a detected row in
the Repositories section and choose Forget Detection to remove it;
detected rows are also clickable like configured ones - Detection storage moved out of Nova's configuration system into the
extension's own storage — nothing is written to Nova settings or the
project's.novafolder, and already-detected workspaces no longer
re-prompt - Error messages: the extension now shows alerts for 401 (bad token), 403
(missing scopes), 404 (no access or deleted repo — once per session),
rate-limit hits, and a low API budget, instead of failing silently with
an empty sidebar
Performance
- Halved the number of list requests: issues and pull requests of the same
state share one request - Auto-refresh pauses when the API budget is low and serves cached data
until the limit resets; manual refresh always works - Comment caches validate against the parent item's timestamp, so comment
changes refetch even when the count is unchanged - Disk caches are pruned after successful refreshes (removed items, legacy
files, orphaned directories)
Fixes
- No config traffic during activation — with a second extension also
touching configuration, activation could deadlock Nova - Repo switching no longer fetches everything twice
Version 0.7.0
Features
- Automatic repository detection: opening a GitHub checkout offers its
repository from.git/config. Same account + configured repo → set as
this workspace's active repo automatically; different account or unknown
repo → one-time confirmation dialog - Lazy comment loading: comments fetch when a Comments group is expanded
instead of all up front, and request concurrency is capped - Rate-limit handling hardened: the limit flag is held at least 60s,
warnings are logged once per window, and identical concurrent requests
share one network call
Fixes
- Config values resolve with an explicit global fallback and are cached,
eliminating freezes from config read/write storms - Stale workspace repo values no longer show when no repositories are
configured
Version 0.6.1
Features
- Workspace settings UI: GitHub Username and Repositories can now be set
per project under Project Settings → Extensions → GitHub (the runtime
already supported overrides — the settings UI was previously missing)
Fixes
- Config values now resolve correctly when only the global setting is set
(workspace values no longer shadow the global ones)
Performance
- Config reads are cached and debounced, fixing a freeze when entering the
Personal Access Token
Version 0.6.0
Features
- Per-workspace accounts: override GitHub Username and Repositories in
Project Settings (e.g. a work organization at work, your personal account
elsewhere); global settings keep working as a fallback - Tokens are resolved per username from the Keychain, so multi-account
setups work automatically
Version 0.5.0
Features
- Browse and switch between configured GitHub repositories in the sidebar
- Open and closed issues and pull requests with comments, labels,
milestones, and status reasons - Disk caching with ETag revalidation and rate-limit fallbacks
- Token stored securely in the macOS Keychain
Fixes
- Refresh now revalidates with the API instead of serving a stale
in-memory cache - Config observers use full setting keys so setting changes take effect
immediately - Reduced duplicate API requests by memoizing pull request detail
hydration - Auto-refresh timer is cleared on deactivation
License
MIT License
Copyright (c) 2025 Toni Förster
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Help
Configuration
In Nova's Extension Settings:
Required
- GitHub Username – Your GitHub username or organization name.
- Personal Access Token – A GitHub token with appropriate scopes; stored securely in the Keychain.
- Repositories – A list of repositories in
repoformat.
Token
Paste your GitHub Personal Access Token into the Token field.
It will be securely stored using the system Keychain and no longer visible after saving.
Optional
- Refresh Interval – How often to auto-refresh data (in minutes).
- Items per Page – The GitHub API pagination size.
- Max Recent Items – Maximum number of issues and PRs to fetch.
Per-Workspace Settings
GitHub Username and Repositories can be overridden per project:
open the project and go to Project Settings → Extensions → GitHub.
The workspace value wins over the global one, so you can use a work
organization in one project and your personal account in another.
Tokens are stored per username in the Keychain — paste the matching
Personal Access Token once per account. The Token field is global-only:
workspace settings are saved to the project's .nova folder and tokens
are never written there.
Automatic Repository Detection
When you open a project that is a GitHub checkout, the extension reads
its .git/config and offers the repository it belongs to. If it uses a
different account than the one configured, a notification asks first;
the detected account and repo are then used for this workspace only.
Detected repositories are stored by the extension itself (in
~/Library/Application Support/Nova/Extensions/stonerl.GitHub/
detections.json, keyed by workspace path) — nothing is written to
Nova's settings or the project's .nova folder. To remove a detected
repository, right-click its row in the Repositories section and choose
Forget Detection.