Skip to content

macOS: App crashes on launch after updating to v0.15.4-rc.1 — Library not loaded: @rpath/libgraphviz_api.dylib #38

Description

@alinejun

Summary

After updating Markon to the latest version v0.15.4-rc.1, the app crashes immediately on launch on macOS and never reaches the main UI. Rolling back to 0.14.x works fine.

Version Info

  • Affected version: v0.15.4-rc.1 (latest released version; RC pre-release)
  • First version affected: v0.15.4-rc.1 — the first version to introduce the graphviz dynamic library dependency
  • Unaffected versions: 0.14.x and earlier (no such dependency)
  • Version before update: 0.14.x (launched normally before updating)
  • About the 0.15.4 shown in the crash report: the -rc.1 suffix exists only in the git release tag, not in the app version string. The app version comes from Cargo.toml (0.15.4), so the crash report's CFBundleShortVersionString / CFBundleVersion show 0.15.4, which actually corresponds to the v0.15.4-rc.1 release. There is no final v0.15.4 release yet.

Environment

  • Markon version: v0.15.4-rc.1 (app version string reports 0.15.4)
  • OS: macOS 26.2 (Build 25C56)
  • Model: Mac14,9 (Apple M2 Pro, ARM64)
  • Install path: /Applications/Markon.app
  • Install method: official DMG

Reproduction

  1. Install / update to v0.15.4-rc.1;
  2. Launch Markon;
  3. The app crashes immediately and fails to start.

Crash Info

Running the binary /Applications/Markon.app/Contents/MacOS/markon-gui directly reports:

Library not loaded: @rpath/libgraphviz_api.dylib
Referenced from: /Applications/Markon.app/Contents/MacOS/markon-gui
Reason: tried: '/Applications/Markon.app/Contents/Frameworks/libgraphviz_api.dylib' (no such file)
Click to expand the full crash report (system-generated, includes full JSON)
-------------------------------------
Translated Report (Full Report Below)
-------------------------------------
Process:             markon-gui [78249]
Path:                /Applications/Markon.app/Contents/MacOS/markon-gui
Identifier:          dev.kookyleo.markon
Version:             0.15.4 (0.15.4)
Code Type:           ARM-64 (Native)
Role:                Default
Parent Process:      launchd [1]
Coalition:           dev.kookyleo.markon [101705]
User ID:             501

Date/Time:           2026-07-07 10:54:55.4708 +0800
Launch Time:         2026-07-07 10:54:55.4175 +0800
Hardware Model:      Mac14,9
OS Version:          macOS 26.2 (25C56)
Release Type:        User

Crash Reporter Key:  5E49F3BB-6382-CDA5-6D11-58073FE4C285
Incident Identifier: C5B0B144-0E5A-4998-A00E-793F40B65F02

Sleep/Wake UUID:       957BA00B-3A70-4EA4-856B-A1F8F851DC1B

Time Awake Since Boot: 1100000 seconds
Time Since Wake:       89216 seconds

System Integrity Protection: enabled

Triggered by Thread: 0

Exception Type:    EXC_CRASH (SIGABRT)
Exception Codes:   0x0000000000000000, 0x0000000000000000

Termination Reason:  Namespace DYLD, Code 1, Library missing
Library not loaded: @rpath/libgraphviz_api.dylib
Referenced from: <A4573331-216B-3F3B-B45D-166F1E974C49> /Applications/Markon.app/Contents/MacOS/markon-gui
Reason: tried: '/Applications/Markon.app/Contents/Frameworks/libgraphviz_api.dylib' (no such file), '/Applications/Markon.app/Contents/Frameworks/libgraphviz_api.dylib' (no such file)
(terminated at launch; ignore backtrace)

Dyld Error Message:
  1


Thread 0 Crashed:
0   dyld                                     0x195e1e940 __abort_with_payload + 8
1   dyld                                     0x195ea4e20 abort_with_payload_wrapper_internal + 104
2   dyld                                     0x195ea4e54 abort_with_payload + 16
3   dyld                                     0x195e27640 dyld4::halt(char const*, dyld4::StructuredError const*) + 312
4   dyld                                     0x195e23430 dyld4::prepare(dyld4::APIs&, mach_o::Header const*) + 3840
5   dyld                                     0x195e21d04 start + 7104


Thread 0 crashed with ARM Thread State (64-bit):
    x0: 0x0000000000000006   x1: 0x0000000000000001   x2: 0x000000016f7c64e0   x3: 0x0000000000000064
    x4: 0x000000016f7c60e0   x5: 0x0000000000000000   x6: 0x0000000000000000   x7: 0x0000000000000000
    x8: 0x0000000000000020   x9: 0x785474184aca005c  x10: 0x0000000000001f80  x11: 0x0000000202e7c0a0
   x12: 0x0000000000020000  x13: 0x0000000195e19000  x14: 0x0000000000000001  x15: 0x0000000000000000
   x16: 0x0000000000000209  x17: 0xcadd00016f7c5dd8  x18: 0x0000000000000000  x19: 0x0000000000000000
   x20: 0x000000016f7c60e0  x21: 0x0000000000000064  x22: 0x000000016f7c64e0  x23: 0x0000000000000001
   x24: 0x0000000000000006  x25: 0x000000001f070004  x26: 0x0000000000000000  x27: 0x000000016f7c6f58
   x28: 0x0000000000000000   fp: 0x000000016f7c60b0   lr: 0x0000000195ea4e20
    sp: 0x000000016f7c6070   pc: 0x0000000195e1e940 cpsr: 0x80001000
   far: 0x0000000000000000  esr: 0x56000080 (Syscall)

Binary Images:
       0x100638000 -        0x1025c7fff dev.kookyleo.markon (0.15.4) <a4573331-216b-3f3b-b45d-166f1e974c49> /Applications/Markon.app/Contents/MacOS/markon-gui
       0x195e19000 -        0x195eb7fc3 dyld (*) <0975afba-c46b-364c-bd84-a75daa9e455a> /usr/lib/dyld
               0x0 - 0xffffffffffffffff ??? (*) <00000000-0000-0000-0000-000000000000> ???

External Modification Summary:
  Calls made by other processes targeting this process:
    task_for_pid: 0
    thread_create: 0
    thread_set_state: 0
  Calls made by this process:
    task_for_pid: 0
    thread_create: 0
    thread_set_state: 0
  Calls made by all processes on this machine:
    task_for_pid: 9
    thread_create: 0
    thread_set_state: 46

VM Region Summary:
ReadOnly portion of Libraries: Total=621.9M resident=0K(0%) swapped_out_or_unallocated=621.9M(100%)
Writable regions: Total=8336K written=112K(1%) resident=112K(1%) swapped_out=0K(0%) unallocated=8224K(99%)

                                VIRTUAL   REGION
REGION TYPE                        SIZE    COUNT (non-coalesced)
===========                     =======  =======
STACK GUARD                       56.0M        1
Stack                             8176K        1
__DATA                             133K        3
__DATA_CONST                      3374K        2
__DATA_DIRTY                        14K        1
__LINKEDIT                       589.7M        2
__TEXT                            32.2M        2
__TPRO_CONST                       128K        1
dyld private memory                 16K        1
page table in kernel               112K        1
===========                     =======  =======
TOTAL                            689.6M       15


-----------
Full Report
-----------

{"app_name":"markon-gui","timestamp":"2026-07-07 10:54:55.00 +0800","app_version":"0.15.4","slice_uuid":"a4573331-216b-3f3b-b45d-166f1e974c49","build_version":"0.15.4","platform":1,"bundleID":"dev.kookyleo.markon","share_with_app_devs":0,"is_first_party":0,"bug_type":"309","os_version":"macOS 26.2 (25C56)","roots_installed":0,"name":"markon-gui","incident_id":"C5B0B144-0E5A-4998-A00E-793F40B65F02"}
{
  "uptime" : 1100000,
  "procRole" : "Default",
  "version" : 2,
  "userID" : 501,
  "deployVersion" : 210,
  "modelCode" : "Mac14,9",
  "coalitionID" : 101705,
  "osVersion" : {
    "train" : "macOS 26.2",
    "build" : "25C56",
    "releaseType" : "User"
  },
  "captureTime" : "2026-07-07 10:54:55.4708 +0800",
  "codeSigningMonitor" : 2,
  "incident" : "C5B0B144-0E5A-4998-A00E-793F40B65F02",
  "pid" : 78249,
  "translated" : false,
  "cpuType" : "ARM-64",
  "procLaunch" : "2026-07-07 10:54:55.4175 +0800",
  "procStartAbsTime" : 28075055492077,
  "procExitAbsTime" : 28075056421834,
  "procName" : "markon-gui",
  "procPath" : "\/Applications\/Markon.app\/Contents\/MacOS\/markon-gui",
  "bundleInfo" : {"CFBundleShortVersionString":"0.15.4","CFBundleVersion":"0.15.4","CFBundleIdentifier":"dev.kookyleo.markon"},
  "storeInfo" : {"deviceIdentifierForVendor":"E0978E40-2A9F-5FA0-B272-E3D7BDC3F65D","thirdParty":true},
  "parentProc" : "launchd",
  "parentPid" : 1,
  "coalitionName" : "dev.kookyleo.markon",
  "crashReporterKey" : "5E49F3BB-6382-CDA5-6D11-58073FE4C285",
  "appleIntelligenceStatus" : {"state":"unavailable","reasons":["regionIneligible","countryBillingIneligible","countryLocationIneligible"]},
  "developerMode" : 1,
  "codeSigningID" : "dev.kookyleo.markon",
  "codeSigningTeamID" : "",
  "codeSigningFlags" : 570503953,
  "codeSigningValidationCategory" : 10,
  "codeSigningTrustLevel" : 4294967295,
  "codeSigningAuxiliaryInfo" : 0,
  "instructionByteStream" : {"beforePC":"eAAAALwAAAAoAQAAcAAAAAABAABoAAAAGAEAADgBAAAwQYDSARAA1A==","atPC":"AwEAVH8jA9X9e7+p\/QMAkRb1\/5e\/AwCR\/XvBqP8PX9bAA1\/WEC2A0g=="},
  "bootSessionUUID" : "13A180F9-62FB-44FE-8C15-77C2FCDF3764",
  "wakeTime" : 89216,
  "fatalDyldError" : 1,
  "sleepWakeUUID" : "957BA00B-3A70-4EA4-856B-A1F8F851DC1B",
  "sip" : "enabled",
  "exception" : {"codes":"0x0000000000000000, 0x0000000000000000","rawCodes":[0,0],"type":"EXC_CRASH","signal":"SIGABRT"},
  "termination" : {"code":1,"flags":518,"namespace":"DYLD","indicator":"Library missing","details":["(terminated at launch; ignore backtrace)"],"reasons":["Library not loaded: @rpath\/libgraphviz_api.dylib","Referenced from: <A4573331-216B-3F3B-B45D-166F1E974C49> \/Applications\/Markon.app\/Contents\/MacOS\/markon-gui","Reason: tried: '\/Applications\/Markon.app\/Contents\/Frameworks\/libgraphviz_api.dylib' (no such file), '\/Applications\/Markon.app\/Contents\/Frameworks\/libgraphviz_api.dylib' (no such file)"]},
  "extMods" : {"caller":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"system":{"thread_create":0,"thread_set_state":46,"task_for_pid":9},"targeted":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"warnings":0},
  "faultingThread" : 0,
  "threads" : [{"triggered":true,"id":47719767,"threadState":{"x":[{"value":6},{"value":1},{"value":6165390560},{"value":100},{"value":6165389536},{"value":0},{"value":0},{"value":0},{"value":32},{"value":8670682830277836892},{"value":8064},{"value":8638677152},{"value":131072},{"value":6809554944},{"value":1},{"value":0},{"value":521},{"value":14617839971679886808},{"value":0},{"value":0},{"value":6165389536},{"value":100},{"value":6165390560},{"value":1},{"value":6},{"value":520552452},{"value":0},{"value":6165393240},{"value":0}],"flavor":"ARM_THREAD_STATE64","lr":{"value":6810127904},"cpsr":{"value":2147487744},"fp":{"value":6165389488},"sp":{"value":6165389424},"esr":{"value":1442840704,"description":"(Syscall)"},"pc":{"value":6809577792,"matchesCrashFrame":1},"far":{"value":0}},"frames":[{"imageOffset":22848,"symbol":"__abort_with_payload","symbolLocation":8,"imageIndex":1},{"imageOffset":572960,"symbol":"abort_with_payload_wrapper_internal","symbolLocation":104,"imageIndex":1},{"imageOffset":573012,"symbol":"abort_with_payload","symbolLocation":16,"imageIndex":1},{"imageOffset":58944,"symbol":"dyld4::halt(char const*, dyld4::StructuredError const*)","symbolLocation":312,"imageIndex":1},{"imageOffset":42032,"symbol":"dyld4::prepare(dyld4::APIs&, mach_o::Header const*)","symbolLocation":3840,"imageIndex":1},{"imageOffset":36100,"symbol":"start","symbolLocation":7104,"imageIndex":1}]}],
  "usedImages" : [
  {
    "source" : "P",
    "arch" : "arm64",
    "base" : 4301488128,
    "CFBundleShortVersionString" : "0.15.4",
    "CFBundleIdentifier" : "dev.kookyleo.markon",
    "size" : 33095680,
    "uuid" : "a4573331-216b-3f3b-b45d-166f1e974c49",
    "path" : "\/Applications\/Markon.app\/Contents\/MacOS\/markon-gui",
    "name" : "markon-gui",
    "CFBundleVersion" : "0.15.4"
  },
  {
    "source" : "P",
    "arch" : "arm64e",
    "base" : 6809554944,
    "size" : 651204,
    "uuid" : "0975afba-c46b-364c-bd84-a75daa9e455a",
    "path" : "\/usr\/lib\/dyld",
    "name" : "dyld"
  },
  {
    "size" : 0,
    "source" : "A",
    "base" : 0,
    "uuid" : "00000000-0000-0000-0000-000000000000"
  }
],
  "sharedCache" : {
  "base" : 6808469504,
  "size" : 5653544960,
  "uuid" : "acb998b6-263c-3634-b0a8-ae8270a116c2"
},
  "vmSummary" : "ReadOnly portion of Libraries: Total=621.9M resident=0K(0%) swapped_out_or_unallocated=621.9M(100%)\nWritable regions: Total=8336K written=112K(1%) resident=112K(1%) swapped_out=0K(0%) unallocated=8224K(99%)\n\n                                VIRTUAL   REGION \nREGION TYPE                        SIZE    COUNT (non-coalesced) \n===========                     =======  ======= \nSTACK GUARD                       56.0M        1 \nStack                             8176K        1 \n__DATA                             133K        3 \n__DATA_CONST                      3374K        2 \n__DATA_DIRTY                        14K        1 \n__LINKEDIT                       589.7M        2 \n__TEXT                            32.2M        2 \n__TPRO_CONST                       128K        1 \ndyld private memory                 16K        1 \npage table in kernel               112K        1 \n===========                     =======  ======= \nTOTAL                            689.6M       15 \n",
  "legacyInfo" : {
  "threadTriggered" : {

  }
},
  "logWritingSignature" : "bc18e07d772a4fde85e20a1cca1b87bbbd1fbc9f",
  "bug_type" : "309",
  "roots_installed" : 0,
  "trmStatus" : 1,
  "trialInfo" : {
  "rollouts" : [
    {
      "rolloutId" : "6813dc6e1e50e5344eb573e9",
      "factorPackIds" : [

      ],
      "deploymentId" : 240000021
    },
    {
      "rolloutId" : "5ffde50ce2aacd000d47a95f",
      "factorPackIds" : [

      ],
      "deploymentId" : 240000550
    }
  ],
  "experiments" : [

  ]
}
}

Model: Mac14,9, BootROM 13822.61.10, proc 10:6:4 processors, 16 GB, SMC
Graphics: Apple M2 Pro, Apple M2 Pro, Built-In
Display: Color LCD, 3024 x 1964 Retina, Main, MirrorOff, Online
Display: C27H71x, 2560 x 1440 (QHD/WQHD - Wide Quad High Definition), MirrorOff, Online
Memory Module: LPDDR5, Hynix
AirPort: spairport_wireless_card_type_wifi (0x14E4, 0x4388), wl0: Oct  3 2025 00:48:21 version 23.41.7.0.41.51.200 FWID 01-0473880e
IO80211_driverkit-1533.5 "IO80211_driverkit-1533.5" Nov 14 2025 18:26:34
AirPort:
Bluetooth: Version (null), 0 services, 0 devices, 0 incoming serial ports
Network Service: AX88179A, Ethernet, en7
Network Service: Wi-Fi, AirPort, en0
Thunderbolt Bus: MacBook Pro, Apple Inc.
Thunderbolt Bus: MacBook Pro, Apple Inc.
Thunderbolt Bus: MacBook Pro, Apple Inc.

Preliminary Analysis (for reference)

  • Direct cause: the binary embeds an rpath @executable_path/../Frameworks, so at runtime it expects Contents/Frameworks/libgraphviz_api.dylib to exist. That file is missing in the v0.15.4-rc.1 release bundle, so dyld terminates the process at load time (terminated at launch), before any application code runs.
  • Impact scope: v0.15.4-rc.1 is the first version to introduce graphviz-anywhere (a transitive dependency via supramark-diagram); earlier 0.14.x versions are unaffected. This affects all macOS installs (DMG / Homebrew Cask).
  • Suspected cause: crates/gui/build.rs bakes in the rpath, and scripts/macos-bundle-graphviz.sh is responsible for copying the dylib into Contents/Frameworks/ and re-signing. The local build script scripts/build-dmg.sh calls it, but it's unclear whether the release (CI) workflow runs the same step — the released DMG is missing the dylib.

Workaround

  • Rebuild the DMG locally with scripts/build-dmg.sh and install that; or
  • Manually copy libgraphviz_api.dylib into /Applications/Markon.app/Contents/Frameworks/ and re-sign.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions