Skip to content

Releases

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 09 Nov 07:55

Added

  • White is now available in the shared markup palette, including the ink colour picker.

Changed

  • The selected ink colour in the palette now has a thick accent ring and a check mark, with
    a contrasting dark/light check so it stays visible on every swatch including white.
  • Document metadata and the outline now load on demand from the resident PDFium handle,
    only when the reader first opens the contents or document-information panel. Opening a
    document no longer pays for either parse, and the separate PdfPig dependency is gone.
  • PDFium's native gate is priority-aware: a visible page render is handed the gate before
    queued text extraction, link loading, or search work. A long search now yields between
    pages instead of making the visible page wait for the whole scan.
  • Scrolling and zooming now render new pages at 65% width and use medium-quality bitmap
    interpolation; once the reader pauses for 220ms, affected pages refine to the full
    target size and high-quality interpolation.
  • Retired page bitmaps go through a small generation-scoped pool instead of being
    reallocated from scratch on every render. When the source and target strides match, the
    pixel copy is one bulk block instead of one copy per row.
  • Page trims now walk a set of pages that actually hold bitmaps, thumbnails track their own
    populated set, and text trimming walks the loader's loaded pages. Zoom updates only the
    realised page views; scroll layout is computed from page points and the zoom factor.
    Long documents no longer scan every page for each turn or zoom tick.
  • Thumbnails reuse the page's decoded bitmap when it is already available and downscale it
    instead of asking PDFium to render the page a second time at thumbnail size.
  • Large-document searches use PDFium's native text search to reject non-matching pages
    before their words and character boxes are materialized. Search progress updates are
    throttled to 100ms instead of posting once per page.
  • Queued page renders are coalesced by document/page/kind, so a newer request supersedes
    an older queued render instead of making the worker execute stale pages first.

Fixed

  • Indeterminate progress bars now only animate while their operation is active. The busy
    overlay's spinner had continued repainting the hidden welcome screen after a document
    finished opening, keeping one CPU core busy until the window was minimised. Page,
    thumbnail, and search spinners are gated the same way.
  • Toolbar clicks are no longer mistaken for text-selection presses when a page is scrolled
    partly behind the toolbar. Position-based page hit-testing is now clipped to the page
    list bounds, and a selection press must originate inside a page view.
  • Search previous/next controls stay hidden until a search returns results and while a
    search is running, so the loading bar no longer overlaps them.

Full Changelog: https://github.com/RyzenWang/AirPDF/blob/v0.8.0/CHANGELOG.md

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 08 Nov 13:02

AirPDF 0.7.0

Tabs became a workspace: they can be dragged into a new order, the strip scrolls itself when a tab is held near either edge, and a right-click closes one tab or every other one. A tray icon keeps reading sessions alive while the window is hidden, and the Windows titlebar opens the native system menu on right-click or Alt+Space. Text selection is character-granular, and the arrow keys scroll a small step instead of turning a whole page.

  • Drag tabs to reorder them; holding one near either edge auto-scrolls the strip and tabs slide into place instead of snapping.
  • Right-click a tab for Close tab and Close other tabs, both behind the existing unsaved-changes confirmation.
  • A system tray icon restores, hides, or opens a window; Hide to tray keeps documents open, and closing a window still exits.
  • The Windows custom titlebar opens the native window menu on right-click and Alt+Space, and its caption buttons dim while the window is inactive.
  • Text selection is character-granular: a drag copies exactly what was highlighted, while double-click still takes a whole word. Each word keeps the box of every character PDFium reported, and adjacent characters are merged into runs before painting, so a highlight stays a few rectangles rather than one per glyph.
  • The arrow keys scroll a small step, Home and End jump to the start and end of the document, and Page Up / Page Down still scroll a screen.
  • Page navigation moved to the far left of the toolbar, aligned with the thumbnail rail.
  • The app icon is the orange brand tile, regenerated for Windows, macOS, Linux and the Store artwork.
  • 272 tests pass (116 Core, 156 App), and the Windows, Linux and macOS builds are NativeAOT.

Known limitations: the installers remain withheld while the builds are unsigned, so Windows and macOS get portable archives. A document that is only page images still has no text layer, so selection and search find nothing in it until OCR support lands.

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 05 Nov 06:23

AirPDF 0.6.0

The Windows titlebar now lives in the 44px workspace bar, together with the brand, Open, document tabs and window controls. Tabs use the warm active pill, the new-tab button follows the last tab and pins to the visible edge during overflow, and Windows 11 Snap Layouts work on the custom maximize button. macOS and Linux keep their native decorations.

  • Unified workspace/tab bar with light, dark and high-contrast tab states.
  • Custom Windows titlebar with drag region and minimise, maximise/restore and close controls.
  • HTMAXBUTTON hit testing restores Windows 11 Snap Layouts; hover state is preserved.
  • New-tab button follows the last tab and pins at overflow.
  • 4px tab-strip scrollbar and vertically centred fit-width icon.
  • 221 tests pass; Linux x64 and macOS arm64 cross-builds succeed.

Known limitations: the titlebar system menu is not wired, and inactive-window caption dimming is pending. Unsigned installers remain withheld by the release workflow.

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 04 Nov 09:17

AirPDF 0.5.0

Annotation tools arrive in full: ink, sticky notes, an eraser, colour palettes, and a thickness
control, with undo and redo covering all of them.

  • Draw with Ctrl+Shift+K or the pen. The stroke under the pointer is the colour and thickness it
    will keep; the arrow beside the pen opens the colours and a live thickness sample.
  • Erase any markup with the eraser: one drag is one undo step. Esc leaves the eraser as well as
    the pen.
  • Add sticky notes and remove annotations from the page menu; click a note to read it.
  • The pen and its palette arrow form one control, with the current colour under the nib.
  • Undo and redo keep the last 100 markup edits and restore the exact colour of erased highlights
    and strokes instead of bringing them back black.
  • Text selection, drawing, and erasing are mutually exclusive; switching to a tool clears the
    selection.
  • One PDF is one tab: opening a file that is already open focuses its tab, so saving no longer
    fails because a second session holds the file.
  • Closing a tab reliably returns to Home, and reopening the same file from the recent list
    renders its pages at the remembered position instead of showing a blank document.

Unsigned Windows and macOS installers stay withheld; Windows uses the Microsoft Store, and macOS
and Linux ship portable archives.

202 tests pass.

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 04 Nov 00:59

AirPDF 0.4.0

Windows builds are now in the Microsoft Store:

https://apps.microsoft.com/detail/9pnsx3223qh1

That is the recommended way to install on Windows: updates arrive through the Store, and no
unsigned installer has to be downloaded. macOS and Linux keep their portable archives.

Annotations

  • Highlight any selection with Ctrl+Shift+H, remove a highlight from the page menu, and take back
    either with Ctrl+Z. Redo arrived with it - Ctrl+Y, plus buttons in the toolbar for both.
  • Ctrl+S now saves into the document you opened. It writes a temporary file beside the original,
    swaps it in, and reopens it, because PDFium reads through an open stream that has to be closed
    before the file can be replaced. Ctrl+Shift+S is Save as.
  • A save that cannot replace the file no longer takes the document with it: a read-only or busy
    file is detected before the session is closed, so the reader keeps working and is told why.

Reading

  • The welcome screen is the first tab, so the strip exists from the first document and going home
    no longer closes what you were reading.
  • The logo and wordmark form one button back to it, and a document already open in another tab is
    focused rather than opened twice when you click one of its bookmarks from Home.
  • Bookmarks can be renamed and dragged into the order you want.
  • The toolbar's zoom controls are one size, and undo/redo sit with the navigation icons.

Fixes

  • A highlight stayed invisible until the document was saved and reopened, because the page already
    had a bitmap at that width and the re-render was skipped.
  • Switching tabs no longer leaves the previous document's pages active.
  • Scrolling after a tab switch no longer overflows the stack.

Windows installers and the macOS .pkg stay withheld while the builds are unsigned. Use the Store
for Windows, or the portable archives for macOS and Linux.

167 tests pass on Windows, Linux and macOS.

v0.3.2

Choose a tag to compare

@github-actions github-actions released this 02 Nov 07:34

AirPDF 0.3.2

Every platform is compiled ahead of time now: Linux and macOS join Windows, so the reader
starts almost immediately wherever you run it.

Downloads

These builds are unsigned, so the installers are not offered here: SmartScreen and Gatekeeper
would block the first launch, and that reads as a fault in the reader rather than in its
distribution. Use the portable packages instead:

  • Windows x64: AirPDF-win-Portable.zip — unzip anywhere and run AirPdf.exe
  • macOS arm64 / x64: AirPDF-osx-<arch>-Portable.zip — unzip and drag AirPDF.app to Applications
  • Linux x64: AirPDF-0.3.2-linux-x64.tar.gz

The first launch may still need More info → Run anyway on Windows, or right-click → Open on
macOS. The installers return once a signing certificate is configured.

Startup

  • Windows, Linux and macOS builds are all NativeAOT. On Windows that took the time to first
    window from 5.0 s to 0.7 s; Linux and macOS share the same runtime and the same cause,
    which was JIT compilation spread across Avalonia initialisation, XAML loading and first
    layout rather than one slow call.
  • Downloads follow the build: Windows and macOS ship a Velopack portable package, Linux ships
    a tar.gz of the AOT output.

Under the hood

  • Each platform is built and gated separately, because Windows says nothing about Linux or
    macOS: different toolchains, different native assets. The Linux job installs clang and
    zlib1g-dev; macOS uses the Xcode toolchain on the runner.
  • A release or pull request fails on any AOT warning, on a missing binary, or on an output
    that is far larger than expected. A build that lost a reflection path still starts and then
    misbehaves at run time, which is how a trimmed build once stopped writing settings.

v0.3.1

Choose a tag to compare

@github-actions github-actions released this 02 Nov 06:04

AirPDF 0.3.1

The Windows build is compiled ahead of time, so the reader starts almost immediately.

Startup

  • Time to first window on Windows is now 0.7 s, down from 5.0 s. Nothing is compiled at
    startup any more. The old cost was spread evenly across Avalonia initialisation, XAML
    loading and first layout rather than sitting in one slow call, which is why this needed
    ahead-of-time compilation rather than tuning.
  • The download grows from 33.4 MB to 35.0 MB. The uncompressed output is larger (60 MB
    against 28 MB), but Velopack compresses the payload.

Under the hood

  • The Windows release and every pull request now build with NativeAOT and fail on any AOT or
    trimming warning, because either can remove a reflection path that only fails at runtime.
    A trimmed build once stopped writing the settings file exactly that way.
  • Velopack is no longer rooted for trimming. Rooting it made the AOT compiler compile a COM
    shortcut class whose IL cannot be compiled, which warned that it would always throw; the
    app never reaches that code, and leaving it trimmable removes the warning and 1.1 MB.
  • The update path is verified on the AOT build rather than assumed: feed parsing, download
    and package unpacking all work.
  • macOS and Linux builds are unchanged for this release.

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 02 Nov 03:03

AirPDF 0.3.0

Rotated pages

  • Rotated pages now work end to end. Links, search highlights and text selection used to
    do nothing on a page with a non-zero /Rotate; all three are supported now, at 90, 180
    and 270 degrees.
  • The fix is a shared page-space to display-space transform plus a text layer that reports
    characters in reading order, verified by rendering rotated fixtures and checking that
    each computed rectangle covers the ink that was drawn.

Reading

  • The text layer is read through PDFium instead of PdfPig, using the same document handle
    the pages are rendered from. PdfPig applied /Rotate to its letters before grouping them,
    so a quarter turn came back as single letters and a half turn as reversed text.
  • Chinese and Japanese text keeps per-character selection, and searching for a multi
    character CJK term no longer fails because spaces were inserted between characters.
  • PdfPig still supplies document metadata and the bookmark outline.

Packaging

  • The Windows download is roughly halved: 53 MB to 28 MB, by publishing trimmed. The
    release step fails on any trimming warning instead of shipping a build whose reflection
    paths were removed, and the same check runs on every pull request.
  • macOS and Linux are unchanged for this release.

Under the hood

  • Settings are serialized through a source-generated context, the search whitespace
    matcher is a generated regex, and every XAML binding is compiled. Trimming and NativeAOT
    analysis now reports no warnings for the whole solution.
  • 90 tests, up from 52.

AirPDF 0.2.1

Choose a tag to compare

@github-actions github-actions released this 31 Oct 06:03

A packaging release. The application binaries are unchanged from 0.2.0; this version ships the signing tooling and makes the release pipeline state explicit.

Downloads

Platform Package
Windows x64 AirPDF-win-Portable.zip — unzip and run AirPdf.exe
macOS Apple Silicon Portable zip — unzip and drag the app to Applications
macOS Intel Portable zip — unzip and drag the app to Applications
Linux x64 AirPDF-0.2.1-linux-x64.tar.gz

The installers were withdrawn on 3 November 2026: these builds are unsigned, and SmartScreen and Gatekeeper block an unsigned first launch, which reads as a fault in the reader. The portable packages above are the same build. The first launch may need More info → Run anyway on Windows, or right-click → Open on macOS.

Installed Windows and macOS builds update themselves: they check this release channel, download in the background, and offer Restart to update. Portable and source builds do not self-update.

What changed

  • packaging/signing/Set-SigningSecrets.ps1 validates a code-signing certificate (private key, Code Signing extended key usage, expiry) and uploads it as the repository secrets the release workflow consumes.
  • packaging/signing/New-TestCertificate.ps1 mints a throwaway certificate so the signing path can be exercised without a purchased one.
  • A Signing check workflow verifies the configured credentials without publishing anything.
  • The release workflow now fails when signing is half configured instead of silently shipping an unsigned build, and states the signing outcome in the run summary.
  • docs/SIGNING.md documents certificate acquisition, secret names, verification, rotation, and cost.

The reading experience is unchanged: packages still bring PDFium rendering, search, text selection, reading position memory, tabs, multiple windows, links, and English/Simplified Chinese.

Code signing status

These builds are unsigned. No Windows or Apple signing credentials are configured in this repository yet, so:

  • Windows SmartScreen will warn about an unknown publisher until the file builds reputation.
  • macOS Gatekeeper blocks the .pkg/.app on other machines. Right-click → Open, or xattr -dr com.apple.quarantine on the app, works around it locally.

The pipeline is ready and verified; see docs/SIGNING.md to add credentials.

Verification

  • Core and headless UI tests: 52/52 passing
  • CI: Windows, Ubuntu, and macOS green
  • Release workflow: all four platform packages built and attached, including the releases.*.json manifests the in-app updater reads
  • Signing check: passes with a throwaway certificate, confirming the signing path works end to end

Full changelog: CHANGELOG.md

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 29 Oct 10:43

Full Changelog: v0.1.0...v0.2.0