Introduction

channelBar is a macOS application that lives in the menu bar and allows you to receive, display, and organize messages from various sources. The app serves as a central hub for notifications and status messages from your tools, automations, and smart home systems.

What makes channelBar special:

  • Multiple channels: Organize messages into thematic categories
  • Flexible inputs: Receive messages via URLs, webhooks, MQTT, files, and more
  • Customizable outputs: Menu bar, system notifications, audio, or command-line application
  • Powerful templates: Format messages exactly the way you want

Basic Concepts

Channels

A channel is a container for related messages. Think of channels as thematic folders:

  • work – Messages from build systems, CI/CD pipelines
  • home – Smart home notifications
  • weather – Weather alerts and updates
  • server – Monitoring alerts

Each channel has:

  • A unique identifier (name)
  • A position in the menu bar (order)
  • Its own providers (inputs)
  • Its own outputs (menu bar, notifications, audio)
  • Its own templates for message formatting
  • Retention rules (how many/how long messages are stored)

Messages

A message is the actual content that arrives in a channel via a provider. Each message contains:

FieldDescription
textThe message content
providerWhere the message came from (Webhook, MQTT, etc.)
sourceOptional label (e.g., "Jenkins", "GitHub Actions")
createdAtTimestamp
linkOptional URL (opened in browser)
openOptional command/path to execute
openArgsOptional arguments for the command
messageContextOptional context data (for templates)

Providers (Inputs)

Providers are the ways messages reach channelBar. There are nine different provider types:

ProviderDescription
URL Schemechannelbar:// URLs from other apps
WebhookHTTP endpoint for remote systems
MQTTPub/Sub protocol for IoT and automation
RSS/Atom FeedSubscribe to web feeds, podcasts, and YouTube channels
File WatcherMonitor local files
Apple ShortcutsApple Shortcuts integration
Home AssistantSmart home integration
Command-Line ApplicationLocal command-line application
CloudchannelBar Cloud Service

Each channel can have multiple providers active at the same time.

Outputs

Outputs define how and where messages are displayed. Each channel has four independently configurable outputs:

OutputDescription
Menu BarDisplay in the macOS menu bar
NotificationsmacOS system notifications
AudioSound output for new messages
Command-Line ApplicationOutput to the command-line application

Templates

Templates determine how messages are formatted and displayed. With variables like {message}, {date}, or {source}, you can customize the appearance individually.


The User Interface

channelBar displays an element in the macOS menu bar for each active channel. Clicking opens the channel menu with:

  • The current message (formatted according to template)
  • The message history as a submenu
  • Optional actions like "New Message..." or "Clear History..."

Menu Bar Icon: When enabled, a permanent channelBar icon also appears, giving you quick access to settings.

Settings Window

You can access the settings window via:

  • Click on the channelBar icon → "Settings..."
  • Right-click on any channel element → "Settings..."

The window has four tabs:

  1. General – Global app settings
  2. Channels – Channel and provider management
  3. Connections – Server connections (MQTT, Home Assistant, Cloud)
  4. Servers – Local servers (gRPC, Webhook)

General Settings

In the General tab you'll find:

Language

Choose the app's display language. Available options:

  • System (automatic based on macOS setting)
  • Deutsch
  • English
  • Español
  • Français

The language change takes effect immediately, without restart.

Launch at Login

Enable this option so channelBar starts automatically when you log into macOS.

Always Show Menu Bar Icon

When enabled, channelBar always shows an icon in the menu bar – even when no channels are active. Useful for quick access to settings.

App Version

Shows the current version and build number of channelBar.

Command-Line Application

Shows the status of the connected command-line application, including version information and compatibility.

Configuration

Here you'll find the functions for exporting and importing your channelBar configuration. More on this in the chapter Exporting and Importing Configuration.


Managing Channels

Creating a Channel

  1. Open SettingsChannels tab
  2. Click on + (Plus) below the channel list
  3. Enter an identifier (e.g., "work", "home")
  4. Configure the desired settings
  5. Click Save

A new channel is enabled by default and displayed in the menu bar.

Editing a Channel

Select a channel in the list to edit its settings. The settings are divided into several areas:

Basic Settings

SettingDescription
IdentifierThe channel name (displayed in the menu bar)
EnabledOn/Off toggle for the channel
Display LimitHow many messages are shown in the menu (1-1000)
Channel ContextOptional metadata for templates

Changing Position

Change the order of channels in the menu bar via drag & drop in the channel list.

Deleting a Channel

  1. Select the channel in the list
  2. Click on (Minus) below the channel list
  3. Confirm the deletion

Warning

When deleting a channel, all associated messages are also permanently deleted.

Configuring Retention

Retention settings determine how long and how many messages are stored:

SettingDescriptionOptions
Retention (Count)Maximum number of stored messages100, 500, 1000, 2500, 5000, Unlimited
Retention (Days)Delete messages older than X days1, 3, 5, 7, 14, 30, 120, 240, 365, Unlimited
Display LimitMessages shown in menu1, 2, 3, 5, 10, 25, 50, 100, 250, 500, 1000

Cleanup happens automatically in the background. Both retention rules (count and days) are applied independently.

Group by Source

When enabled, messages in the history menu are grouped by their source label. Each source appears as a separate submenu section.

SettingDescription
Group by SourceGroup messages by source label
Show Source ImageDisplay favicon/image next to source headers
Source Image SizeSmall, Medium, or Large

Text Truncation

SettingDescriptionDefault
Menu Bar Max CharactersMaximum characters for menu bar display50
Submenu Max CharactersMaximum characters for submenu items50
Detail Max CharactersMaximum characters for detail items75

Providers

Providers are the inputs through which messages reach channelBar. Each channel can use multiple providers simultaneously. Each provider has its own dedicated documentation page.

ProviderBest For
URL SchemeAutomations, AppleScript, other apps
WebhookCI/CD, remote systems, HTTP integrations
MQTTIoT devices, home automation, sensors
RSS/Atom FeedNews, blogs, podcasts, YouTube
File WatcherLog files, shell scripts
Apple ShortcutsSiri, personal automations
Home AssistantSmart home entities, sensors
Command-Line AppTerminal workflows, scripting
CloudRemote systems, cross-network

See the Providers section for detailed documentation of each provider.


Message Filters

Each channel can define filter rules to control which messages are accepted. Messages that do not match the filter criteria are discarded.

Filter Configuration

SettingDescriptionOptions
Match TypeHow the pattern is matchedcontains, equals (case-insensitive)
PatternText to match againstAny text string
TargetWhich message field to filter onmessage, link, messageContext

Multiple filters can be configured per channel. A message must match at least one filter to be accepted. If no filters are configured, all messages are accepted.

Examples

  • Only errors: Match Type contains, Target message, Pattern error – accepts only messages containing "error"
  • Specific source: Match Type contains, Target messageContext, Pattern production – accepts messages with "production" in context

Processor Pipelines

Processor Pipelines are reusable data transformation chains that process message values before display. They are particularly useful with MQTT topics and Home Assistant entities.

A pipeline consists of one or more steps that are applied in sequence. Each step transforms or filters the value before passing it to the next step.

Available Steps

Round

Rounds numeric values to a specified number of decimal places.

SettingDescriptionOptions
DecimalsNumber of decimal places0, 1, 2, ...
Keep Trailing ZerosPreserve trailing zerosOn / Off
Decimal SeparatorNumber formatAuto, Dot, Comma
On Parse ErrorBehavior if value is not a numberSkip (pass through), Discard

Threshold

Filters values based on a numeric comparison. Only values matching the condition are passed through.

SettingDescriptionOptions
OperatorComparison operator>, ≥, <, ≤, =, ≠
ValueThreshold valueAny number
Decimal SeparatorNumber formatAuto, Dot, Comma
On Parse ErrorBehavior if value is not a numberSkip, Discard

Filter

Matches values against a text pattern. Only matching (or non-matching) values pass through.

SettingDescriptionOptions
PatternText to matchAny text
Match TypeHow to matchContains, Equals
NegateInvert the matchOn / Off
Case SensitiveCase-sensitive matchingOn / Off

Map

Transforms values using a lookup table. Maps input values to configured output values.

SettingDescriptionOptions
EntriesKey-value mapping pairsList of key → value
Case SensitiveCase-sensitive key matchingOn / Off
Unmatched BehaviorWhat to do with unmatched valuesPass Through, Discard

Replace

Performs search-and-replace on the value.

SettingDescriptionOptions
SearchText to findAny text
ReplacementReplacement textAny text
Replace AllReplace all occurrencesOn / Off
Case SensitiveCase-sensitive searchOn / Off

Trim

Removes unwanted characters from the value.

SettingDescriptionOptions
CharactersCharacters to remove (default: whitespace)Custom character set
ModeWhere to trimEdges (start/end only), All (everywhere)

Usage

Processor Pipelines are linked to individual MQTT topics or Home Assistant entities via the Processor setting. A single pipeline can be reused across multiple topics and entities.


Outputs in Detail

Each channel has four independently configurable outputs.

The primary output displays messages in the macOS menu bar.

Configuration:

SettingDescription
Show in Menu BarShow/hide channel in menu bar
Show History MenuSubmenu with message history
Show History CircleIndicator for new messages
Show Link IconIcon for messages with link
Link IconCustom icon (e.g., 🔗)
Show Open IconIcon for messages with open action
Open IconCustom icon (e.g., 🚀)

Menu Structure

▶ Current Message
├── 📜 Message History
│   ├── Message 1
│   ├── Message 2
│   └── ...
├── ➕ New Message... (optional)
└── 🗑 Clear History... (optional)

You can configure the history menu display in detail under Customizing Submenu Display.

Notifications

Shows macOS system notifications for new messages.

Configuration:

SettingDescription
EnabledTurn notifications on/off
TemplateMessage format for notification
Custom IconOptional custom icon

Selecting Icon

  1. Enable "Use Custom Icon"
  2. Click "Select..."
  3. Choose an image file (PNG, JPG recommended)

Template examples:

  • {message} – Message text only
  • {channel}: {message} – With channel name
  • {source}: {message} – With source

Note

Make sure channelBar has permission to send notifications in macOS System Settings under Notifications.

Audio

Plays a sound for new messages.

Configuration:

SettingDescription
EnabledTurn sound on/off
Sound SourceSystem sound or custom file
System SoundSelection from macOS system sounds
Custom FilePath to an audio file

System Sounds:

macOS offers numerous system sounds like:

  • Basso, Blow, Bottle, Frog
  • Funk, Glass, Hero, Morse
  • Ping, Pop, Purr, Sosumi
  • Submarine, Tink

Custom Audio File

  1. Select "Custom File" as sound source
  2. Click "Select..."
  3. Choose an audio file (MP3, WAV, AIFF, etc.)

Preview: Use the Play button to test the selected sound.

Command-Line Application

For querying channel messages via the terminal.

Configuration:

SettingDescription
EnabledTurn command-line output on/off

How It Works:

When enabled, the command-line application can query messages in the channel.

Templates for Command-Line Application:

The command-line application output uses its own templates:

  • channelbar get – Formatting for current message
  • channelbar list – Formatting for history

See Template Contexts for details.


Configuring Templates

Templates determine how messages are formatted. Each channel has its own templates for different contexts.

Template Variables

The following variables are available in templates:

VariableDescriptionExample
{message}Message text"Build successful"
{channel}Channel name"work"
{provider}Provider type"webhook"
{source}Source label"Jenkins"
{message_id}Unique ID"abc123..."
{link}Message URL"https://..."
{open}Open command"/Applications/..."
{relativeTime}Relative time"5 minutes ago"
{date}Date"01/26/2026"
{time}Time"14:30:00"
{message_context}Message context"build_id=123"
{channel_context}Channel context"env=prod"
{error}Error message (e.g. feed errors)"HTTP 502 — example.com/rss"
{error_short}Short error message"HTTP 502"
{state_new#newText#oldText}Conditional text based on read state"{state_new#●#}" → "●" if new, empty if read
{icon:name}Icon from Icon Repository (displayed inline)"{icon:star}" → ★
{favicon}Feed source favicon (displayed inline)🌐
{message-id}Unique message identifier"550e8400-..."
{channel-id}Channel identifier (UUID)"660e8400-..."

Formatting Date and Time

Date and time can be displayed with custom formats:

{date#FORMAT}
{time#FORMAT}

Format Characters:

CharacterMeaningExample
yyyyYear (4-digit)2026
yyYear (2-digit)26
MMMMMonth (name)January
MMMMonth (short)Jan
MMMonth (number)01
ddDay26
EEEEWeekdayMonday
EWeekday (short)Mon
HHHour (24h)14
hhHour (12h)02
mmMinute30
ssSecond45
aAM/PMPM

Examples:

TemplateOutput
{date#MM/dd/yyyy}01/26/2026
{date#E, MMMM d, yyyy}Mon, January 26, 2026
{time#HH:mm}14:30
{time#HH:mm:ss}14:30:45
{date#yyyy-MM-dd} {time#HH:mm}2026-01-26 14:30

Template Contexts

Each channel has four different templates, divided into two groups:

App Templates:

TemplateUsageDefault
Menu BarCurrent message in menu bar▶ {message}
History MenuMessages in history submenu{message}

Command-Line Templates:

TemplateUsageDefault
channelbar getOutput of channelbar get command{message} ({relativeTime})
channelbar listOutput of channelbar list command[{date#yyyy-MM-dd} / {time#HH:mm:ss}] {message}

Editing Templates

  1. Go to SettingsChannels → select channel
  2. Switch to the Templates section
  3. Edit the desired templates under "App Templates" or "CLI Templates"
  4. Changes are saved automatically

Additional App Templates

In addition to the main templates, each channel has the following app templates:

TemplateUsageDefault
ErrorError indicator in menu bar⚠️
TooltipTooltip on hover over message{relativeTime}
Error TooltipTooltip on hover over error{error}

Conditional Rendering

Templates support conditional rendering using the syntax:

{variable[condition,prefix,postfix]}

The prefix and postfix are only shown if the condition is met.

Operators:

OperatorMeaningExample
(empty)Variable exists and is not empty{source[, from ,]} → " from Jenkins"
=Equal to{provider[=webhook,🆕 ,]}
!=Not equal to{source[!=,⚠ ,]}
>Greater than (numeric){message[>100,HIGH: ,]}
>=Greater than or equal
<Less than (numeric)
<=Less than or equal

Escape Sequences

Templates support the following escape sequences:

  • \n – Newline
  • \t – Tab
  • \\ – Literal backslash

Example Templates:

# With source and time
[{source}] {message} ({relativeTime})

# Compact with date
{date#MM/dd} {time#HH:mm} - {message}

# With icon based on provider
{provider}: {message}

# Detailed for logs
[{date#yyyy-MM-dd}T{time#HH:mm:ss}] [{source}] {message}

Customizing Submenu Display

The history menu (submenu) can be configured in detail. These settings determine what information is displayed for each message in the history.

Display Options

OptionDescription
Show Relative Time"5 minutes ago"
Show TimestampFull date and time
Show SourceMessage source
Show Message ContextMessage context data
Show Channel ContextChannel context data
Show OpenOpen command as menu item
Show LinkLink as menu item
Show Feed ImageDisplay feed source image
Always Expand Message ContextAlways show full message context
Always Expand OpenAlways show full open command
Always Expand LinkAlways show full link URL
Message Context Line Break ModeHow to handle line breaks: Keep, Reduce, or Eliminate
OptionDescription
Show "New Message..."Menu item to create new messages
Show "Clear History..."Menu item to clear history
Show "Copy to Clipboard"Option to copy messages
Show "Delete Entry..."Option to delete individual messages
Show "Mark as Read"Option to mark messages as read

Each submenu element has its own template:

ElementDefaultExample Output
Relative Time{relativeTime}5 minutes ago
Timestamp{date#E MMM d, YYYY}, {time#HH:mm:ss}Mon Jan 26, 2026, 14:30:00
Source🏷 {source}🏷 Jenkins
Message Context📝 {message_context}📝 build_id=123
Channel Context📁 {channel_context}📁 env=prod
Open🚀 {open}🚀 /Applications/Terminal.app
Link🔗 {link}🔗 https://example.com

Customizing

  1. Go to SettingsChannels → select channel
  2. Switch to the Menu Bar section
  3. Enable/disable the desired options
  4. Customize templates as needed

Managing Connections

Under SettingsConnections you manage reusable server connections. These can be shared by multiple channels.

MQTT Connections

MQTT connections define the connection parameters to an MQTT broker.

Creating a New Connection

  1. Click + next to MQTT Connections
  2. Enter a name (e.g., "Local Mosquitto")
  3. Configure the connection parameters

Parameters:

SettingDescriptionDefault
Host:PortBroker host and portlocalhost:1883
UsernameOptional for authentication
PasswordOptional for authentication
Use TLSEncrypted connectionOff
Insecure TLSAllow self-signed certificatesOff

Example URLs:

  • localhost:1883 – Local broker
  • mqtt.example.com:8883 – Remote with TLS
  • 192.168.1.100:1883 – IP address

Test Connection:

Click "Test Connection" to check broker reachability.

Security:

The MQTT password is securely stored in Apple Keychain – encrypted and only accessible to channelBar.

Home Assistant Connections

Home Assistant connections enable integration with your smart home hub.

Prerequisites:

  • Home Assistant instance reachable on the network
  • Long-Lived Access Token

Creating Access Token in Home Assistant

The access token allows channelBar secure access to your Home Assistant instance.

  1. Open Home Assistant in browser (e.g., http://homeassistant.local:8123)
  2. Click on your username at bottom left (your profile)
  3. Scroll to the Long-Lived Access Tokens section at the bottom
  4. Click Create Token
  5. Enter a name, e.g., "channelBar"
  6. Click OK
  7. Important: Copy the displayed token immediately – it's only shown once!

The token looks something like:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI...

Security Notes

  • Treat the token like a password
  • The token grants full access to your Home Assistant instance
  • You can revoke the token at any time in Home Assistant
  • channelBar stores the token securely in Apple Keychain

Creating New Connection in channelBar

  1. Go to SettingsConnections
  2. Click + next to Home Assistant Connections
  3. Enter a name (e.g., "Home Assistant")
  4. Configure the connection parameters

Parameters:

SettingDescriptionDefault
Host:PortHA instance addresshomeassistant.local:8123
Access TokenLong-lived token
Use TLSHTTPS connectionOn
Insecure TLSSelf-signed certificatesOff

Cloud Connection

The Cloud connection enables use of the channelBar Cloud Service.

Status:

  • Connected – Active connection to Cloud Service
  • Disconnected – No connection
  • Connecting... – Connection in progress

Activating Connection

  1. Go to SettingsConnections
  2. Enable "Cloud Connection"
  3. Authentication happens automatically

Managing Buffers:

Once connected, your Cloud buffers are displayed:

  • Buffer name
  • API key (for sending from external tools)

New buffers can be created via the Cloud web interface.

Note

Cloud setup details are documented separately.


Configuring Servers

Under SettingsServers you configure channelBar's local server services.

CLI Server (Command-Line Application)

The CLI server enables communication with the channelBar command-line application.

Settings:

SettingDescriptionDefault
EnabledTurn server on/offOn
PortLocal port51515

Valid Port Range: 1024 – 65535

Status Display:

  • Running – Server is active and ready
  • Stopped – Server is disabled
  • Error – Startup error (e.g., port in use)

Version:

Shows the version of the connected command-line application and checks compatibility.

Webhook Server

The Webhook server receives HTTP requests from external systems.

Settings:

SettingDescriptionDefault
PortHTTP port8080
Enable CORSAllow cross-origin requestsOff
Rate LimitMax requests per minute100

CORS (Cross-Origin Resource Sharing):

Enable CORS if you want to send webhooks from browser-based applications. When CORS is enabled, the appropriate HTTP headers are set.

Rate Limiting:

Protects against excessive load. Requests over the limit are answered with HTTP 429 (Too Many Requests).

Endpoints:

EndpointDescription
POST /message/{channel}Send message to channel
GET /healthCheck server status

Security Note

The Webhook server is only locally accessible (127.0.0.1 / localhost). This is an intentional security decision – the server does not accept connections from outside your Mac.

It would technically be possible to expose the server to the internet via a reverse proxy (e.g., nginx). However, this is strongly discouraged as it creates an attack surface. For receiving messages from the internet, use the channelBar Cloud Service instead – it offers secure authentication and requires no open ports on your system.


Exporting and Importing Configuration

channelBar allows exporting and importing your entire configuration. Ideal for:

  • Backing up your settings
  • Migrating to a new Mac
  • Sharing configurations

Exporting

  1. Go to SettingsGeneral
  2. Click Export
  3. Choose a save location
  4. The configuration is saved as a .channelbar file

Exported Data:

  • All channels with settings
  • All provider configurations
  • All output configurations
  • All templates
  • All connections (MQTT, Home Assistant)
  • General settings (language, launch at login, etc.)

Not Exported:

  • Message history
  • Cloud connection status
  • Passwords, API keys, and other credentials – these must be re-entered after import

Importing

  1. Go to SettingsGeneral
  2. Click Import
  3. Select a .channelbar file
  4. Confirm the import

Warning: Import Behavior

When importing a configuration, the existing configuration is completely replaced:

  • All existing channels are deleted
  • All messages are deleted
  • The imported channels are newly created
  • Connections with the same name are reused, new connections are added

Note

After import, all providers are restarted to apply the new settings.


Advanced Settings

The Advanced tab in Settings provides storage management and global podcast configuration. It is divided into two main areas, accessible via a sidebar: Storage and Podcasts.

Storage

Messages

Displays message storage statistics and provides tools to manage stored messages.

  • Overview showing total message count and number of channels
  • Expandable list of channels with message count and per-source breakdown
  • Delete messages per channel or per source

Deletion options:

  • Delete all messages
  • Delete messages older than a specified number of days, months, or years
  • Delete messages before a specific date

Cache

Displays and manages cached images used by channelBar.

Cache TypeDescription
FaviconsCached website favicons used in templates and source display. Can be deleted entirely.
Feed ImagesCached images from RSS/Atom feeds. Linked to feed configuration.
Provider ImagesCached images grouped by provider type (Webhook, MQTT, Home Assistant, etc.). Can be deleted per provider or per source.

Podcasts

Global Settings

Default podcast settings that apply to all feeds unless overridden per feed.

SettingDescriptionOptions
ModeHow episodes are playedStreaming, Download
Episodes to KeepMaximum episodes stored per feedUnlimited, or a fixed number
Auto-Download NewAutomatically download new episodesOn / Off
Silence TrimmingRemove silent passages during playbackOn / Off
Silence ThresholdDuration threshold for silence detection0.5s, 1s, 1.5s, 2s, 3s, 4s, 5s
Playback SpeedGlobal playback speed0.5×, 0.75×, 1×, 1.25×, 1.5×, 2×

Expert Settings

Fine-tuning options for streaming and download behavior.

SettingDescriptionOptions
Lookahead BufferHow far ahead audio is pre-loaded during playback15s, 30s, 60s (default), 120s, 180s, 300s
Segment SizeSize of audio chunks requested from the server256 KB, 512 KB, 1 MB (default), 2 MB, 4 MB
Max Parallel SegmentsNumber of simultaneous segment downloads1, 2, 4 (default), 6, 8
Detection LevelAudio level threshold for silence detection-15 dB to -50 dB (default: -40 dB)

Downloads

Manage downloaded podcast episodes. Each entry shows the episode title, feed name, file size, and download status (Pending, Downloading, Completed, or Failed).

Available actions:

  • Cancel active downloads
  • Retry failed downloads
  • Delete individual episodes
  • Delete all downloads
  • Retry all failed downloads

Tips and Best Practices

Channel Organization

  • Thematic Separation: One channel per topic area (work, home, monitoring)
  • Clear Names: Choose descriptive identifiers
  • Sensible Order: Important channels to the left

Provider Selection

Use CaseRecommended Provider
Shell scriptsURL Scheme, Command-Line Application
CI/CD systemsWebhook
IoT devicesMQTT
Apple ShortcutsApple Shortcuts
Smart homeHome Assistant
Log filesFile Watcher
Remote systemsCloud, Webhook

Template Tips

  • Short and concise: The menu bar has limited space
  • Relative time: {relativeTime} is often more useful than absolute timestamps
  • Label source: With multiple providers, {source} helps
  • Use emojis: Visual distinction (⚠ warning, ✅ success, etc.)

Performance

  • Limit retention: Don't store more than necessary
  • Adjust display limit: 25-50 messages usually suffice
  • Disable unused providers: Saves resources

Security

  • Set API keys: Secure webhook endpoints
  • Use TLS: For MQTT and Home Assistant when possible