Fast, native macOS menubar app for posting to Mastodon, WordPress, and Micro.blog
Find a file
Paweł Orzech 733334df9b
Deduplicate shared constants, MIME helper, and cache normalized URLs
- Extract OAuth UserDefaults keys into shared OAuthKeys enum
- Extract triplicated mimeTypeFor() into shared mimeTypeForImage()
- Cache normalized base URL at client init instead of per-request
2026-03-07 22:22:08 +01:00
qStatus Deduplicate shared constants, MIME helper, and cache normalized URLs 2026-03-07 22:22:08 +01:00
.gitignore Fix OAuth callback handling, improve error messages, polish README 2026-02-27 23:57:18 +01:00
LICENSE Initial implementation of qStatus macOS menubar app 2026-02-27 23:40:51 +01:00
project.yml Initial implementation of qStatus macOS menubar app 2026-02-27 23:40:51 +01:00
README.md Fix OAuth callback handling, improve error messages, polish README 2026-02-27 23:57:18 +01:00

qStatus

A fast, native macOS menubar app for posting to Mastodon, WordPress, and Micro.blog with a single keyboard shortcut.

Built with Swift and SwiftUI. No Electron, no web views, no dependencies.

Features

  • Global hotkey — press Ctrl+Option+Cmd+T from anywhere to open the posting window
  • Multiple accounts — add accounts from different services and post to one or more at once
  • Image attachments — drag-and-drop or browse for images, up to 4 per post
  • Menubar app — lives in your menubar, no Dock icon, always ready
  • Lightweight — native Swift/SwiftUI, fast startup, minimal memory footprint

Supported Services

Service Auth Method Media Upload
Mastodon OAuth2 (any instance) up to 4 images
WordPress (self-hosted) Application Passwords up to 4 images
Micro.blog App Token up to 4 images

Requirements

  • macOS 15 Sequoia or later
  • XcodeGen (for building from source)

Build from Source

brew install xcodegen
git clone https://github.com/pawelorzech/qstatus.git
cd qstatus
xcodegen generate
open qStatus.xcodeproj

Then hit Cmd+R in Xcode to build and run.

Setting Up Accounts

Mastodon

  1. Click the menubar icon → Settings
  2. Click +, select Mastodon
  3. Enter your instance URL (e.g. mastodon.social)
  4. Authorize qStatus in your browser

WordPress (Self-Hosted)

  1. In WordPress admin: Users → Profile → Application Passwords
  2. Create a new password named "qStatus"
  3. In qStatus Settings, enter your site URL, username, and the application password

Micro.blog

  1. Go to micro.blog/account/apps
  2. Generate a new app token
  3. Paste it in qStatus Settings

Usage

  1. Press Ctrl+Option+Cmd+T (or click menubar icon → New Post)
  2. Select target account(s) using the chips at the top
  3. Type your status
  4. Drag-and-drop images if needed (up to 4)
  5. Press Cmd+Enter or click Post

Project Structure

qStatus/
├── project.yml              # XcodeGen project spec
├── qStatus/
│   ├── App/                 # App entry point, AppDelegate, state
│   ├── Models/              # Account model, PostingService protocol
│   ├── Views/               # SwiftUI views (input panel, settings, menubar)
│   ├── Windows/             # NSPanel floating window
│   ├── Services/            # API clients (Mastodon, WordPress, Micro.blog)
│   ├── Utilities/           # Multipart form data helper
│   └── Resources/           # Info.plist, entitlements, assets

Tech Stack

  • Swift 6 / SwiftUI with @Observable (macOS 15+)
  • MenuBarExtra for menubar presence
  • NSPanel for the floating input window
  • Carbon RegisterEventHotKey for global keyboard shortcut
  • Keychain (native Security framework) for credential storage
  • URLSession async/await for all networking
  • Zero third-party dependencies

License

MIT