diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 511d9318..65f513f0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -105,6 +105,8 @@ Use clear upstream app icons and screenshots, with readable screenshots and desc Every image file needs an `assets` entry with its original source URL, owner credit, and applicable license. Code and image licenses may differ; verify both. The `icon` field is optional and `screenshots` can be empty. Third-party images retain their upstream license and trademark rights. +To add or replace an icon, run `bun run icon ` on a Mac. The link can be the icon file (PNG, JPEG or `.icns`; a GitHub file page works) or the app's official `.dmg` or `.zip` download, from which the icon the app itself declares is used. The command saves a 256 px `assets/icon.png`, records the link, credit and license in `assets`, and refuses images that are not square, smaller than 128 px, or macOS's generic app icon. Use `--credit` and `--license` when the defaults (the record's existing credit and "; upstream app icon, trademarks retained") are wrong. It cannot tell an app's own icon from another product's logo; check that yourself. + An app's official icon may be used even when its logo is reserved as a trademark or carries a non-commercial or no-derivatives license: OpenMacApps is non-commercial and shows the icon only to identify the app it links to. Use the official file unmodified (resizing or format conversion only), name the rights holder in `credit`, and state the actual terms in `license`, for example "Trademark of Mozilla Foundation; not covered by the MPL-2.0 code license". Remove the icon if the rights holder asks. For screenshots and every other image, if reuse rights are unclear, omit the image and explain the gap in your pull request. Asset paths must begin with `./assets/`, remain inside the app folder, and point to existing files. Symlinks and path traversal are rejected. List provenance even for images not currently shown. Keep the applicable upstream license notices as `.txt` files in `assets/`; the build preserves and links each notice. The build copies these files into `public/catalog/`; do not edit generated copies. diff --git a/content/apps/ada-studio/assets/icon.png b/content/apps/ada-studio/assets/icon.png new file mode 100644 index 00000000..b8ed0b1b Binary files /dev/null and b/content/apps/ada-studio/assets/icon.png differ diff --git a/content/apps/ada-studio/index.md b/content/apps/ada-studio/index.md index ea9503f3..0ad5bed8 100644 --- a/content/apps/ada-studio/index.md +++ b/content/apps/ada-studio/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/AdaEngine/Ada/blob/main/LICENSE" - "https://github.com/AdaEngine/Ada/releases/tag/editor-v1.0.0-20261013" - "https://adaengine.org" +assets: + - path: ./assets/icon.png + source: https://github.com/AdaEngine/Ada/releases/download/editor-v1.0.0-20261013/AdaEngine-1.0.0-20261013-macOS.zip + credit: Ada Studio contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Ada Studio is the companion editor for AdaEngine, an open-source game engine written in Swift for 2D and 3D games and user interfaces. It creates projects, edits code and scenes, and runs games from a desktop or mobile workspace. The engine is a Swift package for developers; the macOS download in the editor release is the Studio app. diff --git a/content/apps/ai-monitor/assets/icon.png b/content/apps/ai-monitor/assets/icon.png new file mode 100644 index 00000000..b9558d10 Binary files /dev/null and b/content/apps/ai-monitor/assets/icon.png differ diff --git a/content/apps/ai-monitor/index.md b/content/apps/ai-monitor/index.md index 33d2bddf..463d4f18 100644 --- a/content/apps/ai-monitor/index.md +++ b/content/apps/ai-monitor/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/tobymarks/esp32-ai-monitor/blob/main/LICENSE" - "https://github.com/tobymarks/esp32-ai-monitor/releases" - "https://tobymarks.github.io/esp32-ai-monitor/" +assets: + - path: ./assets/icon.png + source: https://github.com/tobymarks/esp32-ai-monitor/releases/download/app-v1.32.0/AIMonitor.dmg + credit: AI Monitor contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- AI Monitor is the Mac side of a desk display. It asks the local CodexBar CLI for usage limits from providers such as Claude, ChatGPT, Gemini, Copilot and Cursor, then sends a compact frame over USB to a Cheap Yellow Display or a Guition ESP32-S3 board, which draws the dashboard. It is for people who want their limits on a second screen instead of a browser tab. The app does not talk to any AI service directly; CodexBar does. diff --git a/content/apps/amtrino/assets/icon.png b/content/apps/amtrino/assets/icon.png new file mode 100644 index 00000000..b097666d Binary files /dev/null and b/content/apps/amtrino/assets/icon.png differ diff --git a/content/apps/amtrino/index.md b/content/apps/amtrino/index.md index dfbbadb2..5b9e93fa 100644 --- a/content/apps/amtrino/index.md +++ b/content/apps/amtrino/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/arian-shamaei/amtrino" - "https://github.com/arian-shamaei/amtrino/blob/main/LICENSE" - "https://github.com/arian-shamaei/amtrino/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/arian-shamaei/amtrino/releases/download/v0.3.1/amtrino-0.3.1.zip + credit: amtrino contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- amtrino puts a small grid of dots in the menu bar, one for each Claude Code or Codex CLI session on the Mac. Colour tells the sessions apart, motion shows which ones are mid-response, and a finished response flashes the dot and can trigger a notification that jumps to that session's tmux pane. It suits people who run many coding-agent sessions at once and would rather glance at the menu bar than cycle through terminal windows. diff --git a/content/apps/anki-miner/assets/icon.png b/content/apps/anki-miner/assets/icon.png new file mode 100644 index 00000000..441aeae5 Binary files /dev/null and b/content/apps/anki-miner/assets/icon.png differ diff --git a/content/apps/anki-miner/index.md b/content/apps/anki-miner/index.md index 308ccbae..09796b1e 100644 --- a/content/apps/anki-miner/index.md +++ b/content/apps/anki-miner/index.md @@ -19,6 +19,12 @@ sources: - "https://github.com/0xzerolight/anki_miner" - "https://github.com/0xzerolight/anki_miner/blob/main/LICENSE" - "https://github.com/0xzerolight/anki_miner/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/0xzerolight/anki_miner/blob/main/anki_miner/gui/resources/icons/anki_miner.icns + credit: Anki Miner contributors + license: GPL-3.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Anki Miner reads the subtitles of a video, an audiobook or a book, splits the text into words, and skips the ones you already know. For each remaining word it can attach a screenshot, an audio clip and a dictionary definition, then sends the finished cards to Anki. Definitions come from offline dictionaries you add, such as Yomitan dictionaries. It has a desktop GUI and is aimed at people learning a language from native media. diff --git a/content/apps/app-monitor/assets/icon.png b/content/apps/app-monitor/assets/icon.png new file mode 100644 index 00000000..a132cc57 Binary files /dev/null and b/content/apps/app-monitor/assets/icon.png differ diff --git a/content/apps/app-monitor/index.md b/content/apps/app-monitor/index.md index 6336ebba..1c2db69a 100644 --- a/content/apps/app-monitor/index.md +++ b/content/apps/app-monitor/index.md @@ -19,6 +19,12 @@ sources: - "https://github.com/jcranokc/app-monitor" - "https://github.com/jcranokc/app-monitor/blob/main/LICENSE" - "https://github.com/jcranokc/app-monitor/releases/tag/v1.2.0-beta.5" +assets: + - path: ./assets/icon.png + source: https://github.com/jcranokc/app-monitor/releases/download/v1.2.0-beta.5/App-Monitor-Beta.dmg + credit: App Monitor contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- App Monitor puts several app-related views in one SwiftUI dashboard. It tracks foreground app usage over time, scans each app's bundle and its support, cache, preference and container folders, flags health issues such as signing and Gatekeeper problems, and checks for updates across the Mac App Store, Homebrew, Sparkle feeds and Apple software update. Its uninstall planner lists the files an app leaves behind before moving the selected ones to the Trash. Cleanup candidates go to an app quarantine first, where you can restore them from History. diff --git a/content/apps/ask-key/assets/icon.png b/content/apps/ask-key/assets/icon.png new file mode 100644 index 00000000..234df8e4 Binary files /dev/null and b/content/apps/ask-key/assets/icon.png differ diff --git a/content/apps/ask-key/index.md b/content/apps/ask-key/index.md index 67124f13..91423a67 100644 --- a/content/apps/ask-key/index.md +++ b/content/apps/ask-key/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/sudoHG/AskKey/blob/main/LICENSE" - "https://github.com/sudoHG/AskKey/releases/latest" - "https://askkey.sudohg.com/" +assets: + - path: ./assets/icon.png + source: https://github.com/sudoHG/AskKey/releases/download/v0.6.0/AskKey-0.6.0.dmg + credit: Ask Key contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Ask Key stores API keys, tokens, passwords and files such as SSH keys in an encrypted local library. Coding agents such as Claude Code, Codex, Cursor and Grok CLI find credentials through an MCP server, and each credential has one permission: allow, ask every time (the default), or hidden. A program that is approved receives the value as an environment variable or a short-lived private file, and the agent receives only the program's output. Timed allowances can cover one credential or a group. It is meant for developers whose agents deploy code or call APIs and who would otherwise paste keys into prompts or `.env` files. diff --git a/content/apps/atomic-agent/assets/icon.png b/content/apps/atomic-agent/assets/icon.png new file mode 100644 index 00000000..45d54e01 Binary files /dev/null and b/content/apps/atomic-agent/assets/icon.png differ diff --git a/content/apps/atomic-agent/index.md b/content/apps/atomic-agent/index.md index 518d714b..894bd972 100644 --- a/content/apps/atomic-agent/index.md +++ b/content/apps/atomic-agent/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/AtomicBot-ai/atomic-agent/blob/main/LICENSE" - "https://github.com/AtomicBot-ai/atomic-agent/releases" - "https://atomicagent.io" +assets: + - path: ./assets/icon.png + source: https://github.com/AtomicBot-ai/atomic-agent/releases/download/desktop-v0.0.7/Atomic-Agent-0.0.7-arm64-mac.zip + credit: Atomic Agent contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Atomic Agent is an AI agent that runs its control loop and state on your own machine. It can browse the web, read and edit files, run shell commands after you approve them, and keep sessions, memory and tasks between runs. Models run through llama.cpp on the machine by default; cloud providers are optional, and its Fusion mode lets one model plan while workers run on a second provider. It suits people who want an agent they can inspect and run on their own hardware, and it ships as a terminal interface and a desktop app built on the same agent. diff --git a/content/apps/beagleeditor-legacy/assets/icon.png b/content/apps/beagleeditor-legacy/assets/icon.png new file mode 100644 index 00000000..769a05bc Binary files /dev/null and b/content/apps/beagleeditor-legacy/assets/icon.png differ diff --git a/content/apps/beagleeditor-legacy/index.md b/content/apps/beagleeditor-legacy/index.md index d9e9cadd..f2f74fd9 100644 --- a/content/apps/beagleeditor-legacy/index.md +++ b/content/apps/beagleeditor-legacy/index.md @@ -24,6 +24,12 @@ sources: - "https://raw.githubusercontent.com/beagleeditor/legacy/main/README.md" - "https://github.com/beagleeditor/legacy/releases/tag/v2024.4.0.1" - "https://github.com/beagleeditor/editor" +assets: + - path: ./assets/icon.png + source: https://github.com/beagleeditor/legacy/releases/download/v2024.4.0.1/BeagleEditor.2024.4.0.1.dmg + credit: BeagleEditor Legacy contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- BeagleEditor Legacy opens a source file for editing with syntax highlighting and autocomplete, and it runs Python files from inside the editor. It is the first BeagleEditor, a code editor written in Python. Its developers renamed it when they released a new BeagleEditor in a separate repository, beagleeditor/editor. diff --git a/content/apps/betterairdrop/assets/icon.png b/content/apps/betterairdrop/assets/icon.png new file mode 100644 index 00000000..b1a9810b Binary files /dev/null and b/content/apps/betterairdrop/assets/icon.png differ diff --git a/content/apps/betterairdrop/index.md b/content/apps/betterairdrop/index.md index aae39996..5023a0c9 100644 --- a/content/apps/betterairdrop/index.md +++ b/content/apps/betterairdrop/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/MoizAhmedd/betterairdrop/blob/main/LICENSE" - "https://github.com/MoizAhmedd/betterairdrop/releases" - "https://betterairdrop.com" +assets: + - path: ./assets/icon.png + source: https://github.com/MoizAhmedd/betterairdrop/releases/download/v0.4.2/BetterAirdrop.zip + credit: BetterAirdrop contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- BetterAirdrop renames photos that arrive through AirDrop in Downloads. A name such as `IMG_4821.HEIC` becomes one built from the date, city, kind of image and what it shows, HEIC files are converted to JPEG, and the originals go to the Trash. Undo is available from the menu or the notification. Naming uses Apple Vision on the Mac, Apple Intelligence on macOS 26 or later, or an Anthropic API key if one is set. It is for people who receive many photos by AirDrop and want to find them by name later. diff --git a/content/apps/biscotti/assets/icon.png b/content/apps/biscotti/assets/icon.png new file mode 100644 index 00000000..2973f875 Binary files /dev/null and b/content/apps/biscotti/assets/icon.png differ diff --git a/content/apps/biscotti/index.md b/content/apps/biscotti/index.md index 66690b0f..08dd65c8 100644 --- a/content/apps/biscotti/index.md +++ b/content/apps/biscotti/index.md @@ -26,6 +26,12 @@ sources: - "https://github.com/scosman/Biscotti/blob/main/LICENSE.md" - "https://github.com/scosman/Biscotti/releases" - "https://biscottiapp.com" +assets: + - path: ./assets/icon.png + source: https://github.com/scosman/Biscotti/releases/download/v1.0.0/Biscotti.dmg + credit: Biscotti contributors + license: PolyForm-Perimeter-1.0.1; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Biscotti records the Mac's microphone and system audio during a meeting, so it works with apps such as Zoom, Teams, Meet, FaceTime and Slack without joining the call as a participant. It turns the recording into a transcript split by speaker, uses your calendar to suggest when to start and to match names, and writes a summary with action items and a meeting title. Notes can be written in Markdown and linked to the moment they were taken. It is for people who want meeting notes that stay on their own Mac. diff --git a/content/apps/blave/assets/icon.png b/content/apps/blave/assets/icon.png new file mode 100644 index 00000000..0510feac Binary files /dev/null and b/content/apps/blave/assets/icon.png differ diff --git a/content/apps/blave/index.md b/content/apps/blave/index.md index fb4d5d4c..d51f094c 100644 --- a/content/apps/blave/index.md +++ b/content/apps/blave/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/Blave-TW/blave-agent/blob/main/LICENSE" - "https://github.com/Blave-TW/blave-agent/releases" - "https://blave.org" +assets: + - path: ./assets/icon.png + source: https://github.com/Blave-TW/blave-agent/releases/download/desktop-v0.1.48/Blave-0.1.48-universal.dmg + credit: Blave contributors + license: Apache-2.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Blave Agent is a workspace for trading strategies. You describe an idea to Claude Code, Codex, a DeepSeek key or Blave's own AI, and the agent writes the strategy, backtests it with fees included and checks the result for overfitting. Strategies can run in paper trading without keys, or be connected to supported exchanges for live orders. It suits traders who want an AI coding agent to do the scripting and testing work. diff --git a/content/apps/bonk/assets/icon.png b/content/apps/bonk/assets/icon.png new file mode 100644 index 00000000..2cfda99a Binary files /dev/null and b/content/apps/bonk/assets/icon.png differ diff --git a/content/apps/bonk/index.md b/content/apps/bonk/index.md index fd619ca1..2ca62341 100644 --- a/content/apps/bonk/index.md +++ b/content/apps/bonk/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/Alex-duh/Bonk/blob/main/LICENSE" - "https://github.com/Alex-duh/Bonk/releases" - "https://trybonk.vercel.app/" +assets: + - path: ./assets/icon.png + source: https://github.com/Alex-duh/Bonk/blob/main/Packaging/logo.png + credit: Bonk contributors + license: GPL-3.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Bonk reads the accelerometer that Apple silicon MacBooks already contain and treats one to four knocks anywhere on the chassis as separate triggers. Each pattern can run a media or system key, a keyboard shortcut, an app, a shell command or a Shortcuts shortcut, and per-app rules can override the global mapping. Knock calibration, a test mode and a live waveform help set the threshold. Knock detection runs on the Mac; the only network request is an optional daily version check. It suits people who want a physical shortcut for everyday controls such as play, pause or lock. diff --git a/content/apps/browseroute/assets/icon.png b/content/apps/browseroute/assets/icon.png new file mode 100644 index 00000000..ea71359e Binary files /dev/null and b/content/apps/browseroute/assets/icon.png differ diff --git a/content/apps/browseroute/index.md b/content/apps/browseroute/index.md index 2f487608..dee5ed15 100644 --- a/content/apps/browseroute/index.md +++ b/content/apps/browseroute/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/TerrifiedBug/browseroute/blob/main/LICENSE" - "https://github.com/TerrifiedBug/browseroute/releases" - "https://browseroute.terrifiedbug.com" +assets: + - path: ./assets/icon.png + source: https://github.com/TerrifiedBug/browseroute/releases/download/v0.2.0/Browseroute-0.2.0.zip + credit: Browseroute contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Browseroute registers as the default web browser and hands each `http` and `https` link to the browser you choose. Rules match a host suffix, a host glob or a host plus path glob, and are tried from top to bottom; a link that matches nothing goes to a Default browser you mark. It can also appear as an Open With option in Finder for common document and image types. It suits people who keep work and personal accounts in separate browsers and want links to open in the right one. diff --git a/content/apps/browsync/assets/icon.png b/content/apps/browsync/assets/icon.png new file mode 100644 index 00000000..820b2ee9 Binary files /dev/null and b/content/apps/browsync/assets/icon.png differ diff --git a/content/apps/browsync/index.md b/content/apps/browsync/index.md index a968ea0f..4f2da8f0 100644 --- a/content/apps/browsync/index.md +++ b/content/apps/browsync/index.md @@ -19,6 +19,12 @@ sources: - "https://github.com/chentao1006/BrowSync/blob/main/LICENSE" - "https://github.com/chentao1006/BrowSync/releases" - "https://browsync.ct106.com/" +assets: + - path: ./assets/icon.png + source: https://github.com/chentao1006/BrowSync/releases/download/v1.3.1/BrowSync.dmg + credit: BrowSync contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- BrowSync can be set as the default browser on a Mac. It opens each link in Safari, a Chromium-based browser or Firefox, chosen by domain, URL pattern, source app or time of day. It also syncs bookmarks, cookies, local storage and open tabs between those browsers. It suits people who move between several browsers and want their data kept in step. diff --git a/content/apps/bzz/assets/icon.png b/content/apps/bzz/assets/icon.png new file mode 100644 index 00000000..5b8271f4 Binary files /dev/null and b/content/apps/bzz/assets/icon.png differ diff --git a/content/apps/bzz/index.md b/content/apps/bzz/index.md index 35b91074..d7d669f3 100644 --- a/content/apps/bzz/index.md +++ b/content/apps/bzz/index.md @@ -22,6 +22,12 @@ sources: - "https://github.com/zlopixatel/bzz/blob/main/LICENSE" - "https://github.com/zlopixatel/bzz/releases" - "https://zlopixatel.github.io/bzz/" +assets: + - path: ./assets/icon.png + source: https://github.com/zlopixatel/bzz/releases/download/v0.3.0/Bzz.dmg + credit: Bzz contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Bzz is a menu bar app that notices when a word was typed in the wrong keyboard layout, such as Latin keys pressed while Russian was meant, and retypes it in the right layout when you press Space or punctuation. It checks words against a Russian dictionary with stemming and accepts a single typo in words of six or more letters. Cmd+Z reverts a correction within five seconds, and the tray icon pauses it. It suits people who switch between Russian and English layouts. The README says Windows support is planned. diff --git a/content/apps/caffeinatecat/assets/icon.png b/content/apps/caffeinatecat/assets/icon.png new file mode 100644 index 00000000..24dc1886 Binary files /dev/null and b/content/apps/caffeinatecat/assets/icon.png differ diff --git a/content/apps/caffeinatecat/index.md b/content/apps/caffeinatecat/index.md index 6fa79e2f..76660662 100644 --- a/content/apps/caffeinatecat/index.md +++ b/content/apps/caffeinatecat/index.md @@ -22,6 +22,12 @@ sources: - "https://github.com/PremPoddar/CaffeinateCat/blob/main/LICENSE" - "https://github.com/PremPoddar/CaffeinateCat/releases" - "https://prempoddar.github.io/CaffeinateCat/" +assets: + - path: ./assets/icon.png + source: https://github.com/PremPoddar/CaffeinateCat/releases/download/v1.1.0/CaffeinateCat.zip + credit: CaffeinateCat contributors + license: Apache-2.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- CaffeinateCat is a menu bar app with two keep-awake modes. Keep Screen Awake stops idle and display sleep. Keep Awake on Lid Close also keeps the Mac running with the lid shut, even on battery, by setting the `disablesleep` flag through `pmset`. Both modes support timers and an option to let the display sleep, and the app switches itself off at 20% and 10% battery. It suits builds, downloads, servers and coding agents that must keep running while the laptop is carried in a bag. diff --git a/content/apps/chaos/assets/icon.png b/content/apps/chaos/assets/icon.png new file mode 100644 index 00000000..8de8659c Binary files /dev/null and b/content/apps/chaos/assets/icon.png differ diff --git a/content/apps/chaos/index.md b/content/apps/chaos/index.md index 8e2b281a..cd23e4bb 100644 --- a/content/apps/chaos/index.md +++ b/content/apps/chaos/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/michaelmjhhhh/Chaos" - "https://github.com/michaelmjhhhh/Chaos/blob/main/LICENSE" - "https://github.com/michaelmjhhhh/Chaos/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/michaelmjhhhh/Chaos/releases/download/v1.1.0/Chaos.dmg + credit: Chaos contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Chaos watches for new screenshots, asks a vision model for a short description of each one, and renames the file from it, for example `terminal-git-log_143022.png`. Renamed files go to an output folder you choose, optionally in daily or monthly subfolders. The provider can be any OpenAI-compatible vision API, such as OpenAI, OpenRouter or DeepSeek, or Ollama running on your Mac. Every rename is recorded in a local history with undo and retry, and existing files are never overwritten. It is for people whose desktop fills up with screenshots named by date and time. diff --git a/content/apps/chargemonitor/assets/icon.png b/content/apps/chargemonitor/assets/icon.png new file mode 100644 index 00000000..f0bc1495 Binary files /dev/null and b/content/apps/chargemonitor/assets/icon.png differ diff --git a/content/apps/chargemonitor/index.md b/content/apps/chargemonitor/index.md index f7155ece..9b53850e 100644 --- a/content/apps/chargemonitor/index.md +++ b/content/apps/chargemonitor/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/CrashSystemZ/ChargeMonitor" - "https://github.com/CrashSystemZ/ChargeMonitor/blob/main/LICENSE" - "https://github.com/CrashSystemZ/ChargeMonitor/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/CrashSystemZ/ChargeMonitor/releases/download/v1.2.0/ChargeMonitor.dmg + credit: ChargeMonitor contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- ChargeMonitor is a menu-bar utility that shows the battery percentage and opens a popover with more detail: power source and adapter, charging state and wattage, power draw, cycle count and time remaining. It also lists apps with significant energy impact, which the author describes as a heuristic built from CPU time, wakeups and disk activity rather than a precise measurement. It is for people who want more battery information than the system menu shows. diff --git a/content/apps/cida/assets/icon.png b/content/apps/cida/assets/icon.png new file mode 100644 index 00000000..fd8ef9bb Binary files /dev/null and b/content/apps/cida/assets/icon.png differ diff --git a/content/apps/cida/index.md b/content/apps/cida/index.md index 06e05945..fa13dd3e 100644 --- a/content/apps/cida/index.md +++ b/content/apps/cida/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/Xuanwo/cida/blob/main/LICENSE" - "https://github.com/Xuanwo/cida/releases/tag/v1.6.0" - "https://cida.xuanwo.io" +assets: + - path: ./assets/icon.png + source: https://github.com/Xuanwo/cida/releases/download/v1.6.0/Cida-1.6.0-222.dmg + credit: Cida contributors + license: Apache-2.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Cida (辞达 in its Chinese interface) works on selected text in any app. Option-A opens a panel that translates the selection, and Option-F rewrites it in place, with Command-Z to undo. Option-S translates text inside a captured screen region, and Option-D translates a paragraph in place; Shift-Option-D translates a whole window as it scrolls. You can add your own text actions as prompts. Cida sends text only to the model service you choose, which can be a hosted API or a local server, and it recognises screenshot text on the Mac with Apple's Vision framework. It also includes a command-line interface that shares the app's configuration. diff --git a/content/apps/clipstack/assets/icon.png b/content/apps/clipstack/assets/icon.png new file mode 100644 index 00000000..01f58195 Binary files /dev/null and b/content/apps/clipstack/assets/icon.png differ diff --git a/content/apps/clipstack/index.md b/content/apps/clipstack/index.md index 461b2bbf..99aaecbd 100644 --- a/content/apps/clipstack/index.md +++ b/content/apps/clipstack/index.md @@ -23,6 +23,12 @@ sources: - "https://github.com/chiranjeebhub/ClipStack/blob/main/LICENSE" - "https://github.com/chiranjeebhub/ClipStack/releases" - "https://clipstack.chiranjeeb.dev" +assets: + - path: ./assets/icon.png + source: https://github.com/chiranjeebhub/ClipStack/blob/main/docs/images/icon.png + credit: ClipStack contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- ClipStack is a native clipboard manager that records what you copy and opens the history from a floating panel with Shift-Command-V. You can search, filter by text, links, images, files or pinned items, and paste with Return or as plain text. Pinned items are kept when history limits apply. Items that password managers mark as concealed are not saved. Optional iCloud sync moves history, pins and settings through your own private iCloud database. It suits anyone who wants clipboard history without an account. diff --git a/content/apps/codexu/assets/icon.png b/content/apps/codexu/assets/icon.png new file mode 100644 index 00000000..8beb9427 Binary files /dev/null and b/content/apps/codexu/assets/icon.png differ diff --git a/content/apps/codexu/index.md b/content/apps/codexu/index.md index e838f590..4236fd8a 100644 --- a/content/apps/codexu/index.md +++ b/content/apps/codexu/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/shanggqm/codexU/blob/main/LICENSE" - "https://github.com/shanggqm/codexU/releases" - "https://shanggqm.github.io/codexU-site/" +assets: + - path: ./assets/icon.png + source: https://github.com/shanggqm/codexU/releases/download/v1.4.0/codexU-1.4.0-mac-arm64.dmg + credit: codexU contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- codexU reads the usage data that Codex and Claude Code keep on your Mac and shows your five-hour and seven-day quota windows, reset times, token totals and today's tasks. It also includes a model usage trend, a project ranking and tool and skill counts. It suits developers who use Codex or Claude Code every day and want quota status without opening a terminal or a browser. The README says the data is processed locally and not uploaded. diff --git a/content/apps/containerdesk/assets/icon.png b/content/apps/containerdesk/assets/icon.png new file mode 100644 index 00000000..d6a24047 Binary files /dev/null and b/content/apps/containerdesk/assets/icon.png differ diff --git a/content/apps/containerdesk/index.md b/content/apps/containerdesk/index.md index 783934d2..b80e851d 100644 --- a/content/apps/containerdesk/index.md +++ b/content/apps/containerdesk/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/MacHatter1/ContainerDesk/blob/main/LICENSE" - "https://github.com/MacHatter1/ContainerDesk/releases/latest" - "https://www.containerdesk.dev" +assets: + - path: ./assets/icon.png + source: https://github.com/MacHatter1/ContainerDesk/releases/download/v1.3.2/ContainerDesk-v1.3.2-macos-arm64.dmg + credit: ContainerDesk contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- ContainerDesk is a workspace for Apple's `container` runtime. It shows containers, images, volumes, networks and machines in searchable tables, and lets you run, stop, inspect, build and clean up Linux containers. Each container has live CPU and memory gauges against its limits, a terminal, logs and file access, and cleanup shows exactly what it will remove. It also manages Compose projects and saved stacks, and can serve a local MLX model for chat. It suits developers who want to use Apple's runtime and do not need a Docker socket or Docker API. diff --git a/content/apps/convertino/assets/icon.png b/content/apps/convertino/assets/icon.png new file mode 100644 index 00000000..bb80481b Binary files /dev/null and b/content/apps/convertino/assets/icon.png differ diff --git a/content/apps/convertino/index.md b/content/apps/convertino/index.md index a2ba1e17..e6db2c39 100644 --- a/content/apps/convertino/index.md +++ b/content/apps/convertino/index.md @@ -19,6 +19,12 @@ sources: - "https://github.com/hasanzadee/convertino" - "https://github.com/hasanzadee/convertino/blob/main/LICENSE" - "https://github.com/hasanzadee/convertino/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/hasanzadee/convertino/releases/download/v1.4.2/convertino-macos-arm64.zip + credit: Convertino contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Convertino opens a ring of conversions under the cursor while you drag a file. Tap Shift, drop the file on a petal, and the result appears next to the original. The same ring handles images, PDFs, video and audio, data formats such as JSON, YAML and XLSX, subtitles, OCR text, background cut-out and archives. A clipboard and screenshot shortcut works on whatever you copied. It suits people who convert files often and would rather not open export dialogs. diff --git a/content/apps/convoker/assets/icon.png b/content/apps/convoker/assets/icon.png new file mode 100644 index 00000000..e7823cb0 Binary files /dev/null and b/content/apps/convoker/assets/icon.png differ diff --git a/content/apps/convoker/index.md b/content/apps/convoker/index.md index c23f0a0d..9d47720e 100644 --- a/content/apps/convoker/index.md +++ b/content/apps/convoker/index.md @@ -18,6 +18,12 @@ sources: - "https://github.com/varie-ai/convoker" - "https://github.com/varie-ai/convoker/blob/main/LICENSE" - "https://github.com/varie-ai/convoker/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/varie-ai/convoker/releases/download/v0.5.0/Convoker-0.5.0.dmg + credit: Convoker contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Convoker is a menu bar app with a command palette. Type an app's name and press Enter to gather all of its windows onto the current screen, or press Command-Enter to focus that app and hide the rest. You can pin up to four apps for a side-by-side split, and save an arrangement as a named workspace that launches apps and arranges their windows in one step. It suits people who regularly work with several windows per app across more than one monitor. diff --git a/content/apps/copperlight/assets/icon.png b/content/apps/copperlight/assets/icon.png new file mode 100644 index 00000000..b58432a9 Binary files /dev/null and b/content/apps/copperlight/assets/icon.png differ diff --git a/content/apps/copperlight/index.md b/content/apps/copperlight/index.md index 3aa0e2b9..4e48af99 100644 --- a/content/apps/copperlight/index.md +++ b/content/apps/copperlight/index.md @@ -23,6 +23,12 @@ sources: - "https://github.com/robsonpbr/copperlight/blob/main/LICENSE" - "https://github.com/robsonpbr/copperlight/releases" - "https://copperlight.app" +assets: + - path: ./assets/icon.png + source: https://github.com/robsonpbr/copperlight/releases/download/v0.16/Copperlight.zip + credit: Copperlight contributors + license: GPL-3.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Copperlight is a launcher opened with ⌥ Space. One field opens apps and files, does math, currency and unit conversions, keeps a searchable clipboard history, moves windows, runs your own commands and snippets, and shows the next meeting and running timers. Settings live in a plain-text file you can keep in git. It suits people who want a keyboard launcher with more built-in tools and no account. diff --git a/content/apps/copywheel/assets/icon.png b/content/apps/copywheel/assets/icon.png new file mode 100644 index 00000000..228e1b9e Binary files /dev/null and b/content/apps/copywheel/assets/icon.png differ diff --git a/content/apps/copywheel/index.md b/content/apps/copywheel/index.md index 58de9b94..f743a4f0 100644 --- a/content/apps/copywheel/index.md +++ b/content/apps/copywheel/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/weselski/copywheel" - "https://github.com/weselski/copywheel/blob/main/LICENSE" - "https://github.com/weselski/copywheel/releases/latest" +assets: + - path: ./assets/icon.png + source: https://github.com/weselski/copywheel/releases/download/v0.4.0/CopyWheel.dmg + credit: CopyWheel contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- CopyWheel is a small menu bar app. A global hotkey, Control-Option-C by default, opens a radial menu at the cursor. Clicking a slice, or pressing a number key, copies that snippet to the clipboard, and arrow keys can rotate through the wheel. An optional outer ring shows the last ten copied texts, kept in memory only and skipping password-manager entries. Secret snippets are stored in the Keychain. It suits people who reuse the same saved texts and want them without opening a notes app. diff --git a/content/apps/cornetta/assets/icon.png b/content/apps/cornetta/assets/icon.png new file mode 100644 index 00000000..aab7bed0 Binary files /dev/null and b/content/apps/cornetta/assets/icon.png differ diff --git a/content/apps/cornetta/index.md b/content/apps/cornetta/index.md index cac9f403..bf683acb 100644 --- a/content/apps/cornetta/index.md +++ b/content/apps/cornetta/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/stellakamikaze/cornetta/blob/master/LICENSE" - "https://github.com/stellakamikaze/cornetta/releases" - "https://cornetta.stellakamikaze.org/en/" +assets: + - path: ./assets/icon.png + source: https://github.com/stellakamikaze/cornetta/releases/download/v0.4.0/Cornetta-0.4.0.dmg + credit: Cornetta contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Cornetta is a menu bar call recorder. One click starts recording whatever calling app you use, including WhatsApp, FaceTime, Google Meet, Zoom, Teams, Slack, Discord and browser calls. Your microphone and the other participants' audio go to separate tracks, and the call is saved as one m4a file in your Music folder. It needs no virtual audio driver and no account. On macOS 26 it also transcribes each call on the Mac with Apple's speech recognition, attributing your voice separately from the others. The interface and code comments are in Italian. diff --git a/content/apps/deepdeck/assets/icon.png b/content/apps/deepdeck/assets/icon.png new file mode 100644 index 00000000..02c9f6a7 Binary files /dev/null and b/content/apps/deepdeck/assets/icon.png differ diff --git a/content/apps/deepdeck/index.md b/content/apps/deepdeck/index.md index 956121a2..57337d97 100644 --- a/content/apps/deepdeck/index.md +++ b/content/apps/deepdeck/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/jo32/DeepDeck/blob/main/LICENSE" - "https://github.com/jo32/DeepDeck/releases" - "https://deepdeck.getmegaportal.com/" +assets: + - path: ./assets/icon.png + source: https://github.com/jo32/DeepDeck/blob/main/branding/app-icon.png + credit: DeepDeck contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- DeepDeck is a macOS desktop app for DeepSeek Harness. An agent works through a website in a built-in browser, uses the site's WebMCP tools where they exist, or explores the interface and builds tools that you can inspect, disable, roll back and reuse later. It is for people who repeat the same web workflows with an AI agent and want those steps kept as editable tools. diff --git a/content/apps/defi/assets/icon.png b/content/apps/defi/assets/icon.png new file mode 100644 index 00000000..b727e066 Binary files /dev/null and b/content/apps/defi/assets/icon.png differ diff --git a/content/apps/defi/index.md b/content/apps/defi/index.md index e23bddfc..4d2f8cb9 100644 --- a/content/apps/defi/index.md +++ b/content/apps/defi/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/qeude/Defi/blob/main/LICENSE" - "https://github.com/qeude/Defi/releases/latest" - "https://qeude.github.io/Defi/" +assets: + - path: ./assets/icon.png + source: https://github.com/qeude/Defi/releases/download/v0.8.0/Defi-v0.8.0.dmg + credit: Defi contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Defi places windows in columns on a horizontal strip. Opening a window adds a column and the strip grows; moving to a window past the edge of the screen scrolls the desktop to bring it into view. It also has dynamic and named workspaces, app rules, per-display layouts, an overview of workspaces and windows, window borders, and a configuration file in TOML that reloads when saved. A command-line tool and SketchyBar integration are included. Built-in shortcuts use Control and Option, and native window clicks, the Dock and Command-Tab keep working. diff --git a/content/apps/dim-keys/assets/icon.png b/content/apps/dim-keys/assets/icon.png new file mode 100644 index 00000000..578d5a20 Binary files /dev/null and b/content/apps/dim-keys/assets/icon.png differ diff --git a/content/apps/dim-keys/index.md b/content/apps/dim-keys/index.md index a440cd2f..26863a8b 100644 --- a/content/apps/dim-keys/index.md +++ b/content/apps/dim-keys/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/dmartoon/MacBook-Keyboard-Backlight-Limiter/blob/main/LICENSE" - "https://github.com/dmartoon/MacBook-Keyboard-Backlight-Limiter/releases" - "https://dimkeys.com" +assets: + - path: ./assets/icon.png + source: https://github.com/dmartoon/MacBook-Keyboard-Backlight-Limiter/releases/download/v1.2.0/DimKeys-1.2.0.dmg + credit: Dim Keys contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Dim Keys is a menu bar app for MacBooks with a backlit keyboard. It sets a maximum brightness for the keyboard backlight and drives the backlight from the ambient light sensor, with a Low, Med or High sensitivity that decides the light level at which the keys turn on. It was called Keyboard Backlight Limiter before version 1.2.0, and its settings carried over. It suits people who want the keys lit in a dark room but never at full brightness. diff --git a/content/apps/docklift/assets/icon.png b/content/apps/docklift/assets/icon.png new file mode 100644 index 00000000..c0716ec6 Binary files /dev/null and b/content/apps/docklift/assets/icon.png differ diff --git a/content/apps/docklift/index.md b/content/apps/docklift/index.md index a318e4c2..6ebd4d02 100644 --- a/content/apps/docklift/index.md +++ b/content/apps/docklift/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/jaywcjlove/dock-lift/blob/main/LICENSE" - "https://github.com/jaywcjlove/dock-lift/releases" - "https://wangchujiang.com/dock-lift/" +assets: + - path: ./assets/icon.png + source: https://github.com/jaywcjlove/dock-lift/releases/download/v1.3.0/DockLift_v1.3.0.zip + credit: DockLift contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- DockLift is for Macs with more than one display. When you click an app's Dock icon, it moves that app's recent window to the screen you are using and brings it to the front, and it can restore minimized windows. Holding Shift while clicking pulls every window of that app over from the other displays. You can list apps that should never be moved. It lives in the menu bar and suits people who keep the Dock on a different screen from the one they work on. diff --git a/content/apps/draglocker/assets/icon.png b/content/apps/draglocker/assets/icon.png new file mode 100644 index 00000000..3f87aed0 Binary files /dev/null and b/content/apps/draglocker/assets/icon.png differ diff --git a/content/apps/draglocker/index.md b/content/apps/draglocker/index.md index a9381388..ec97781f 100644 --- a/content/apps/draglocker/index.md +++ b/content/apps/draglocker/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/taikun114/DragLocker/blob/main/LICENSE" - "https://github.com/taikun114/DragLocker/releases/latest" - "https://draglocker.taikun.design/" +assets: + - path: ./assets/icon.png + source: https://github.com/taikun114/DragLocker/releases/download/v1.0.2/DragLocker-v1.0.2.dmg + credit: DragLocker contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- macOS has drag lock only for the trackpad, so a drag ends when you release the mouse button. DragLocker keeps the drag going after release for any connected mouse. You choose which buttons (left, right or the scroll-wheel button) trigger the lock, whether a hold time or a drag distance starts it, and whether a small icon near the pointer shows the lock state. Settings can differ per app, so the lock can be limited to some apps or excluded from others. It is for people who drag files or windows with a regular mouse. diff --git a/content/apps/dualclip/assets/icon.png b/content/apps/dualclip/assets/icon.png new file mode 100644 index 00000000..ebe9b5da Binary files /dev/null and b/content/apps/dualclip/assets/icon.png differ diff --git a/content/apps/dualclip/index.md b/content/apps/dualclip/index.md index c5648cc8..d871c31e 100644 --- a/content/apps/dualclip/index.md +++ b/content/apps/dualclip/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/RAKKUNN/DualClip/blob/main/LICENSE" - "https://github.com/RAKKUNN/DualClip/releases/latest" - "https://rakkunn.github.io/DualClip/" +assets: + - path: ./assets/icon.png + source: https://github.com/RAKKUNN/DualClip/blob/main/docs/assets/icon.png + credit: DualClip contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- DualClip is a menu bar app with three clipboard slots. Slot A mirrors the normal system clipboard, and slots B and C are filled with their own copy shortcuts. Each slot has a paste shortcut that briefly swaps its contents into the clipboard, sends paste, and then restores your original clipboard, which the README puts at about 200 ms. Slot contents live only in memory and are gone when the app quits. It suits people who prefer to recall a fixed snippet by shortcut rather than scroll a history list. diff --git a/content/apps/eme/assets/icon.png b/content/apps/eme/assets/icon.png new file mode 100644 index 00000000..abebb6bc Binary files /dev/null and b/content/apps/eme/assets/icon.png differ diff --git a/content/apps/eme/index.md b/content/apps/eme/index.md index 1b270627..a425145a 100644 --- a/content/apps/eme/index.md +++ b/content/apps/eme/index.md @@ -27,6 +27,12 @@ sources: - "https://raw.githubusercontent.com/egoist/eme/dev/package.json" - "https://github.com/egoist/eme/releases/tag/v0.15.1" - "https://typora.io/" +assets: + - path: ./assets/icon.png + source: https://github.com/egoist/eme/releases/download/v0.15.1/EME-0.15.1.dmg + credit: EME contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- EME edits Markdown and lets you choose what the window shows: the source, the rendered preview, or both at once. A focus mode clears everything else away while you write. diff --git a/content/apps/engram/assets/icon.png b/content/apps/engram/assets/icon.png new file mode 100644 index 00000000..972abe48 Binary files /dev/null and b/content/apps/engram/assets/icon.png differ diff --git a/content/apps/engram/index.md b/content/apps/engram/index.md index e819c3eb..7fbec688 100644 --- a/content/apps/engram/index.md +++ b/content/apps/engram/index.md @@ -19,6 +19,12 @@ sources: - "https://github.com/albertofettucini/Engram" - "https://github.com/albertofettucini/Engram/blob/main/LICENSE" - "https://github.com/albertofettucini/Engram/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/albertofettucini/Engram/releases/download/v0.1.1/Engram-0.1.1.zip + credit: Engram contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Engram keeps your context in one private memory on your Mac. You import a ChatGPT or Claude export, Markdown, text, JSON or a pasted block, and each conversation is stored as a plain Markdown file. Any assistant that speaks the Model Context Protocol, such as Claude Desktop or Claude Code, can then recall that memory through the `engram-mcp` server, and the desktop app lets you browse, edit and import memories. Recall runs locally using Apple's Natural Language embeddings. It suits people who want the same background about them in several AI tools. diff --git a/content/apps/envkeep/assets/icon.png b/content/apps/envkeep/assets/icon.png new file mode 100644 index 00000000..5221fad9 Binary files /dev/null and b/content/apps/envkeep/assets/icon.png differ diff --git a/content/apps/envkeep/index.md b/content/apps/envkeep/index.md index b6c673e6..8f55bdb3 100644 --- a/content/apps/envkeep/index.md +++ b/content/apps/envkeep/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/jackofshadowz/envkeep/blob/main/LICENSE" - "https://github.com/jackofshadowz/envkeep/releases/latest" - "https://jackofshadowz.github.io/envkeep/" +assets: + - path: ./assets/icon.png + source: https://github.com/jackofshadowz/envkeep/releases/download/v1.0.0/Envkeep-1.0.0-macos.zip + credit: Envkeep contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Envkeep keeps a project's environment secrets in one age-encrypted vault file, so only ciphertext reaches the disk or a shared private git repository. You manage the vault in a native macOS window, or from a command-line tool whose `get` command prints a single value, so a coding agent can use one key without the key being pasted into a chat. The README includes setup notes for Claude Code, Cursor and aider. It suits developers who keep API keys in `.env` files and want them out of plain text. diff --git a/content/apps/fanpilot/assets/icon.png b/content/apps/fanpilot/assets/icon.png new file mode 100644 index 00000000..8629eac2 Binary files /dev/null and b/content/apps/fanpilot/assets/icon.png differ diff --git a/content/apps/fanpilot/index.md b/content/apps/fanpilot/index.md index 25c83f72..9645f913 100644 --- a/content/apps/fanpilot/index.md +++ b/content/apps/fanpilot/index.md @@ -22,6 +22,12 @@ sources: - "https://github.com/zyvren/FanPilot" - "https://github.com/zyvren/FanPilot/blob/main/LICENSE" - "https://github.com/zyvren/FanPilot/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/zyvren/FanPilot/releases/download/1.1/FanPilot-1.1.dmg + credit: FanPilot contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- FanPilot shows the temperature sensors of an Apple silicon Mac in the menu bar and in a main window, and lets you set each fan's speed: manual, maximum, rules that raise speed when a sensor passes a limit, or a curve you draw. Fan writes go through a small root helper that clamps every target to the fan's hardware limits, returns control to macOS when the app quits or the Mac sleeps, and runs the fans at full speed after two readings of 95 °C or more. It suits people with long, heavy workloads who want to choose how their Mac cools. diff --git a/content/apps/finchgram/assets/icon.png b/content/apps/finchgram/assets/icon.png new file mode 100644 index 00000000..45046a24 Binary files /dev/null and b/content/apps/finchgram/assets/icon.png differ diff --git a/content/apps/finchgram/index.md b/content/apps/finchgram/index.md index 1e17f737..7550225e 100644 --- a/content/apps/finchgram/index.md +++ b/content/apps/finchgram/index.md @@ -19,6 +19,12 @@ sources: - "https://github.com/FinchGram/FinchGram/blob/main/LICENSE" - "https://github.com/FinchGram/FinchGram/releases/latest" - "https://www.finchgram.com" +assets: + - path: ./assets/icon.png + source: https://github.com/FinchGram/FinchGram/releases/download/v0.7.10/FinchGram-0.7.10-macos-arm64.zip + credit: FinchGram contributors + license: GPL-3.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- FinchGram is an unofficial, open-source Telegram desktop client written in Rust with the Slint toolkit, using TDLib, Telegram's own library. It covers chats and folders, messages with reactions and voice messages, and a media viewer, and adds a screenshot tool, a downloads page for WebDAV, FTP, FTPS and SFTP servers, a player for Subsonic music servers, and opt-in voice input. AI assistant access through the Model Context Protocol stays off until you allow it. It suits people who want these extras in a Telegram client. The project states that it is not made by Telegram. diff --git a/content/apps/findersearch/assets/icon.png b/content/apps/findersearch/assets/icon.png new file mode 100644 index 00000000..aee13dec Binary files /dev/null and b/content/apps/findersearch/assets/icon.png differ diff --git a/content/apps/findersearch/index.md b/content/apps/findersearch/index.md index b69e5b37..8e71bc5d 100644 --- a/content/apps/findersearch/index.md +++ b/content/apps/findersearch/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/zeusinsight/FinderSearch/blob/main/LICENSE" - "https://github.com/zeusinsight/FinderSearch/blob/main/THIRD_PARTY_NOTICES.md" - "https://github.com/zeusinsight/FinderSearch/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/zeusinsight/FinderSearch/releases/download/v0.4.9/FinderSearch-0.4.9-AppleSilicon.dmg + credit: FinderSearch contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- FinderSearch is a file browser built around finding files by name. Typing runs fuzzy matching with relevance ranking, optionally limited to a folder, and filters such as ext:pdf or mtime:<7d. Views include icon, list, column and gallery, with Quick Look previews, tabs, copy and move, batch rename and ZIP tools. Search runs locally, and the search engine is fsearch, which the project vendors unmodified under its MIT license. It is aimed at filename lookup; content search is not supported yet. diff --git a/content/apps/flickbar/assets/icon.png b/content/apps/flickbar/assets/icon.png new file mode 100644 index 00000000..7f61de39 Binary files /dev/null and b/content/apps/flickbar/assets/icon.png differ diff --git a/content/apps/flickbar/index.md b/content/apps/flickbar/index.md index 38ce4987..a138a9ec 100644 --- a/content/apps/flickbar/index.md +++ b/content/apps/flickbar/index.md @@ -23,6 +23,12 @@ sources: - "https://github.com/flickbar/flickbar/blob/main/LICENSE" - "https://github.com/flickbar/flickbar/releases" - "https://flickbar.github.io/" +assets: + - path: ./assets/icon.png + source: https://github.com/flickbar/flickbar/releases/download/v1.1.0/Flickbar-1.1.0.dmg + credit: Flickbar contributors + license: GPL-3.0-or-later; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Flickbar lets you move windows with the trackpad: two fingers on a title bar snap the window to a half, a third, a quarter, the full screen or the center, and a hold shows a grid to pick a cell from. Swipes on a Dock icon show, hide or cycle an app's windows, and every action can also have a keyboard shortcut. It suits people who keep several windows open on a laptop and would rather gesture than drag. The gesture logic is documented in the README, and the project ships unit and end-to-end tests. diff --git a/content/apps/flowpeek/assets/icon.png b/content/apps/flowpeek/assets/icon.png new file mode 100644 index 00000000..26ea712d Binary files /dev/null and b/content/apps/flowpeek/assets/icon.png differ diff --git a/content/apps/flowpeek/index.md b/content/apps/flowpeek/index.md index 697ab63c..ffca5b01 100644 --- a/content/apps/flowpeek/index.md +++ b/content/apps/flowpeek/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/FlowPeek/flowpeek/blob/main/LICENSE" - "https://github.com/FlowPeek/flowpeek/releases" - "https://flowpeek.github.io/flowpeek/" +assets: + - path: ./assets/icon.png + source: https://github.com/FlowPeek/flowpeek/releases/download/v0.27.0/FlowPeek-0.27.0.dmg + credit: FlowPeek contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- FlowPeek sits in the menu bar and turns a Mermaid code block into a drawn diagram. Option-click or a shortcut over a block in Terminal, VS Code or a documentation page renders it in place, and a badge appears when a diagram is on the clipboard. An optional AI helper can write a diagram from selected text if you add your own provider key. It is for developers who write Mermaid in docs, code or chat logs. AI context leaves the Mac only when you press Generate. diff --git a/content/apps/foldgit/assets/icon.png b/content/apps/foldgit/assets/icon.png new file mode 100644 index 00000000..b96560dd Binary files /dev/null and b/content/apps/foldgit/assets/icon.png differ diff --git a/content/apps/foldgit/index.md b/content/apps/foldgit/index.md index 9bacecfd..d7a3075d 100644 --- a/content/apps/foldgit/index.md +++ b/content/apps/foldgit/index.md @@ -23,6 +23,12 @@ sources: - "https://github.com/dufu1991/foldgit/blob/main/LICENSE" - "https://github.com/dufu1991/foldgit/releases/tag/v0.5.0" - "https://foldgit.com" +assets: + - path: ./assets/icon.png + source: https://github.com/dufu1991/foldgit/releases/download/v0.5.0/FoldGit-macOS-arm64.dmg + credit: FoldGit contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- FoldGit shows all of your repositories in one sidebar, grouped by folder or by custom group, and lists linked worktrees under their repository. The window covers the commit graph, unified and side-by-side diffs, hunk staging, amend and revert, branch and tag management, and history search. It suits developers who work across many repositories and want a small, macOS-style client for reviewing and committing changes. diff --git a/content/apps/frink/assets/icon.png b/content/apps/frink/assets/icon.png new file mode 100644 index 00000000..d9d89201 Binary files /dev/null and b/content/apps/frink/assets/icon.png differ diff --git a/content/apps/frink/index.md b/content/apps/frink/index.md index 61806b78..38535e8b 100644 --- a/content/apps/frink/index.md +++ b/content/apps/frink/index.md @@ -19,6 +19,12 @@ sources: - "https://github.com/benord-labs/frink/blob/main/LICENSE" - "https://github.com/benord-labs/frink/releases" - "https://frink.dev" +assets: + - path: ./assets/icon.png + source: https://github.com/benord-labs/frink/blob/main/build/icon.png + credit: Frink contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Frink is a desktop app for running several AI coding agents side by side. Each pane has its own agent, model and diff to review, and agents can work in separate git worktrees. Routines can be saved as Flows that start on a schedule, from a webhook, or from an event in a tracker such as Linear or Sentry, and finished work waits in a queue for your review. It suits developers who want routine coding tasks to run while they review the results. diff --git a/content/apps/frogdrop/assets/icon.png b/content/apps/frogdrop/assets/icon.png new file mode 100644 index 00000000..86480cb7 Binary files /dev/null and b/content/apps/frogdrop/assets/icon.png differ diff --git a/content/apps/frogdrop/index.md b/content/apps/frogdrop/index.md index 046305b0..8397b149 100644 --- a/content/apps/frogdrop/index.md +++ b/content/apps/frogdrop/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/sarthak-SyntaxSamurai/FrogDrop" - "https://github.com/sarthak-SyntaxSamurai/FrogDrop/blob/main/LICENSE" - "https://github.com/sarthak-SyntaxSamurai/FrogDrop/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/sarthak-SyntaxSamurai/FrogDrop/releases/download/v2.2.0/FrogDrop.dmg + credit: FrogDrop contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- FrogDrop puts several small utilities behind one menu bar icon. It keeps a searchable clipboard history with per-app ignore rules, offers a file shelf that appears when you shake the cursor during a drag, and converts or strips metadata from images. It also does on-device text recognition, merges PDFs, and has a Pomodoro timer with ambient sounds and a short task list. It suits people who want these tools in one app instead of several separate ones. diff --git a/content/apps/fs-pdf-compressor/assets/icon.png b/content/apps/fs-pdf-compressor/assets/icon.png new file mode 100644 index 00000000..f64b3ede Binary files /dev/null and b/content/apps/fs-pdf-compressor/assets/icon.png differ diff --git a/content/apps/fs-pdf-compressor/index.md b/content/apps/fs-pdf-compressor/index.md index 7cdf23b1..368b1d0f 100644 --- a/content/apps/fs-pdf-compressor/index.md +++ b/content/apps/fs-pdf-compressor/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/gitlares/fs-pdf-compressor/blob/main/LICENSE" - "https://github.com/gitlares/fs-pdf-compressor/releases" - "https://gitlares.github.io/fs-pdf-compressor/" +assets: + - path: ./assets/icon.png + source: https://github.com/gitlares/fs-pdf-compressor/releases/download/v1.0.16/FS-PDF-Compressor-1.0.16-arm64.dmg + credit: FS PDF Compressor contributors + license: AGPL-3.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- FS PDF Compressor makes PDFs smaller by dropping files onto its window, onto an optional always-on-desktop Drop Zone, or through a Finder Quick Action. Compression uses Ghostscript bundled inside the app, so no website upload and no separate install are needed. It replaces the original only when the result is smaller, and an optional Keep original mode writes a compressed copy beside it. It suits people who regularly shrink scanned or exported PDFs before mailing or uploading them. diff --git a/content/apps/funnotch/assets/icon.png b/content/apps/funnotch/assets/icon.png new file mode 100644 index 00000000..1dcf921f Binary files /dev/null and b/content/apps/funnotch/assets/icon.png differ diff --git a/content/apps/funnotch/index.md b/content/apps/funnotch/index.md index 52c77cb5..8e51863b 100644 --- a/content/apps/funnotch/index.md +++ b/content/apps/funnotch/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/JoshuaT1105/FunNotch/blob/main/LICENSE" - "https://github.com/JoshuaT1105/FunNotch/releases" - "https://funnotch.xyz" +assets: + - path: ./assets/icon.png + source: https://github.com/JoshuaT1105/FunNotch/releases/download/v1.3/FunNotch-1.3.dmg + credit: FunNotch contributors + license: GPL-3.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- FunNotch draws a panel in the MacBook notch. Its home screen is a grid you arrange yourself, and it can show now-playing controls, a drag-and-drop shelf for files in transit, searchable clipboard history with pinning, focus sessions that block sites and apps, a timer and a daily notes scratchpad. Thirteen widgets can sit beside the camera. On an external display without a notch it becomes a floating pill. It suits people who want quick glances and small tools in that strip of menu bar rather than another window. diff --git a/content/apps/futureos/assets/icon.png b/content/apps/futureos/assets/icon.png new file mode 100644 index 00000000..00496bec Binary files /dev/null and b/content/apps/futureos/assets/icon.png differ diff --git a/content/apps/futureos/index.md b/content/apps/futureos/index.md index eb8a186f..7c2c5b47 100644 --- a/content/apps/futureos/index.md +++ b/content/apps/futureos/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/futuregene/future-os/blob/main/LICENSE" - "https://github.com/futuregene/future-os/releases" - "https://future-os.cn" +assets: + - path: ./assets/icon.png + source: https://github.com/futuregene/future-os/releases/download/v2.0.1/FutureOS_2.0.1_aarch64.dmg + credit: FutureOS contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- FutureOS runs one agent backend that several front ends share: a desktop app, a terminal UI, a CLI, mobile apps and chat bots. Sessions, memory and skills are the same whichever front end you use. You can bring your own model keys in a local auth.json file, or sign in to the FutureOS provider. Tool access (file reads and writes, shell) can be set to manual approval, sandboxed or automatic, and the README names macOS Seatbelt as the sandbox on Mac. diff --git a/content/apps/ghbdtn/assets/icon.png b/content/apps/ghbdtn/assets/icon.png new file mode 100644 index 00000000..6a4ab8c7 Binary files /dev/null and b/content/apps/ghbdtn/assets/icon.png differ diff --git a/content/apps/ghbdtn/index.md b/content/apps/ghbdtn/index.md index 5c6bf548..e56d4225 100644 --- a/content/apps/ghbdtn/index.md +++ b/content/apps/ghbdtn/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/achubnet/Ghbdtn" - "https://github.com/achubnet/Ghbdtn/blob/main/LICENSE" - "https://github.com/achubnet/Ghbdtn/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/achubnet/Ghbdtn/releases/download/v1.1/Ghbdtn-1.1.dmg + credit: Ghbdtn contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Ghbdtn sits in the menu bar and fixes text typed with the wrong keyboard layout. You type the words, press ⌥⌘, and the text is rewritten in the other layout while the input source switches to match. The key map comes from the layouts enabled in macOS, so the ones you already use are the ones it converts. The author describes it as a free, open-source alternative to Punto Switcher for people who switch between Latin and Cyrillic layouts. diff --git a/content/apps/ghostmouse/assets/icon.png b/content/apps/ghostmouse/assets/icon.png new file mode 100644 index 00000000..f3fca6bc Binary files /dev/null and b/content/apps/ghostmouse/assets/icon.png differ diff --git a/content/apps/ghostmouse/index.md b/content/apps/ghostmouse/index.md index d2af061b..49e86ebd 100644 --- a/content/apps/ghostmouse/index.md +++ b/content/apps/ghostmouse/index.md @@ -23,6 +23,12 @@ sources: - "https://github.com/joeystdio/GhostMouse/blob/main/LICENSE" - "https://github.com/joeystdio/GhostMouse/releases" - "https://joeystdio.github.io/GhostMouse/" +assets: + - path: ./assets/icon.png + source: https://github.com/joeystdio/GhostMouse/releases/download/v1.3.4/GhostMouse.dmg + credit: GhostMouse contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- GhostMouse keeps a Mac from going idle. In Stealth mode it sends a zero-displacement input event at the pointer's own pixel, so the cursor does not visibly move while macOS registers activity; Natural mode glides the pointer out and back to where it started. It stops as soon as you touch the mouse or keyboard, or pauses and resumes after an idle delay you choose. Schedules limit it to chosen weekdays and hours, and a timer can switch it off after a countdown or at a set time. Control-Command-J toggles it, and a right-click on the menu bar icon does the same. It is for people whose status or session needs to stay active while they step away. diff --git a/content/apps/gitahead/assets/icon.png b/content/apps/gitahead/assets/icon.png new file mode 100644 index 00000000..a1916054 Binary files /dev/null and b/content/apps/gitahead/assets/icon.png differ diff --git a/content/apps/gitahead/index.md b/content/apps/gitahead/index.md index 1ce6c5ff..468d0743 100644 --- a/content/apps/gitahead/index.md +++ b/content/apps/gitahead/index.md @@ -22,6 +22,12 @@ featured: false added: "2026-11-06" verified: "2026-11-08" sources: ["https://github.com/gitahead/gitahead", "https://github.com/gitahead/gitahead/blob/master/LICENSE.md", "https://github.com/gitahead/gitahead/releases", "https://gitahead.com", "https://raw.githubusercontent.com/gitahead/gitahead/master/README.md", "https://raw.githubusercontent.com/gitahead/gitahead/master/LICENSE.md", "https://raw.githubusercontent.com/gitahead/gitahead/master/doc/changelog.md", "https://github.com/gitahead/gitahead/releases/tag/v2.7.1", "https://fork.dev/", "https://fork.dev/releasenotes", "https://www.git-tower.com/pricing", "https://www.git-tower.com/release-notes/mac"] +assets: + - path: ./assets/icon.png + source: https://github.com/gitahead/gitahead/releases/download/v2.7.1/GitAhead-2.7.1.dmg + credit: GitAhead contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- GitAhead opens a Git repository as a commit list with a diff view, so you can read how the code got where it is and then stage, commit and merge from the same window. SciTools, the company behind the Understand tool, designed it and later released it as free software. diff --git a/content/apps/gksdud/assets/icon.png b/content/apps/gksdud/assets/icon.png new file mode 100644 index 00000000..ba41ffaf Binary files /dev/null and b/content/apps/gksdud/assets/icon.png differ diff --git a/content/apps/gksdud/index.md b/content/apps/gksdud/index.md index 554436d6..0c189bb5 100644 --- a/content/apps/gksdud/index.md +++ b/content/apps/gksdud/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/codingnoye/gksdud/blob/main/LICENSE" - "https://github.com/codingnoye/gksdud/releases" - "https://gksdud.noye.dev/" +assets: + - path: ./assets/icon.png + source: https://github.com/codingnoye/gksdud/releases/download/v2.1.1/gksdud-2.1.1.dmg + credit: gksdud contributors + license: Apache-2.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- gksdud switches between Korean and English input with a key you choose, such as right Command. It remaps that key to F19 and sends the macOS "previous input source" shortcut, rather than changing input sources directly, so switching has no visible delay. It also adds press-and-hold for case switching, keeps English capitals through a round trip, and has a CLI for scripting. It is for Korean and English typists who want quicker switching. diff --git a/content/apps/glim/assets/icon.png b/content/apps/glim/assets/icon.png new file mode 100644 index 00000000..c581bafe Binary files /dev/null and b/content/apps/glim/assets/icon.png differ diff --git a/content/apps/glim/index.md b/content/apps/glim/index.md index 7ca3efc4..715d6ee0 100644 --- a/content/apps/glim/index.md +++ b/content/apps/glim/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/glimapp/glim/blob/main/LICENSE" - "https://github.com/glimapp/glim/releases/latest" - "https://glimapp.github.io/" +assets: + - path: ./assets/icon.png + source: https://github.com/glimapp/glim/releases/download/v0.2.25/Glim-0.2.25-macos-arm64.dmg + credit: Glim contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Glim is a file viewer for documents, data and code. You open a folder with Command-Shift-O and its files open as tabs in one workspace: Markdown with Mermaid diagrams, JSON trees, CSV tables, PDFs, images, Office documents and source code. Ordinary UTF-8 text can be edited, and changes save to the original file. Glim also browses SQLite tables in read-only snapshots and extracts ZIP archives to a new folder. It suits people whose project folders mix notes, data and code and who want to read them without a separate app for each. diff --git a/content/apps/gocci/assets/icon.png b/content/apps/gocci/assets/icon.png new file mode 100644 index 00000000..c93495ef Binary files /dev/null and b/content/apps/gocci/assets/icon.png differ diff --git a/content/apps/gocci/index.md b/content/apps/gocci/index.md index d2518412..15dc6d6c 100644 --- a/content/apps/gocci/index.md +++ b/content/apps/gocci/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/piro0919/gocci/blob/main/LICENSE" - "https://github.com/piro0919/gocci/releases" - "https://gocci.kkweb.io/" +assets: + - path: ./assets/icon.png + source: https://github.com/piro0919/gocci/releases/download/v1.1.5/Gocci-1.1.5.dmg + credit: Gocci contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Gocci adds one Google Drive account to Finder, the way iCloud Drive appears there, through Apple's File Provider mechanism. It does not mount a disk or install anything into the kernel. Opening a folder downloads nothing, and you choose the disk where downloaded files are kept, including an external drive. It suits people whose startup disk is too small for their Drive. It uses rclone to talk to Google Drive. diff --git a/content/apps/headlessguard/assets/icon.png b/content/apps/headlessguard/assets/icon.png new file mode 100644 index 00000000..42091234 Binary files /dev/null and b/content/apps/headlessguard/assets/icon.png differ diff --git a/content/apps/headlessguard/index.md b/content/apps/headlessguard/index.md index b2450f0c..03879878 100644 --- a/content/apps/headlessguard/index.md +++ b/content/apps/headlessguard/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/study8677/HeadlessGuard" - "https://github.com/study8677/HeadlessGuard/blob/main/LICENSE" - "https://github.com/study8677/HeadlessGuard/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/study8677/HeadlessGuard/releases/download/v0.1.0/HeadlessGuard-v0.1.0-macOS-arm64.zip + credit: Headless Guard contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Headless Guard looks for browsers that automation tools such as Playwright, Puppeteer, Selenium or Chrome-for-Testing launched and then left running after their task ended. It groups each browser's processes into one session, shows the evidence it found, and can stop the dedicated automation launcher first. It is observe-only by default, and it never touches ordinary Chrome windows or standard profiles. It is for developers and agents that drive browsers headlessly. diff --git a/content/apps/healthy-battery/assets/icon.png b/content/apps/healthy-battery/assets/icon.png new file mode 100644 index 00000000..d8aebc4d Binary files /dev/null and b/content/apps/healthy-battery/assets/icon.png differ diff --git a/content/apps/healthy-battery/index.md b/content/apps/healthy-battery/index.md index d1f483f5..05f1c637 100644 --- a/content/apps/healthy-battery/index.md +++ b/content/apps/healthy-battery/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/berkinefeavci/healthy-battery/blob/main/LICENSE" - "https://github.com/berkinefeavci/healthy-battery/releases/latest" - "https://healthybatteryapp.com" +assets: + - path: ./assets/icon.png + source: https://github.com/berkinefeavci/healthy-battery/releases/download/v1.4.2/Healthy-Battery-1.4.2.dmg + credit: Healthy Battery contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Healthy Battery is a menu bar app for MacBook battery care. It drives macOS's own charge limit between 80 and 100 percent in 5-point steps, offers a one-click Top Up to 100 percent for a trip, and shows live power flow between the adapter, battery, CPU and display. It keeps charge and health history for up to 400 days, runs scheduled actions and Shortcuts, and can set the MagSafe LED. It is for people who want to limit battery wear without a subscription or an account. diff --git a/content/apps/hertzwise/assets/icon.png b/content/apps/hertzwise/assets/icon.png new file mode 100644 index 00000000..00643bc0 Binary files /dev/null and b/content/apps/hertzwise/assets/icon.png differ diff --git a/content/apps/hertzwise/index.md b/content/apps/hertzwise/index.md index 75cc2253..ba964abc 100644 --- a/content/apps/hertzwise/index.md +++ b/content/apps/hertzwise/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/zeetabit/Hertzwise/blob/main/LICENSE" - "https://github.com/zeetabit/Hertzwise/releases" - "https://zeetabit.github.io/Hertzwise/" +assets: + - path: ./assets/icon.png + source: https://github.com/zeetabit/Hertzwise/releases/download/v1.0.3/Hertzwise-1.0.3.dmg + credit: Hertzwise contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Hertzwise changes the output sample rate of a DAC to match each track played by Apple Music or Tidal, so a lossless track plays at its own rate instead of being resampled by macOS. It can also apply a volume stage for DACs that ignore the Mac's volume control, and a headphone EQ that you switch on per output device. It is for listeners with a dedicated DAC who use Apple Music or Tidal. The project is open source under MIT. diff --git a/content/apps/icontainer/assets/icon.png b/content/apps/icontainer/assets/icon.png new file mode 100644 index 00000000..b6e6c90b Binary files /dev/null and b/content/apps/icontainer/assets/icon.png differ diff --git a/content/apps/icontainer/index.md b/content/apps/icontainer/index.md index 79b05f56..1c92c5b9 100644 --- a/content/apps/icontainer/index.md +++ b/content/apps/icontainer/index.md @@ -19,6 +19,12 @@ sources: - "https://github.com/nico81/iContainer" - "https://github.com/nico81/iContainer/blob/main/LICENSE" - "https://github.com/nico81/iContainer/releases/latest" +assets: + - path: ./assets/icon.png + source: https://github.com/nico81/iContainer/releases/download/v2.6.0/iContainer-v2.6.0.dmg + credit: iContainer contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- iContainer is a SwiftUI front end for Apple's `container` command-line tool, which runs Linux containers on a Mac. It lists containers, images and container machines, shows logs and live stats, opens interactive shells and can edit a container's ports, volumes and environment. It can also import images from a local Docker install, and it can install and update the official container CLI for you. Log explanations run on-device when Apple Intelligence is available. diff --git a/content/apps/imagecanvas/assets/icon.png b/content/apps/imagecanvas/assets/icon.png new file mode 100644 index 00000000..04fd0a9b Binary files /dev/null and b/content/apps/imagecanvas/assets/icon.png differ diff --git a/content/apps/imagecanvas/index.md b/content/apps/imagecanvas/index.md index 9b2cce11..8a4f2863 100644 --- a/content/apps/imagecanvas/index.md +++ b/content/apps/imagecanvas/index.md @@ -19,6 +19,12 @@ sources: - "https://github.com/viktorkpkn/ImageCanvas" - "https://github.com/viktorkpkn/ImageCanvas/blob/main/LICENSE" - "https://github.com/viktorkpkn/ImageCanvas/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/viktorkpkn/ImageCanvas/releases/download/v0.5.0/ImageCanvas-0.5.0-build4.zip + credit: ImageCanvas contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- ImageCanvas shows images from folders or dropped files on a zoomable canvas. They can be arranged as a tiled grid, a cascading column grid or a grid at native resolution, and you can pan, rotate, flip and resize them and add text objects. Files are referenced where they already are and are never modified. Boards are saved locally, and a snapshot of a board can be copied or saved to Pictures. Pen drawings last only for the session. It suits moodboards and quick reviews of large download folders. diff --git a/content/apps/juicemount/assets/icon.png b/content/apps/juicemount/assets/icon.png new file mode 100644 index 00000000..956930bb Binary files /dev/null and b/content/apps/juicemount/assets/icon.png differ diff --git a/content/apps/juicemount/index.md b/content/apps/juicemount/index.md index 7015fd9a..c79d8812 100644 --- a/content/apps/juicemount/index.md +++ b/content/apps/juicemount/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/lelanddutcher/juicemount/blob/main/LICENSE" - "https://github.com/lelanddutcher/juicemount/releases" - "https://juicemount.com" +assets: + - path: ./assets/icon.png + source: https://github.com/lelanddutcher/juicemount/releases/download/v0.5.0/JuiceMount.zip + credit: JuiceMount contributors + license: Apache-2.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- JuiceMount is for editors whose footage lives on a NAS they run themselves. It serves a JuiceFS volume through a local NFS share, so the volume appears in Finder and in an editing app's media browser. Blocks are cached on a local SSD, file metadata is mirrored locally for quick browsing, and pinned files stay usable when the server is unreachable. Writes can go through a local spool before they reach the server. You need your own metadata service (Redis) and S3-compatible storage, for example on TrueNAS with MinIO; it is not a hosted service. diff --git a/content/apps/justsessions/assets/icon.png b/content/apps/justsessions/assets/icon.png new file mode 100644 index 00000000..e3157d0e Binary files /dev/null and b/content/apps/justsessions/assets/icon.png differ diff --git a/content/apps/justsessions/index.md b/content/apps/justsessions/index.md index f7154065..8e9b9884 100644 --- a/content/apps/justsessions/index.md +++ b/content/apps/justsessions/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/yangzichao/JustSessions/blob/main/LICENSE" - "https://github.com/yangzichao/JustSessions/releases" - "https://yangzichao.github.io/JustSessions/" +assets: + - path: ./assets/icon.png + source: https://github.com/yangzichao/JustSessions/releases/download/v1.3.0/JustSessions.dmg + credit: JustSessions contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- JustSessions is a native macOS app for people who run command-line coding agents. It groups sessions from Claude Code, Codex CLI, Antigravity CLI, Kiro CLI, OpenCode and Pi by project, searches their messages, and lets you read a conversation, resume it in its original CLI or delete it. The CLIs run in native tabs and split views, and SSH hosts can be browsed the same way. The project says it reads the history your CLIs already write and does not upload conversations; the CLIs still talk to their own providers. diff --git a/content/apps/keyameleon/assets/icon.png b/content/apps/keyameleon/assets/icon.png new file mode 100644 index 00000000..e5e11487 Binary files /dev/null and b/content/apps/keyameleon/assets/icon.png differ diff --git a/content/apps/keyameleon/index.md b/content/apps/keyameleon/index.md index 4296efe7..a692a304 100644 --- a/content/apps/keyameleon/index.md +++ b/content/apps/keyameleon/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/mastro993/Keyameleon/blob/main/LICENSE" - "https://github.com/mastro993/Keyameleon/releases" - "https://keyameleon.app/" +assets: + - path: ./assets/icon.png + source: https://github.com/mastro993/keyameleon/releases/download/v0.10.0/Keyameleon-0.10.0.dmg + credit: Keyameleon contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Keyameleon assigns an input source to each physical keyboard, so a built-in US keyboard and an external Italian one each switch the layout when you start typing on them. You can also give an app its own layout on every keyboard, which wins while that app is in front. It is for people who use one Mac with keyboards that have different layouts and do not want to switch by hand. It lives in the menu bar, offers Shortcuts actions and keyameleon:// URLs, and has no Dock icon once setup is done. diff --git a/content/apps/kiwidesk/assets/icon.png b/content/apps/kiwidesk/assets/icon.png new file mode 100644 index 00000000..6ee9fd2c Binary files /dev/null and b/content/apps/kiwidesk/assets/icon.png differ diff --git a/content/apps/kiwidesk/index.md b/content/apps/kiwidesk/index.md index 639b7f09..73486a0a 100644 --- a/content/apps/kiwidesk/index.md +++ b/content/apps/kiwidesk/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/KiwiCanopy/KiwiDesk/blob/main/LICENSE" - "https://github.com/KiwiCanopy/KiwiDesk/releases" - "https://kiwidesk.kiwicanopy.com/" +assets: + - path: ./assets/icon.png + source: https://github.com/KiwiCanopy/KiwiDesk/releases/download/v4.1.0/KiwiDesk-4.1.0.dmg + credit: KiwiDesk contributors + license: BUSL-1.1; upstream app icon, trademarks retained +icon: ./assets/icon.png --- KiwiDesk is a tiling window manager for macOS. It tiles open windows as soon as it starts, without a configuration file. For more control it offers Lua scripting, profiles, advanced layouts and per-space rules, plus a command-line tool and an event stream. It is for people who want automatic tiling on a Mac and do not want to write a config before they can move a window. diff --git a/content/apps/koala/assets/icon.png b/content/apps/koala/assets/icon.png new file mode 100644 index 00000000..3338c1ab Binary files /dev/null and b/content/apps/koala/assets/icon.png differ diff --git a/content/apps/koala/index.md b/content/apps/koala/index.md index c13e7052..bd89896d 100644 --- a/content/apps/koala/index.md +++ b/content/apps/koala/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/oklai/koala" - "https://github.com/oklai/koala/blob/master/LICENSE" - "https://github.com/oklai/koala/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/oklai/koala/releases/download/v2.3.0/Koala.dmg + credit: Koala contributors + license: Apache-2.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Koala is a GUI application for compiling Less, Sass, Compass and CoffeeScript files. It watches the source files and recompiles them in the background on every change, lets you set compiler options per file, compresses the output, and shows compile errors as notifications. The project was built on node-webkit and runs on Windows, Linux and macOS. diff --git a/content/apps/ledge/assets/icon.png b/content/apps/ledge/assets/icon.png new file mode 100644 index 00000000..ad788e21 Binary files /dev/null and b/content/apps/ledge/assets/icon.png differ diff --git a/content/apps/ledge/index.md b/content/apps/ledge/index.md index a702f092..2d746fca 100644 --- a/content/apps/ledge/index.md +++ b/content/apps/ledge/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/egemertbalcik/Ledge/blob/main/LICENSE" - "https://github.com/egemertbalcik/Ledge/releases" - "https://ledgeapp.dev" +assets: + - path: ./assets/icon.png + source: https://github.com/egemertbalcik/Ledge/releases/download/v1.3.1/Ledge-1.3.1.dmg + credit: Ledge contributors + license: GPL-3.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Ledge uses the MacBook notch as a live status area, in the spirit of the iPhone's Dynamic Island. It shows now playing with controls, a timer, your next calendar meeting with a camera preview before a call, weather, notes, Keep Awake and volume or brightness readouts. It stays quiet until something changes. It suits MacBook users who want glanceable status in the notch and no separate menu bar widgets. diff --git a/content/apps/lemma/assets/icon.png b/content/apps/lemma/assets/icon.png new file mode 100644 index 00000000..461181cd Binary files /dev/null and b/content/apps/lemma/assets/icon.png differ diff --git a/content/apps/lemma/index.md b/content/apps/lemma/index.md index 6088cbbe..54a2a1c1 100644 --- a/content/apps/lemma/index.md +++ b/content/apps/lemma/index.md @@ -19,6 +19,12 @@ sources: - "https://github.com/fus3r/lemma" - "https://github.com/fus3r/lemma/blob/main/LICENSE" - "https://github.com/fus3r/lemma/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/fus3r/lemma/releases/download/v3.6.0/Lemma-3.6.0.dmg + credit: Lemma contributors + license: GPL-3.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Lemma opens PDFs of mathematics, statistics and computer science papers and textbooks, and makes their references navigable. Hover a theorem, equation or citation to preview it, or click to open it beside the line you are reading. It shows an outline of definitions, theorems and proofs, lets you fold proofs so you can try them first, and checks derivations you write in LaTeX. Notes and highlights stay tied to the passage, and can be exported to Markdown, Anki or Jupyter. It suits students and researchers who read dense technical books. The README says the app has no account and no analytics, and goes online only for actions you choose, such as downloading a free book or searching arXiv. diff --git a/content/apps/lilo/assets/icon.png b/content/apps/lilo/assets/icon.png new file mode 100644 index 00000000..f3cb7ef6 Binary files /dev/null and b/content/apps/lilo/assets/icon.png differ diff --git a/content/apps/lilo/index.md b/content/apps/lilo/index.md index 783de744..2e504262 100644 --- a/content/apps/lilo/index.md +++ b/content/apps/lilo/index.md @@ -22,6 +22,12 @@ sources: - "https://github.com/Alexays/Lilo/blob/main/LICENSE" - "https://github.com/Alexays/Lilo/releases" - "https://getlilo.app" +assets: + - path: ./assets/icon.png + source: https://github.com/Alexays/Lilo/releases/download/v0.17.0/Lilo.dmg + credit: Lilo contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Lilo is a Mac browser that keeps Arc's sidebar layout: Spaces with their own profiles, pinned tabs, folders and split view. It runs on WebKit, the engine that ships with macOS, rather than Chromium, and it still installs Chrome Web Store extensions. Terminal tabs sit beside your web pages. A built-in MCP server lets AI agents such as Claude Code or Codex use the browser in their own Space, and the app asks you before an agent sends, pays, deletes or publishes something. diff --git a/content/apps/lockin-focus/assets/icon.png b/content/apps/lockin-focus/assets/icon.png new file mode 100644 index 00000000..449896ed Binary files /dev/null and b/content/apps/lockin-focus/assets/icon.png differ diff --git a/content/apps/lockin-focus/index.md b/content/apps/lockin-focus/index.md index abd7ff92..23fb967f 100644 --- a/content/apps/lockin-focus/index.md +++ b/content/apps/lockin-focus/index.md @@ -19,6 +19,12 @@ sources: - "https://github.com/sigma-prog/lockin" - "https://github.com/sigma-prog/lockin/blob/main/LICENSE" - "https://github.com/sigma-prog/lockin/releases/latest" +assets: + - path: ./assets/icon.png + source: https://github.com/sigma-prog/lockin/releases/download/v1.0.0/Lockin.zip + credit: Lockin contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Lockin closes distracting websites and apps during focus sessions. Its README says a launchd supervisor restarts it within a second if it is force-quit. Blocked sites are closed by reading the tab addresses in Safari or Chrome through Apple Events, so the app does not need a VPN, proxy or browser extension. It suits people who want a free blocker they cannot quickly switch off in the middle of a session. diff --git a/content/apps/lume/assets/icon.png b/content/apps/lume/assets/icon.png new file mode 100644 index 00000000..ce9820da Binary files /dev/null and b/content/apps/lume/assets/icon.png differ diff --git a/content/apps/lume/index.md b/content/apps/lume/index.md index f10e426a..57ab5403 100644 --- a/content/apps/lume/index.md +++ b/content/apps/lume/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/bilipp/Lume/blob/main/LICENSE" - "https://github.com/bilipp/Lume/releases/tag/v3.0.0" - "https://getlume.org" +assets: + - path: ./assets/icon.png + source: https://github.com/bilipp/Lume/releases/download/v3.0.0/Lume-v3.0.0-macOS-Sideload.zip + credit: Lume contributors + license: AGPL-3.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Lume is a native player for Apple platforms that connects to an Xtream Codes account or imports M3U and M3U8 playlists that you supply. It indexes the catalog locally for browsing and offers live TV with a program guide, catch-up where the provider supports it, a Multi-View grid of up to four channels, and watch progress with optional Trakt, Simkl and MDBList sync. Playback can use VLCKit, KSPlayer, AVPlayer, Lume's own beta engine or the optional AetherEngine. The project says it ships with no channels or content of its own. diff --git a/content/apps/lumilo/assets/icon.png b/content/apps/lumilo/assets/icon.png new file mode 100644 index 00000000..7759f6b2 Binary files /dev/null and b/content/apps/lumilo/assets/icon.png differ diff --git a/content/apps/lumilo/index.md b/content/apps/lumilo/index.md index 4408c09b..186a6eb0 100644 --- a/content/apps/lumilo/index.md +++ b/content/apps/lumilo/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/kotuke/lumilo" - "https://github.com/kotuke/lumilo/blob/main/LICENSE" - "https://github.com/kotuke/lumilo/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/kotuke/lumilo/releases/download/v0.4.2/Lumilo.0.4.2.arm64.dmg + credit: Lumilo contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Lumilo is a menu bar panel for running a local language model server on an Apple silicon Mac. It starts and stops Splash, llama.cpp or TensorFold, shows whether the server is loading, ready or generating, and charts memory use and tokens per second. It can search Hugging Face for models, shows whether each variant fits in memory, and can launch coding agents against the local server. It suits people who run models on their own Mac and want the server state at a glance. diff --git a/content/apps/manta/assets/icon.png b/content/apps/manta/assets/icon.png new file mode 100644 index 00000000..0e91b82f Binary files /dev/null and b/content/apps/manta/assets/icon.png differ diff --git a/content/apps/manta/index.md b/content/apps/manta/index.md index c552f65d..10dfae1c 100644 --- a/content/apps/manta/index.md +++ b/content/apps/manta/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/hql287/Manta" - "https://github.com/hql287/Manta/blob/master/LICENSE" - "https://github.com/hql287/Manta/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/hql287/Manta/releases/download/v1.1.4/Manta-1.1.4-mac.zip + credit: Manta contributors + license: LGPL-3.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Manta makes invoices, estimates and receipts from templates you can customize. You can switch fields on and off, save defaults, drag line items into order, add custom statuses, use SVG logos and export PDFs for print or email. It suits freelancers and small sellers who issue invoices now and then and do not want a web account or a bookkeeping suite. The README says it is free and that financial data stays on your machine. diff --git a/content/apps/mcpock/assets/icon.png b/content/apps/mcpock/assets/icon.png new file mode 100644 index 00000000..5889a9bd Binary files /dev/null and b/content/apps/mcpock/assets/icon.png differ diff --git a/content/apps/mcpock/index.md b/content/apps/mcpock/index.md index 3b526918..9574a98b 100644 --- a/content/apps/mcpock/index.md +++ b/content/apps/mcpock/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/aka-kika/mcpock/blob/main/LICENSE" - "https://github.com/aka-kika/mcpock/releases" - "https://mcpock.com" +assets: + - path: ./assets/icon.png + source: https://github.com/aka-kika/mcpock/releases/download/v1.13.0/mcpock.dmg + credit: mcpock contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- mcpock finds the MCP servers listed in the config files of agents such as Claude Code, Cursor, Codex and Goose, starts each one the way the agent would, and reports which are broken, slow, waiting for a sign-in or set up differently from one agent to the next. It never edits those config files. A small read-only MCP server inside the app lets an agent ask for the status instead of pasting errors. It suits people who run several coding agents and want one place to see why a tool stopped working. diff --git a/content/apps/melingo/assets/icon.png b/content/apps/melingo/assets/icon.png new file mode 100644 index 00000000..dad8329b Binary files /dev/null and b/content/apps/melingo/assets/icon.png differ diff --git a/content/apps/melingo/index.md b/content/apps/melingo/index.md index 42f711b3..6f9be49d 100644 --- a/content/apps/melingo/index.md +++ b/content/apps/melingo/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/timurverevkin/Melingo" - "https://github.com/timurverevkin/Melingo/blob/main/LICENSE" - "https://github.com/timurverevkin/Melingo/releases/latest" +assets: + - path: ./assets/icon.png + source: https://github.com/timurverevkin/Melingo/releases/download/MLXFIX/Melingo-0.3.2.dmg + credit: Melingo contributors + license: Apache-2.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Melingo is built around reading. You import text from the web, pasted content, PDFs, EPUBs, Markdown and other sources, tap a word to look it up and make a card, and review cards with FSRS scheduling. It also has a dictation study mode, and YouTube videos with timed subtitles can be added to the library. Your library and cards stay on your Mac in a Documents folder. It suits learners who already read in the language they are studying and want their vocabulary to come from that reading. diff --git a/content/apps/meraline/assets/icon.png b/content/apps/meraline/assets/icon.png new file mode 100644 index 00000000..83a0bdae Binary files /dev/null and b/content/apps/meraline/assets/icon.png differ diff --git a/content/apps/meraline/index.md b/content/apps/meraline/index.md index 48b9ee2e..57ba257f 100644 --- a/content/apps/meraline/index.md +++ b/content/apps/meraline/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/Meldiron/meraline" - "https://github.com/Meldiron/meraline/blob/main/LICENSE" - "https://github.com/Meldiron/meraline/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/Meldiron/meraline/releases/download/v1.14.0/Meraline-1.14.0.dmg + credit: Meraline contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Meraline opens a small glass window over any app or full-screen space when you press a shortcut, streams the answer as it is written, and lets you ask follow-ups. It can use Apple Intelligence on a supported Mac, API-key providers such as Anthropic, OpenAI, Google Gemini and OpenRouter, local models through Ollama or LM Studio, and command-line agents such as Claude Code and Codex. It can attach selected text, files and screenshots, and a Decision mode answers yes/no or ranked questions. Chats are kept in memory and removed 30 minutes after the last message, which suits quick questions rather than long-term notes. diff --git a/content/apps/mfix/assets/icon.png b/content/apps/mfix/assets/icon.png new file mode 100644 index 00000000..2cb97c7a Binary files /dev/null and b/content/apps/mfix/assets/icon.png differ diff --git a/content/apps/mfix/index.md b/content/apps/mfix/index.md index fbe9cd43..510314b3 100644 --- a/content/apps/mfix/index.md +++ b/content/apps/mfix/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/Zingzy/mFix" - "https://github.com/Zingzy/mFix/blob/main/LICENSE" - "https://github.com/Zingzy/mFix/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/Zingzy/mFix/releases/download/v0.1.2/mFix.dmg + credit: mFix contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- mFix brings Windows 11 window behavior to the Mac: Windows-style keys for snapping windows to halves and quarters, a Snap Assist step that offers windows for the empty half, an Alt+Tab switcher that shows a preview of every window, and a few other Windows habits. It is for people who switch between Windows and macOS and want the same keys on both. The README says the Windows borrowing is deliberate, and the app is free and MIT-licensed. diff --git a/content/apps/mojito/assets/icon.png b/content/apps/mojito/assets/icon.png new file mode 100644 index 00000000..5ae2304d Binary files /dev/null and b/content/apps/mojito/assets/icon.png differ diff --git a/content/apps/mojito/index.md b/content/apps/mojito/index.md index bcb72192..2e6f4f10 100644 --- a/content/apps/mojito/index.md +++ b/content/apps/mojito/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/wr/mojito/blob/main/LICENSE" - "https://github.com/wr/mojito/releases/tag/v1.10.1" - "https://mojito.wells.ee" +assets: + - path: ./assets/icon.png + source: https://github.com/wr/mojito/releases/download/v1.10.1/Mojito.dmg + credit: Mojito contributors + license: AGPL-3.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Mojito autocompletes shortcodes in any app. A single colon followed by a name picks an emoji, a double colon finds symbols such as arrows and currency signs, and a triple colon searches GIFs from KLIPY, which are pasted where you are typing. It learns your favourites, converts emoticons such as `:D`, and skips apps that have their own shortcodes, such as Slack, Discord and terminals. It suits anyone who uses emoji and symbols often. diff --git a/content/apps/mp4flow/assets/icon.png b/content/apps/mp4flow/assets/icon.png new file mode 100644 index 00000000..993d5b53 Binary files /dev/null and b/content/apps/mp4flow/assets/icon.png differ diff --git a/content/apps/mp4flow/index.md b/content/apps/mp4flow/index.md index 67c6b17b..57744af5 100644 --- a/content/apps/mp4flow/index.md +++ b/content/apps/mp4flow/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/ixiehao/MP4Flow/blob/main/LICENSE" - "https://github.com/ixiehao/MP4Flow/releases" - "https://ixiehao.github.io/MP4Flow/" +assets: + - path: ./assets/icon.png + source: https://github.com/ixiehao/MP4Flow/releases/download/v1.5.1/MP4Flow-1.5.1-arm64.dmg + credit: MP4Flow contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- MP4Flow converts video files to MP4 on your Mac. Smart Convert copies compatible video without re-encoding and uses hardware acceleration when it is available. You can merge clips in queue order, trim, crop, rotate, correct the aspect ratio, brighten and lightly denoise, set a target size, and pick audio tracks and subtitles. The queue and settings survive a relaunch. The README says all processing stays on the Mac and no videos are uploaded. It suits people who need batch MP4 exports without an editor. diff --git a/content/apps/mugshot/assets/icon.png b/content/apps/mugshot/assets/icon.png new file mode 100644 index 00000000..4ac9affd Binary files /dev/null and b/content/apps/mugshot/assets/icon.png differ diff --git a/content/apps/mugshot/index.md b/content/apps/mugshot/index.md index e546ba3c..ee6a2332 100644 --- a/content/apps/mugshot/index.md +++ b/content/apps/mugshot/index.md @@ -19,6 +19,12 @@ sources: - "https://github.com/Lorenzo-Coslado/macos-faceid" - "https://github.com/Lorenzo-Coslado/macos-faceid/blob/main/LICENSE" - "https://github.com/Lorenzo-Coslado/macos-faceid/releases/latest" +assets: + - path: ./assets/icon.png + source: https://github.com/Lorenzo-Coslado/macos-faceid/releases/download/v1.3.0/Mugshot.dmg + credit: Mugshot contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Mugshot checks your face through the webcam when sudo asks for a password. It can also unlock a session that is already logged in and locked. A HUD grows out of the camera notch while it scans and falls back to your password when recognition fails. Recognition runs on the Mac with OpenCV's YuNet and SFace models. Enrolled face data stays in `~/Library/Application Support/faceid`, and camera frames are not uploaded. diff --git a/content/apps/nightwatch/assets/icon.png b/content/apps/nightwatch/assets/icon.png new file mode 100644 index 00000000..20898fa7 Binary files /dev/null and b/content/apps/nightwatch/assets/icon.png differ diff --git a/content/apps/nightwatch/index.md b/content/apps/nightwatch/index.md index f614be16..8383bd27 100644 --- a/content/apps/nightwatch/index.md +++ b/content/apps/nightwatch/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/rsutcliffe/nightwatch/blob/main/LICENSE" - "https://github.com/rsutcliffe/nightwatch/releases" - "https://delphi-dolphin.com/nightwatch" +assets: + - path: ./assets/icon.png + source: https://github.com/rsutcliffe/nightwatch/releases/download/v1.7.3/Nightwatch-1.7.3.dmg + credit: Nightwatch contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Nightwatch is a menu-bar app for planning astrophotography. It combines weather and sky forecasts for your location, finds the nights with a clear and dark window, and ranks the targets you have chosen by when they are best placed. It also offers a desktop widget, alerts before a good window opens, and opt-in modes for aurora alerts and bright nights when darkness never arrives. The same app is on the App Store for Mac, iPhone and iPad, where the README says it is one free purchase; the disk image is the other way to get the Mac version. diff --git a/content/apps/nonja/assets/icon.png b/content/apps/nonja/assets/icon.png new file mode 100644 index 00000000..5c50d110 Binary files /dev/null and b/content/apps/nonja/assets/icon.png differ diff --git a/content/apps/nonja/index.md b/content/apps/nonja/index.md index 02fe3262..d8bcffd5 100644 --- a/content/apps/nonja/index.md +++ b/content/apps/nonja/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/piro0919/nonja/blob/main/LICENSE" - "https://github.com/piro0919/nonja/releases" - "https://nonja.kkweb.io" +assets: + - path: ./assets/icon.png + source: https://github.com/piro0919/nonja/releases/download/v0.2.6/Nonja-0.2.6.dmg + credit: Nonja contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Nonja lets you turn off notification banners and still see what arrived. It reads notifications from Notification Center, groups them by app, lets you clear one app's notifications in a single click, and opens the source when you select an entry. Nothing appears on screen until you open its menu bar item. It is for people who want notifications out of their way without losing them. diff --git a/content/apps/notable/assets/icon.png b/content/apps/notable/assets/icon.png new file mode 100644 index 00000000..b5e85660 Binary files /dev/null and b/content/apps/notable/assets/icon.png differ diff --git a/content/apps/notable/index.md b/content/apps/notable/index.md index 91beee11..77f7752b 100644 --- a/content/apps/notable/index.md +++ b/content/apps/notable/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/jmcfarlane/notable" - "https://github.com/jmcfarlane/notable/blob/main/LICENSE" - "https://github.com/jmcfarlane/notable/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/jmcfarlane/notable/releases/download/v0.4.0/notable-v0.4.0.darwin-amd64.zip + credit: Notable contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Notable is a small note-taking app that keeps your notes on your own computer. It searches tags, tag prefixes and full text as you type, opens several notes in tabs, autosaves each note, and can encrypt individual notes. It suits people who want a simple, keyboard-friendly notebook rather than a large knowledge base. diff --git a/content/apps/notchpad/assets/icon.png b/content/apps/notchpad/assets/icon.png new file mode 100644 index 00000000..1236518e Binary files /dev/null and b/content/apps/notchpad/assets/icon.png differ diff --git a/content/apps/notchpad/index.md b/content/apps/notchpad/index.md index b869233c..3a529052 100644 --- a/content/apps/notchpad/index.md +++ b/content/apps/notchpad/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/BirdyTheDev/notchpad" - "https://github.com/BirdyTheDev/notchpad/blob/main/LICENSE" - "https://github.com/BirdyTheDev/notchpad/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/BirdyTheDev/notchpad/releases/download/v2.2.0/Notchpad-2.2.0.dmg + credit: Notchpad contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Notchpad turns the area around the MacBook notch into a panel of modules you choose and order yourself. Closed, it shows readouts such as battery, CPU, memory, network speed or the next calendar event. Hovering opens tabs for live Claude Code sessions with token usage, a file shelf, Unity projects, MCP server health, a keep-awake switch, shell command shortcuts and a pomodoro timer. It is for people who use Claude Code all day and want its status and their system stats in one place at the top of the screen. diff --git a/content/apps/oliv/assets/icon.png b/content/apps/oliv/assets/icon.png new file mode 100644 index 00000000..5204773b Binary files /dev/null and b/content/apps/oliv/assets/icon.png differ diff --git a/content/apps/oliv/index.md b/content/apps/oliv/index.md index b1c601d6..7d4bb623 100644 --- a/content/apps/oliv/index.md +++ b/content/apps/oliv/index.md @@ -23,6 +23,12 @@ sources: - "https://github.com/chayapats/oliv/blob/main/LICENSE" - "https://github.com/chayapats/oliv/releases" - "https://chayapats.github.io/oliv/" +assets: + - path: ./assets/icon.png + source: https://github.com/chayapats/oliv/blob/main/ios/App/Assets.xcassets/AppIcon.appiconset/AppIcon.png + credit: OLIV contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- OLIV is a dictation app for people who speak Thai and English in the same sentence. You hold a key, speak, and it pastes the text where your cursor is. Speech recognition uses Typhoon Whisper Turbo on the Mac, and a small local language model changes Thai-spelled English tech words back into English. The project's own test set reports about 98% meaning match with cleanup on; the figures come from one speaker's recordings. diff --git a/content/apps/omnimac/assets/icon.png b/content/apps/omnimac/assets/icon.png new file mode 100644 index 00000000..68e9785e Binary files /dev/null and b/content/apps/omnimac/assets/icon.png differ diff --git a/content/apps/omnimac/index.md b/content/apps/omnimac/index.md index e8fe3aa8..8f2e1e0a 100644 --- a/content/apps/omnimac/index.md +++ b/content/apps/omnimac/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/BySergiMM/OmniMac/blob/main/LICENSE" - "https://github.com/BySergiMM/OmniMac/releases" - "https://bysergimm.github.io/OmniMac/" +assets: + - path: ./assets/icon.png + source: https://github.com/BySergiMM/OmniMac/releases/download/v0.5.9/OmniMac-0.5.9.zip + credit: OmniMac contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- OmniMac puts several small Mac utilities in one menu bar process: a notch island, per-app volume with a 10-band equaliser, window tools, an app cleaner that removes leftovers, a helper for disk-image downloads and others. Each module can be switched off, and a switched-off module leaves the menu. It suits people who want these tools without installing a separate app for each. The README reports about 16 MB of memory and very low idle CPU use, measured by the author. diff --git a/content/apps/overdrive/assets/icon.png b/content/apps/overdrive/assets/icon.png new file mode 100644 index 00000000..b82800f8 Binary files /dev/null and b/content/apps/overdrive/assets/icon.png differ diff --git a/content/apps/overdrive/index.md b/content/apps/overdrive/index.md index c0cd1746..9573d645 100644 --- a/content/apps/overdrive/index.md +++ b/content/apps/overdrive/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/skhaz/overdrive" - "https://github.com/skhaz/overdrive/blob/main/LICENSE" - "https://github.com/skhaz/overdrive/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/skhaz/overdrive/releases/download/v1.0.74/Overdrive.zip + credit: Overdrive contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Overdrive plays the music already on your Mac without an import step: add a folder and its albums appear, and new files show up automatically. It has lyrics that sync to the song and can be edited, a same-volume setting, discovery picks from your library, per-song play counts and playlists. Last.fm scrobbling and loved tracks are optional. It is for people who keep a local music library and want a player that never changes their files. diff --git a/content/apps/pinterm/assets/icon.png b/content/apps/pinterm/assets/icon.png new file mode 100644 index 00000000..7ecc1656 Binary files /dev/null and b/content/apps/pinterm/assets/icon.png differ diff --git a/content/apps/pinterm/index.md b/content/apps/pinterm/index.md index f4f445e0..65131dd0 100644 --- a/content/apps/pinterm/index.md +++ b/content/apps/pinterm/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/taotao7/PinTerm" - "https://github.com/taotao7/PinTerm/blob/main/LICENSE" - "https://github.com/taotao7/PinTerm/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/taotao7/PinTerm/releases/download/v0.4.2/PinTerm-0.4.2-macos-arm64.zip + credit: PinTerm contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- PinTerm puts terminals in small, independent windows managed from the menu bar. Each window runs its own shell or command in a real pseudo-terminal, rendered by the Ghostty engine (libghostty), so it reads your Ghostty configuration unless you point it at another file. Windows can be pinned above other apps, resized from any edge and restored after a restart. Presets open btop, htop or a calendar. It suits a status terminal or a development server you want to keep in view while you work elsewhere. diff --git a/content/apps/playback/assets/icon.png b/content/apps/playback/assets/icon.png new file mode 100644 index 00000000..6e7595bb Binary files /dev/null and b/content/apps/playback/assets/icon.png differ diff --git a/content/apps/playback/index.md b/content/apps/playback/index.md index 6f202ac8..41a8ee69 100644 --- a/content/apps/playback/index.md +++ b/content/apps/playback/index.md @@ -22,6 +22,12 @@ sources: - "https://github.com/mafintosh/playback/blob/master/LICENSE" - "https://github.com/mafintosh/playback/releases" - "https://mafintosh.github.io/playback/" +assets: + - path: ./assets/icon.png + source: https://github.com/mafintosh/playback/releases/download/v1.6.0/Playback.app.zip + credit: Playback contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Playback is a video player built with Electron and Node.js. It plays MP4 and WebM files and can stream them to Chromecast on your network. The 2015 build also offers torrent, YouTube and IPFS links, but the tracker and gateway it relies on no longer answer, so treat those as unlikely to work. It suits people who want a basic player for local files. diff --git a/content/apps/plugd/assets/icon.png b/content/apps/plugd/assets/icon.png new file mode 100644 index 00000000..bcdc7fcb Binary files /dev/null and b/content/apps/plugd/assets/icon.png differ diff --git a/content/apps/plugd/index.md b/content/apps/plugd/index.md index c8e20b85..b40b2966 100644 --- a/content/apps/plugd/index.md +++ b/content/apps/plugd/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/lncch/Plugd/blob/main/LICENSE" - "https://github.com/lncch/Plugd/releases/latest" - "https://plugd.almoayyad.dev" +assets: + - path: ./assets/icon.png + source: https://github.com/lncch/Plugd/releases/download/v0.3.7/Plugd.dmg + credit: Plugd contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Plugd sets up Wine and FORScan, the Windows diagnostic software used for Ford, Lincoln, Mercury and Mazda cars, so it can run on a Mac. It downloads the official FORScan installer from forscan.org, maps a USB or paired Bluetooth OBD-II adapter to the serial port FORScan expects, and keeps license keys and As-Built backups in a folder that FORScan sees as drive O:. It also adds a menu bar status item, a live dashboard that can be recorded to CSV, and warnings for a low car battery or a missing backup. It is for owners who would otherwise need a Windows PC to change settings. diff --git a/content/apps/porter-for-claude-desktop/assets/icon.png b/content/apps/porter-for-claude-desktop/assets/icon.png new file mode 100644 index 00000000..c219e291 Binary files /dev/null and b/content/apps/porter-for-claude-desktop/assets/icon.png differ diff --git a/content/apps/porter-for-claude-desktop/index.md b/content/apps/porter-for-claude-desktop/index.md index c49b8bfc..d1c2d1b8 100644 --- a/content/apps/porter-for-claude-desktop/index.md +++ b/content/apps/porter-for-claude-desktop/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/matteogilioli/porter-for-claude-desktop/blob/main/LICENSE" - "https://github.com/matteogilioli/porter-for-claude-desktop/releases" - "https://matteogilioli.github.io/porter-for-claude-desktop/" +assets: + - path: ./assets/icon.png + source: https://github.com/matteogilioli/porter-for-claude-desktop/releases/download/v1.2.1/Porter.dmg + credit: Porter for Claude Desktop contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Porter is a menu bar app for the Code tab of Claude Desktop. When one account reaches its usage limit, it moves the stopped Claude Code sessions to another account so you can pick up where you left off. It can also run several Claude Desktop profiles at once, each signed in to a different account, and it lists, archives, restores, deletes and moves sessions and project folders. Before every change it saves a backup, and the same actions are available from the command line. It is for people with more than one Claude account who work in Claude Code sessions. diff --git a/content/apps/puppyone/assets/icon.png b/content/apps/puppyone/assets/icon.png new file mode 100644 index 00000000..ee636bd9 Binary files /dev/null and b/content/apps/puppyone/assets/icon.png differ diff --git a/content/apps/puppyone/index.md b/content/apps/puppyone/index.md index ec53a3aa..be88f7c3 100644 --- a/content/apps/puppyone/index.md +++ b/content/apps/puppyone/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/puppyone-ai/puppyone/blob/main/LICENSE" - "https://github.com/puppyone-ai/puppyone/releases" - "https://www.puppyone.ai/en/download" +assets: + - path: ./assets/icon.png + source: https://github.com/puppyone-ai/puppyone/releases/download/v0.4.2/puppyone-0.4.2-arm64.dmg + credit: puppyone contributors + license: Apache-2.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- puppyone is a folder for AI agents. You open a folder on your computer, and local agents, either in their own apps or in puppyone's built-in agent, can read and write its files. The folder can also be put in puppyone Cloud, which the project hosts by default, so agents such as ChatGPT (Web) and Manus can reach the same files through MCP, the CLI or SSH. Every folder runs on Git, so a file or the whole folder can be reverted to an earlier version. It suits people who want several agents to work on the same documents. diff --git a/content/apps/qlaunch/assets/icon.png b/content/apps/qlaunch/assets/icon.png new file mode 100644 index 00000000..4c35c654 Binary files /dev/null and b/content/apps/qlaunch/assets/icon.png differ diff --git a/content/apps/qlaunch/index.md b/content/apps/qlaunch/index.md index ff6f1e81..f6fdccae 100644 --- a/content/apps/qlaunch/index.md +++ b/content/apps/qlaunch/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/qzrzz/QLaunch/blob/main/LICENSE" - "https://github.com/qzrzz/QLaunch/releases" - "https://qzrzz.com/QLaunch/" +assets: + - path: ./assets/icon.png + source: https://github.com/qzrzz/QLaunch/releases/download/v1.0.29/QLaunch-1.0.29.dmg + credit: QLaunch contributors + license: GPL-3.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- QLaunch shows your installed apps as a full-screen grid, a replacement for the Launchpad view that its website says Apple dropped in macOS 26. It draws icons with Metal, targets animations up to 120 Hz, searches with Pinyin so Chinese-language users can type without switching input methods, and offers an infinite-canvas layout. It suits people who want the classic app grid to look sharp and respond quickly. diff --git a/content/apps/rascal/assets/icon.png b/content/apps/rascal/assets/icon.png new file mode 100644 index 00000000..8b99aea5 Binary files /dev/null and b/content/apps/rascal/assets/icon.png differ diff --git a/content/apps/rascal/index.md b/content/apps/rascal/index.md index 4edf1aee..f7ee17b7 100644 --- a/content/apps/rascal/index.md +++ b/content/apps/rascal/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/chang-07/rascal/blob/main/LICENSE" - "https://github.com/chang-07/rascal/releases/tag/v0.1.6" - "https://chang-07.github.io/rascal/" +assets: + - path: ./assets/icon.png + source: https://github.com/chang-07/rascal/releases/download/v0.1.6/Rascal-arm64.dmg + credit: Rascal contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Rascal is a file manager for macOS that is built around the keyboard. It offers dual and multi-pane layouts, a fuzzy command palette on Command-Shift-P, vim-style navigation, a live treemap of the folder you are in, and a terminal drawer that follows the active pane. It reads and writes the same Finder tags as Finder, and version 0.1.6 added SFTP browsing of remote servers. It is plain AppKit with no third-party Swift packages, and the project states that it has no telemetry and no accounts. diff --git a/content/apps/rebind/assets/icon.png b/content/apps/rebind/assets/icon.png new file mode 100644 index 00000000..66ad12b4 Binary files /dev/null and b/content/apps/rebind/assets/icon.png differ diff --git a/content/apps/rebind/index.md b/content/apps/rebind/index.md index 7ca79753..c257d396 100644 --- a/content/apps/rebind/index.md +++ b/content/apps/rebind/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/Blinks44/rebind/blob/main/LICENSE" - "https://github.com/Blinks44/rebind/releases" - "https://rebind.moduix.dev" +assets: + - path: ./assets/icon.png + source: https://github.com/Blinks44/rebind/releases/download/v1.3.2/Rebind.dmg + credit: Rebind contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Rebind maps keyboard keys, middle and extra mouse buttons, mouse-wheel steps and some trackpad or Magic Mouse taps to actions. Actions include keyboard shortcuts, window halves and quarters, app switching, media keys, volume, Apple Shortcuts and Mission Control. Bindings are kept in profiles and can apply to all apps or only one. It suits people who want a side button or a modifier key to do something specific, and it runs from the menu bar with a visible paused state. diff --git a/content/apps/reprise/assets/icon.png b/content/apps/reprise/assets/icon.png new file mode 100644 index 00000000..93afbc73 Binary files /dev/null and b/content/apps/reprise/assets/icon.png differ diff --git a/content/apps/reprise/index.md b/content/apps/reprise/index.md index 32e74e29..00a93dc3 100644 --- a/content/apps/reprise/index.md +++ b/content/apps/reprise/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/nikiomori/reprise" - "https://github.com/nikiomori/reprise/blob/main/LICENSE" - "https://github.com/nikiomori/reprise/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/nikiomori/reprise/releases/download/v0.7.1/Reprise-0.7.1.zip + credit: Reprise contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Reprise records calls. It notices when a call starts in Zoom, Google Meet, Microsoft Teams, FaceTime and other apps, asks whether to record, and captures your microphone and the Mac's sound into one file, with optional screen recording. It can save each side separately, mark moments, trim recordings and name a call after its calendar event. Each call is a folder of ordinary audio and text files in `~/Movies/Reprise`. Transcription is optional: cloud services you configure receive the audio, while a local server such as Refrain keeps it on your Mac. It suits people who need a record of calls they take on the Mac. diff --git a/content/apps/robo-3t/assets/icon.png b/content/apps/robo-3t/assets/icon.png new file mode 100644 index 00000000..2ea6540a Binary files /dev/null and b/content/apps/robo-3t/assets/icon.png differ diff --git a/content/apps/robo-3t/index.md b/content/apps/robo-3t/index.md index bd6f7eed..064e6cff 100644 --- a/content/apps/robo-3t/index.md +++ b/content/apps/robo-3t/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/Studio3T/robomongo" - "https://github.com/Studio3T/robomongo/blob/master/LICENSE" - "https://github.com/Studio3T/robomongo/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/Studio3T/robomongo/blob/master/install/macosx/robomongo.icns + credit: Robo 3T contributors + license: GPL-3.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Robo 3T, formerly Robomongo, is a MongoDB desktop client built around the mongo shell. You run shell commands in tabs and browse databases, collections and documents in the same window. Studio 3T acquired the project in 2017, and the README now says it is no longer being developed. diff --git a/content/apps/satf/assets/icon.png b/content/apps/satf/assets/icon.png new file mode 100644 index 00000000..64835fc7 Binary files /dev/null and b/content/apps/satf/assets/icon.png differ diff --git a/content/apps/satf/index.md b/content/apps/satf/index.md index 999ae689..db48547d 100644 --- a/content/apps/satf/index.md +++ b/content/apps/satf/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/tran-minh-khoi/SATF/blob/main/LICENSE" - "https://github.com/tran-minh-khoi/SATF/releases/latest" - "https://mktechvn.com/en/satf" +assets: + - path: ./assets/icon.png + source: https://github.com/tran-minh-khoi/SATF/releases/download/v1.3.0/SATF-1.3.0.dmg + credit: SATF contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- SATF is a drag-and-drop file converter for macOS and Windows. Drag a file, shake it or press a shortcut, and a radial menu opens under the cursor with conversion formats, quick edits such as rotate, resize and compress, a copy action and a shelf for later. It converts images, PDFs, Office documents, video and audio, merges several files into one PDF, and extracts archives. Conversions run on your computer, and optional add-ons such as LibreOffice, and FFmpeg on Windows, download only when you ask for them. diff --git a/content/apps/search/assets/icon.png b/content/apps/search/assets/icon.png new file mode 100644 index 00000000..52ee48e2 Binary files /dev/null and b/content/apps/search/assets/icon.png differ diff --git a/content/apps/search/index.md b/content/apps/search/index.md index 3ea2c122..fd9a2f00 100644 --- a/content/apps/search/index.md +++ b/content/apps/search/index.md @@ -24,6 +24,12 @@ sources: - "https://github.com/driceroland/Search/blob/main/LICENSE" - "https://github.com/driceroland/Search/releases" - "https://searchbrowser.app" +assets: + - path: ./assets/icon.png + source: https://github.com/driceroland/Search/releases/download/v1.0.9/Search.dmg + credit: Search contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Search is a minimal browser from the design studio Office Commun. It runs on the WebKit engine that ships with macOS, so the app is only a few megabytes. The window holds a row of tabs, along the top or down the left side, and the page; one field takes both addresses and search terms. Ads and trackers are blocked at the network level by default, any page element can be hidden per site for good, and there are reading mode, a floating video window, split view and private tabs. diff --git a/content/apps/sevoflurane/assets/icon.png b/content/apps/sevoflurane/assets/icon.png new file mode 100644 index 00000000..df7f33e4 Binary files /dev/null and b/content/apps/sevoflurane/assets/icon.png differ diff --git a/content/apps/sevoflurane/index.md b/content/apps/sevoflurane/index.md index 344f4d51..9cff6586 100644 --- a/content/apps/sevoflurane/index.md +++ b/content/apps/sevoflurane/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/kageroumado/sevoflurane/blob/main/LICENSE" - "https://github.com/kageroumado/sevoflurane/releases/latest" - "https://kagerou.glass/sevoflurane/" +assets: + - path: ./assets/icon.png + source: https://github.com/kageroumado/sevoflurane/releases/download/v1.12.0/Sevoflurane-1.12.0.dmg + credit: Sevoflurane contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Sevoflurane runs the Windows Steam client hidden inside a Wine bottle and replaces its interface with native Mac windows for the library, store, friends and chats, while Steam notifications arrive through macOS. For each game you can pick the native macOS version where Steam offers one, or the Windows version, and older games can be resized and upscaled. It suits people who want their Steam library on a Mac. diff --git a/content/apps/siliconed/assets/icon.png b/content/apps/siliconed/assets/icon.png new file mode 100644 index 00000000..5f597819 Binary files /dev/null and b/content/apps/siliconed/assets/icon.png differ diff --git a/content/apps/siliconed/index.md b/content/apps/siliconed/index.md index f1f7184e..025a04e6 100644 --- a/content/apps/siliconed/index.md +++ b/content/apps/siliconed/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/gwenn-ha-dev/Siliconed/blob/main/LICENSE" - "https://github.com/gwenn-ha-dev/Siliconed/releases" - "https://gwenn-ha-dev.github.io/Siliconed/" +assets: + - path: ./assets/icon.png + source: https://github.com/gwenn-ha-dev/Siliconed/releases/download/v0.20/Siliconed-0.20.dmg + credit: Siliconed contributors + license: Apache-2.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Siliconed generates images from a text prompt and edits existing images from a written instruction, running open-weight diffusion models natively in Swift and Metal on the Mac. No Python server or cloud service is involved, and it works offline once a model is installed. You choose models inside the app, and each model's own license is shown before its download starts. It can vary a prompt, seed or LoRA across a grid of renders, import LoRAs from Civitai or Hugging Face, and be driven from a terminal with the `silicontrol` command. It suits people who want to render images on their own hardware and check results against reference implementations. diff --git a/content/apps/simbi/assets/icon.png b/content/apps/simbi/assets/icon.png new file mode 100644 index 00000000..07ad3aa5 Binary files /dev/null and b/content/apps/simbi/assets/icon.png differ diff --git a/content/apps/simbi/index.md b/content/apps/simbi/index.md index 77ea8e01..3305dc92 100644 --- a/content/apps/simbi/index.md +++ b/content/apps/simbi/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/predict-woo/simbi" - "https://github.com/predict-woo/simbi/blob/main/LICENSE" - "https://getsimbi.app" +assets: + - path: ./assets/icon.png + source: https://github.com/predict-woo/simbi/releases/download/v1.2.2/Simbi-1.2.2.dmg + credit: Simbi contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Simbi records your microphone and system audio into one timeline, detects speakers on the Mac and builds a live transcript while the meeting runs. When a recording ends, it can produce editable AI notes whose timestamps play back the matching audio. Each note is an ordinary folder with Markdown, a WebVTT transcript and the recording, so the files work in Finder, Obsidian or Git. It is meant for people who want meeting notes without a bot joining the call. diff --git a/content/apps/simplebanking/assets/icon.png b/content/apps/simplebanking/assets/icon.png new file mode 100644 index 00000000..caefdd68 Binary files /dev/null and b/content/apps/simplebanking/assets/icon.png differ diff --git a/content/apps/simplebanking/index.md b/content/apps/simplebanking/index.md index 02cfc5ca..412ed408 100644 --- a/content/apps/simplebanking/index.md +++ b/content/apps/simplebanking/index.md @@ -18,6 +18,12 @@ sources: - "https://github.com/klotzbrocken/simplebanking" - "https://github.com/klotzbrocken/simplebanking/blob/main/LICENSE" - "https://github.com/klotzbrocken/simplebanking/releases/latest" +assets: + - path: ./assets/icon.png + source: https://github.com/klotzbrocken/simplebanking/releases/download/v2.0.9/simplebanking-2.0.9.dmg + credit: simplebanking contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- simplebanking puts your current account balance in the menu bar, without decimals, and refreshes it automatically (every four hours by default). Clicking it opens a panel with recent transactions, categories and a monthly spending heatmap. Setup takes an IBAN and finds the bank, and it handles push-TAN and OAuth redirects. Connections run through YAXI's PSD2 Open Banking service to banks in Germany. It suits people who only want to check their balance quickly. diff --git a/content/apps/spawnsweep/assets/icon.png b/content/apps/spawnsweep/assets/icon.png new file mode 100644 index 00000000..86298ebc Binary files /dev/null and b/content/apps/spawnsweep/assets/icon.png differ diff --git a/content/apps/spawnsweep/index.md b/content/apps/spawnsweep/index.md index 6a31c972..d819badc 100644 --- a/content/apps/spawnsweep/index.md +++ b/content/apps/spawnsweep/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/samirmaikap/spawnsweep/blob/main/LICENSE" - "https://github.com/samirmaikap/spawnsweep/releases" - "https://samirmaikap.github.io/spawnsweep/" +assets: + - path: ./assets/icon.png + source: https://github.com/samirmaikap/spawnsweep/releases/download/v0.2.3/SpawnSweep.zip + credit: SpawnSweep contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- SpawnSweep finds what AI coding agents leave running or lying around: dev servers, ports held by old processes, simulators, Docker stacks and git worktrees. Its ports board lists every localhost listener with its project, git branch and the agent session that started it, and can free a port in one click. It is for developers who run tools such as Claude Code, Codex, Cursor, Gemini or Aider and want to tidy up after them. It is not a general Mac cleaner or an uninstaller. diff --git a/content/apps/spotask/assets/icon.png b/content/apps/spotask/assets/icon.png new file mode 100644 index 00000000..dd264c20 Binary files /dev/null and b/content/apps/spotask/assets/icon.png differ diff --git a/content/apps/spotask/index.md b/content/apps/spotask/index.md index 33928521..045212ce 100644 --- a/content/apps/spotask/index.md +++ b/content/apps/spotask/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/shiquda/SpotAsk/blob/main/LICENSE" - "https://github.com/shiquda/SpotAsk/releases" - "https://shiquda.github.io/SpotAsk/" +assets: + - path: ./assets/icon.png + source: https://github.com/shiquda/SpotAsk/releases/download/v0.3.4/SpotAsk-0.3.4-arm64.dmg + credit: SpotAsk contributors + license: AGPL-3.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- SpotAsk is a menu bar tool for quick questions. Press Option-Space, type a question and get an answer from the model you configure, or select text in any app and act on it. It can also hand a question off to ChatGPT or a local AI agent. It suits people who want a fast prompt box across apps and bring their own API keys instead of using a hosted account. diff --git a/content/apps/spotifly/assets/icon.png b/content/apps/spotifly/assets/icon.png new file mode 100644 index 00000000..c6375db2 Binary files /dev/null and b/content/apps/spotifly/assets/icon.png differ diff --git a/content/apps/spotifly/index.md b/content/apps/spotifly/index.md index bc686ddb..1952cb62 100644 --- a/content/apps/spotifly/index.md +++ b/content/apps/spotifly/index.md @@ -23,6 +23,12 @@ sources: - https://ralph.github.io/Spotifly/ - https://raw.githubusercontent.com/ralph/Spotifly/main/README.md - https://github.com/ralph/Spotifly/releases/tag/v1.4.0 +assets: + - path: ./assets/icon.png + source: https://github.com/ralph/Spotifly/releases/download/v1.4.0/Spotifly-1.4.0.zip + credit: Spotifly contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Spotifly plays Spotify on the Mac from a SwiftUI window and needs a Spotify Premium account. You connect it to your account once in the browser, and that single authorisation both signs you in and makes the Mac available as a Spotify Connect device. From then on you can play music on the Mac itself or use Spotifly to control playback on your phone and speakers. diff --git a/content/apps/squeegee/assets/icon.png b/content/apps/squeegee/assets/icon.png new file mode 100644 index 00000000..f976bb3c Binary files /dev/null and b/content/apps/squeegee/assets/icon.png differ diff --git a/content/apps/squeegee/index.md b/content/apps/squeegee/index.md index d9bc617e..4e1202d9 100644 --- a/content/apps/squeegee/index.md +++ b/content/apps/squeegee/index.md @@ -19,6 +19,12 @@ sources: - "https://github.com/scosman/Squeegee" - "https://github.com/scosman/Squeegee/blob/main/LICENSE" - "https://github.com/scosman/Squeegee/releases/latest" +assets: + - path: ./assets/icon.png + source: https://github.com/scosman/Squeegee/releases/download/v1.1.0/Squeegee.dmg + credit: Squeegee contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Squeegee closes windows that have sat idle for too long. You choose a time limit for each app, or one global default, and Squeegee tracks each window separately, so an old Finder window closes while the active ones stay open. It sends an ordinary close request, the same as the red button, so save prompts still appear and nothing is force-quit. Closed windows are listed in the menu bar for one-click reopening, and rules can be paused for an hour, until tomorrow or until you resume. It includes suggested rules for common apps and needs no account. diff --git a/content/apps/stablebar/assets/icon.png b/content/apps/stablebar/assets/icon.png new file mode 100644 index 00000000..1973a143 Binary files /dev/null and b/content/apps/stablebar/assets/icon.png differ diff --git a/content/apps/stablebar/index.md b/content/apps/stablebar/index.md index 324a20e8..a330811b 100644 --- a/content/apps/stablebar/index.md +++ b/content/apps/stablebar/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/Seb-GRAF/StableBar/blob/main/LICENSE" - "https://github.com/Seb-GRAF/StableBar/releases" - "https://stablebar.app" +assets: + - path: ./assets/icon.png + source: https://github.com/Seb-GRAF/StableBar/releases/download/v0.12.0-beta.20261107173938.631/StableBar.dmg + credit: StableBar contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- StableBar replaces the macOS menu bar with a bar you arrange from widgets: the active app, a clock, battery, workspaces and more. Any script that prints text or JSON can become a widget, and popups show graphs, lists and controls. You can edit the bar in place or through a JSON file, with undo. A package store lists the commands, hosts and permissions a widget needs before it runs. Workspaces can follow AeroSpace, yabai or OmniWM, or use the macOS Spaces source without a window manager. It suits people who want a SketchyBar-style setup in a native app. diff --git a/content/apps/station/assets/icon.png b/content/apps/station/assets/icon.png new file mode 100644 index 00000000..cc6432d8 Binary files /dev/null and b/content/apps/station/assets/icon.png differ diff --git a/content/apps/station/index.md b/content/apps/station/index.md index dec23794..ca35c43c 100644 --- a/content/apps/station/index.md +++ b/content/apps/station/index.md @@ -18,6 +18,12 @@ sources: - "https://github.com/getstation/desktop-app" - "https://github.com/getstation/desktop-app/blob/main/LICENSE" - "https://github.com/getstation/desktop-app/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/getstation/desktop-app/releases/download/v4.0.0-b1/Station.zip + credit: Station contributors + license: Apache-2.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Station is an Electron desktop app that loads web apps and services as tabs inside a single window. Its README describes checks that unload tabs left inactive for a while. The repository holds the app's source, including its service framework and an appstore package, so you can read how the tabs and services are built. It suits people who want many web apps and chat services in one place. diff --git a/content/apps/stayup/assets/icon.png b/content/apps/stayup/assets/icon.png new file mode 100644 index 00000000..949322e6 Binary files /dev/null and b/content/apps/stayup/assets/icon.png differ diff --git a/content/apps/stayup/index.md b/content/apps/stayup/index.md index 92a71b3f..4ed575ce 100644 --- a/content/apps/stayup/index.md +++ b/content/apps/stayup/index.md @@ -25,6 +25,12 @@ sources: - "https://github.com/NongKnot/StayUp/blob/main/LICENSE" - "https://github.com/NongKnot/StayUp/releases" - "https://getstayup.app" +assets: + - path: ./assets/icon.png + source: https://github.com/NongKnot/StayUp/releases/download/v1.4.2/StayUp-1.4.2.dmg + credit: StayUp contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- StayUp is a small menu bar app for Apple silicon Macs that keeps the Mac awake while local work is running. Its Auto mode watches sources such as Claude Code, Codex, Cursor, Ollama and LM Studio, keeps the Mac awake while their work is active and lets it sleep after a grace period you set. Its manual mode runs on a timer. It was built for long local agent runs, renders and downloads that should continue with the lid closed, and it also offers a virtual display for remote desktop tools on Macs without a lid. diff --git a/content/apps/stop-stutter/assets/icon.png b/content/apps/stop-stutter/assets/icon.png new file mode 100644 index 00000000..e642a458 Binary files /dev/null and b/content/apps/stop-stutter/assets/icon.png differ diff --git a/content/apps/stop-stutter/index.md b/content/apps/stop-stutter/index.md index 492e7bca..874d4981 100644 --- a/content/apps/stop-stutter/index.md +++ b/content/apps/stop-stutter/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/burakgon/stop-stutter" - "https://github.com/burakgon/stop-stutter/blob/main/LICENSE" - "https://github.com/burakgon/stop-stutter/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/burakgon/stop-stutter/releases/download/v0.1.0/StopStutter-0.1.0-universal.zip + credit: Stop Stutter contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Stop Stutter is a menu bar app for people who stream games from a PC or a cloud service. While a selected client runs, such as Moonlight, GeForce NOW, Parsec, Steam Link or Punktfunk, a small privileged helper keeps the `awdl0` interface down, and it restores AWDL when the last selected app quits. AirDrop, peer-to-peer AirPlay and some Continuity features may be unavailable during a session. Whether it helps depends on whether AWDL causes your stutter; the README says it does not claim a measured performance gain for each client. diff --git a/content/apps/sway/assets/icon.png b/content/apps/sway/assets/icon.png new file mode 100644 index 00000000..4b6bfe88 Binary files /dev/null and b/content/apps/sway/assets/icon.png differ diff --git a/content/apps/sway/index.md b/content/apps/sway/index.md index e2e34122..e495af47 100644 --- a/content/apps/sway/index.md +++ b/content/apps/sway/index.md @@ -19,6 +19,12 @@ sources: - "https://github.com/gusalvestavo/sway" - "https://github.com/gusalvestavo/sway/blob/main/LICENSE" - "https://github.com/gusalvestavo/sway/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/gusalvestavo/sway/releases/download/v1.5/Sway-1.5.zip + credit: Sway contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Sway lives in the menu bar and counts down to your next break, with a heads-up popover before each one. When a break starts, it fades a full-screen overlay onto every display, shows the logo filling up as the break runs, and offers snooze buttons and a skip button after five seconds. Optional extras include blink and posture nudges, planned breaks at fixed times, longer breaks every few breaks, work hours and a pause after 30 seconds without input. It suits people who want a gentle reminder to stand up rather than a timer they can click past. diff --git a/content/apps/swiftguard/assets/icon.png b/content/apps/swiftguard/assets/icon.png new file mode 100644 index 00000000..03dccab4 Binary files /dev/null and b/content/apps/swiftguard/assets/icon.png differ diff --git a/content/apps/swiftguard/index.md b/content/apps/swiftguard/index.md index 706799f1..9092d570 100644 --- a/content/apps/swiftguard/index.md +++ b/content/apps/swiftguard/index.md @@ -19,6 +19,12 @@ sources: - "https://github.com/Lennolium/swiftGuard" - "https://github.com/Lennolium/swiftGuard/blob/main/LICENSE" - "https://github.com/Lennolium/swiftGuard/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/Lennolium/swiftGuard/releases/download/v0.0.2/swiftGuard_arm64.dmg + credit: swiftGuard contributors + license: GPL-3.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- swiftGuard watches the USB ports of a Mac. When an unknown device connects, or a connected device is unplugged, it shuts the Mac down or hibernates it after a countdown you set. You can whitelist devices, and you can defuse the alarm from the menu before the countdown ends. It is aimed at people who leave a Mac unattended in public places or want to prevent data being copied over USB. diff --git a/content/apps/swiftmtp/assets/icon.png b/content/apps/swiftmtp/assets/icon.png new file mode 100644 index 00000000..950e6411 Binary files /dev/null and b/content/apps/swiftmtp/assets/icon.png differ diff --git a/content/apps/swiftmtp/index.md b/content/apps/swiftmtp/index.md index 60fdb6a2..db2b472c 100644 --- a/content/apps/swiftmtp/index.md +++ b/content/apps/swiftmtp/index.md @@ -23,6 +23,12 @@ sources: - "https://github.com/Neighbor-Z/SwiftMTP/releases" - "https://neighbor-z.github.io/swiftmtp-website" - "https://apps.apple.com/us/app/swiftmtp/id6802688224" +assets: + - path: ./assets/icon.png + source: https://github.com/Neighbor-Z/SwiftMTP/releases/download/v1.3.2/SwiftMTP-1.3.2.dmg + credit: SwiftMTP contributors + license: GPL-2.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- SwiftMTP is a Swift app for moving files between a Mac and Android phones or cameras over MTP. You can browse device folders, drag files in either direction, create, rename and delete files on the device, preview them with Quick Look, and search in plain language. It needs no ADB or USB debugging, and it is an alternative to Android File Transfer. It is also listed on the Mac App Store. diff --git a/content/apps/swifty-download-manager/assets/icon.png b/content/apps/swifty-download-manager/assets/icon.png new file mode 100644 index 00000000..9d9a4bae Binary files /dev/null and b/content/apps/swifty-download-manager/assets/icon.png differ diff --git a/content/apps/swifty-download-manager/index.md b/content/apps/swifty-download-manager/index.md index 606d6ede..9b20c52e 100644 --- a/content/apps/swifty-download-manager/index.md +++ b/content/apps/swifty-download-manager/index.md @@ -23,6 +23,12 @@ sources: - "https://github.com/Kyle-Ye/SwiftyDownloadManager/blob/main/BRANDING.md" - "https://github.com/Kyle-Ye/SwiftyDownloadManager/releases" - "https://apps.kyleye.top/sdm" +assets: + - path: ./assets/icon.png + source: https://github.com/Kyle-Ye/SwiftyDownloadManager/releases/download/0.6.0/SwiftyDownloadManager.app.zip + credit: Swifty Download Manager contributors + license: FSL-1.1-MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Swifty Download Manager is a download manager for macOS, iOS and iPadOS. It resumes direct HTTP and HTTPS downloads after a pause or restart, can use several connections for one file, keeps a history of finished and failed transfers, and can take over links sent from Safari or from a Chrome extension. It suits people who fetch large files regularly and want more control than the browser's downloader gives them. diff --git a/content/apps/swivel/assets/icon.png b/content/apps/swivel/assets/icon.png new file mode 100644 index 00000000..0177cec3 Binary files /dev/null and b/content/apps/swivel/assets/icon.png differ diff --git a/content/apps/swivel/index.md b/content/apps/swivel/index.md index 5d491007..6778b973 100644 --- a/content/apps/swivel/index.md +++ b/content/apps/swivel/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/jonathanlotan/Swivel/blob/main/LICENSE" - "https://github.com/jonathanlotan/Swivel/releases" - "https://jonathanlotan.github.io/Swivel/" +assets: + - path: ./assets/icon.png + source: https://github.com/jonathanlotan/Swivel/releases/download/v1.0.0/Swivel.dmg + credit: Swivel contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Swivel adds a radial menu for files on the Mac. Start dragging files in Finder or on the desktop, tap Shift, Command or Control, and drop on a slice to convert, crop, compress, remove metadata, recognize text or combine images into a PDF. It also provides Shortcuts actions and a command-line tool built on the same engine. It suits people who regularly reshape images and documents and want no upload step. diff --git a/content/apps/sxitch/assets/icon.png b/content/apps/sxitch/assets/icon.png new file mode 100644 index 00000000..cb8df84d Binary files /dev/null and b/content/apps/sxitch/assets/icon.png differ diff --git a/content/apps/sxitch/index.md b/content/apps/sxitch/index.md index 676247ea..21304d54 100644 --- a/content/apps/sxitch/index.md +++ b/content/apps/sxitch/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/MystikoLab/sxitch" - "https://github.com/MystikoLab/sxitch/blob/main/LICENSE.md" - "https://sxitch.app" +assets: + - path: ./assets/icon.png + source: https://github.com/MystikoLab/sxitch/releases/download/v1.6.1/Sxitch.app.zip + credit: Sxitch contributors + license: Apache-2.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Sxitch switches apps and windows by typing part of their name. It offers list and radial views, pinned apps, prefix stripping, app renames and custom modes that can launch apps or run shell commands. It suits people who switch between many apps and windows and prefer typing a name to cycling with Command-Tab. diff --git a/content/apps/thyme/assets/icon.png b/content/apps/thyme/assets/icon.png new file mode 100644 index 00000000..2b9434e3 Binary files /dev/null and b/content/apps/thyme/assets/icon.png differ diff --git a/content/apps/thyme/index.md b/content/apps/thyme/index.md index 35f77010..9d5cf285 100644 --- a/content/apps/thyme/index.md +++ b/content/apps/thyme/index.md @@ -22,6 +22,12 @@ sources: - "https://github.com/joaomoreno/thyme/blob/master/LICENSE" - "https://github.com/joaomoreno/thyme/releases" - "https://joaomoreno.github.io/thyme/" +assets: + - path: ./assets/icon.png + source: https://github.com/joaomoreno/thyme/releases/download/0.5.1/Thyme.0.5.1.dmg + credit: Thyme contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Thyme is a minimal timer for OS X. You start it to see how long each task takes. The README describes it as nothing more than a timer, so it suits anyone who wants a simple per-task clock rather than automatic time tracking. A web version exists for people who are not on a Mac. diff --git a/content/apps/tokenremain/assets/icon.png b/content/apps/tokenremain/assets/icon.png new file mode 100644 index 00000000..b9c0cfae Binary files /dev/null and b/content/apps/tokenremain/assets/icon.png differ diff --git a/content/apps/tokenremain/index.md b/content/apps/tokenremain/index.md index 41eb21ae..58103b71 100644 --- a/content/apps/tokenremain/index.md +++ b/content/apps/tokenremain/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/Carstin520/token-remain/blob/main/LICENSE" - "https://github.com/Carstin520/token-remain/releases/latest" - "https://tokenremain.com" +assets: + - path: ./assets/icon.png + source: https://github.com/Carstin520/token-remain/releases/download/v1.5.1/TokenRemain-1.5.1-48.dmg + credit: TokenRemain contributors + license: Apache-2.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- TokenRemain shows how much of each AI coding quota is left, when each window resets, and how fast you are using it. It covers Claude Code, Codex, Cursor and more than 25 other tools, with official windows such as 5-hour and 7-day limits. It also totals today's local token use and an estimated cost at official list prices, and shows figures in the menu bar, a floating window and the Dock icon. It reads the sign-in state those tools already keep, and pasted API keys go into the Keychain. diff --git a/content/apps/unfd/assets/icon.png b/content/apps/unfd/assets/icon.png new file mode 100644 index 00000000..9bb759d4 Binary files /dev/null and b/content/apps/unfd/assets/icon.png differ diff --git a/content/apps/unfd/index.md b/content/apps/unfd/index.md index f28f8395..4bc3fd0f 100644 --- a/content/apps/unfd/index.md +++ b/content/apps/unfd/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/alpha2xyz/unfd" - "https://github.com/alpha2xyz/unfd/blob/main/LICENSE" - "https://github.com/alpha2xyz/unfd/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/alpha2xyz/unfd/releases/download/v0.4.1/unfd-0.4.1.zip + credit: unfd contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- unfd is for people who type Arabic and English on the same Mac and are tired of pressing the language key. Pressing Option-Shift-Space converts the last word or the selected text that was typed in the wrong layout. Address bars, email and password fields switch to English when you click them, and a slash at the start of a word switches to English for chat apps and terminals. It learns from corrections made repeatedly in the same kind of field. The README says it makes no network connections and keeps only settings, per-chat languages and learned field types. Its bundled Arabic and English word lists come from FrequencyWords under CC BY-SA 4.0, as listed in the NOTICE file. diff --git a/content/apps/uvim/assets/icon.png b/content/apps/uvim/assets/icon.png new file mode 100644 index 00000000..e90cff8a Binary files /dev/null and b/content/apps/uvim/assets/icon.png differ diff --git a/content/apps/uvim/index.md b/content/apps/uvim/index.md index 0551baa2..32d973d8 100644 --- a/content/apps/uvim/index.md +++ b/content/apps/uvim/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/celve/uvim/blob/main/LICENSE" - "https://github.com/celve/uvim/releases/latest" - "https://uvim.app" +assets: + - path: ./assets/icon.png + source: https://github.com/celve/uvim/releases/download/v1.1.2/uvim-1.1.2.zip + credit: uvim contributors + license: GPL-3.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- uvim brings Vim's modal editing to the text fields of other Mac apps. A menu bar app reads and edits the focused field through Accessibility, so Normal, Insert and Visual modes work in apps such as TextEdit and Notes. It is for people who already think in Vim keys and want them outside a Vim window. diff --git a/content/apps/vane/assets/icon.png b/content/apps/vane/assets/icon.png new file mode 100644 index 00000000..c4fe3a7a Binary files /dev/null and b/content/apps/vane/assets/icon.png differ diff --git a/content/apps/vane/index.md b/content/apps/vane/index.md index 3b4c23dc..f89cb6b3 100644 --- a/content/apps/vane/index.md +++ b/content/apps/vane/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/notnaki/vane/blob/main/LICENSE" - "https://github.com/notnaki/vane/releases" - "https://notnaki.github.io/vane/" +assets: + - path: ./assets/icon.png + source: https://github.com/notnaki/vane/releases/download/v0.1.0/Vane.dmg + credit: Vane contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Vane is a browser built with Swift and AppKit around Apple's WebKit engine, so pages render as they do in Safari. Its interface puts tabs in a sidebar and groups them into Spaces, with Favourites, pinned tabs, Split View, a reader mode with an offline article queue, and Easels for notes and captures. Profiles keep separate data, passwords are kept in the Keychain, and an EasyList-subset content blocker is included. It is for people who like sidebar-and-Spaces browsing and want a native app that stays close to WebKit. diff --git a/content/apps/vifty/assets/icon.png b/content/apps/vifty/assets/icon.png new file mode 100644 index 00000000..f8dd4f8d Binary files /dev/null and b/content/apps/vifty/assets/icon.png differ diff --git a/content/apps/vifty/index.md b/content/apps/vifty/index.md index 98b9b002..a36a9a84 100644 --- a/content/apps/vifty/index.md +++ b/content/apps/vifty/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/Reedtrullz/Vifty" - "https://github.com/Reedtrullz/Vifty/blob/main/LICENSE" - "https://github.com/Reedtrullz/Vifty/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/Reedtrullz/Vifty/releases/download/v1.4.8/Vifty-v1.4.8.zip + credit: Vifty contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Vifty is a menu bar app for Apple silicon MacBook Pros. It shows temperatures, fan speeds, thermal pressure and USB-C or MagSafe power flow, and it sets fan speed in Auto, fixed-RPM or temperature-curve modes. A bounded command-line tool, `viftyctl`, lets build scripts and local AI coding agents request temporary cooling that expires on its own. Fan writes go through a root LaunchDaemon helper, and when hardware looks unfamiliar, the Mac stays under macOS Auto. It suits developers who run long builds or local models on a laptop. diff --git a/content/apps/vigil/assets/icon.png b/content/apps/vigil/assets/icon.png new file mode 100644 index 00000000..b905db5e Binary files /dev/null and b/content/apps/vigil/assets/icon.png differ diff --git a/content/apps/vigil/index.md b/content/apps/vigil/index.md index 3cdde1d5..fff9b31e 100644 --- a/content/apps/vigil/index.md +++ b/content/apps/vigil/index.md @@ -20,6 +20,12 @@ sources: - "https://github.com/butterlatte-zhang/vigil/blob/main/LICENSE" - "https://github.com/butterlatte-zhang/vigil/releases" - "https://butterlatte-zhang.github.io/vigil/" +assets: + - path: ./assets/icon.png + source: https://github.com/butterlatte-zhang/vigil/releases/download/v0.1.7/Vigil-macos.dmg + credit: Vigil contributors + license: GPL-3.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Vigil runs trees of coding agents. A manager agent hands tasks to worker agents, and each node keeps its own native terminal session and full transcript, which can be replayed read-only. Results roll up to the manager as summaries, so its context stays small. Claude Code, Codex and OpenCode can be mixed in one tree. It is for developers who already use these CLIs and want them coordinated from one Mac app. diff --git a/content/apps/visorpro/assets/icon.png b/content/apps/visorpro/assets/icon.png new file mode 100644 index 00000000..9ab9e4ef Binary files /dev/null and b/content/apps/visorpro/assets/icon.png differ diff --git a/content/apps/visorpro/index.md b/content/apps/visorpro/index.md index d5ebb600..4ff8f43e 100644 --- a/content/apps/visorpro/index.md +++ b/content/apps/visorpro/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/sonor-studio/VisorPro" - "https://github.com/sonor-studio/VisorPro/blob/main/LICENSE.txt" - "https://github.com/sonor-studio/VisorPro/releases" +assets: + - path: ./assets/icon.png + source: https://github.com/sonor-studio/VisorPro/releases/download/1.3.2/VisorPro.1.3.2.dmg + credit: VisorPro contributors + license: CC-BY-NC-SA-4.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- VisorPro replaces the built-in macOS volume and brightness overlays with its own on-screen indicators. The overlays can sit in one of six screen positions, play a sound when they appear, and be expanded by clicking them into panels for battery, Wi-Fi, Bluetooth, connected peripherals, CPU and memory. Version 1.3.2 adds quick actions for Dark Mode, Night Shift and True Tone from the brightness overlay. It suits people who want to change how system feedback looks on screen. diff --git a/content/apps/voicely/assets/icon.png b/content/apps/voicely/assets/icon.png new file mode 100644 index 00000000..5604c740 Binary files /dev/null and b/content/apps/voicely/assets/icon.png differ diff --git a/content/apps/voicely/index.md b/content/apps/voicely/index.md index bcd5d6cb..24b5c06a 100644 --- a/content/apps/voicely/index.md +++ b/content/apps/voicely/index.md @@ -23,6 +23,12 @@ sources: - "https://github.com/StulkovLD/Voicely/blob/main/LICENSE" - "https://github.com/StulkovLD/Voicely/releases" - "https://voicely.art" +assets: + - path: ./assets/icon.png + source: https://github.com/StulkovLD/Voicely/releases/download/v1.4.4/Voicely-1.4.4-76daae3718df-4bc1c044508b99deecef0942f8b1dc181fdae5bf146a6eb140cc20c6fabcca86.dmg + credit: Voicely contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Voicely turns speech into text on the Mac. Press Option+Space, speak, and press again to type the transcript at the cursor, in native apps, browsers, Electron apps and terminals. It can also record a call by mixing system audio and the microphone into one track, with speakers separated, and transcribe any audio or video file. Speech runs on NVIDIA's Parakeet V3 model on the Mac, covering 25 languages, with no account or subscription. A `voicely` command and a local MCP server let agents such as Claude Code, Codex and Cursor transcribe files and read saved transcripts. It suits people who dictate or transcribe often and want the audio kept on their machine. diff --git a/content/apps/xtreme-download-manager/assets/icon.png b/content/apps/xtreme-download-manager/assets/icon.png new file mode 100644 index 00000000..63942f98 Binary files /dev/null and b/content/apps/xtreme-download-manager/assets/icon.png differ diff --git a/content/apps/xtreme-download-manager/index.md b/content/apps/xtreme-download-manager/index.md index bf62de57..7882fa56 100644 --- a/content/apps/xtreme-download-manager/index.md +++ b/content/apps/xtreme-download-manager/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/subhra74/xdm/blob/master/LICENSE" - "https://github.com/subhra74/xdm/releases" - "https://xtremedownloadmanager.com/" +assets: + - path: ./assets/icon.png + source: https://github.com/subhra74/xdm/releases/download/v9.0.9/xdm-app-9.0.9-arm64.dmg + credit: Xtreme Download Manager contributors + license: GPL-3.0; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Xtreme Download Manager (XDM) splits each download across several connections and resumes broken ones. A browser extension hands downloads and detected videos to the app, and it can save HLS and DASH streams, merging audio and video into an MP4 without ffmpeg. It also has a command-line mode for downloading from a terminal. It suits people who regularly fetch large files or stream videos, on Windows, macOS or Linux. diff --git a/content/apps/yalqen/assets/icon.png b/content/apps/yalqen/assets/icon.png new file mode 100644 index 00000000..509250c3 Binary files /dev/null and b/content/apps/yalqen/assets/icon.png differ diff --git a/content/apps/yalqen/index.md b/content/apps/yalqen/index.md index e51ce859..ebce9f5b 100644 --- a/content/apps/yalqen/index.md +++ b/content/apps/yalqen/index.md @@ -23,6 +23,12 @@ sources: - "https://github.com/YSamed/yalqen/blob/main/LICENSE" - "https://github.com/YSamed/yalqen/releases" - "https://yalqen.com" +assets: + - path: ./assets/icon.png + source: https://github.com/YSamed/yalqen/releases/download/v0.3.86/Yalqen-0.3.86-arm64.dmg + credit: Yalqen contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Yalqen is a browser for developers built on Chromium. It offers vertical tabs, a command bar, an AI panel and built-in blocking of ads and trackers, and it does not require a browser account. The release notes say it updates itself: when an update is ready, the update button in the toolbar restarts the app, installs the update and restores your tabs. diff --git a/content/apps/yowl/assets/icon.png b/content/apps/yowl/assets/icon.png new file mode 100644 index 00000000..f279ae27 Binary files /dev/null and b/content/apps/yowl/assets/icon.png differ diff --git a/content/apps/yowl/index.md b/content/apps/yowl/index.md index 41c82a9c..6bc69504 100644 --- a/content/apps/yowl/index.md +++ b/content/apps/yowl/index.md @@ -21,6 +21,12 @@ sources: - "https://github.com/nejcar20/yowl/blob/main/LICENSE" - "https://github.com/nejcar20/yowl/releases" - "https://dontstealmylaptop.com" +assets: + - path: ./assets/icon.png + source: https://github.com/nejcar20/yowl/releases/download/v1.3.2/Yowl-1.3.2.dmg + credit: Yowl contributors + license: MIT; upstream app icon, trademarks retained +icon: ./assets/icon.png --- Yowl is a deterrent for leaving a laptop on a café table or in a library. Once armed from the menu bar, it reacts to an unplugged charger, to movement seen by the camera, or to the lid closing part-way. It then sounds a siren at full volume through the built-in speakers, locks the screen and photographs whoever is in front of the laptop, including the ten seconds before the alarm. Phone alerts are optional and send the alarm and photos to a private ntfy.sh link. The project says it is not a recovery tool and recommends Find My and FileVault for that. diff --git a/docs/VERIFICATION.md b/docs/VERIFICATION.md index 29a4afe3..150af5af 100644 --- a/docs/VERIFICATION.md +++ b/docs/VERIFICATION.md @@ -27,6 +27,7 @@ The writing review in `docs/RESEARCH.md` (Writing review) led to a description s - **Other corrections.** UTM's website is `getutm.app` (the old address redirects) and Hammerspoon's points to hammerspoon.org instead of its repository. Seven summaries that used praise words ("considered", "fast", "quick") or an imperative were rewritten. Checked: `bun run validate`, `bun test` (22 pass), `bun run check`, `bun run build`, `bun run check:links`, `bun run check:generated`. + ## SEO audit fixes — 2026-11-07 A site-wide audit (technical, on-page and content, structured data and AI search, performance) read all 2,066 built pages in `dist/` and made about 60 spaced requests to the live site. It found nothing that blocks indexing: every indexable page has a self-referencing canonical that matches the sitemap, redirects are single 301s, and all 2,064 indexable pages carry valid JSON-LD. The code-level findings are fixed here: @@ -40,6 +41,9 @@ A site-wide audit (technical, on-page and content, structured data and AI search - **Legacy links.** `/?category=` now opens the category page instead of a filtered search. Checked: `bun run validate`, `bun test` (22 pass), `bun run check` (0 errors), `bun run build` (2,066 pages), `bun run check:links` (179,155 links), `bun run check:generated`. In a browser, the search filters, the sort, the empty state and the legacy redirect behave as before; app pages and the 404 page look the same on desktop and mobile. +## Missing icons filled — 2026-11-07 + +192 listings had no icon. `bun run icon` (new) was run for each, preferring the app's own official download, where the icon is the one the app declares, then an icon file in its repository. 126 icons were added and reviewed on a contact sheet. Not added: three apps whose bundle carries only macOS's generic icon, and seven whose icon is another product's mark or unclear art (two Claude-style marks, the It film's Pennywise, Google Cast, the React logo, a stock crop icon and a menu-bar dot). 66 listings still have no icon: the 19 removed in the seventh expansion's review, apps whose bundle declares none, screen savers, and projects with no Mac download to read. ## Old apps that depend on a web service — 2026-11-07 diff --git a/package.json b/package.json index dc18b38c..1478b55b 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,8 @@ "check:links": "bun scripts/check-links.ts", "discover": "bun scripts/discover.ts", "homebrew": "bun scripts/homebrew.ts sync", - "check:homebrew": "bun scripts/homebrew.ts check" + "check:homebrew": "bun scripts/homebrew.ts check", + "icon": "bun scripts/icon.ts" }, "dependencies": { "@lucide/astro": "^1.16.0", diff --git a/scripts/icon.ts b/scripts/icon.ts new file mode 100644 index 00000000..2c2800cc --- /dev/null +++ b/scripts/icon.ts @@ -0,0 +1,298 @@ +// bun run icon [--credit "..."] [--license "..."] +// Saves an app's icon as a 256 px assets/icon.png and records where it came from. +// The link can be a PNG, JPEG or .icns file (a GitHub file page works) or the app's +// official .dmg/.zip download; from a download, the icon the app itself declares is used. +// macOS only: it uses sips, iconutil, hdiutil, ditto and plutil, which ship with macOS. +import fs from 'node:fs'; +import os from 'node:os'; +import path from 'node:path'; +import { spawnSync } from 'node:child_process'; +import { parseDocument, isMap, isSeq, visit, type YAMLSeq } from 'yaml'; +import { catalogDirectory } from '../src/lib/catalog.ts'; + +const SIZE = 256; +const MIN_SOURCE = 128; + +// Renders an app's own icon (including Icon Composer / asset-catalog icons) to a PNG, +// or with "generic" the icon macOS shows for an app without one. +const RENDER = `ObjC.import('AppKit'); +function run(argv) { + const [app, out, size, mode] = argv; + const px = Number(size); + const icon = mode === 'generic' + ? $.NSWorkspace.sharedWorkspace.iconForFileType('com.apple.application-bundle') + : $.NSWorkspace.sharedWorkspace.iconForFile(app); + const rep = $.NSBitmapImageRep.alloc.initWithBitmapDataPlanesPixelsWidePixelsHighBitsPerSampleSamplesPerPixelHasAlphaIsPlanarColorSpaceNameBytesPerRowBitsPerPixel(null, px, px, 8, 4, true, false, $.NSCalibratedRGBColorSpace, 0, 0); + const ctx = $.NSGraphicsContext.graphicsContextWithBitmapImageRep(rep); + $.NSGraphicsContext.saveGraphicsState; + $.NSGraphicsContext.setCurrentContext(ctx); + icon.drawInRectFromRectOperationFraction($.NSMakeRect(0, 0, px, px), $.NSZeroRect, $.NSCompositingOperationSourceOver, 1.0); + ctx.flushGraphics; + $.NSGraphicsContext.restoreGraphicsState; + rep.representationUsingTypeProperties($.NSBitmapImageFileTypePNG, $({})).writeToFileAtomically(out, true); +}`; + +function run(command: string, args: string[], input?: string): string { + const result = spawnSync(command, args, { encoding: 'utf8', input }); + if (result.status !== 0) + throw new Error( + `${command} failed: ${(result.stderr || result.stdout).trim()}`, + ); + return result.stdout; +} + +function pixels(file: string): [number, number] { + const out = run('sips', ['-g', 'pixelWidth', '-g', 'pixelHeight', file]); + return [ + Number(/pixelWidth: (\d+)/.exec(out)?.[1]), + Number(/pixelHeight: (\d+)/.exec(out)?.[1]), + ]; +} + +// The largest image inside an .icns file. +function fromIcns(icns: string, work: string): string { + const set = path.join(work, 'icon.iconset'); + try { + run('iconutil', ['-c', 'iconset', icns, '-o', set]); + } catch { + // Older .icns layouts iconutil rejects: sips still reads the first image. + const png = path.join(work, 'icns.png'); + run('sips', ['-s', 'format', 'png', icns, '--out', png]); + return png; + } + return fs + .readdirSync(set) + .map((name) => path.join(set, name)) + .sort((a, b) => pixels(b)[0] - pixels(a)[0])[0]; +} + +// The icon an app bundle declares in its Info.plist. +function fromApp(app: string, work: string): string { + const plist = path.join(app, 'Contents', 'Info.plist'); + const key = (name: string) => { + try { + return run('plutil', ['-extract', name, 'raw', '-o', '-', plist]).trim(); + } catch { + return ''; + } + }; + const file = key('CFBundleIconFile'); + if (file) { + const icns = path.join( + app, + 'Contents', + 'Resources', + path.extname(file) ? file : `${file}.icns`, + ); + if (fs.existsSync(icns)) return fromIcns(icns, work); + } + if (!file && !key('CFBundleIconName')) + throw new Error(`${path.basename(app)} declares no icon`); + // Asset-catalog icon (for example Icon Composer): let macOS render it. + const script = path.join(work, 'render.js'); + const png = path.join(work, 'rendered.png'); + const generic = path.join(work, 'generic.png'); + fs.writeFileSync(script, RENDER); + run('osascript', ['-l', 'JavaScript', script, app, png, '512']); + run('osascript', [ + '-l', + 'JavaScript', + script, + app, + generic, + '512', + 'generic', + ]); + if (fs.readFileSync(png).equals(fs.readFileSync(generic))) + throw new Error( + `${path.basename(app)} has no icon of its own (macOS shows the generic app icon)`, + ); + return png; +} + +function findApp(root: string): string { + const apps = run('find', [ + root, + '-maxdepth', + '4', + '-name', + '*.app', + '-type', + 'd', + '-prune', + ]) + .split('\n') + .filter(Boolean) + .sort( + (a, b) => a.split('/').length - b.split('/').length || a.localeCompare(b), + ); + if (!apps.length) throw new Error('No .app bundle inside the download'); + return apps[0]; +} + +async function iconSource(file: string, work: string): Promise { + const head = Buffer.from(await Bun.file(file).slice(0, 8).arrayBuffer()); + if (head.subarray(0, 4).toString('hex') === '89504e47') return file; + if (head.subarray(0, 3).toString('hex') === 'ffd8ff') return file; + if (head.subarray(0, 4).toString('latin1') === 'icns') + return fromIcns(file, work); + if (head.subarray(0, 2).toString('latin1') === 'PK') { + const root = path.join(work, 'zip'); + run('ditto', ['-x', '-k', file, root]); + return fromApp(findApp(root), work); + } + const size = fs.statSync(file).size; + const tail = Buffer.from( + await Bun.file(file) + .slice(size - 512, size - 508) + .arrayBuffer(), + ); + if (tail.toString('latin1') === 'koly') { + const mount = path.join(work, 'mnt'); + fs.mkdirSync(mount); + // "Y" accepts a license agreement some disk images show on mount. + run( + 'hdiutil', + [ + 'attach', + '-nobrowse', + '-readonly', + '-noautoopen', + '-mountpoint', + mount, + file, + ], + 'Y\n', + ); + try { + return fromApp(findApp(mount), work); + } finally { + spawnSync('hdiutil', ['detach', mount, '-force', '-quiet']); + } + } + throw new Error('The link is not a PNG, JPEG, .icns, .zip or .dmg'); +} + +// GitHub file pages are fetched raw; the page link stays the recorded source. +const rawUrl = (link: string) => + link.replace( + /^https:\/\/github\.com\/([^/]+\/[^/]+)\/blob\//, + 'https://raw.githubusercontent.com/$1/', + ); + +const [slug, link, ...rest] = process.argv.slice(2); +const option = (name: string) => { + const at = rest.indexOf(`--${name}`); + return at >= 0 ? rest[at + 1] : undefined; +}; + +try { + if (!slug || !link) + throw new Error( + 'Usage: bun run icon [--credit "..."] [--license "..."]', + ); + if (process.platform !== 'darwin') + throw new Error('bun run icon uses macOS tools; run it on a Mac.'); + if (!link.startsWith('https://')) throw new Error('Use an https link'); + const folder = path.join(catalogDirectory, slug); + const index = path.join(folder, 'index.md'); + if (!fs.existsSync(index)) + throw new Error(`No app folder content/apps/${slug}`); + + const work = fs.mkdtempSync(path.join(os.tmpdir(), 'oma-icon-')); + try { + const response = await fetch(rawUrl(link), { + signal: AbortSignal.timeout(300_000), + }); + if (!response.ok) + throw new Error(`Download failed: HTTP ${response.status}`); + const download = path.join(work, 'download'); + await Bun.write(download, response); + + const source = await iconSource(download, work); + const [width, height] = pixels(source); + if (Math.abs(width - height) > Math.max(width, height) * 0.02) + throw new Error( + `The image is ${width} x ${height}; an app icon is square (a banner or wordmark is not an icon)`, + ); + if (width < MIN_SOURCE) + throw new Error( + `The image is only ${width} px; use a source of at least ${MIN_SOURCE} px`, + ); + fs.mkdirSync(path.join(folder, 'assets'), { recursive: true }); + run('sips', [ + '-s', + 'format', + 'png', + '-z', + String(SIZE), + String(SIZE), + source, + '--out', + path.join(folder, 'assets', 'icon.png'), + ]); + + // Record the icon in the frontmatter, keeping the file's existing style. + const text = fs.readFileSync(index, 'utf8'); + const parts = /^---\r?\n([\s\S]*?)\r?\n---(\r?\n[\s\S]*)$/.exec(text); + if (!parts) throw new Error(`${index} has no frontmatter`); + const doc = parseDocument(parts[1]); + const assets = doc.get('assets'); + const previous = isSeq(assets) + ? (assets as YAMLSeq).items.find( + (item) => + isMap(item) && + item.get('path') !== './assets/icon.png' && + item.get('credit'), + ) + : undefined; + const credit = + option('credit') ?? + (isMap(previous) + ? String(previous.get('credit')) + : `${doc.get('name')} contributors`); + const license = + option('license') ?? + `${doc.get('license')}; upstream app icon, trademarks retained`; + const entry = doc.createNode({ + path: './assets/icon.png', + source: link, + credit, + license, + }); + // Records written as JSON-style lists get a JSON-style entry. + if (isSeq(assets) && (assets as YAMLSeq).flow) + visit(entry, { + Scalar(_, node) { + node.type = 'QUOTE_DOUBLE'; + }, + }); + if (isSeq(assets)) { + const at = (assets as YAMLSeq).items.findIndex( + (item) => isMap(item) && item.get('path') === './assets/icon.png', + ); + if (at >= 0) (assets as YAMLSeq).items[at] = entry; + else (assets as YAMLSeq).add(entry); + } else + doc.set( + 'assets', + doc.createNode([ + { path: './assets/icon.png', source: link, credit, license }, + ]), + ); + doc.set('icon', './assets/icon.png'); + fs.writeFileSync( + index, + `---\n${doc.toString({ lineWidth: 0, flowCollectionPadding: false }).trimEnd()}\n---${parts[2]}`, + ); + + console.log( + `icon: content/apps/${slug}/assets/icon.png (${SIZE} px, from a ${width} px source). Check it is the app's own icon, then run bun run validate.`, + ); + } finally { + fs.rmSync(work, { recursive: true, force: true }); + } +} catch (error) { + console.error(error instanceof Error ? error.message : String(error)); + process.exitCode = 1; +}