English | 简体中文
PodLilt is a lightweight floating podcast player for macOS that displays and controls what is currently playing in Apple Podcasts. It stays above other windows and offers Full, Compact, and Cover display modes.
- Displays episode artwork, title, show name, playback state, current progress, and remaining time.
- Supports play/pause, skip back 15 seconds, and skip forward 30 seconds.
- Offers Full Mode, Compact Mode, and Cover Mode, switchable from the player settings or menu bar.
- Seamlessly scrolls long episode titles to the left in Full and Compact modes, pausing for two seconds after each cycle.
- Shows a green status dot while playing in Cover Mode; hovering reveals playback controls and progress along the bottom edge.
- Supports direct window dragging and automatically keeps the player within the visible screen area.
- Remembers the selected window mode, window position, and language preference.
- Provides menu bar actions to show or hide the player, open Podcasts, switch modes and languages, view About information, and quit the app.
- Supports Simplified Chinese, Traditional Chinese, English, and Japanese. It follows the macOS system language by default, allows manual override, and falls back to English when the system language is unsupported.
- Preserves the original language of podcast show names, descriptions, and episode titles.
- Checks GitHub Releases from About; newer versions are downloaded as a DMG and opened for installation.
| Mode | Size | Description |
|---|---|---|
| Full Mode | 360 × 236 | Displays complete playback information, progress, and controls. |
| Compact Mode | 360 × 80 | Keeps complete playback information and controls in a single-row layout. |
| Cover Mode | 96 × 96 | Shows only the artwork by default; hovering reveals play, skip, and progress controls. |
Download the latest notarized build from GitHub Releases. The distributed app is signed with a Developer ID certificate and notarized by Apple.
Install with Homebrew (available after the first release that updates the tap):
brew install --cask cndiandian/tap/podliltUpdate an existing Homebrew installation:
brew update
brew upgrade --cask cndiandian/tap/podlilt- macOS 14.0 or later
- Apple Podcasts
- Xcode installed at
/Applications/Xcode.appwhen building from source
After cloning the repository, run the following commands from the project root:
./scripts/build.sh
open "dist/PodLilt.app"The build script will:
- Compile and sign MediaRemote Adapter.
- Build the
PodLiltexecutable in Release configuration. - Generate the application icon and assemble
dist/PodLilt.app. - Apply a local ad-hoc signature to the final application.
If Xcode has not completed its initial setup or its updated license has not been accepted, follow the instructions shown in Terminal before running the build script again.
Pushing a semantic version tag automatically builds, signs, notarizes, and publishes a GitHub Release:
git tag v0.1.0
git push origin v0.1.0The workflow attaches signed and notarized PodLilt-vX.Y.Z.dmg, a ZIP archive, and their SHA-256 checksums to the release. Release credentials are stored as encrypted GitHub Actions repository secrets.
After publishing, it creates or updates Casks/podlilt.rb in cndiandian/homebrew-tap with the released version and DMG checksum. Configure the HOMEBREW_TAP_TOKEN repository secret in PodLilt using a fine-grained personal access token scoped to homebrew-tap, with Contents: Read and write. The tap can initially be empty. Keep this token valid for subsequent releases; the default GITHUB_TOKEN cannot write to another repository.
PodLilt needs access to the Apple Podcasts accessibility controls to read playback information and perform playback actions.
On first launch:
- Click “Enable Accessibility Permission” in the player.
- Allow PodLilt under “System Settings → Privacy & Security → Accessibility.”
- Return to Podcasts, pause the current episode, and resume playback once.
After permission is granted, the Podcasts window can remain in the background. If another music player takes over the system media session, PodLilt may temporarily be unable to control Podcasts. Pause and resume playback once in Podcasts to restore control.
- PodLilt only reads and controls Apple Podcasts with the Bundle Identifier
com.apple.podcasts; it does not control other media players. - Playback information is retrieved through MediaRemote Adapter when available and from the Podcasts accessibility controls when needed.
- If the system does not provide artwork or duration, PodLilt queries the Apple iTunes Search API using the episode title and downloads matching artwork.
- Apart from the Apple service requests described above, PodLilt does not upload, collect, or store podcast playback data.
- Window mode, window position, and language preferences are stored locally in
UserDefaults.
PodLilt
├── Sources/PodLilt # Application source code
│ └── Localization # Localized interface strings
├── Resources # Application icon resources
├── Vendor # MediaRemote Adapter
├── assets # README image assets
├── scripts # Build and release scripts
├── .github/workflows # Automated notarized releases
├── AppInfo.plist # macOS application configuration
└── Package.swift # Swift Package configuration
- MediaRemote Adapter relies on private macOS APIs, so this project is not suitable as a direct foundation for a Mac App Store release.
- The Apple Podcasts accessibility hierarchy may change in future macOS updates.
- The Apple iTunes Search API may not find artwork or duration for every episode. Missing artwork is replaced with a placeholder, and unavailable duration is shown as
--:--.
PodLilt is open source under the MIT License. Copyright © 2026 diandian.
Vendor/MediaRemoteAdapter uses the BSD 3-Clause license from MediaRemote Adapter. Its license text is included in the source directory and the built application bundle.
- Email: support@podlilt.com
- Twitter (X): @callmediandian
- GitHub: cndiandian/PodLilt
