abue-ammar fbfcc39f71 Add phase 32b — close the AppCore residue
Phase 32 left three survivors, each for a different reason and all the
same finding: AppCore still owns what comparable types own for
themselves.

QuicklinkCoordinator is the only coordinator not handed a
paletteCoordinator; its six siblings take one. That inconsistency alone
keeps the showPalette and hidePalette forwarders alive. runWindowCommand
is the only feature action still implemented on AppCore, because window
management is the only feature without a coordinator. SettingsBackup's
gather/apply carry a `= .shared` default that no caller ever supplies,
while BackupActions reaches the singleton six times outright — the same
coupling in two spellings, one of which defeats the grep that measures
it.

Nothing else in the roadmap picks these up: 33 puts gather/apply on its
own must-NOT-change list, 35 touches SettingsBackup only for a comment,
and no phase mentions window management. 32b must therefore land before
33, which freezes the two signatures.

Roadmap gains the phase row, the status row, a risk-register entry for
the window-command funnel, and M6 goes 4 phases/~14 h to 5/~17 h.
2026-08-06 04:06:38 +06:00
…
2026-08-03 21:08:55 +06:00
…
…

Tinycast

A tiny, fully native macOS launcher — the essentials, without the bloat.

Join the Tinycast Discord Hire me — iabueammar@gmail.com License: AGPL-3.0

Tinycast command palette

Around 3 MB on disk and under 100 MB of RAM — no Electron, no telemetry, no background CPU churn. Just SwiftUI + AppKit with zero dependencies. It's fast because there's nothing to it.

Features

  • App launcher — fuzzy-search and launch anything, pin favorites, see what's running, quit an app or every app at once.
  • Custom commands — run named shell commands through fuzzy search or their own global hotkeys.
  • Calculator — do math, unit and live currency conversions inline, right in the palette.
  • Clipboard history — text and images, searchable, pasted back into the app you were using.
  • Snippets — reusable Markdown templates with dynamic placeholders, arguments, nested references and optional keyword expansion.
  • Global hotkey — one shortcut summons the palette from anywhere.
  • Per-app hotkeys — bind a key to an app; press it to toggle (focus/hide).

Install

brew trust --tap abue-ammar/tinycast   # required for third-party taps
brew tap abue-ammar/tinycast
brew install --cask tinycast          # stable
brew install --cask tinycast@beta     # beta  (installs side-by-side)

Each channel is a separate app (Tinycast.app, Tinycast Beta.app) with its own settings and permissions, so you can run stable next to the beta.

Tinycast is self-signed. Installing via Homebrew clears the macOS quarantine flag for you automatically on every install and update, so there's nothing to run. (If you download the DMG directly from Releases instead, clear it once: xattr -dr com.apple.quarantine "/Applications/Tinycast.app".)

Permissions

Accessibility — needed when Tinycast pastes or expands text into another app, and the only permission snippet keyword expansion needs. You're prompted when you first use a feature that needs it; grant access in System Settings → Privacy & Security → Accessibility. Snippets ship disabled, and keystrokes are matched locally, never stored and never sent anywhere.

Using it

  1. Open Settings → General and record a global shortcut to summon Tinycast.
  2. Press it anywhere → the palette floats in. Type to filter, ↵ to launch.
  3. Tab switches between Apps and Clipboard; ↑/↓ move, Esc dismisses.
  4. Settings → Shortcuts — search an app or custom command and record a global shortcut.
  5. Settings → Snippets — enable the feature, then create templates with expansion keywords.

Building from source

See docs/development.md for the toolchain, build, packaging, release, and website workflows, and docs/ui.md for the UI design system.

Contributing

Important

Open an issue before you write code — this is mandatory. Get the bug or the feature agreed on first; discussing it in the issue (or on Discord) is strongly encouraged. A PR with no agreed issue behind it gets closed however good the patch is, and the work is wasted. Typo and docs-only fixes are the one exception.

Read CONTRIBUTING.md first — it covers the memory budget every PR is held to, the before/after video requirement for visual changes, and why features get declined. Every PR fills in the pull request template. Security issues go through SECURITY.md, not the issue tracker.

Questions, ideas, or just want to follow along? Join the Discord.

License

AGPL-3.0

S
Description
GitHub Trending: abue-ammar/tinycast
Readme AGPL-3.0
72 MiB
Languages
Swift 90.9%
JavaScript 5.9%
TypeScript 2%
Shell 0.9%
CSS 0.3%