This is with freshly-updated BTT 6.396
Describe the bug
Lost functioning preset StatusItemBar after running BTT Update + Restart
Affected input device (e.g. MacBook Trackpad, Magic Mouse/Trackpad, Touch Bar, etc.)
macbook mouse & menu
Device information:
- Type of Mac:MacBook Pro 14” 2023
- macOS version: 26.4.1
- BetterTouchTool version: 6.396
Additional information (e.g. crash logs, related issues, etc.): I was posting triumphs & frustrations in a thread about the statusbar floating menu (Update for 2026 was the gist of the title) - in the end AI suspected that config sync was to blame. We investigated more and found tension between sync & the dynamic nature of the floating status menu bar. Below is AI’s explanation with ideas→
StatusItemBar Floating Menu: Syncing Structure vs Dynamic Contents
Context
I use a floating menu–based StatusItemBar to replicate the macOS menu bar's status items area. The setup consists of three cooperating triggers in a local preset (sequoia_status_item_bar):
- StatusItemBar (type 767) — the floating menu container, positioned at top-right of screen,
BTTMenuVisibility: 1(hidden by default), with ~39 config properties controlling layout, blur, padding, spacing, etc. Its single structural child is a Menubar Status Items Widget (type 794). - HoverRecognitionOverlay (type 767) — an invisible overlay that detects mouse hover at the top-right corner. On hover-start → Show StatusItemBar; on hover-end → Hide StatusItemBar.
- Menubar Item ❮ (type 674) — a custom menubar icon that toggles the StatusItemBar's enabled state.
The Menubar Status Items Widget (794) contains 21 individual Status Items (type 795) — one per app that has a menu bar icon (VLC, BTT, Karabiner, Last.fm, etc.). These items are device-specific and change throughout the day as apps launch and quit.
The Problem
I also have a "Synced" preset that syncs BTT configuration across my machines. After a BTT update/restart, the sync process caused severe damage to the local preset:
- StatusItemBar's
BTTMenuConfigwas gutted from 39 properties to ~7, losing all positioning, blur, padding, and hover behavior settings - HoverRecognitionOverlay was completely deleted
- Empty "zombie" action shells from the Synced preset appeared inside local preset triggers
(The cross-preset contamination is covered in a separate bug report.)
What I Want
The structural elements (StatusItemBar container config, HoverRecognitionOverlay, Menubar Item toggle) are tuned and should sync across machines. The Status Items (type 795) are inherently device-specific — each machine runs different apps with different menu bar icons — and should NOT sync.
Currently these are all in the same preset because BTT requires a floating menu's children to be in the same preset as the parent. This creates an all-or-nothing situation: either the whole StatusItemBar (structure + dynamic items) syncs, or none of it does.
What I Tried
Experiment: Menu Merging via Same Identifier (Failed)
BTT docs for the text selection popup mention: "You can even merge multiple menus if they have the same identifier — in that case you'll need to use the 'display order' property to specify the order of items across menus."
I tested whether this works across presets for the StatusItemBar use case:
Setup:
- Synced preset: Created a second floating menu with
BTTMenuElementIdentifier: "StatusItemBar"andBTTMenuVisibility: 1, containing a single bright red test button - sequoia_status_item_bar preset: The existing StatusItemBar with its Widget + 21 Status Items, same
BTTMenuElementIdentifier: "StatusItemBar"
Test: Triggered "Show Floating Menu" targeting identifier "StatusItemBar".
Result:
Only the original StatusItemBar appeared with its normal status items. The test button from the Synced preset was not visible. Menu merging does not appear to work across presets — or at minimum, the "Show Floating Menu" action only targets one menu per identifier, not a merged view.
Other Options Considered
Split into two presets (structural vs dynamic): Not possible — floating menu items must share a preset with their parent menu. Moving the StatusItemBar container to the Synced preset would force the Widget (794) and all Status Items (795) to come along, defeating the purpose.
Keep local, accept risk: Keep everything in the local preset and don't sync. Manually re-export/import when making structural changes. This is my current workaround but it's fragile and defeats the purpose of sync for the parts that genuinely benefit from it.
Enhancement Request
None of the current mechanisms cleanly solve the "sync structure, not contents" problem. Here are some ideas, roughly ordered by implementation scope:
A. Per-Trigger Sync Exclusion Flag
A BTTExcludeFromSync or BTTSyncBehavior property on individual triggers, so the Status Items Widget and its children could be marked as local-only even within a synced preset. This would be the most general-purpose solution — useful beyond the StatusItemBar case.
B. Widget-Level "Don't Sync Children" Flag
A config property on the Menubar Status Items Widget (794) like BTTMenuStatusItemsSyncChildren: false. Since the Widget dynamically discovers status items at runtime, it could rebuild the Status Items (795) on each machine independently. The Widget itself syncs (so you get the container layout), but the per-app items are generated fresh on each device.
C. Cross-Preset Menu Merging (Official Support)
If menu merging with BTTMenuElementIdentifier is intended to work across presets, it's not currently functioning that way (tested April 2026). Making it work would solve this case: structural config in a Synced preset menu, dynamic items in a local preset menu with the same identifier, rendered as a merged menu.
D. "Structural Sync" Mode
A preset-level or menu-level option that syncs the container config (positioning, blur, padding, visibility, hover behavior, window level) and first-level widget structure, but excludes dynamically-populated children like individual Status Items.
Current Workaround
All three structural triggers remain in the local sequoia_status_item_bar preset (not synced). I maintain a backup preset file (floating_status_item_bar.bttpreset) with the correct structural configuration that I can re-import if sync corruption happens again. This works but is manual and fragile.
Environment
- BTT 4.x (latest stable as of April 2026)
- macOS Sequoia
- Two Macs syncing via BTT's built-in sync
- Presets: "Synced" (synced) + "sequoia_status_item_bar" (local)