1Overview
Totem Bar is a macOS accessory app that keeps a piece of text pinned to your menu bar at all times. Named after the totem from Inception — the small object you check to confirm which reality you're in — Totem Bar is built for people who juggle multiple Macs.
Work and personal, client A and client B, production and staging — set any text you want on each machine so you always know which one you're looking at.
Key features:
- Always-on menu bar label — any text you like (machine name, environment, emoji, warning, etc.)
- Width mode:
Auto(fit to content) orFixed(40–300 pt) - Overflow behavior:
Truncate(tail ellipsis) orScroll(marquee) - Color presets and custom colors (In-App Purchase)
- URL scheme
totem://set?text=...to update the label from the command line or scripts - Launch at login, no Dock icon (
.accessorypolicy)
2Getting Started
From install to your first label in five steps.
- Launch Totem Bar. A placeholder reading
Enter your Totemappears on the right-hand side of the menu bar. Nothing shows up in the Dock. - Click the Totem label in the menu bar to open its menu, then choose Settings… (⌘,).
- Type the string you want in the Display Text field (e.g.
MacBook-Work,PROD,🏠 Home). - Optionally adjust Width Mode, Colors, and Launch at Login.
- Close the Settings window. Changes are applied to the menu bar immediately.
4Settings Window
Open from the Totem label in the menu bar → Settings… (⌘,). Every change applies to the menu bar immediately and is persisted in UserDefaults.
Sections
| Section | Contents |
|---|---|
| Display | Display Text / Width Mode / Fixed Width / Overflow Behavior |
| Preview | Live preview mirroring the actual menu bar rendering |
| Colors | Color presets / Text Color / Background Color (Pro) |
| System | Launch at Login |
| Feature Flags | Enable overflow scroll |
| URL Scheme | Instructions and sample commands for the totem:// scheme |
5Display Text
Sets the string rendered in the menu bar.
What you can enter
- ASCII text:
MacBook-Work,PROD,staging-2 - Non-Latin scripts:
仕事用,本番 - Emoji and symbols:
🏠 Home,🔥 PROD,⚠️ DO NOT DEPLOY - Empty string: falls back to
Enter your Totem
Specs
| Item | Value |
|---|---|
| Default | Enter your Totem |
| Length limit | No soft limit (constrained by width) |
| Font | System, 13 pt |
| Persistence | UserDefaults key displayText |
| External update | URL scheme totem://set?text=... |
🏠 for personal, 💼 for work, and 🔥 for the production-access machine goes a long way.
6Width Mode
Controls how much menu bar space Totem Bar reserves for its label.
| Mode | Behavior | When to use |
|---|---|---|
| Auto | Width tracks the measured size of the current text | Always-short labels, or you don't mind a bit of reflow |
| Fixed | Locked to a chosen pt width (40–300 pt); overflow is truncated or scrolled | You want a stable menu bar footprint regardless of text length |
Fixed Width settings
- Range: 40 pt – 300 pt
- Default: 120 pt
- Ignored when Width Mode is
Auto
Fixed-width examples
Fixed 120 pt — text fits within the width
Fixed 60 pt — overflow is truncated with a tail ellipsis
Auto and shift neighbouring menu bar items around. Fixed keeps everything still.
7Overflow Behavior
Controls how text that doesn't fit a Fixed width is shown.
Enable overflow scroll under Feature Flags in the Settings window, and set Width Mode to Fixed, for the Overflow Behavior picker to appear.
Truncate (tail ellipsis)
Anything past the fixed width is replaced with a trailing …. This is the default.
Scroll (marquee)
The full text loops smoothly across the fixed width. Use this when you want the entire label readable.
| Item | Value |
|---|---|
| Scroll speed | 30 pixels/sec |
| Gap between repetitions | 24 pt |
| Required conditions | Feature flag ON and Width Mode = Fixed |
8Color Customization
Pair a text color with a background color to get an instantly recognizable look.
Color presets
Built-in presets, free to use. One click applies both text and background.
| Preset | Text | Background | Suggested use |
|---|---|---|---|
| Default | System color (adaptive) | Transparent (menu bar) | Understated, always-on |
| White on Red | #FFFFFF | #D9342B | Production warning |
| White on Blue | #FFFFFF | #2563EB | Dev environment |
| White on Green | #FFFFFF | #16A34A | Staging / all-clear |
| Yellow on Black | #F5C518 | #111111 | Caution / hold |
| Black on Yellow | #111111 | #F5C518 | Hazard |
PRO Custom Colors (In-App Purchase)
The one-time Totem Bar Pro unlock opens up full color customization.
- Text Color: pick any color (color picker)
- Background Color: pick any color, with alpha / transparency
- Stored as
#RRGGBBor#RRGGBBAAhex - Tied to your Apple ID — use Restore Purchases on other Macs
9URL Scheme
Update the display text from the command line or a script via a URL. Great for shell integration and automation.
Syntax
totem://set?text=<your text here>
The text parameter accepts a URL-encoded string.
Usage
Open the URL from the terminal with open:
# Plain text
open "totem://set?text=Hello"
# Show the local hostname
open "totem://set?text=$(scutil --get LocalHostName)"
# Show the current Git branch
open "totem://set?text=$(git rev-parse --abbrev-ref HEAD)"
# IP address
open "totem://set?text=$(ipconfig getifaddr en0)"
# With an emoji (URL-encoded)
open "totem://set?text=%F0%9F%94%A5%20PROD"
Example: update on directory change
A zsh chpwd hook that updates the label whenever you cd into a Git repository:
chpwd() {
if git rev-parse --is-inside-work-tree &>/dev/null; then
local branch=$(git rev-parse --abbrev-ref HEAD)
open "totem://set?text=$branch"
fi
}
Behavior
| Item | Behavior |
|---|---|
| Apply | Immediate (also persisted to UserDefaults) |
| If the app isn't running | Launch Services starts it, then applies |
| Unknown command | Ignored silently (no error) |
Empty text | Falls back to the default placeholder |
10Login Item & More
Launch at Login
Toggle on Launch at Login under the System section of the Settings window to start Totem Bar automatically when you log in.
- Uses macOS's
SMAppService(the recommended API on macOS 13+) - The state is mirrored under System Settings → General → Login Items
- macOS may prompt for permission the first time you enable it
No Dock icon (Accessory App)
Totem Bar uses the .accessory activation policy.
- It does not appear in the Dock
- It does not appear in the
⌘+Tabswitcher - It never becomes the active app, so it won't replace the main menu bar
Resource usage
- Native Swift implementation
- Near-zero CPU at idle (except when marquee scroll is active)
- No network traffic — the app works fully offline
Data storage
- All settings are stored in
UserDefaults(via@AppStorage) - Writes are confined to the app's sandbox container
- No personal data is collected (App Privacy: Data Not Collected)
11FAQ
totem://set?text=... doesn't do anything.& in the URL is otherwise interpreted by your shell. Example: open "totem://set?text=Hi". Also, multi-byte characters must be URL-encoded.SMAppService isn't available on older versions, and the app will not run on those systems at all.UserDefaults and do not sync automatically. In practice, having each Mac show its own label (e.g. Home vs. Work) is the whole point. Only the Pro unlock is shared — it's tied to your Apple ID.UserDefaults. Nothing is sent over the network. The App Privacy label on the App Store is Data Not Collected.12About This App
| App name | Totem Bar |
| Bundle ID | jp.prototypelabs.totem |
| Supported OS | macOS 13 Ventura or later |
| Category | Utilities / Productivity |
| Languages | English, Japanese |
| Implementation | Swift / SwiftUI (MenuBarExtra) |
| Developer | Prototype Labs |
| Price | Free (Totem Bar Pro is an in-app purchase) |