Skip to content

Releases: furybee/chrome-tab-modifier

1.1.5

12 Nov 11:40
a46cdca

Choose a tag to compare

Changelog - Version 1.1.5

🐛 Bug Fixes

Critical: Chrome crash when using split view with grouped tabs

  • Problem: Chrome crashes entirely when using "Add tab to new split view" on tabs that match a Tabee group rule
  • Root cause: chrome.tabs.group() API doesn't support tabs in split view (Chrome 140+)
  • Fix: Multi-layer split view detection and protection
    • Track tabs entering/exiting split view via changeInfo.splitViewId
    • Guard all grouping/ungrouping operations with split view checks
    • Re-fetch tab state before each retry attempt
    • Detect split view related errors and abort retries
  • Impact: No more Chrome crashes when using split view feature
  • Files changed:
    • src/background.ts
    • src/background/TabGroupsService.ts

Performance: Faster duplicate tab closing (unique feature)

  • Problem: With "unique" enabled, duplicates were only closed 9+ seconds after page load
  • Old behavior: Content script sent message → background closed duplicate (after page fully loaded)
  • New behavior: Background script closes duplicates immediately during tabs.onUpdated event
  • Impact: Duplicates now closed during page load (before it finishes), matching old tab-modifier speed
  • Files changed:
    • src/background.ts
    • src/background/TabRulesService.ts
    • src/content/RuleApplicationService.ts

UI: Fixed icon picker not showing selected image

  • Problem: When selecting an image icon, only the category emoji was displayed in the button
  • Fix: Now displays the actual selected image thumbnail in the picker button
  • Files changed: src/components/options/center/sections/TabRules/EmojiIconPicker.vue

✨ New Features

Search bar for rules

  • Feature: Instant search/filter for rules in the Rules page
  • How it works:
    • Search bar in the navbar (visible on Rules page)
    • Filters rules by name, URL fragment, or title
    • Real-time filtering as you type
  • Keyboard shortcuts:
    • Ctrl+K (Windows/Linux) or Cmd+K (Mac) to focus search
    • Escape to clear search
  • UI: Uses DaisyUI kbd badges to show platform-appropriate shortcut
  • Files changed:
    • src/Options.vue
    • src/components/options/center/sections/TabRulesPane.vue
    • src/stores/rules.store.ts

Debug mode setting

  • Feature: Control content script logging via settings
  • How it works: Toggle in Settings to enable/disable debug logs in page console
  • Files changed:
    • src/content/debugLog.ts
    • src/components/options/center/sections/SettingsPane.vue

📝 Documentation

CSS selector variables in title patterns

  • Feature: Document existing {.css-selector} feature in Help page
  • Use case: Extract text from page DOM and use in tab titles
  • Example: {.ytd-channel-name a} - {title} for YouTube channel names
  • Files changed: src/components/options/center/sections/HelpPane.vue

🧪 Tests

Updated test suite

  • Fixed tests for split view protection (added chrome.tabs.get mock)
  • All 218 tests passing
  • Files changed:
    • src/background/__tests__/TabGroupsService.test.ts
    • src/background/__tests__/TabRulesService.test.ts
    • src/background/__tests__/TabRulesService.unique.test.ts

🔧 Maintenance

Migration from yarn to npm

  • Change: Project now uses npm instead of yarn
  • Updates:
    • CI workflow uses npm ci and npm run commands
    • resolutions replaced with overrides in package.json
    • README.md updated with npm commands
    • yarn.lock removed, package-lock.json added
  • Files changed:
    • .github/workflows/ci.yml
    • package.json
    • README.md
    • docs/SECURITY.md

Package updates

  • Updated dependencies to latest versions
  • Applied ESLint formatting across codebase

🎯 User Impact

For users experiencing:

  • ✅ Chrome crash with split view → FIXED
  • ✅ Slow duplicate tab closing → FIXED (now instant during page load)
  • ✅ Icon picker not showing image → FIXED
  • ✅ Hard to find rules in long lists → NEW search bar with keyboard shortcut

📊 Metrics

  • Test coverage: 218/218 tests passing
  • Duplicate closing speed: Instant (during page load)
  • Split view compatibility: Full protection against crashes

🔄 Migration Notes

No migration needed. All changes are backward compatible.

1.1.4

12 Nov 11:38
a46cdca

Choose a tag to compare

🐛 Critical Bug Fixes

Fixed SPA freeze issue (GitHub, Gmail, etc.)

  • Problem: Extension caused Chrome to freeze when navigating on Single Page Applications
  • Symptoms:
    • Network requests hanging ("pending")
    • Memory usage growing to GBs
    • Page completely frozen
    • Browser unresponsive
  • Root cause:
    • UrlChangeDetector was observing entire document with aggressive throttling
    • MutationObserver firing thousands of times during DOM changes
  • Fix:
    • Changed from throttling to debouncing (500ms wait after last mutation)
    • Reduced observation scope to only <title> element instead of entire document
    • Prevents callbacks during heavy DOM manipulation
  • Impact: ~99% reduction in observer callbacks → massive performance improvement
  • Files changed:
    • src/content/UrlChangeDetector.ts
    • src/content/RuleApplicationService.ts

Fixed "unique tab" closing wrong tabs

  • Problem: Unique feature was closing unrelated tabs (e.g., Gmail when refreshing GitHub)
  • Root cause:
    • When url_fragment doesn't contain $1 placeholder, _processUrlFragment() returns same value for all URLs
    • This made all tabs appear as duplicates
  • Example scenario:
    • Rule: url_fragment: "github.com/issues", url_matcher: "github\.com/.+/issues/(\d+)"
    • GitHub tab: processed to "github.com/issues"
    • Gmail tab: also processed to "github.com/issues" (no match, returns fragment as-is)
    • Both equal → Gmail closed! ❌
  • Fix:
    • Added validation: tabs must match url_matcher pattern before comparison
    • Without url_matcher: compare exact URLs only
    • Prevents closing tabs that don't match the rule's pattern
  • Impact: Unique feature now works correctly, no more random tab closures
  • Files changed: src/background/TabRulesService.ts
  • Tests added: src/background/__tests__/TabRulesService.unique.test.ts (85 new test cases)

✨ New Features

Rule copy/paste functionality

  • Feature: Copy rules to clipboard and paste them to duplicate
  • How to use:
    • Click copy icon next to a rule → copies to clipboard
    • Click "Paste rule" button → creates new rule from clipboard
  • Use case: Quickly duplicate rules with slight modifications
  • Feature flag: Can be disabled via FEATURE_FLAGS.ENABLE_RULE_COPY_PASTE
  • Files changed:
    • src/Options.vue
    • src/stores/rules.store.ts
    • src/components/options/center/sections/TabRules/TableRules.vue
  • Files added: src/components/icons/ClipboardIcon.vue

Paste rule: Auto-refresh

  • Problem: After pasting a rule, the list didn't refresh to show the new rule
  • Fix: Store automatically refreshes after paste operation
  • Files changed: src/Options.vue

🔧 Technical Improvements

Feature flags system

  • Added: src/common/feature-flags.ts for toggling experimental features
  • Current flags:
    • ENABLE_RULE_COPY_PASTE: Enable/disable copy/paste functionality

URL change detection optimization

  • Before: Throttled MutationObserver checking every 100ms during mutations
  • After: Debounced observer waiting 500ms after mutations settle
  • Result: Only checks URL after DOM changes complete, not during

Observer lifecycle management

  • Properly disconnect observers before creating new ones
  • Prevents memory leaks from accumulated observers
  • Better performance on long-running tabs

🧪 Tests

Comprehensive unique tab test suite

  • 85+ new test cases covering all unique tab scenarios
  • Tests for GitHub-style URLs with issue numbers
  • Tests for simple CONTAINS detection without url_matcher
  • Edge cases: nested duplicates, different issue numbers, etc.
  • Files added: src/background/__tests__/TabRulesService.unique.test.ts

🎯 User Impact

For users experiencing Chrome freezing:

  • FIXED: GitHub navigation no longer freezes
  • FIXED: Gmail and other SPAs work smoothly
  • FIXED: Network requests complete normally
  • FIXED: Memory usage stays stable (no more GB growth)

For users experiencing unique tab issues:

  • FIXED: Unique feature no longer closes random tabs
  • FIXED: Gmail won't close when refreshing GitHub
  • FIXED: Only true duplicates are closed

For users wanting to duplicate rules:

  • NEW: Copy/paste rules for quick duplication

📊 Performance Metrics

  • Observer callbacks: ~99% reduction on SPAs (thousands → ~10 per navigation)
  • Memory usage: Stable (prevents GB-scale growth)
  • CPU usage: Dramatically reduced during SPA navigation
  • Debounce delay: 500ms after DOM changes settle
  • Test coverage: 218 tests passing

🔄 Migration Notes

No migration needed. All changes are backward compatible.

For users with unique tab rules:

If you were experiencing tabs closing incorrectly, this should now work as expected.

For REGEX users:

Patterns with nested quantifiers (e.g., (?:[\w-]+\.)*) are blocked for security.
Use simplified patterns instead: google\.com/.*/u/5/

⚠️ Known Issues

None reported. All critical bugs from 1.1.3 have been resolved.

1.1.3

12 Nov 11:38
a46cdca

Choose a tag to compare

✨ New Features

Tab Grouping: Fixed race condition

  • Problem: Tab groups would appear and disappear rapidly during page load
  • Fix: Improved timing logic to prevent race conditions between group creation and tab loading
  • Impact: Tab grouping now works reliably and consistently
  • Files changed: src/background.ts

Tab Hive: Reject list with context menu

  • Feature: Added ability to exclude URLs or domains from Tab Hive auto-close
  • How to use: Right-click on a tab → "Don't auto-close this domain/URL"
  • Storage: Rejected patterns saved in settings
  • Files added: Context menu integration in src/background/ContextMenuService.ts

Tab Hive: Settings UI

  • Feature: New dedicated settings panel for Tab Hive configuration
  • What's included:
    • Manage reject list (view/edit/delete excluded URLs/domains)
    • Configure auto-close timeout
    • Enable/disable Tab Hive
  • Files changed: src/background.ts, Tab Hive settings components

Tab Hive: Improved reliability in service worker

  • Problem: Auto-close feature was unreliable with service worker lifecycle
  • Fix: Switched from setInterval to chrome.alarms API for persistent timers
  • Impact: Tab Hive auto-close now works consistently, even after service worker suspends
  • Files changed: src/background/TabHiveService.ts

Emoji support for tab icons

  • Feature: Added emoji picker for tab icons
  • What's included:
    • 740+ emojis across 8 categories (Smileys, Animals, Objects, etc.)
    • Search functionality
    • Categorized tabs
  • Files added: src/common/emoji-data/categories/*.ts

SidePanel: Reload active tab after saving rule

  • Feature: When saving a rule in the sidepanel, the active tab automatically reloads
  • Impact: Rule changes apply immediately without manual refresh
  • Files changed: src/SidePanel.vue

Icon field: Clear button

  • Feature: Added clear button (×) to easily remove icon from a rule
  • Impact: Better UX for icon management
  • Files changed: Rule form components

🎨 UI Improvements

Tab Hive: Improved styling

  • Added primary color to bordered tabs in Tab Hive list
  • Better visual hierarchy and consistency
  • Files changed: Tab Hive components

Mobile: Fixed sidebar z-index

  • Problem: Sidebar was appearing below other elements on mobile
  • Fix: Adjusted z-index for proper layering
  • Files changed: Sidebar styling

🐛 Bug Fixes

Tab grouping race condition

  • Groups no longer flicker or disappear during page load
  • Consistent behavior across all detection types (CONTAINS, REGEX, etc.)

📊 What's New

  • New icons: 11 star-themed bullet icons (all colors)
  • New test suite: Detection vs Uniqueness test cases (detection-vs-uniqueness.test.ts)
  • Context menu: Enhanced with Tab Hive reject options

🎯 User Impact

For users experiencing:

  • ✅ Tab groups disappearing → FIXED (race condition resolved)
  • ✅ Tab Hive not working reliably → FIXED (service worker alarms)
  • ✅ No way to exclude tabs from auto-close → ADDED (reject list)
  • ✅ Want to use emojis as icons → ADDED (emoji picker)
  • ✅ Rules don't apply immediately in sidepanel → FIXED (auto-reload)

🔄 Migration Notes

No migration needed. All changes are backward compatible.

New features (emoji picker, Tab Hive reject list) are opt-in.

1.1.2

06 Nov 13:15
3fd9cf3

Choose a tag to compare

What's Fixed

🚨 Critical: Storage Limit Issues

Fixed critical storage limit problems that could cause data loss or extension malfunction:

  • Migrated from Chrome sync storage (100KB limit) to local storage (10MB limit)
  • Implemented compression using LZ-String to reduce storage footprint
  • Removed chunking system (no longer needed with local storage)
  • Added automatic migration from old sync storage format
  • Storage size reduced by ~60-70% thanks to compression

🚨 Critical: Unique Tab Rule Closing Random tabs

Enhanced the "unique tab" functionality:

  • Fixed rule application logic for unique tabs
  • Better handling of duplicate detection
  • Improved URL change detection with new UrlChangeDetector service
  • Added 319 new tests specifically for unique tab scenarios

📋 Storage Migration

Complete storage system overhaul:

  • Converted storage.test.js to TypeScript (storage.test.ts)
  • Added 391 comprehensive storage tests
  • Tests for migration, compression, and edge cases
  • Backward compatibility maintained for existing users

🎯 Settings Improvements

Enhanced Settings pane:

  • Better organization and layout
  • Improved storage limit warnings
  • Added migration status indicators

🤖 CI/CD Improvements

Enhanced GitHub Actions workflow:

  • Auto-build on pull requests
  • Better test coverage reporting
  • Multiple workflow fixes and improvements

📊 By The Numbers

  • New tests
  • Storage capacity: 100KB → 10MB (100x increase)
  • Storage usage: -60-70% (thanks to compression)
  • 17 files modified
  • 2,303 lines added, 1,171 lines removed

🧪 Testing

New comprehensive test suites:

  • TabRulesService.unique.test.ts
  • TabRulesService.unique.bug.test.ts
  • storage.test.ts
  • UrlChangeDetector.test.ts
  • StorageService.test.ts

📝 Documentation

  • Added docs/unique-pattern-proposal.md with detailed proposal for unique tab patterns

🐛 Bug Fixes

  • Fixed storage limit errors that prevented saving rules
  • Fixed unique tab rule not working correctly
  • Fixed rule application timing issues
  • Improved URL change detection reliability
  • Better error handling for storage operations

⚠️ Breaking Changes

None! All existing data is automatically migrated to the new storage format.

🙏 Thanks

Thank you to everyone who reported storage issues! Your feedback helped us identify and fix critical problems.

📦 Installation

Update via Chrome Web Store.


Full Changelog: v1.1.1...release/1.1.2

1.1.1

06 Nov 09:07
511c68a

Choose a tag to compare

What's Fixed

🚨 Critical: Unique Tab Closing All Tabs

Fixed a critical bug where enabling the "unique" option would close all open tabs instead of just duplicates. This was caused by inverted logic in the duplicate detection code.

🎯 Disabled Rules Now Actually Disabled

Fixed disabled rules still matching URLs and blocking enabled rules from working. For example, a disabled rule with .* pattern would prevent all other rules from functioning.

📁 No More Duplicate Tab Groups

Fixed excessive duplicate group creation. Previously, you could end up with 10+ groups named "GitHub" or "YouTube". The extension now properly reuses existing groups.

🔧 TypeScript Build Errors

Fixed compilation errors that prevented clean builds.

📊 By The Numbers

  • 4 critical bugs fixed
  • 181 tests passing (+17 new tests)
  • 9 new tests for tab groups
  • 5 new tests for unique tabs
  • 3 new tests for disabled rules

🙏 Thanks

Thank you to everyone who reported these issues! Your feedback helps make Tabee better.

📦 Installation

Update via Chrome Web Store.


Full Changelog: 1.1.0...1.1.1

1.1.0

23 Oct 18:28
99ce295

Choose a tag to compare

🧩 Changes List - Tabee v1.1.0

🎨 Branding & Identity

  • 🐝 New name: Chrome Tab Modifier → Tabee
  • 🎨 New icon & branding: Bee-inspired design with minimal yellow-black aesthetic
  • 🏁 Published under new developer account

✨ New Features

🍯 Tab Hive (Auto-Close Inactive Tabs)

  • Automatically closes tabs inactive for a specified duration
  • Closed tabs saved in side panel for easy restoration
  • Grouped by domain for better organization
  • SHA-256 hash-based duplicate detection (no duplicate entries)
  • Search functionality to filter tabs by URL or title
  • Real-time activity tracking with visual feedback

🌐 Side Panel

  • Two tabs: "Add Rule" and "🍯 Tab Hive"
  • Quick access to create rules from current tab
  • Restore closed tabs with one click
  • Clear all closed tabs option

🖼️ Image Paste Support for Icons

  • Paste images directly from clipboard into the "Icon" field
  • Automatic base64 Data URI conversion
  • Support for PNG, JPEG, GIF, WebP formats
  • Visual preview of pasted images

🔍 Spot Search - Quick Tab & Bookmark Finder

  • Instant search across all open tabs and bookmarks with Alt+Shift+E (or Cmd+Shift+E on Mac)
  • Real-time filtering as you type - search by title, URL, or tab group name
  • Keyboard navigation - use arrow keys (↑↓) to navigate, Enter to select, Escape to close
  • Visual indicators - displays favicons, tab group badges with colors, and bookmark icons
  • Smart activation - clicking a tab brings it to focus, clicking a bookmark opens it in a new tab
  • Dark theme UI - elegant overlay with smooth animations
  • Performance optimized - filters chrome:// internal pages automatically

♻️ Sync Mode

  • Automatically save and restore tab renaming rules across multiple devices
  • Chrome Storage Sync integration

🍀 Lightweight Mode

  • Disable listeners on specific domains or patterns
  • Reduce memory usage on specified sites
  • Regex or domain-based pattern matching

🎯 Context Menu Enhancements

  • ✏️ Rename Tab - Quick rename with emoji
  • 🪟 Merge All Windows - Combine all browser windows
  • 🍯 Send to Tab Hive - Manually send tab to hive

🔧 Technical Improvements

🏗️ Architecture Refactoring (SOLID Principles)

Background Services:

  • TabRulesService.ts - Rule application logic
  • TabGroupsService.ts - Tab grouping management
  • TabHiveService.ts - Auto-close & tab hive management
  • WindowService.ts - Window merging operations
  • ContextMenuService.ts - Context menu handling
  • Result: background.ts reduced from 820 → 265 lines (68% reduction)

Content Services:

  • RegexService.ts - Safe regex validation (ReDoS protection)
  • TitleService.ts - Title processing & DOM extraction
  • IconService.ts - Favicon management
  • StorageService.ts - Storage & rule matching
  • RuleApplicationService.ts - Rule orchestration
  • Result: content.js reduced from 390 → 56 lines (85% reduction)

🧪 Test Coverage

  • More tests!
  • 100% pass rate
  • Comprehensive coverage for all services
  • Background services: 35 tests
  • Content services: 57 tests
  • Integration tests maintained

📝 Help Section Updates

  • Emojis added to all section titles (💡✨⌨️📋📝)
  • Removed non-functional "Open Side Panel" keyboard shortcut
  • Updated documentation for new features

🔐 Security

  • ReDoS (Regular Expression Denial of Service) protection
  • Safe regex validation for all user-provided patterns
  • SHA-256 hashing for URL comparison

🌍 Logging & Debugging

  • Comprehensive logging with emoji indicators (🍯 for Tab Hive operations)
  • Detailed console output for troubleshooting
  • Error tracking throughout the extension

📦 Build & Tooling

  • Full TypeScript migration for background and content scripts
  • Vite build optimization
  • Modern ES modules architecture
  • Improved type safety throughout

🐛 Bug Fixes

  • Fixed Wikipedia sample rule regex to support both dash types (— and -)
  • Fixed dynamic initialization of auto-close when toggled in settings
  • Improved error handling in tab grouping with retry logic
  • Fixed capture group support in URL fragments for unique tabs

Migration from Chrome Tab Modifier: All existing rules, groups, and settings are preserved. The extension maintains full backward compatibility while adding new features.


Full Changelog: 1.0.17...1.1.0

1.0.17

04 Jul 08:32

Choose a tag to compare

What's Changed

Full Changelog: 1.0.14...1.0.17

1.0.13

16 Nov 09:40

Choose a tag to compare

What's Changed

  • feat: add a transparent icon
  • fix: add enable / disable label for rule activation
  • fix: tooltip when too long
  • chore: upgrade packages
  • chore(readme): github glob example
  • chore: upgrade crxjs vite plugin (csp)

Full Changelog: 1.0.12...1.0.13

1.0.12

16 Sep 22:14
c8b5ba1

Choose a tag to compare

What's Changed

Full Changelog: 1.0.11...1.0.12

1.0.11

27 Jul 12:00

Choose a tag to compare

What's Changed

Full Changelog: 1.0.10...1.0.11