Skip to content

feat(desktop): add branded Mac and Ubuntu installers - #289

Merged
ThisIs-Developer merged 6 commits into
mainfrom
feat/desktop-macos-linux-packaging
Nov 7, 2026
Merged

ThisIs-Developer merged 6 commits into
mainfrom
feat/desktop-macos-linux-packaging

Conversation

@ThisIs-Developer

@ThisIs-Developer ThisIs-Developer commented Nov 6, 2026 •

Copy link
Copy Markdown
Owner

Problem and resulting behavior

The v3.10.5 macOS assets are raw executables without Finder app bundles or preserved execute permissions. Their Neutralino runtimes require macOS 14, preventing Monterey startup. Linux raw downloads also lack dependency installation and a menu launcher.

This change provides real Mac DMGs and Ubuntu/Debian DEBs, and rebuilds the Mac runtime for broader compatibility. Users install and launch the desktop app with the same native functionality, application id and Documents vault as Windows.

Broad Mac compatibility

There is no application-imposed macOS 12 cutoff and no configured upper-version cutoff. The build targets the oldest native dependencies of the current runtime, separately by CPU:

Package Native build target Technical basis
Intel x64 macOS 10.15 Catalina Neutralino's file/vault APIs use Apple's C++ std::filesystem, introduced in 10.15.
Apple Silicon ARM64 macOS 11 Big Sur Native Apple Silicon Macs/ABI start with macOS 11.
Universal 10.15 on Intel; 11 on Apple Silicon Each CPU slice and Finder architecture entry retains its own baseline.

macos_support.py is the single source for compiler targets, Finder metadata and binary validation. CI compiles the actual filesystem dependency at the selected targets and confirms that the Apple compiler rejects it at macOS 10.14. Compiler availability checks remain enabled; newer binaries are never merely relabelled as older-compatible.

These are native build targets, not proof of testing on every older OS. Use available Safari/WebKit updates; on Catalina, use Safari 15.6.1. The system WebKit must provide the UI APIs too. Core startup JS and pinned Marked/DOMPurify/Bootstrap scripts were inspected against Safari 15.6; optional chaining, replaceChildren and inert are not all available in Catalina's original Safari 13. Full older-WebKit UI/renderer/export acceptance remains required.

Compatibility with every historical/future macOS release, PowerPC or 32-bit Macs is not claimed. Going below the current runtime's dependency floor requires backporting/replacing native libraries and qualifying an older browser engine.

Implementation

  • Rebuild pinned Neutralino 6.5.0 (d1b3a4050f2073f236e14c4746ee8aa7dbb9bfe5) for the architecture-specific dependency baselines, selecting its existing CoreGraphics fallback and removing the unused mandatory ScreenCaptureKit link.
  • Verify every Mach-O slice after embedding: correct advertised CPU set, no accidental newer OS requirement, and no mandatory ScreenCaptureKit dependency.
  • Create x64, ARM64 and universal DMGs containing a real Markdown Viewer.app, icon, plist and Applications shortcut. Use HFS+ disk images and per-architecture LSMinimumSystemVersionByArchitecture metadata; sign after resource injection.
  • Support Developer ID signing, hardened runtime, notarization and stapling on tag releases. PR/manual builds are ad-hoc signed and document the per-app Open Anyway flow. Only tag-push jobs access signing credentials.
  • Create Linux amd64/arm64/armhf DEBs with WebKitGTK/GTK/tray dependencies, normalized permissions and desktop launchers; portable tarballs preserve execute permissions. Windows retains its EXE.
  • Preserve the native API allowlist and Documents/Markdown Viewer Vault. Installing, replacing or uninstalling the app does not delete user documents.
  • Gate release assembly on native installed-package tests, including macos-latest, Intel macOS 26, macOS 15 and Ubuntu 22.04/24.04.
  • Assemble a complete desktop-release download on PR, manual and tag runs. Require the exact asset set, reject missing/extra/empty/non-file assets, include installation instructions and SHA-256 checksums, and check every checksum. Tag publication uses these assembled files and checks their hashes again without rebuilding them.

Linux download choices and native branding

Linux has two formats for three architectures: DEB installers and optional portable tarballs for amd64/x64, ARM64 and ARMHF. The recommended desktop-installers ZIP contains only the Windows EXE, three Mac DMGs and three Linux DEBs, with instructions and its own checksums. The full desktop-release download retains all portable archives. No CPU support was removed.

DEB is the recommended Ubuntu/Debian format, following the distribution-specific approach documented by VS Code and Slack. RPM, AppImage, Flatpak and Snap are not implemented by this PR.

  • Shared native metadata identifies Markdown Viewer, ThisIs-Developer, the Apache-2.0 project license, website, support links and copyright.
  • Linux installs the M logo in hicolor and pixmap locations, a searchable desktop entry and AppStream metadata linked to the actual package/launcher/icon. Debian control data now includes the maintainer, installed size and a useful description with publisher/license/links. The AppStream release date comes from RELEASE_NOTES. A packaging revision (3.10.5-1) lets Ubuntu recognize an update from the previous revision-less 3.10.5 DEB without changing the application version.
  • Mac bundles include icon, version, copyright, productivity category and license files. The mounted DMG has the project volume icon and installation instructions.
  • Windows file properties include developer, copyright, license and website. Version-resource tests verify that icon and other embedded resources remain intact.

Ubuntu App Center limitation: its local-DEB page supplies neither publisher nor icon to its header and does not consume the packaged AppStream component there. The header may therefore remain generic, and dedicated license/date fields may remain unknown. The improved long description displays the actual identity/license/links. These changes provide installed-app metadata; they do not change App Center's UI or certify a publisher. See the upstream local title, title bar and metadata model. OS file-type icons and trust warnings are separate from app branding.

Validation and merge readiness

Current head: 50da0aee0f0378a258824d27d678f8138562c8c0. The branch includes current main (020ff0cc7c05d1321e90fddf745b14a2648cf254), has no conflicts or unresolved review threads, and GitHub reports mergeable_state: clean. The PR remains open for the repository owner to merge.

All current workflows passed:

Validation includes:

  • Shared build and unit suite: 258 passed locally, one Windows-only test skipped on Linux; no failures.
  • Actual Debian package creation/extraction; launcher permissions; packaged logo bytes; independent AppStream XML parsing and desktop/icon relationships; Debian version ordering; complete/recommended release manifests and checksum tamper detection.
  • Both Ubuntu runners validated the installed AppStream component and the extracted file tree with their distribution-provided validators. Ubuntu 22.04's older schema is supported. Informational notices about optional content rating and legacy developer metadata are not validation failures.
  • Seven Mac compatibility checks, Apple compiler dependency probes, complete native builds, final signatures and DMGs, mounted volume icon, installed bundle icon/metadata/license checks passed.
  • Each native Mac/Ubuntu check launches the installed GUI, imports a Unicode-named Markdown file, verifies its bytes in the real Documents vault and reopens the app with the document preserved.
  • Windows version-resource checks verify developer/copyright/license/site information and preserve icons and non-version embedded resources.
  • All 12 full-download payloads and all nine recommended-download payloads passed SHA-256 checks.

App Center's graphical local-DEB page was investigated in its upstream implementation, not visually tested in this environment. Packaged metadata validation is not a claim that its header now displays a custom logo/publisher.

Complete application downloads

Recommended desktop-installers.zip — approximately 35 MB; GitHub sign-in required; retained until December 7, 2026.

These are complete desktop applications with normal editing, exports and durable vault storage, built using the release packaging process. There is no special test mode or bundled smoke-test fixture. No Node/npm or adjacent resource file is required.

Extract the ZIP, then select:

  • Intel Mac or macOS VMware on Intel/AMD Windows: markdown-viewer-mac_x64.dmg.
  • Apple Silicon: markdown-viewer-mac_arm64.dmg; markdown-viewer-mac_universal.dmg includes both.
  • Ubuntu on Intel/AMD: markdown-viewer-linux_amd64.deb (package version 3.10.5-1); matching ARM64/ARMHF DEBs are included.
  • Windows: markdown-viewer-win_x64.exe.

Mac: open the DMG, drag the app to Applications, eject the image, then launch it. Ubuntu: install the DEB using Software Install or sudo apt install ./markdown-viewer-linux_amd64.deb, then launch Markdown Viewer from Applications. Instructions, signing status and per-file checksums are included.

Recommended ZIP SHA-256: d8b4579a107667e50da0a1d6aeef3d22dfa369b0126770491042e246180549d7.

Optional full download with portable Linux archives — approximately 48 MB, also retained until December 7, 2026.

Full ZIP SHA-256: 12e5e84e9527932153750323a7e3cbddc4b641c353ebc87b5fcc9d868eb269c5.

Remaining acceptance and distribution limits

  • macOS 10.15–14 still need manual acceptance with available Safari/WebKit updates. Include browser quarantine, Documents permissions and full renderer/export flows. CI tests macOS 15 and 26.
  • ARM Linux packages require hardware acceptance.
  • Current Mac packages are ad-hoc signed, not Apple notarized. Users may need per-app Open Anyway. Trusted Mac distribution requires the maintainer's Developer ID/notarization credentials; the optional signing path has not been exercised without them.
  • Metadata cannot remove App Center's third-party package warning, Windows SmartScreen or macOS trust prompts. No package repository or store listing was published.

All commits use the repository owner's GitHub identity. No merge, version tag or public desktop release has been performed. Merging alone does not publish desktop downloads; a subsequent version-tag push runs the gated publication workflow.

@vercel

vercel Bot commented Nov 6, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
markdown-viewer Ready Ready Preview Nov 7, 2026 2:44pm UTC

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Nov 6, 2026 •

Copy link
Copy Markdown

Deploying markdownviewer with  Cloudflare Pages  Cloudflare Pages

Latest commit: 50da0ae
Status: ✅  Deploy successful!
Preview URL: https://50dcca7c.markdownviewer.pages.dev
Branch Preview URL: https://feat-desktop-macos-linux-pac.markdownviewer.pages.dev

View logs

@ThisIs-Developer
ThisIs-Developer force-pushed the feat/desktop-macos-linux-packaging branch from 2b3e438 to e4c42a4 Compare November 7, 2026 03:16
@ThisIs-Developer ThisIs-Developer changed the title feat(desktop): ship Monterey-compatible Mac apps and Ubuntu installers feat(desktop): add macOS 12+ and Ubuntu installers Nov 7, 2026
@ThisIs-Developer ThisIs-Developer changed the title feat(desktop): add macOS 12+ and Ubuntu installers feat(desktop): add Mac and Ubuntu installers with broader compatibility Nov 7, 2026
@ThisIs-Developer ThisIs-Developer added ✨ enhancement New feature, improvement, or usability enhancement. 🐛 bug Something is broken or not working as expected. labels Nov 7, 2026 — with ChatGPT Codex Connector
@ThisIs-Developer ThisIs-Developer changed the title feat(desktop): add Mac and Ubuntu installers with broader compatibility feat(desktop): add branded Mac and Ubuntu installers Nov 7, 2026
@ThisIs-Developer
ThisIs-Developer merged commit 29eb529 into main Nov 7, 2026
22 checks passed
@ThisIs-Developer
ThisIs-Developer deleted the feat/desktop-macos-linux-packaging branch November 12, 2026 05:42

This branch was successfully deployed

1 active deployment
Preview — 50da0aee Deployed Nov 7, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🐛 bug Something is broken or not working as expected. ✨ enhancement New feature, improvement, or usability enhancement.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant