vibetunnel/CHANGELOG.md
Peter Steinberger f8a7cf9537
Add file-based quick start configuration and remove WebSocket sync (#436)
* feat(server): add configuration service with file-based persistence

- Implement ConfigService for managing application configurations
- Add REST API endpoints for quick start configuration
- Add comprehensive test coverage for config operations
- Define TypeScript types for configuration structures
- Replace WebSocket-based config sync with REST API

* feat(web): add quick start editor component

- Create fully-featured command editor with add, edit, delete functionality
- Add drag-and-drop reordering support
- Implement real-time validation and error handling
- Include comprehensive test coverage (100%)
- Support keyboard navigation and accessibility

* feat(web): add session status management

- Create session status dropdown component for state management
- Add session termination capabilities with proper cleanup
- Refactor session header to integrate status controls
- Support graceful disconnection and reconnection

* feat(mac): add directory autocomplete service

- Implement AutocompleteService for directory path completion
- Create AutocompleteView with native macOS UI
- Support home directory expansion (~/)
- Add system file browser integration
- Optimize performance for large directory structures

* feat(mac): add quick start settings interface

- Create SwiftUI settings view for managing quick start commands
- Implement inline editing with immediate feedback
- Add default commands for common workflows
- Include toggle for using current directory as default
- Add smooth animations and hover effects

* feat: integrate quick start in session creation

- Add quick start command buttons to session create form
- Implement directory picker with autocomplete support
- Update form layout for better user experience
- Add comprehensive tests for new functionality
- Sync quick start integration across web and native

* feat(web): add repository discovery to settings

- Add repository discovery functionality in unified settings
- Update settings UI to support new configuration options
- Remove WebSocket-based configuration sync
- Simplify settings component with REST API integration

* docs: add macOS quick start implementation guide

- Document architecture and implementation details
- Include code examples and best practices
- Explain integration between web and native components
- Provide troubleshooting guidance

* feat: enhance UI/UX across components

- Improve session list with better status indicators
- Update terminal binary detection and display
- Refine width selector and image upload interactions
- Clean up WebSocket control handler
- Update server configuration handling
- Fix notification status display
- Polish settings view layout

* feat(web): improve session header UI elements

- Position edit icon directly after text instead of far right
- Update magic wand icon with sparkles to match macOS design
- Change from grid to flex layout for better icon positioning
- Enhance visual consistency across platforms

* fix(web): improve OPTIONS label alignment in session create form

- Add flex-shrink-0 to chevron icon to prevent shrinking
- Add leading-none to OPTIONS label for better vertical alignment

* docs: update changelog for beta.14 with Quick Start features

- Document Quick Start Configuration System (#229, #250, #436)
- Add native macOS settings interface details
- Include session management improvements
- Add bug fixes and breaking changes
- Reference related issues and PRs

* feat(mac): add ConfigManager for synchronized quick start commands

- Create ConfigManager to sync commands with web UI config file
- Monitor ~/.vibetunnel/config.json for changes
- Replace UserDefaults with file-based configuration
- Ensure consistency between Mac app and web interface

* feat(mac): add ClickableURLView component

- Create reusable component for clickable URLs in SwiftUI
- Support for opening URLs in default browser
- Consistent styling across the app

* refactor(mac): simplify remote access settings UI

- Use ClickableURLView for consistent URL display
- Reduce code duplication in settings sections
- Improve maintainability of remote access views

* refactor(mac): integrate ConfigManager in NewSessionForm

- Replace direct UserDefaults access with ConfigManager
- Use synchronized quick start commands from shared config
- Improve command selection UI consistency

* fix(web): update terminal padding and termination handling

- Remove horizontal padding from terminal containers
- Implement proper session termination via DELETE API
- Keep vertical padding for better visual appearance
- Fix binary mode toggle styling

* fix(mac): resolve ConfigManager threading crash

- Fix main actor violation in file monitor callback
- Remove unsafe self reference in asyncAfter closure
- Capture monitor queue reference to avoid accessing self
- Ensure all @Published property updates happen on main thread

* feat(web): add reset to defaults button in quick start editor

- Add Reset to Defaults button for easy restoration
- Import DEFAULT_QUICK_START_COMMANDS from config types
- Improve user experience with quick command reset option

* fix(web): adjust OPTIONS chevron icon size

- Reduce chevron icon from 10x10 to 8x8 for better visual balance
- Update responsive size classes accordingly
- Remove leading-none from OPTIONS label for better alignment

* docs: update changelog with latest UI improvements and bug fixes

- Document ConfigManager and ClickableURLView additions
- Add AutocompleteService and reset to defaults features
- Include all UI fixes and threading crash resolution
- Document session header and terminal improvements

* fix(mac): fix ConfigManager threading crash when moving quick start items

- Remove background file monitor queue and use main queue directly
- ConfigManager is @MainActor so all operations must happen on main thread
- Simplify file monitor callback by removing unnecessary Task wrapper
- Fixes crash when reordering quick start commands in settings

* feat: add Zod validation for quick start configuration

- Add Zod dependency for runtime config validation
- Implement ConfigSchema to validate quick start commands
- Ensure commands have non-empty strings and valid structure
- Add validation on config load and update operations
- Fix auth headers for config API endpoints
- Remove unused repository path WebSocket handlers
- Update storage key for consistency

This improves config reliability and prevents invalid commands from being saved.

* docs: update changelog with comprehensive beta.14 release notes

- Reorganize changelog with clear user-focused sections
- Add detailed feature descriptions for Quick Start functionality
- Highlight UI/UX improvements with specific examples
- Document all bug fixes and stability improvements
- Include breaking changes and migration guidance
- Add emojis for better visual organization
- Expand technical details for developers

* fix: handle undefined activityStatus in session categorization

Sessions with undefined activityStatus were incorrectly shown as idle.
Now only sessions with explicitly false isActive are considered idle.

* feat: enhance quick start configuration with repository discovery

- Add repository discovery and filtering in AutocompleteService
- Support directory-only suggestions for quick start paths
- Improve autocomplete filtering to exclude hidden and system directories
- Update quick start settings UI with better directory selection
- Add tests for vibe-terminal-binary component
- Minor UI improvements to clickable URLs and form components

* fix: update tests for storage key change and terminal sizing

- Update repository-service tests to use new 'app_preferences' storage key
- Fix vibe-terminal-binary test to enable fitHorizontally for maxCols constraint
- Ensure tests align with recent configuration changes

* fix: update failing tests and improve repository status element

- Add id="repository-status" to repository counter for easier test selection
- Update quick-start-editor test to match actual button classes
- Fix all unified-settings tests to use the new repository-status ID
- Prevent tests from accidentally selecting unrelated elements

* docs: update beta 14 changelog to match earlier style

Simplified changelog format to be consistent with beta 13 and earlier versions,
making it more concise and easier to read.

* feat: add IDs to quick-start-editor elements for better testability

- Add id="quick-start-edit-button" to Edit button
- Add id="quick-start-save-button" to Save button
- Add id="quick-start-cancel-button" to Cancel button
- Add id="quick-start-reset-button" to Reset to Defaults button
- Add id="quick-start-add-command-button" to Add Command button
- Add dynamic IDs for remove buttons: quick-start-remove-command-{index}
- Add dynamic IDs for inputs: quick-start-name-input-{index}, quick-start-command-input-{index}
- Add dynamic IDs for command items: quick-start-command-item-{index}

This makes tests more maintainable by avoiding complex selectors that search by text content.

* test: update quick-start-editor tests to use element IDs

- Replace button text search with ID selectors for better reliability
- Update edit button selector to use #quick-start-edit-button
- Update add command button selector to use #quick-start-add-command-button
- Update reset button selectors to use #quick-start-reset-button

This demonstrates how the new IDs make tests more maintainable and less fragile.

* docs: rewrite beta 14 changelog with accurate feature descriptions

- Clarify that Quick Start commands became customizable (not new)
- Add accurate description of session status management dropdown
- Include proper technical details about systemd support
- Fix misleading descriptions about features
- Maintain concise style consistent with previous releases

* fix: remove obsolete tests and fix control-unix-handler tests

- Remove obsolete repository-path-sync.test.ts that was testing removed functionality
- Remove skipped session-view-drag-drop.test.ts that was causing import errors
- Fix control-unix-handler tests to test actual functionality instead of non-existent methods
- All tests now passing (1008 passed, 113 skipped)

* docs: update beta 14 contributors section

- Add Gopi as first-time contributor for ngrok clickable URLs (#422)
- Properly credit hewigovens and Claude as co-authors on systemd (#426)
- Remove duplicate first-time attribution for hewigovens

* docs: fix Claude contributor GitHub link to @claudemini

* docs: fix claudemini's contribution attribution

- claudemini improved theme toggle UI (PR #429/#438), not systemd
- List them as first-time contributor
- Keep Claude AI assistant as systemd co-author

* docs: remove incorrect AI assistant attribution

- There was no AI assistant Claude that co-authored systemd
- Keep only the correct contributors: 2 first-time and 1 additional

* fix: apply linter fixes for CI

- Fix optional chaining in test mock
- Fix unused parameters with underscore prefix
- Format quick-start-editor test file
- Keep any types in test file (acceptable for tests)

* fix: remove all any type warnings in tests

- Use proper ControlUnixHandler type import
- Type vi.importMock with typeof import('net')
- Type WebSocket mock with proper import type
- All lint warnings now resolved

* docs: add image upload feature to changelog

- Added image upload menu feature (#432)
- Also added theme toggle improvement (#438) that was missing

* refactor: add element IDs for improved test maintainability

- Added descriptive IDs to interactive elements across components
- Updated tests to use ID selectors instead of text-based queries
- Enhanced documentation with ID naming best practices
- Makes tests more reliable and less brittle to text changes

* fix: correct session-list test expectation for hideExited toggle

The component emits an event but doesn't directly change its state - the parent handles the state update

* docs: add more PR/issue references to beta 14 changelog

- Added fixes #368 for theme toggle improvement
- Added duplicate reference #421 for Chinese input issue #431
- All PR and issue references now properly documented

* fix: SwiftFormat modifier order and SystemControlHandler test race condition

* fix: repository scanner not showing discovered repositories

- Fixed storage key mismatch between 'app_preferences' and 'vibetunnel_app_preferences'
- Added missing authClient prop to unified-settings component in app.ts
- Updated all test files to use the correct storage key
- Repository scanner now correctly displays discovered repositories count

* refactor: extract session termination logic into reusable helper

- Create session-actions.ts utility for common session operations
- Refactor handleTerminateSession to use the new helper
- Fix handleClearSession to properly delete exited sessions before navigation
- Move Git branch indicator to header next to path in file browser
- Fix Options label alignment in session create form

* refactor: migrate repository base path from CLI arg to config.json

- Remove --repository-base-path command line argument
- Add repositoryBasePath to VibeTunnelConfig type and schema
- Update server to read/write repository path from config.json
- Refactor client to use ServerConfigService for repository path
- Update settings UI to manage path through server config API
- Ensure consistent naming with macOS app implementation

This simplifies configuration by using config.json as the single source
of truth for repository base path, with automatic file watching for
real-time updates.

* docs: remove --repository-base-path from README

This option was removed in the previous commit as repository base path
is now configured via config.json instead of command line arguments.

* fix: reduce Logs button border contrast and add comprehensive drag & drop tests

- Changed border opacity from 100% to 30% for softer appearance
- Created drag & drop tests with 21 passing tests covering:
  - Drag over/leave functionality
  - Drop handling for single and multiple files
  - Paste functionality with various UI states
  - Error handling and edge cases
- Fixed TypeScript lint errors in test files
- Disabled 2 visual overlay tests due to shadow DOM limitations in test environment

* fix: auto-format session-action-service.ts to pass CI checks

* fix: update tests to match refactored session action service implementation

- Fixed repository service tests by adding mock serverConfigService
- Updated session-card tests to expect DELETE endpoint instead of /cleanup
- Corrected error message expectations in session-card tests
- Fixed quick-start-editor test button class expectations
- Auto-formatted all files to pass CI checks

* fix: update session-action-service tests with proper mocks and window handling

- Added @vitest-environment happy-dom directive for DOM testing
- Set up proper mock for terminateSession to return success: true
- Mock window.dispatchEvent to prevent errors in test environment
- Fixed all test expectations to match refactored implementation

* fix: update server config tests to match refactored API implementation

- Updated config route tests to match new implementation that always returns serverConfigured: true
- Fixed error messages to match 'No valid updates provided' instead of 'Invalid quick start commands'
- Removed dependency on getRepositoryBasePath function, now using configService.repositoryBasePath
- Added tests for repository base path updates via PUT /api/config
- Added test for updating both repository path and quick start commands together

* fix: resolve remaining CI issues with type assertions and import ordering

* fix: update remaining tests and clean up imports

- Fix repository service test to include serverConfigService
- Update session card test error expectations
- Fix quick start editor button class tests
- Add proper mock setup for session action service
- Update server config tests for refactored API
- Clean up type assertions and import ordering

* fix: correct undefined runningSessions variable reference in Kill All button

The Kill All button was referencing a non-existent runningSessions variable after refactoring split it into activeSessions and idleSessions. Fixed by using the locally defined runningSessions variable in renderExitedControls() method.

* fix: improve Quick Start settings UI styling

- Use tertiaryLabelColor for better visual hierarchy
- Adjust opacity values for improved contrast
- Remove redundant "Quick Start" header

* fix: ensure thread safety in SystemControlHandlerTests

- Wrap notification flag updates in MainActor tasks
- Ensure test assertions run on MainActor
- Fixes potential race conditions in async tests

* fix: correct SwiftFormat modifier order in VibeTunnelApp

- Change 'weak static' to 'static weak' to match SwiftFormat rules
- Fixes CI linting failure

* fix: resolve Swift 6 concurrency errors in SystemControlHandlerTests

- Wrap MainActor property mutations in Task blocks for notification observers
- Fix test expectations to match actual path handling behavior
- SystemControlHandler stores paths as-is without tilde conversion

The CI failures were due to Swift 6's stricter concurrency checking
which prevented mutating MainActor-isolated properties from Sendable
closures. Also corrected the test expectation - the handler doesn't
convert paths to tilde notation, that only happens in UI components.

* fix: revert to correct SwiftFormat modifier order

- SwiftFormat expects 'weak static', not 'static weak'
- Fixes CI formatting check failure

* chore: trigger CI rebuild

* fix: resolve remaining CI issues with type assertions and import ordering

- Disable AppleScript tests on CI environment (not available in headless mode)
- Make SystemControlHandlerTests more robust with proper synchronization
- Add better error messages for test failures
- Fix exit code 126 issues by handling server startup failures gracefully

* Remove repository base path CLI argument from BunServer

- Server now reads repository base path directly from config.json
- Updated NewSessionForm to use ConfigManager for repository path
- Updated GeneralSettingsView to use ConfigManager instead of @AppStorage
- Updated ProjectFolderPageView to use ConfigManager
- Removed --repository-base-path CLI argument from BunServer
- RepositoryPathSyncService already updated to use ConfigManager

* Update tests to use ConfigManager and add CI diagnostics

- Updated RepositoryPathSyncServiceTests to use ConfigManager instead of UserDefaults
- Added diagnostic logging in BunServer for CI debugging when binary is not found
- Updated GitHub Actions workflows

* fix: simplify Mac CI by removing web artifact caching

- Remove web artifact download/upload between Node.js and Mac CI workflows
- Mac CI now builds web components directly via Xcode build process
- Eliminates file permission issues with artifact transfers
- Workflows can now run in parallel for faster CI
- Add better diagnostics for missing binary errors in BunServer

* fix: make tests properly fail when server binary is not available

- Update ServerManagerTests to require server binary presence
- Tests now fail with clear error if vibetunnel binary is missing
- Remove fallback logic that allowed tests to pass without binary
- ServerBinaryAvailableCondition now only checks app Resources folder

The server binary must be properly embedded in the Mac app's Resources
folder. Tests should not pass if the binary is missing, as this would
indicate a broken build.

* Refactor code to reduce duplication and improve structure

- Use AppConstants.getPreferredGitApp() instead of direct UserDefaults access
- Add getDashboardAccessMode() and setDashboardAccessMode() helpers to AppConstants
- Create GitAppHelper utility to centralize Git app preference logic
- Simplify GitRepositoryRow and SessionRow to use GitAppHelper
- Keep ConfigManager focused on server-needed config (quickStartCommands, repositoryBasePath)
- Mac-specific settings remain in UserDefaults with improved access patterns

* Move configuration enums to shared location

- Create ConfigurationEnums.swift with AuthenticationMode and TitleMode
- Remove duplicate enum definitions from UI files
- Fix ConfigManager to use correct enum case names (.osAuth instead of .os)
- Add description property to AuthenticationMode for UI display
- Proper separation of shared types from UI-specific code
2025-07-21 14:03:33 +02:00

28 KiB

Changelog

[1.0.0-beta.14] - 2025-07-21

Customizable Quick Start Commands

  • Quick Start commands are now fully customizable - previously hardcoded buttons can be edited
  • Add your own commands with custom names and emoji (e.g., " claude" or "▶️ dev server")
  • Drag & drop reordering with smooth animations in macOS settings
  • Inline editing without popup dialogs
  • Reset to defaults button when you want the original set back
  • File-based persistence in ~/.vibetunnel/config.json

New Session Path Autocomplete

  • Intelligent path autocomplete when creating sessions (#435)
  • Home directory expansion (~/ shortcuts work properly)
  • Visual file browser with folder icon
  • Git repository discovery in selected directories
  • Repository status shown in welcome screen

Session Status Management

  • New dropdown menu in session headers for running/exited sessions
  • Terminate running sessions without closing the tab
  • Clear exited sessions individually with one click
  • Visual status indicators - pulsing dot for running, static for exited
  • Keyboard navigation support (Arrow keys, Enter, Escape)

Linux Systemd Support (#426)

  • Run VibeTunnel as a persistent service with vibetunnel systemd install
  • User-level service - no root required
  • Automatic startup on boot
  • Smart Node.js detection works with nvm, fnm, or global npm
  • Comprehensive systemd commands for status, logs, start/stop

UI Improvements

  • New image upload menu with paste, select from library, camera, and browse options (#432)
  • Improves experimental binary terminal mode (no more long scrolling - see Terminal Settings)
  • Clickable ngrok URLs in Settings with copy button (#422)
  • Cleaner session headers with better-positioned controls
  • Fixed magic wand icon alignment for AI sessions
  • Improved theme toggle with better icon and tooltips (#438, fixes #368)

🐛 Bug Fixes

  • Fixed session timers continuing to run after sessions exited (#428)
  • Fixed sessions with undefined activity status showing as idle instead of active
  • Fixed new session dialog styling for dark mode (#433)
  • Fixed Mintlify documentation generation (#434)
  • Fixed ConfigManager threading crash when moving quick start items in macOS
  • Improved Chinese input method support (#431, duplicate of #421)
  • Removed legacy WebSocket config sync code and simplify logic

Under the Hood

  • New configuration service with file watching and validation
  • Zod schema validation for all configuration data
  • Improved test maintainability by adding element IDs to web components
  • REST API at /api/config/quick-start replacing WebSocket sync
  • Major codebase cleanup - removed Tauri project and 17k lines of unused code (#419)
  • Enhanced release process with better troubleshooting documentation

👥 Contributors

First-time contributors to VibeTunnel:

  • @gopi-kori - Made ngrok URLs clickable with copy button in Settings (#422)
  • @claudemini - Improved theme toggle UI with better icon and tooltips (cherry-picked from #429 into #438, fixes #368)

Additional contributors:

  • @hewigovens - Co-authored systemd service management for Linux deployments (#426)

[1.0.0-beta.13] - 2025-07-19

**Terminal Performance Mode (Experimental) **

  • New binary WebSocket mode for terminal sessions dramatically improves performance for high-throughput operations (#412)
  • Toggle between standard SSE mode and high-performance binary mode in terminal settings
  • Binary mode significantly reduces latency and CPU usage when running commands with heavy output
  • Seamless switching between modes without losing your session

Enhanced Terminal Control

  • Uninstall option for the vt command line tool now available in settings (#407)
  • Simple trash icon button to cleanly remove the CLI tool when needed
  • Proper cleanup of both standard and Homebrew installation paths

Screen Sharing Removed

  • Removed screen sharing feature to focus on core terminal functionality (#415)
  • Eliminated ~17,000 lines of WebRTC and screen capture code
  • No longer requests screen recording permissions
  • Screen Sharing is out of scope for the 1.0 release

🐛 Bug Fixes

  • Fixed server crashes when using special characters (like *) in terminal status messages (#398)
  • Resolved "Kill All Sessions" button failing silently in compact/sidebar view (#418)
  • Fixed network bind address reverting to localhost after server restarts (#404)
  • Ghostty terminal now properly spawns and executes commands if there are no windows (#408)

📚 Documentation

  • Added complete HQ mode documentation covering distributed deployments
  • Organized all documentation into logical categories with Mintlify

👥 Contributors

First-time contributors to VibeTunnel:

  • @hewigovens - Added systemd service management for Linux deployments, refactored installer for user-level services with improved security (#419)

[1.0.0-beta.12] - 2025-07-17

Welcome Screen Performance

  • Background folder scanning eliminates UI freeze when opening the welcome screen (#394)
  • Improved startup performance with optimized web directory structure
  • Much smoother experience when working with large project directories

SSH Agent Reliability

  • Fixed SSH key generation errors on non-localhost HTTP connections (#392)
  • SSH agent now works correctly when accessing VibeTunnel via ngrok or from another device
  • Improved security and reliability for remote access scenarios

npm Package Stability

  • Fixed critical installation issues on Linux systems (#393)
  • authenticate-pam now properly handled as optional dependency
  • Enhanced cross-platform compatibility for Ubuntu and other distributions
  • Comprehensive vt command tests ensure reliability across environments

Developer Experience

  • Fixed missing public directory in Mac app bundle (#392)
  • Resolved TypeScript type annotations throughout codebase
  • Improved lint compliance and code quality
  • Streamlined CI/CD workflow for more reliable builds

🐛 Bug Fixes

  • Fixed vt command syntax errors on Linux systems (#393)
  • Fixed welcome screen lag during folder scanning (#394)
  • Resolved missing icons and resources in Mac app
  • Fixed lint and type errors across the codebase
  • Cleaned up duplicate and stray files from web directory

👥 Contributors

First-time contributors to VibeTunnel:

  • @amazanov - Fixed PAM module and npm_config_prefix issues on Ubuntu, improving Linux compatibility (#380)

[1.0.0-beta.11] - 2025-07-17

Better Settings Organization

  • Reorganized settings into logical tabs for easier navigation (#359)
  • Repository base path now syncs automatically between Mac app and web UI (#358)
  • Simplified welcome screen repository display (#372)

UI Context Awareness

  • Spawn window toggle shows only when relevant (#357)

NPM Package Now Available

  • vibetunnel (server) is now available as an npm package for easy installation on macOS and Linux (#360, #377)
  • Install with npm install -g vibetunnel - no build tools required!
  • Includes prebuilt binaries for Node.js 20, 22, 23, and 24
  • Supports macOS (Intel and Apple Silicon) and Linux (x64 and arm64) (#344)

Enhanced Git Diff Tool Support

  • Added JuxtaCode to the list of supported Git diff tools with automatic detection

Improved vt Command

  • Added verbosity control with -q (quiet), -v (verbose), -vv (extra verbose) flags (#356)
  • New vt title command to update session names from within a VibeTunnel session (via @tarasenko)

🐛 Bug Fixes

  • Fixed npm package installation issues (#360, #377)
  • Fixed control message processing loop (#372)
  • Fixed file browser constant refresh issue (#354)
  • Replaced bell icon with settings icon for better clarity (#366)
  • Resolved Tailwind CSS performance warning

👥 Contributors

First-time contributors to VibeTunnel:

  • @janremes - Implemented Git repository discovery with folder selection and automatic repo detection (#274)
  • @lukeswitz - Fixed duplicate session creation with intelligent detection logic (#345)

[1.0.0-beta.10] - 2025-07-15

Repository Discovery

  • Automatic Git repository detection when creating new sessions (#301) (via @mrshu)
  • Recently modified repositories displayed in new session dialog
  • Quick project access with one-click repository selection

Keyboard Shortcut Handling

  • Redesigned keyboard capture system with intelligent priority handling (#298) (via @tarasenko)
  • Browser shortcuts work naturally: Cmd+Shift+A (tab search), Cmd+1-9 (tab switching), Alt+Arrow keys
  • Visual keyboard capture indicator with detailed tooltips
  • Double-Escape toggle for switching between browser and terminal keyboard modes

Theme System

  • Dracula theme is now the default for new users (#349)
  • Professional light mode with improved contrast (#314)
  • Easy theme switching between light and dark modes
  • Enhanced terminal color schemes (#332)

Development Server Mode

  • New "Development Server" mode in Debug Settings enables hot reload (#316)
  • Significantly faster iteration when developing the web interface
  • Hot reload works with full VibeTunnel functionality

🐛 Bug Fixes

  • Fixed Safari clipboard paste on iOS and macOS (#336)
  • Fixed duplicate session creation with intelligent detection (#345) (via @lukeswitz)
  • Added keyboard navigation in session grid (arrow keys, Enter, etc.) (#322)
  • Fixed race conditions in network access mode (#347)
  • Improved SSH key manager modal layout (#325) (via @hewigovens)
  • Updated all dependencies to latest stable versions
  • Enhanced TypeScript configuration with better type safety

👥 Contributors

First-time contributors to VibeTunnel:

  • @davidgomesdev - Transformed SessionListView to clean MVVM architecture for better maintainability (#217)
  • @jeffhurray - Consolidated z-index management to prevent UI layer conflicts (#291)
  • @hewigovens - Fixed SSH key manager modal layout and improved test compatibility (#325)
  • @tarasenko - Added browser keyboard shortcut support with intelligent priority handling (#298)

[1.0.0-beta.9] - 2025-07-11

Terminal Crash Fix

  • Replaced Microsoft's node-pty with custom fork to resolve random terminal crashes (#304)
  • Improved thread-safe operations and resource management
  • Addresses stability issues affecting VS Code and other Electron applications

Server Crash Detection

  • Added crash detection and recovery system for server failures (#308)
  • Provides immediate feedback with specific error codes
  • Improved troubleshooting and error reporting

Mobile Experience

  • Fixed continuous resize loop on mobile devices (#305)
  • Improved mobile terminal width management
  • Added support for smaller grid sizes on compact devices
  • Added Alt+Delete/Left/Right keyboard shortcuts for mobile users (#290)
  • Fixed mobile header overflow when using dropdown menus (#295)

Cloudflare Integration

  • Improved tunnel setup with stream-based monitoring (#306)
  • Enhanced error handling and more reliable setup process

Git Repository Discovery

  • Enhanced folder selection when creating new sessions (#274) (via @janremes)
  • Added intelligent Git repository discovery in selected folders
  • Fixed multiple bugs in repository discovery (#282)

🐛 Bug Fixes

  • Fixed terminal titles jumping due to activity indicators (#309)
  • Consolidated z-index management to prevent UI layer conflicts (#291) (via @jeffhurray)
  • Enhanced event handling for better cross-platform compatibility
  • Improved file browser functionality with better click handling

👥 Contributors

First-time contributors to VibeTunnel:

  • @claywarren - Fixed infinite scroll loop that could freeze the browser (#206)
  • @luisnell - Added Apple Silicon Homebrew path check for VT tool installation

[1.0.0-beta.8] - 2025-07-08

🐛 Bug Fixes

  • Fixed release builds to correctly bundle all Homebrew library dependencies (#269)
  • Fixed app launch on systems without developer tools installed
  • Fixed file browser going dark due to event bubbling issues with modal handling
  • Updated build scripts to handle dynamic library dependencies properly

[1.0.0-beta.7] - 2025-07-08

AI Session Context Injection

  • Inject project context into Claude.ai sessions with a single click (#210, #218)
  • Automatically detects Claude browser windows
  • Includes git repository details, current branch, and recent commits
  • Configurable prompts to match workflow

Terminal Performance

  • Fixed critical flow control issue causing xterm.js buffer overflow (#223)
  • Fixed infinite scroll loop that could freeze the browser
  • Fixed race conditions in terminal output handling
  • Improved memory management for long-running sessions
  • Better handling of high-volume terminal output

UI Performance

  • Removed UI animations causing 1-2 second delays
  • Disabled View Transitions API for instant session navigation
  • Fixed modal backdrop pointer-events issues (#195)
  • Smoother menu bar UI without jumping

Touch Device & Mobile

  • Unified keyboard layout for all mobile devices
  • Universal touch device detection
  • Inline-edit pencil always visible on touch devices
  • New compact keyboard layout optimized for tablets
  • Fixed touch interaction issues with modals

Fish Shell Integration

  • Full support for Fish shell command expansion and completions (#228, #242)
  • Proper handling of Fish-specific syntax
  • Fixed shell configuration files not being loaded

Developer Experience

  • Preserve Swift package resolution for faster builds
  • Better Node.js detection handling fnm/homebrew conflicts (#246, #253)
  • Hash-based vt script version detection
  • Delete old sessions when VibeTunnel version changes (#254)

🐛 Bug Fixes

  • Fixed session state synchronization between web and native clients
  • Resolved memory leaks in long-running sessions
  • Fixed connection timeout issues on slower networks
  • Better cleanup of terminal processes and resources
  • Fixed various UI glitches and visual artifacts
  • Resolved sidebar animation issues
  • Fixed file browser problems
  • Unified control protocol for terminal sessions (#239)
  • Improved Unix socket handling with better error recovery

👥 Contributors

First-time contributors to VibeTunnel:

  • @deveshseth - Fixed responsive layout issues preventing proper desktop mode transition (#201)
  • @raghavsethi - Added fish shell expansion support with proper syntax handling (#228, #242)
  • @raghavsethi - Fixed Xcode Node.js detection issues with fnm/homebrew conflicts (#246, #253)
  • @sandeepjak2007 - Added paste button to quick keyboard for improved iOS usability (#227)
  • @Dimillian - Fixed WebSocket and terminal resize loop on iOS devices (#224)

[1.0.0-beta.6] - 2025-07-03

Git Repository Monitoring

  • Real-time Git status in session rows with branch name and change counts (#200)
  • Color-coded status: orange for branches, yellow for uncommitted changes
  • Click folder icons to open repositories in Finder
  • Context menu option to open repositories on GitHub
  • 5-second cache prevents excessive git commands
  • Automatically finds git repositories in parent directories

Enhanced Command-Line Tool

  • vt title can set terminal title - even Claude can use it! (#153)
  • vt help displays binary path, version, build date, and platform info
  • Automatic detection of Homebrew installations on ARM Macs

Menu Bar Enhancements

  • Powerful menu bar with visual activity indicators (#176)
  • See all terminal sessions and Claude Code status (#160)
  • Mac stays awake when running terminal sessions

Web Interface Improvements

  • Complete UI overhaul with improved color scheme and animations (#179)
  • Collapsible sidebar to maximize terminal viewing space (#175)
  • Fixed race conditions causing sessions to appear as "missing"
  • Improved responsive design with better touch targets

🐛 Bug Fixes

  • Fixed terminal output corruption from race conditions
  • Fixed terminal titles jumping or getting stuck
  • Fixed double logger initialization deleting log files
  • Improved PTY manager cleanup and timer management
  • Enhanced error handling throughout server stack

Simplified Tailscale Setup

  • Switched to Tailscale's local API for easier configuration (#184)
  • Removed manual token management requirements
  • Streamlined connection UI

👥 Contributors

First-time contributors to VibeTunnel:

  • @noppe - Enabled scrolling in ConnectionView for narrow windows, improving UI accessibility
  • @tarasenko - Added title mode support and enhanced CLI installation verification (#153)

[1.0.0-beta.5] - 2025-06-29

UI Improvements

  • Web interface now shows full version including beta suffix
  • Cleaner build output by filtering non-actionable Xcode warnings
  • Fixed scrolling issues on mobile web browsers

Infrastructure

  • Web version automatically reads from package.json at build time
  • Build process validates version consistency between macOS and web
  • Tests only run when relevant files change (iOS/Mac/Web)
  • Comprehensive Playwright tests for web frontend reliability (#120)

🐛 Bug Fixes

  • Fixed authentication-related error messages when running with --no-auth
  • Fixed frontend log streaming in no-auth mode
  • Resolved flaky tests and improved test infrastructure (#205)
  • Enhanced release process documentation with version sync requirements
  • Better test fixtures, helpers, and debugging capabilities (#73)
  • Cleaner logs when running in development mode

👥 Contributors

First-time contributors to VibeTunnel:

  • @manuelmaly - Added gemini quick start button and slash commands for enhanced workflow (#128, #138)
  • @billyb2 - Fixed repeated screen recording permission dialogs for better user experience

[1.0.0-beta.4] - 2025-06-25

  • We replaced HTTP Basic auth with System Login or SSH Keys for better security (#43).
  • Sessions now show exited terminals by default - no more hunting for terminated sessions
  • Reorganized sidebar with cleaner, more compact header and better button placement
  • Added user menu in sidebar for quick access to settings and logout
  • Enhanced responsive design with better adaptation to different screen sizes
  • Improved touch targets and spacing for mobile users
  • Leverages View Transitions API for smoother animations with CSS fallbacks
  • More intuitive default settings for better out-of-box experience

👥 Contributors

First-time contributors to VibeTunnel:

  • @hjanuschka - Implemented authentication system with SSH key management for better security (#43)
  • @hjanuschka - Added screen sharing functionality with WebRTC (later removed in beta.13) (#209)
  • @chrisreyn - Fixed double shell-wrapping issues for aliases in vt script (#132)

[1.0.0-beta.3] - 2025-06-23

There's too much to list! This is the version you've been waiting for.

  • Redesigned, responsive, animated frontend.
  • Improved terminal width spanning and layout optimization
  • File-Picker to see files on-the-go.
  • Creating new Terminals is now much more reliable.
  • Added terminal font size adjustment in the settings dropdown
  • Fresh new icon for Progressive Web App installations
  • Refined bounce animations for a more subtle, professional feel
  • Added retro CRT-style phosphor decay visual effect for closed terminals
  • Fixed buffer aggregator message handling for smoother terminal updates
  • Better support for shell aliases and improved debug logging
  • Enhanced Unix socket server implementation for faster local communication
  • Special handling for Warp terminal with custom enter key behavior
  • New dock menu with quick actions when right-clicking the app icon
  • More resilient vt command-line tool with better error handling
  • Ensured vibetunnel server properly terminates when Mac app is killed

👥 Contributors

First-time contributors to VibeTunnel:

  • @tarasenko - Added Bonjour/mDNS service discovery for iOS app connectivity (#226)
  • @PiotrBosak - Updated README documentation for clarity
  • @zhouzhuojie - Added Cloudflare Quick Tunnel as a new access option

[1.0.0-beta.2] - 2025-06-19

🎨 Improvements

  • Redesigned slick new web frontend
  • Faster terminal rendering in the web frontend
  • New Sessions spawn new Terminal windows. (This needs Applescript and Accessibility permissions)
  • Enhanced font handling with system font priority
  • Better async operations in PTY service for improved performance
  • Improved window activation when showing the welcome and settings windows
  • Preparations for Linux support

🐛 Bug Fixes

  • Fixed window front order when dock icon is hidden
  • Fixed PTY service enhancements with proper async operations
  • Fixed race condition in session creation that caused frontend to open previous session

👥 Contributors

First-time contributors to VibeTunnel:

  • @moffmann - Updated CONTRIBUTING.md documentation

[1.0.0-beta.1] - 2025-06-17

🎉 First Public Beta Release

This is the first public beta release of VibeTunnel, ready for testing by early adopters.

What's Included

  • Complete terminal session proxying to web browsers
  • Support for multiple concurrent sessions
  • Real-time terminal rendering with full TTY support
  • Secure password-protected dashboard
  • Tailscale and ngrok integration for remote access
  • Automatic updates via Sparkle framework
  • Native macOS menu bar application

🐛 Bug Fixes Since Internal Testing

  • Fixed visible circle spacer in menu (now uses Color.clear)
  • Removed development files from app bundle
  • Enhanced build process with automatic cleanup
  • Fixed Sparkle API compatibility for v2.7.0

📝 Notes

  • This is a beta release - please report any issues on GitHub
  • Auto-update functionality is fully enabled
  • All core features are stable and ready for daily use

What's New Since Internal Testing

  • Improved stability and performance
  • Enhanced error handling for edge cases
  • Refined UI/UX based on internal feedback
  • Better session cleanup and resource management
  • Optimized for macOS Sonoma and Sequoia

🐛 Known Issues

  • Occasional connection drops with certain terminal applications
  • Performance optimization needed for very long sessions
  • Some terminal escape sequences may not render perfectly

📝 Notes

  • This is a beta release - please report any issues on GitHub
  • Auto-update functionality is fully enabled
  • All core features are stable and ready for daily use

[1.0.0] - 2025-06-16

🎉 Initial Release

VibeTunnel is a native macOS application that proxies terminal sessions to web browsers, allowing you to monitor and control terminals from any device.

Core Features

Terminal Management

  • Terminal Session Proxying - Run any command with vt prefix to make it accessible via web browser
  • Multiple Concurrent Sessions - Support for multiple terminal sessions running simultaneously
  • Session Recording - All sessions automatically recorded in asciinema format for later playback
  • Full TTY Support - Proper handling of terminal control sequences, colors, and special characters
  • Interactive Commands - Support for interactive applications like vim, htop, and more
  • Shell Integration - Direct shell access with vt --shell or vt -i

Web Interface

  • Browser-Based Dashboard - Access all terminal sessions at http://localhost:4020
  • Real-time Terminal Rendering - Live terminal output using asciinema player
  • WebSocket Streaming - Low-latency real-time updates for terminal I/O
  • Mobile Responsive - Fully functional on phones, tablets, and desktop browsers
  • Session Management UI - Create, view, kill, and manage sessions from the web interface

Security & Access Control

  • Password Protection - Optional password authentication for dashboard access
  • Keychain Integration - Secure password storage using macOS Keychain
  • Access Modes - Choose between localhost-only, network, or secure tunneling
  • Basic Authentication - HTTP Basic Auth support for network access

Remote Access Options

  • Tailscale Integration - Access VibeTunnel through your Tailscale network
  • ngrok Support - Built-in ngrok tunneling for public access with authentication
  • Network Mode - Local network access with IP-based connections

macOS Integration

  • Menu Bar Application - Lives in the system menu bar with optional dock mode
  • Launch at Login - Automatic startup with macOS
  • Auto Updates - Sparkle framework integration for seamless updates
  • Native Swift/SwiftUI - Built with modern macOS technologies
  • Universal Binary - Native support for both Intel and Apple Silicon Macs

CLI Tool (vt)

  • Command Wrapper - Prefix any command with vt to tunnel it
  • Claude Integration - Special support for AI assistants with vt --claude and vt --claude-yolo
  • Direct Execution - Bypass shell with vt -S for direct command execution
  • Automatic Installation - CLI tool automatically installed to /usr/local/bin

Server Implementation

  • Dual Server Architecture - Choose between Rust (default) or Swift server backends
  • High Performance - Rust server for efficient TTY forwarding and process management
  • RESTful APIs - Clean API design for session management
  • Health Monitoring - Built-in health check endpoints

Developer Features

  • Server Console - Debug view showing server logs and diagnostics
  • Configurable Ports - Change server port from default 4020
  • Session Cleanup - Automatic cleanup of stale sessions on startup
  • Comprehensive Logging - Detailed logs for debugging

🛠️ Technical Details

  • Minimum macOS Version: 14.0 (Sonoma)
  • Architecture: Universal Binary (Intel + Apple Silicon)
  • Languages: Swift 6.0, Rust, TypeScript
  • UI Framework: SwiftUI
  • Web Technologies: TypeScript, Tailwind CSS, WebSockets
  • Build System: Xcode, Swift Package Manager, Cargo, npm

📦 Installation

  • Download DMG from GitHub releases
  • Drag VibeTunnel to Applications folder
  • Launch from Applications or Spotlight
  • CLI tool (vt) automatically installed on first launch

🚀 Quick Start

# Monitor AI agents
vt claude

# Run development servers  
vt npm run dev

# Watch long-running processes
vt python train_model.py

# Open interactive shell
vt --shell

👥 Contributors

Created by:

First-time contributors to VibeTunnel:

  • @hjanuschka - Implemented comprehensive authentication system with SSH key management and PAM support (#43)
  • @hjanuschka - Added keyboard shortcut highlighter, fixed Japanese input duplication on iOS, and sleep prevention option (#114, #102, #146)

📄 License

VibeTunnel is open source software licensed under the MIT License.


Version History

Pre-release Development

The project went through extensive development before the 1.0.0 release, including:

  • Initial TTY forwarding implementation using Rust
  • macOS app foundation with SwiftUI
  • Integration of asciinema format for session recording
  • Web frontend development with real-time terminal rendering
  • Hummingbird HTTP server implementation
  • ngrok integration for secure tunneling
  • Sparkle framework integration for auto-updates
  • Comprehensive testing and bug fixes
  • UI/UX refinements and mobile optimizations