Repository navigation
Releases: pepperonas/loupe
Release list
v0.8.0
Full Changelog: v0.7.0...v0.8.0
Loupe 0.7.0 — rhythm game charts (.chart)
Loupe now previews rhythm game charts — Clone Hero / Moonscraper .chart files.
Install: Apple Silicon (arm64), ad-hoc signed. Download from loupe.celox.io. On first launch right-click → Open, or run
xattr -dr com.apple.quarantine /Applications/Loupe.app.
✨ New
.chartpreview, every section collapsed.[Song],[SyncTrack],[Events]and every track ([ExpertSingle]…) are collapsible; each summary line says what's inside (notes, Star Power, events), the toolbar shows artist and title.- Readable rows when expanded: tick and song time (computed from
Resolutionand every tempo change), notes in their fret colors (green, red, yellow, blue, orange; Force/Tap/Open) with sustain, Star Power phrases, section markers, tempo in BPM, time signatures like6/8. - Robust: broken lines are reported with their line number instead of breaking the preview; a file with the extension that isn't a chart is shown as plain text.
- macOS has no type for
.chart, so Loupe declaresio.celox.loupe.chart— otherwise Quick Look would never ask it. - New switch Charts (.chart) in the app; switched off, Quick Look shows the plain text.
⚡ Performance
- A full five-difficulty chart (~27,000 lines) renders in ~130 ms; the largest chart Loupe reads (8 MB) in ~450 ms. Very large charts are capped at 5,000 rows per section and 30,000 in total.
🧪 Quality
- 374 tests (+32). All 18 mutation probes are caught — one exposed a blind spot (a tempo map with only two segments can't reveal a wrong segment tempo) and got its own test.
Loupe 0.6.0 — English & German app, About, loupe.celox.io
The companion app now speaks English and German, has an About section — and Loupe has its own home: loupe.celox.io.
Install: Apple Silicon (arm64), ad-hoc signed. On first launch right-click → Open, or run
xattr -dr com.apple.quarantine /Applications/Loupe.app. Or simply use loupe.celox.io/download.
✨ New
- Language setting in the companion app: System (German when German leads your macOS languages, otherwise English), English or Deutsch. The window and the menu switch instantly.
- The previews are not translated. Quick Look output stays exactly as before in every language setting — a test pins that every preview is byte-identical in both.
- About Loupe at the bottom of the app: version, developer (Martin Pfeffer, celox.io), buttons for the source code on GitHub, the website and a PayPal donation, and the MIT License.
- Product page loupe.celox.io in English and German: always the newest release, SHA-256 checksum, a gallery of Loupe's real output, FAQ. Its source lives in this repository under
website/.
🧪 Quality
- 342 tests. The About links, the language resolution and "previews never translated" are mutation-checked: breaking each of them turns its test red.
Loupe 0.5.1 — plain text when switched off
Switching a preview off now shows plain text, exactly like a Mac without Loupe — instead of a file card with a thumbnail.
Install: Apple Silicon (arm64), ad-hoc signed. On first launch right-click → Open, or run
xattr -dr com.apple.quarantine /Applications/Loupe.app.
🐛 Fixed
- When Loupe was switched off (globally or for a category) in 0.5.0, Quick Look showed only the file card. Turning down a preview from the extension does not make Quick Look fall back to the macOS text generator. Loupe now passes the file content through as plain text, and Quick Look renders it itself. Compared side by side against Loupe fully unregistered, the result is identical for JSON, Markdown, TSV, logs, XML and PowerShell.
- Encodings as on macOS: UTF-8 (BOM removed on every macOS version), UTF-16 with BOM, otherwise Latin-1. A UTF-8 character cut at the read boundary is dropped without truncating Latin-1 text.
🧪 Quality
- 328 tests (+6). CI caught a version difference on the way: Foundation strips the UTF-8 BOM on newer macOS but not on macOS 14, so Loupe now strips it itself.
Loupe 0.5.0 — previews on/off, settings that finally arrive
Switch Loupe on and off — globally or per category — and, for the first time, have your settings actually reach the preview.
Install: Apple Silicon (arm64), ad-hoc signed. On first launch right-click → Open, or run
xattr -dr com.apple.quarantine /Applications/Loupe.app. Then enable Loupe under System Settings → General → Login Items & Extensions → Quick Look (macOS 14: Privacy & Security → Extensions). OpenLoupe.apponce after updating so your existing settings are carried over.
✨ New
🎚️ Previews on/off
- A global switch „Loupe-Vorschauen aktiv“ in the companion app, plus one switch per category: Markdown, JSON, Tables (TSV), Log files and Code (all languages, scripts, XML and config files).
- Switched off, Loupe returns no preview and Quick Look shows the macOS default instead (usually a file card with icon and metadata). Changes apply the next time you press Space.
- Your per-category choice is kept while the global switch is off. A category added by a future version starts switched on.
🐛 Fixed
- Settings never reached the extension. Appearance, text size and Markdown width were stored in an App Group suite, but neither the app nor the extension carried the App Group entitlement — so the settings ended up in the app's own sandbox container and every preview used the defaults. App and extension now share the preference domain
io.celox.loupe.sharedthrough theshared-preferencesandbox exception (app: read-write, extension: read-only; works with ad-hoc signing). Existing settings are migrated on first launch. - The status line always said „Nicht registriert“: from inside the sandbox,
pluginkitrefuses the query (unauthorized discovery flag). The app now says it cannot check the status instead of reporting an error that isn't there. - The separators in the app showed the label „Title“; setup hints now name the macOS 15+ path.
🧪 Quality
- 322 tests (+16), including backward compatibility of old settings, unknown future categories, the category of every renderer, the migration (never overwrites), and pins on both entitlement files. Every new test was mutation-checked.
- Verified end to end on a real Mac: a click in the app disables the log preview, Quick Look falls back to the macOS card, a second click brings Loupe back.
Loupe 0.4.0 — Logs, PowerShell & Batch, XML
Native Quick Look previews for log files, PowerShell & Batch scripts and XML dialects — plus fixes for a hang and a phantom line in source-code previews.
Install: Apple Silicon (arm64), ad-hoc signed. On first launch right-click → Open, or run
xattr -dr com.apple.quarantine /Applications/Loupe.app. Then enable Loupe under System Settings → General → Login Items & Extensions → Quick Look (macOS 14: Privacy & Security → Extensions).
✨ New
🪵 Log files (.log)
- Every line split into time · level · source · message — even when formats are mixed in one file.
- Seven formats recognized: generic application logs (incl. Laravel/Monolog and Python logging), nginx/Apache access logs (status colored by class), JSON Lines (incl. pino numeric levels and Unix times), logfmt, syslog/journalctl (also ISO time, e.g. macOS
install.log), macOSlog showand Android logcat. - Levels normalized (
WARN,warning,W, pino40→ WARN), FATAL/ERROR/WARN counted in the toolbar, error rows tinted together with their stack trace. - URLs, IPs, numbers with units, UUIDs, paths and
key=valuehighlighted in messages. - Big logs are read from the end (last 4 MB, newest 5,000 lines) with absolute line numbers.
🪟 PowerShell & Batch (.ps1 .psm1 .psd1 · .bat .cmd)
- Dedicated tokenizers: scoped variables (
$env:PATH), cmdlets, parameters, word operators (-eq), type literals,$var/$(…)interpolation, here-strings,<# #>help blocks ·REM/::comments, labels, every variable form (%VAR%,%~dp0,%%i,!VAR!,%DATE:~0,4%), switches. - macOS only assigns dynamic types to these files, so Loupe now declares proper ones — otherwise Quick Look would never ask it.
🧩 XML, rewritten
- Quote-aware tokenizer with distinct colors for elements, attributes, values and brackets, plus
<?xml ?>,<!DOCTYPE>(incl. internal subset), CDATA and entities. A>inside an attribute value, comment, CDATA or DOCTYPE no longer ends a tag. Also used for HTML code blocks in Markdown. - 13 XML dialects now reach Quick Look:
.xsd.xsl.xslt.xaml.csproj.vbproj.fsproj.vcxproj.props.targets.resx.wsdl.nuspec. SVG keeps showing as an image; Xcode's own types are left alone.
Also
.tomland.ininow reach the source-code preview from Finder.
🐛 Fixed
- Source-code previews hung forever on any
$outside a string — i.e. every Swift file using$0and every JavaScript file using jQuery's$. A new test runs every printable character through every language. - Source-code previews showed a phantom empty last line for files ending in a newline (i.e. almost every file).
- XML: a
>inside an attribute value cut the highlighting short;a < binside CDATA was colored as a tag.
📚 Docs & quality
- README rewritten (English + German): gallery per format with mockups built from Loupe's real output (light/dark follow your GitHub theme), a file-type table showing what Finder actually hands to Loupe, measured performance, troubleshooting.
- 306 tests (+109). New
DocsSyncTestskeep the README honest — versions, test badge, image paths, EN/DE parity and Finder reachability are checked against the code. - Honest limitation, now documented: comma-separated
.csvstays with macOS' built-in generator; no Quick Look extension can take it over (use.tsv).
Verify the download: shasum -a 256 -c SHA256SUMS.txt · Docs: README · Changelog (German): CHANGELOG.md
v0.3.2
v0.3.1 - Fix QuickLook CSV Registration & Layout
Bug Fixes
- QuickLook Content Type Registration: Removed invalid
text.markdownUTI identifier fromInfo.plistwhich prevented macOS QuickLookSupport from registering subsequent Delimited Values / CSV UTIs (public.comma-separated-values-text). - Document Claim Ranks: Set
LSHandlerRanktoDefaultacross JSON, Markdown, and CSV document types and declared file extensions (csv,tsv,md, etc.) in host appInfo.plist. - CSV Preview Layout & Scrolling: Replaced
overflow: hiddenandheight: 100%with natural WebKit body flow to ensure QuickLook window sizing and trackpad/wheel vertical scrolling work seamlessly without clipping. - Install Script: Ensured
install_app.shunconditionally builds a fresh release binary before deploying.
Full Changelog: v0.3.0...v0.3.1