A lightweight macOS utility that converts Markdown ↔ Rich Text for seamless pasting into Microsoft Loop.
- Markdown → Loop — Converts clipboard Markdown to optimized HTML/RTF for pasting into Loop
- Loop → Markdown — Converts Loop's rich text back to clean Markdown
- Auto-detection — Automatically detects content type (Markdown vs HTML)
- One shortcut — ⌘⏎ does the right thing based on content
- Full Markdown support — Headings, bold/italic, lists, tables, code blocks, task lists, links, blockquotes
- Native macOS app — SwiftUI, lightweight, no Electron
Grab the latest release from the Releases page.
git clone https://github.com/trsdn/md2loop.git
cd md2loop
xcodegen generate
xcodebuild -project md2loop.xcodeproj -scheme md2loop -configuration Release buildThe macOS release flow builds a Developer ID signed app, packages it as a signed DMG, notarizes it,
and uploads both the DMG and a SHA-256 checksum to the GitHub Release for a v* tag.
Required GitHub Actions secrets:
MACOS_CERTIFICATE— base64-encoded Developer ID Application.p12MACOS_CERTIFICATE_PWD— password for the.p12APPLE_ID— Apple ID used for notarizationAPPLE_TEAM_ID— Apple Developer Team IDAPPLE_APP_PASSWORD— app-specific password for notarization
Local release build:
./scripts/release_macos.shFor local signing and notarization, copy the example release environment and adjust it if needed:
cp .release.env.example .release.env
xcrun notarytool store-credentials md2loop \
--apple-id "your@email.com" \
--team-id "G69Z5BNY97" \
--password "app-specific-password"The local scripts load .release.env by default. Set RELEASE_ENV_FILE to use another file.
For unsigned local smoke builds only:
REQUIRE_SIGNING=0 ./scripts/build_release.sh- Copy Markdown text to your clipboard
- Open md2loop (or use ⌘⏎)
- The app detects the content and shows the appropriate conversion
- Click Convert (or press ⌘⏎)
- Paste into Microsoft Loop (⌘V)
Works the other way too — copy from Loop, convert to Markdown.
- Uses apple/swift-markdown for Markdown → HTML via a custom
MarkupVisitoroptimized for Loop - Uses SwiftSoup for HTML → Markdown
- Sets the clipboard with HTML + RTF + plain text for maximum compatibility
- Loop-specific optimizations: no CSS classes, Unicode checkboxes for task lists (☑/☐), minimal table HTML
macOS 14 (Sonoma) or later.
Contributions are welcome! See CONTRIBUTING.md for guidelines.
MIT — see LICENSE for details.



