Repository navigation
Releases
TinyOFD v0.0.4 — Windows x64 + macOS arm64 portable
TinyOFD v0.0.4 — Windows x64 + macOS arm64 portable
平台 / Platforms: Windows (x64) and macOS 11+ (Apple Silicon / arm64 only). Portable zips: extract and run, no install. Intel Macs and Linux are not supported.
Download
| Platform | Asset | SHA-256 |
|---|---|---|
| Windows x64 | tinyofd-win64-0.0.4-20261017.zip |
cfb7543203bc71319ad2212d04bbbcdfe50e3172efd1756cebcf821025d807d1 |
| macOS arm64 | tinyofd-macos-arm64-0.0.4-20261026.zip |
e3fd85efd256f894bf0577b94e6d16fc3c2ec5b08c1e501b9d9bb8ad17a7569f |
The macOS zip contains ofdviewer.app, README.md, LICENSE and INSTALL-macOS.txt.
macOS first launch (Gatekeeper)
The macOS bundle is adhoc-signed and not notarized, so Gatekeeper blocks the first launch of a browser-downloaded copy. This is a policy rejection, not a corrupt download or broken signature. Clear it with any of:
xattr -dr com.apple.quarantine /Applications/ofdviewer.app(use the real path), then double-click.- macOS 15+: try to open once, then System Settings → Privacy & Security → "Open Anyway" for TinyOFD Viewer.
- macOS 14 and earlier: right-click → Open → Open again in the dialog.
After one successful launch the quarantine flag is gone and later launches work normally. INSTALL-macOS.txt inside the zip documents these steps and checksum verification.
Fixed
- Resource file names are no longer hard-coded. The
PublicRes/DocumentResnames declared inDocument.xml<CommonData>(e.g.PublicRes_0.xmlfrom some producers) are resolved to package entries: a leading/is package-root relative, otherwise document-directory relative, with the canonical file name as fallback. The previous fixedDoc_N/PublicRes.xmllookup exited silently, so every embedded font and image declared there was dropped, and text whoseTextCodeis only meaningful through the embedded font's cmap rendered as garbage. - CJK documents whose font is not embedded now render instead of drawing
.notdef: a generic CJK system-font substitution is allowed only when the whole glyph run consists of Unicode scalars, so resolution through the substituted face's cmap cannot misplace glyphs. Runs carrying authoritative glyph indices still draw placeholders rather than wrong glyphs. script/clean.ps1no longer deletes third-party intermediates under_tmp/vendor(-Excludeonly matches leaf names, so it never skipped_tmp).ofdviewer.rcversion resource was stale (FILEVERSION 0,0,2,0while the app already reported 0.0.3); now0,0,4,0, still generated from the single source of truthapps/ofdviewer/ofd_version.pas.
Tooling
script/build.ps1also buildsofd_av_test, the offscreen render/screenshot tool used by the visual regression procedure.script/macos_release_package.shbuilds the macOS arm64 zip outside the FileProvider-synced tree, signs and verifies the bundle, then replays a quarantined browser download (extract, re-verify signature, check architecture / minimum macOS / executable bit, and reject leaked FinderInfo/FileProvider xattrs).
Quality
- 1016 automated tests passing (7 new regression cases: 4 resource-path, 3 font-fallback), heaptrc enabled
- Visual regression (gemma4:12B vision QA + manual inspection): the previously garbled sample renders crisp Chinese title and body text with no garbled glyphs, no black blocks and no overlap
- macOS arm64 headless render acceptance across seven samples, no garbled glyphs or black blocks
Notes
- Windows x64 portable zip: extract and run, no install. Non-commercial license (PolyForm Noncommercial 1.0.0).
- macOS arm64 portable zip: Apple Silicon only, macOS 11+. Adhoc-signed, not notarized; see the Gatekeeper steps above.
- Linux is unvalidated.
TinyOFD v0.0.3 — Windows x64 portable
TinyOFD v0.0.3 (Windows x64 portable)
Fixed
- OFD XML: dangling SAX handler on parse failure, attribute leak on depth-limit, stale CGU cache when reopening documents
- Layer vs non-Layer object parsing drift: PathObject clips, TextObject ReadDirection/CharDirection/LetterSpacing, GroupObject boundary/CTM and Region/VectorShape/PageBlock children
- Bookmark (outline) parsing leaked the whole outline on malformed XML
- Text search: UB zero-init of a managed record, O(n^2) page text concat
- TTF parser hardened against malformed fonts: table-directory/loca/glyph-header out-of-bounds reads, 1-byte overruns in coordinate reads, Integer overflow bypasses, cmap format4 idRangeOffset mis-resolution (glyph lookup was wrong for idRangeOffset != 0)
- Tab strip: stale hover index after tab removal
Changed
- Compound-glyph expansion is now budgeted (fixes tiny-font DoS that expanded to millions of points)
- Delta-value parsing: capped at 65536 with geometric growth (was unbounded O(n^2))
- App version single-sourced in ofd_version.pas; About box shows real version
Quality
- 1005 automated tests passing (incl. seeded TTF fuzz and parse-divergence regressions), heaptrc: 0 unfreed blocks
- Visual regression (gemma4:12B vision QA): 999.ofd / invoice pages pass
Notes
- Windows x64 portable zip: extract and run. Non-commercial license (PolyForm Noncommercial 1.0.0).
TinyOFD v0.0.2 — First public release (Windows x64)
TinyOFD Release Notes
v0.0.2 (2026-08-15)
首个公开版本 / First public release
平台:仅 Windows (x64)(便携 zip,解压即用,无需安装)。
Platform: Windows (x64) only (portable zip, extract and run, no install).
功能 / Features
- OFD 解析核心(
ofdcore,纯 Pascal,无 GUI 依赖)
Pure-Pascal OFD parsing core (ofdcore, GUI-free) - 软件渲染管线(
ofdrender):FreeType2 字体、文本、路径填充/描边、渐变、图片合成、裁剪、旋转
Software render pipeline (ofdrender): FreeType2 fonts, text, path fill/stroke, gradients, image compositing, clipping, rotation - LCL 阅读器(
ofdlcl+apps/ofdviewer):多标签页、单页/连续页视图、缩略图面板、缩放、滚动、翻页、查找
LCL reader (ofdlcl+apps/ofdviewer): multi-tab, single/continuous page views, thumbnail panel, zoom, scroll, page navigation, find - 懒加载 + 缓存:按需解析页面、缓存渲染结果,打开与翻页流畅
Lazy loading + caching: pages parsed on demand, render results cached, for smooth open and paging
下载 / Download
release/tinyofd-win64-0.0.2-20260815.zip
已知限制 / Known limitations
- 仅 Windows (x64)。macOS 构建仍有未解决问题,不作为发布版本;Linux 未验证。
Windows (x64) only. The macOS build still has unresolved issues and is not release-ready; Linux is unvalidated.