A lightweight macOS menu bar app for quickly composing and queuing posts to Buffer.
0

Configure Feed

Select the types of activity you want to include in your feed.

README.md

Buffit for Mac#

A tiny macOS menu bar app for quickly adding a post to your Buffer queue — across all your connected channels, in one click.

What it does#

  • Lives in the menu bar only (no Dock icon, no window chrome). This is enforced by LSUIElement in Info.plist.
  • Asks for one thing: your Buffer personal API key.
  • Fetches your connected channels automatically.
  • Defaults to posting to all channels; click a chip to exclude one.
  • Sends the post to each selected channel's queue via mode: addToQueue (next available slot — same as clicking "Add to Queue" in Buffer itself).
  • Stores your API key in the macOS Keychain, not in plain text.
  • Supports image attachments (JPEG, PNG, GIF, WebP, and HEIC up to 10 MB). Images are uploaded to Buffit's media service so Buffer can access them when the post is published.

Getting your API key#

  1. In Buffer, go to Settings → API → Personal Keys.
  2. Click + New Key, name it (e.g. "BufferQueue Mac App"), and copy it.
  3. Paste it into the app the first time it opens.

Note: personal API keys can only be generated by organization owners, and your account's email must be verified for API access to work.

Building it#

This is a standard SwiftUI app — no external dependencies.

  1. Open Xcode → File → New → Project → macOS → App.
  2. Name it BufferQueue, interface: SwiftUI, language: Swift.
  3. Set the minimum deployment target to macOS 13.0 or later (required for MenuBarExtra).
  4. Replace the generated files with the three in this folder:
    • BufferQueueApp.swift
    • AppStore.swift
    • MenuBarContentView.swift
  5. Add the included Assets.xcassets folder to the target. It contains the complete Buffit app icon set. Use the included Info.plist; it sets LSUIElement = YES (Application is agent (UIElement)), so the app doesn't show a Dock icon, and declares the Productivity App Store category.
  6. Add PrivacyInfo.xcprivacy to the target. Keychain Sharing isn't required: the app uses the default app keychain. Network access is enabled by default for an unsigned, non-sandboxed build.
  7. Build and run (⌘R). The icon appears in your menu bar and not in the Dock.

Publishing on GitHub without a developer account#

You can publish the source code and an unsigned app as a GitHub Release; an Apple Developer account is not required. Build using the Release configuration, then locate Buffit.app in Xcode's build products and create a ZIP that keeps the app bundle intact. Attach that ZIP and the source archive to your GitHub Release.

Because the app is unsigned, macOS will warn users when they first open it. Tell them to Control-click the app, choose Open, and confirm Open in the prompt. They should download releases only from the GitHub repository you control. Unsigned builds cannot be notarized and will not be eligible for the Mac App Store.

How it works technically#

  • Talks to Buffer's GraphQL API at a single endpoint: https://api.buffer.com.
  • Auth: Authorization: Bearer <your key> header — no OAuth flow needed since this is a personal-key, single-user tool.
  • On connect, it runs one query to pull your organization ID and every connected channel (account { organizations { channels { ... } } } }).
  • "Add to Queue" fires one createPost mutation per selected channel with schedulingType: automatic, mode: addToQueue, and reports how many succeeded/failed.

Notes / limitations#

  • Video attachments aren't supported.
  • If a channel's platform has extra required fields (e.g. some networks want a first comment or thread structure), that channel's post may fail while others succeed — the app tells you the split.