6. Exit-node selection buttons #7

Closed
opened 2026-05-16 01:39:22 +00:00 by jtmorris · 2 comments
Owner

Parent: PRD #1 (Tailscale Widget Plugin for Dank Bar)

Type: AFK

Blocked by: #6

For every peer that advertises an exit node, add a small “Use as exit node” button that calls the appropriate tailscale set command.

Acceptance Criteria

  • Any peer with ExitNodeOption: true shows a compact button (or icon button) labeled “Use as exit node”
  • Clicking the button executes tailscale set --exit-node=<hostname>
  • After the command succeeds, the status is refreshed and the header row immediately shows the new active exit node
  • A way to clear the exit node (e.g. “None” or a small “×” button) is also provided and calls tailscale set --exit-node=

Notes

This completes the core exit-node workflow requested in the PRD.

Parent: PRD #1 (Tailscale Widget Plugin for Dank Bar) **Type:** AFK **Blocked by:** #6 For every peer that advertises an exit node, add a small “Use as exit node” button that calls the appropriate `tailscale set` command. ## Acceptance Criteria - Any peer with `ExitNodeOption: true` shows a compact button (or icon button) labeled “Use as exit node” - Clicking the button executes `tailscale set --exit-node=<hostname>` - After the command succeeds, the status is refreshed and the header row immediately shows the new active exit node - A way to clear the exit node (e.g. “None” or a small “×” button) is also provided and calls `tailscale set --exit-node=` ## Notes This completes the core exit-node workflow requested in the PRD.
Author
Owner

Dependency note: This issue is now also dependent on #3.5 (via #5#6).

Exit-node buttons live inside the popoutContent peer list. The popout must be openable (#3.5) and show the peer list (#6) before exit-node selection buttons can be verified.

Dependency chain: #4 → #3.5 → #5#6#7

**Dependency note:** This issue is now also dependent on #3.5 (via #5 → #6). Exit-node buttons live inside the `popoutContent` peer list. The popout must be openable (#3.5) and show the peer list (#6) before exit-node selection buttons can be verified. Dependency chain: #4 → #3.5 → #5 → #6 → #7
Collaborator

Implemented in c9d1baf and 0c2376b:

  • Extracted peer parsing and exit-node command logic into tailscalectl/lib.js (QML-compatible, with CommonJS guard for Node tests)
  • Added exit-node button on peers that are ExitNodeOption candidates; highlights in primary color when actively selected
  • Added clear button next to current exit node label in status row
  • setExitNode() runs tailscale set --exit-node= (or --exit-node= to clear)
  • Auto-refreshes status after setting/clearing exit node; shows toast on failure
  • 3 unit tests in test/lib.test.js covering parsePeers and makeExitNodeCommand
Implemented in c9d1baf and 0c2376b: - Extracted peer parsing and exit-node command logic into tailscalectl/lib.js (QML-compatible, with CommonJS guard for Node tests) - Added exit-node button on peers that are ExitNodeOption candidates; highlights in primary color when actively selected - Added clear button next to current exit node label in status row - setExitNode() runs tailscale set --exit-node=<hostname> (or --exit-node= to clear) - Auto-refreshes status after setting/clearing exit node; shows toast on failure - 3 unit tests in test/lib.test.js covering parsePeers and makeExitNodeCommand
vybe closed this issue 2026-05-18 19:14:20 +00:00
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: jtmorris/dms_tailscalectl#7
No description provided.