# 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](https://github.com/yonaskolb/XcodeGen) (for building from source) ## Build from Source ```bash 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](https://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