DevHarbor - Developer Dashboard
A local-first developer dashboard for VS Code on Windows, macOS, and Linux.
Install and open
Install DevHarbor from the Visual Studio Marketplace.
Click the Activity Bar icon, or run DevHarbor: Open DevHarbor
from the Command Palette. The dashboard opens in the editor area.
A short tour appears on first use. Reopen it with the header's question-mark
button. After an update, What's new highlights the changes once; use Skip
or Escape to dismiss it.
Version 0.1.27
- Jira saved filters now place their actual JQL in the board filter field for
review, modification, and reapplication without overwriting the Jira filter.
- Home reminders persist locally until their selected time, then appear as a
native VS Code notification.
- Full-screen focus uses the available editor width instead of retaining a
narrow portrait layout.
Screenshots

Still images: Home light ·
Home dark · Notes ·
Jira · Confluence ·
Settings.
Home
Home contains:
- Sticky notes: create a note with the plus icon, then click a sticky to view,
edit, recolor, or delete it.
- Current Jira task: your five most recently updated assigned issues,
including completed work. Click one to open the board with that issue highlighted.
- URL groups: save a named set of frequently used HTTPS links.
- Developer apps: add an application with the native picker, launch it, see
whether a dashboard-started instance is running, and close that instance after
confirmation. Apps appear in a grid with their installed icon when available.
- Reminders: enter a title and a future time today. The reminder stays local
and appears as a native VS Code warning at that time; notification sound follows
your VS Code and operating-system notification settings.
On macOS, apps open through the system application launcher. An app already
running is brought forward; its close action stays disabled to protect sessions
opened outside the dashboard. Closing a dashboard-started app updates its tile
to Stopped once it exits.
Hover over or focus a URL-group name to show its URLs. Select an individual URL
to open it, or use the open-all icon to launch the complete group in your default
browser. Every icon includes a hover description.
Use a group's edit icon to change its name or links; save with the check icon.
Failed saves keep your draft available for correction.
Recent Jira work refreshes when you open Home or sync Jira, independently of the
board's filter. If a selected issue is outside that filter, the board temporarily
shows it with a label without replacing your saved JQL. A failed refresh shows
the last session's results with a warning.
Application paths stay in the local database and are never sent to the dashboard
Webview. DevHarbor tracks and closes only instances that it launched; it does
not scan for or terminate unrelated system processes.
Jira
The Jira page presents work in To Do, In Progress, and Done columns.
- Enter JQL in the filter field and apply it with the check icon. The last
successful filter is restored automatically.
- Load Saved filters with its refresh icon, then select one to place its JQL
in the filter field and apply it. Edit that JQL before applying again when you
need a variation; this does not overwrite the saved filter in Jira. Cloud lists
up to 500 accessible filters; Data Center lists favourites.
- Search the loaded board by issue key or summary. Open Filter to select
Parent, Assignee, Status, Work type or Labels; Clear all resets these
board filters without changing your saved JQL.
- Use the sync icon to refresh Jira on demand while retaining the saved filter.
- Select an issue for a full-screen viewer with formatted details and comments.
Assign it to an available user, choose a valid workflow transition, load more
comments, refresh the thread, or open it in your default browser. Mutations
require native VS Code confirmation and the corresponding Jira permission.
- Add local-only cards at the bottom of the board. These cards stay on your
computer and are never sent to Jira.
Calendar
The Planner switches between Day, Week, Month and Year. Click a date or time slot, or choose New entry, to add a plan, holiday or leave in a popup. Dates and times are preselected; choose the type and save. Select a local entry to edit or delete it. Cancel or Escape closes the popup; failed saves retain your draft. Year highlights occupied dates in their colors and lists entries below each month; holidays have dashed outlines.
Choose Holiday for an inclusive date range and pick its color (gold by default). In Leave manager, set a name, optional Annual allowance (days) and color. For day-based leave, pick the start and end dates; days are calculated automatically. Uncheck Include weekends to exclude Saturdays and Sundays. Leave and holiday ranges cannot overlap another leave or holiday; plans may share dates. Saved leave cannot exceed its annual allowance, and an allowance cannot be reduced below leave already availed that year. Choose Half day under Duration for one eligible date. Existing hour-based types retain their units and quantity field. The Leave balances table shows annual count, availed and remaining for the selected year. Legacy overbooked data is identified until excess leave is removed or its allowance is raised. Editing or deleting leave recalculates balances. Allowances repeat each year without carryover. Split overnight plans or cross-year leave into separate entries.
Local plans, holidays and leave stay in your database and its snapshots. Nothing is sent to external calendars.
To show meetings from a local JSON export, open Settings → Local JSON Calendars, choose Events and select the file with VS Code’s file picker. The root may be the event array itself or an object with a value array:
{
"value": [
{
"subject": "Architecture review",
"start": { "dateTime": "2026-10-12T10:00:00", "timeZone": "UTC" },
"end": { "dateTime": "2026-10-12T10:30:00", "timeZone": "UTC" },
"bodyPreview": "Review the proposed service boundaries.",
"organizer": { "emailAddress": { "name": "Project lead" } },
"attendees": [
{ "emailAddress": { "name": "Developer one" } },
{ "emailAddress": { "address": "developer.two@example.test" } }
],
"location": { "displayName": "Microsoft Teams" },
"webLink": "https://outlook.office.com/calendar/item/example",
"onlineMeeting": { "joinUrl": "https://teams.microsoft.com/l/meetup-join/example" }
}
]
}
subject, start and end are required. Use timeZone: "UTC" with a local-looking dateTime, as above, or supply startWithTimeZone and endWithTimeZone as ISO timestamps containing Z or an explicit offset. bodyPreview, organizer, attendees, location and webLink are optional. Outlook connector exports may instead use a string organizer plus semicolon- or comma-separated requiredAttendees and optionalAttendees strings.
Home shows Join meeting when onlineMeeting.joinUrl, onlineMeetingUrl, joinUrl, body or bodyWithTimeZone contains a credential-free HTTPS Teams or Zoom URL. The link stays in the Extension Host and opens through VS Code; other hosts are not accepted as meeting join actions.
For a yearly holiday file, choose Holidays and use:
{
"year": 2026,
"holidays": [
{
"date": "2026-01-01",
"title": "New Year's Day",
"description": "Public holiday"
},
{
"date": "2026-12-25",
"title": "Holiday"
}
]
}
date and title are required; description is optional. Every date must use YYYY-MM-DD and match the root year. The root may also be a holiday array when no year check is needed. JSON sources are read-only, limited to five files, 20 MB and 5,000 entries per file. File paths stay in extension-host storage; no file content is sent to a service. The last loaded entries remain visible if refresh fails.
Use Calendar’s Plans, Meetings, Holidays and Leave toggles to filter the view. Home shows the next meeting with its organizer, attendees and join action, plus today’s schedule as a compact timeline. Configured JSON files are re-read when the dashboard opens and every five minutes while it remains open; the last valid data stays visible if a refresh fails.
The source dropdown starts on All sources. Select one JSON calendar to show only its entries, or refresh that file after it changes.
Workspace
Use Workspace to manage local development tools:
- Projects: select folders with the VS Code folder picker, view the current
Git branch, open a VS Code terminal, or use the open icon to choose VS Code or
any IDE added in Settings. The IDE choice is made for each launch.
- GitHub repositories: configure a GitHub.com PAT in Settings, refresh, and
select your account or an organization. Search loaded repositories or use
Load more. The clone icon opens a folder picker and confirmation; successful
clones are added to Project launcher. Personal and Enterprise Managed User
accounts are supported. If a PAT cannot list organization membership,
discovery initially scans at most 500 accessible repositories. Use the
load-more-organizations icon to continue discovery. Git and workspace trust
are required.
The PAT needs repository metadata access and Contents read permission for
private clones; organization SSO/admin policies may restrict results. Credentials
remain in VS Code SecretStorage. Native Git uses its own proxy/credential settings.
- Command shortcuts: save a command with an optional terminal folder. Running
it opens a visible VS Code terminal and requires confirmation when appropriate.
- User environment: search by variable name (up to 50 matches; values stay
hidden). Use plus or edit, then enter a non-secret name and masked value in
native VS Code prompts. Choose overwrite or append and confirm persistence.
PATH append adds
; on Windows or : on macOS/Linux; other variables append
the exact entered text.
Persistent edits require a trusted workspace and affect only your user, never
machine settings. Windows writes the User environment registry. macOS/Linux use
the supported user shell's startup file: .zshenv, or Bash's existing
.bash_profile/.bash_login, otherwise .profile (also sh/dash/ksh).
These are future shell sessions, not a universal GUI-app environment.
Existing processes retain old values; fully restart VS Code or sign out/in as
needed. Later shell configuration can override startup values. Unmanaged Unix
variables append to VS Code's inherited value; existing managed entries append
to their saved value. Search includes inherited names and simple user-file assignments.
OS environment values are plaintext—never use this for credentials. Common
credential names and startup/security hooks are blocked. Values never enter the
dashboard, database, settings or logs. Symlinked, oversized, non-UTF-8, foreign-owned
and externally changed startup files are rejected; custom ZDOTDIR and other shells
require manual setup. OS changes remain after uninstall and are not included in
database snapshots. Remove the marked file block or Windows user entry manually
to undo. Native file updates restrict permissions to the current user.
Command text is preserved exactly, including repeated spaces.
Notes
Notes are stored locally and save automatically while you type.
Updating the extension preserves your saved notes, bookmarks, and project folders.
- Use the plus icon above the notes list to create a note.
- Search notes from the left column.
- Select a note to view or edit it.
- Use the delete icon in the editor header to remove the selected note.
Confluence bookmarks appear as structured reference cards with actions to open
the page in Focus Reader or your default browser.
Saved references remain usable after other searches, cache expiry and restart.
Configure the bookmark's original Confluence site in Settings; Focus Reader needs
its API credential, while opening the saved browser link does not.
Knowledge
Knowledge provides a two-column Confluence browser:
Previously opened pages load from a five-minute session cache (up to five pages,
24 MB). Refresh Confluence in Settings to discard it and retrieve fresh content.
Page bodies and images are never cached on disk.
Search matches titles, page text and labels across pages you can access. Suggestions
appear after a short typing pause; press Enter to search immediately. Repeated
searches use a one-minute session cache. Formatted text appears first, while images
and diagrams load in parallel.
- Search for a Confluence page in the left column.
- Select a result to read its formatted content in the right pane. The header
shows its space, version, authors, dates, status, and labels when available.
- Use the reader icon for a full-screen, distraction-free view with a generated
table of contents.
- Use the bookmark icon to save the page as a local note reference.
- Use the external-open icon to open the original page in your default browser.
Server-rendered macro content retains panels, status badges, code blocks,
tables and expandable sections when provided by Confluence. Interactive app
macros requiring scripts or frames must be viewed in the original browser page.
Images and static diagrams appear in both reading views. Unavailable or blocked
media is clearly identified; use the external-open icon for active macros or
unsupported embeds. Page bodies and images are loaded on selection and are not
cached on disk. Focus Reader includes the same metadata and a table of contents.
Global search
Use the search icon in the header or:
Ctrl+Alt+K on Windows and Linux
Cmd+Alt+K on macOS
Search covers local notes, projects, command shortcuts, cached Jira issues, and
cached Confluence page metadata.
Data safety
Database saves use flushed temporary files and atomic replacement. Before a
changed save, an automatic snapshot preserves the previous database at most once
per hour; migrations and restores also save a copy first. The latest 10
snapshots total are retained alongside workspace.sqlite in the generic
brahmabyte.localdata/snapshots folder under VS Code's global storage.
- Run DevHarbor: Create database snapshot before important changes.
- Run DevHarbor: Restore database snapshot, choose a copy and confirm.
Close other VS Code windows using the extension first. Restore checks the
checksum, SQLite integrity, relationships and schema before replacing data,
saves a pre-restore copy, then reloads VS Code. If startup fails, a recovery
prompt offers the same validated restore. Newer unsupported schemas are rejected.
Snapshots contain private local data, including notes and cached provider metadata;
they are not encrypted. SecretStorage credentials and VS Code settings/layout
are not backed up or restored; reconnect providers if needed. Disconnecting a
provider does not erase older snapshots. Each database/snapshot is limited to
128 MiB. Checksums detect accidental damage, not malicious modification.
These same-disk copies do not protect against disk loss: keep an IT-approved
encrypted backup of the folder, including the .sha256 files, separately.
Settings and connections
Open Settings with the icon at the bottom of the navigation rail. Settings are
arranged as one vertical, categorized list. Under Development, add installed
IDE applications with the native picker; executable paths stay in the Extension
Host and are never sent to the Webview. VS Code is always available.
Enter the Jira
or Confluence product root URL, not a board, project, space, or page URL.
For Atlassian Cloud:
- Enter the
atlassian.net product URL.
- Enter your Atlassian account email in the VS Code prompt.
- Enter an Atlassian API token in the masked prompt.
For Jira or Confluence Data Center:
- Enter the HTTPS product root URL.
- Enter a personal access token in the masked VS Code prompt.
Credentials are stored in VS Code SecretStorage and are never sent to the
dashboard Webview or written to the local database. Disconnecting removes the
stored credential and cached provider metadata.
Saved extension-only proxy settings remain active across updates, including older
configurations. If no custom proxy is saved, Jira, Confluence and GitHub networking
all use the extension-host HTTPS route patched by VS Code for managed proxy,
PAC/bypass, certificate and supported authentication handling. This does not depend
on the optional http.fetchAdditionalSupport setting.
To switch to VS Code-managed networking, select Settings → Network proxy →
Use VS Code proxy (default). This delegates PAC/bypass rules and supported
authentication negotiation to VS Code. The picker can open VS Code proxy settings;
it never changes global network settings automatically. Authentication support
depends on your VS Code version, OS and corporate policy.
If VS Code's proxy does not work, use Settings → Network proxy to configure
an extension-only HTTP/HTTPS proxy. For Basic authentication, enter your
IT-provided proxy username and password in the VS Code prompts, not your Jira,
Confluence, or GitHub credentials. Leave the username empty if authentication is not
required. Credentials are stored in SecretStorage. You can select an IT-approved
PEM CA bundle for corporate TLS certificates. Certificate verification stays on.
The override affects only Jira, Confluence and GitHub, takes effect on the next
request, and never falls back to a direct connection. Select Use VS Code proxy
(default) to remove it. Other extensions and VS Code settings are unchanged.
Appearance and layout
- The header greets you using your connected Jira display name and shows local time.
- Use the floating bottom-right zoom widget to scale from 80% to 150%; minimize
it with the minus icon and expand with the plus icon. Click the percentage
to reset.
Ctrl/Cmd with +, -, or 0 and Ctrl/Cmd + wheel also work when
the dashboard has focus. VS Code may handle its own global zoom shortcuts.
- Use the header theme icon to switch between light and dark mode.
- Use the header full-screen icon to toggle distraction-free VS Code Zen Mode.
DevHarbor hides editor tabs and the title bar, uses the full display width,
and restores your previous settings when focus mode closes.
- Resize cards from their lower-right edge.
- Home cards grow vertically when their content needs more room. A manually saved
height remains the card's minimum height.
- Settings groups connections, development tools and network options in distinct
color-coded sections.
- Drag cards with the grip icon, or focus the grip and use the arrow keys, to
rearrange them.
- Theme, zoom, and card layout are restored when the dashboard is reopened.
- Window resizing temporarily constrains cards without replacing saved sizes.
Troubleshooting
- Open command is missing: confirm the extension is installed, then reload VS Code.
- Jira or Confluence authentication fails: confirm the product root URL,
token type, and browse/view permissions.
- GitHub PAT connection fails: confirm the PAT is active and authorized for
organization SSO. A gateway response without GitHub response headers is reported
as a proxy/security-gateway failure rather than a PAT or GitHub rate-limit error.
If a managed proxy closes an API response early, refresh now fails with a bounded
diagnostic and unlocks the GitHub controls instead of remaining on Loading.
Update to a release using the extension-host HTTPS route if the same connection
works on one machine but fails where VS Code global fetch proxy support is disabled.
- Jira or Confluence is blocked by a corporate network: connect the required
VPN, then use Open Proxy Settings from the error message. DevHarbor
uses VS Code's proxy, proxy authentication, and trusted system certificates;
reload VS Code after changing managed proxy settings.
Alternatively, configure Settings → Network proxy for this extension only.
- Proxy connection diagnostics: open View → Output, select
DevHarbor Network, then retry connecting, syncing Jira, refreshing
Confluence, or connecting/refreshing GitHub. Logs show network mode, HTTP status,
elapsed time and safe DNS/TLS/proxy/timeout hints. URLs, credentials, headers
and page content are omitted. Cached pages do not trigger network logs.
Proxy CONNECT HTTP 403 indicates proxy access policy, 3xx may indicate
a corporate sign-in redirect, 407 indicates proxy authentication, and
502/504 indicate a proxy/upstream failure, not a user cancellation; they
do not establish whether routing, authentication, DNS or server availability
caused it. Compare the failing route with the working browser or VS Code route.
The extension-only proxy supports Basic authentication; use VS Code's managed
proxy for corporate NTLM/Kerberos/SSO authentication.
- A project or terminal folder is rejected: select it with the provided VS
Code folder picker instead of typing a path.
- A command does not run: save it first and approve the VS Code confirmation
prompt. Multiline commands are rejected.
- The dashboard stops responding: run Developer: Reload Window and reopen
DevHarbor.