Markway is a gateway between Apple services and Markdown.
The project starts with Apple Journal and Obsidian: entries can be pushed from Markdown into Journal, pulled back into Markdown, and kept in sync through a small local bridge. The longer-term direction is broader than Obsidian or Journal: Markway is meant to help Apple services work with local, portable files.
This is the native macOS side of Markway:
Markway.app, a SwiftUI macOS app for setup, background sync, logs, and updates.markway, a Swift command-line tool with Journal and Apple Music commands.MarkwayCore, the shared Swift sync engine used by the app and CLI.- A bundled Apple Journal helper from
Vendor/AppleJournalCRDT/tools. - GitHub Actions release automation for Apple Silicon DMGs.
The Obsidian plugin lives in a separate repository:
~/projects/obsidian-markway/.obsidian/plugins/obsidian-markway
The Apple Journal helper is developed separately at:
~/projects/markway-journal-crdt
Markway is beta software. Apple Journal does not provide a public API, so the Journal support uses a reverse-engineered local store format and private system frameworks. Keep backups of your Journal data and Markdown vault while testing.
Currently supported:
- Create, read, update, and delete text Journal entries.
- Preserve common Markdown structure where Journal itself keeps enough information.
- Sync Journal entries with Markdown files through the Obsidian plugin.
- Run a private local file bridge between Obsidian and Markway.app.
- List/read selected Apple Music library data from local Music databases.
- Build signed/notarized release DMGs through GitHub Actions.
In progress:
- Richer Journal attachments: photos, videos, workouts, locations, moods, drawings, and recordings.
- Apple Music attachment editing from Markdown.
- More Apple services.
- macOS 14 or later.
- Xcode with command line tools.
- XcodeGen for app project generation.
- Apple Journal installed and available on the Mac.
- Full Disk Access for
Markway.appwhen using Journal sync. - Obsidian for the plugin workflow.
Install XcodeGen:
brew install xcodegencd ~/projects/markway
xcodegen generate
open Markway.xcodeprojBuild and run the Markway scheme from Xcode.
On first setup:
- Open Markway.app.
- Choose your Obsidian vault.
- Grant Full Disk Access to Markway.app in System Settings.
- Reopen Markway.app if macOS asks you to quit it.
Markway installs a user LaunchAgent for background bridge processing:
~/Library/LaunchAgents/com.anupchavan.markway.agent.plist
Bridge logs are written to:
~/Library/Logs/Markway/agent.log
~/Library/Logs/Markway/agent.err
From the repo:
swift run markwayOr build/install the launcher:
Scripts/install_cli_launcher.zshUseful commands:
markway journal:entries
markway journal:entry path="Journal/Today.md"
markway journal:read path="Journal/Today.md"
markway journal:push file="Journal/Today.md"
markway journal:pull id=ENTRY_ID out="Journal/Entry.md"
markway music:songs limit=20
markway music:song title="Sahiba"
markway music:albums artist="A. R. Rahman"
markway music:album album="Rockstar"
markway music:search query="Sahiba"Broad Music list commands show 20 rows by default; use limit=all when you explicitly want exhaustive output.
Run markway with no arguments for the TUI-style prompt.
The Obsidian plugin does not receive Full Disk Access. Instead:
- The plugin writes private JSON requests into
<vault>/.obsidian/plugins/markway/bridge. - Markway.app or its LaunchAgent reads those requests.
- The native Markway helper performs Apple Journal operations with the app's permissions.
- Responses and private events flow back through the same local bridge.
This avoids granting Obsidian or arbitrary Obsidian plugins broad access to Apple service stores.
Run the Swift test suite:
swift testRun the app target build:
xcodebuild -scheme Markway -configuration Debug -destination 'platform=macOS' buildRegenerate the Xcode project after changing project.yml:
xcodegen generateThe release workflow is in:
.github/workflows/release.yml
It builds a draft DMG artifact:
Markway-vX.Y.Z-arm64.dmg
Intel builds are not published yet because the current Apple Journal CRDT shim is arm64-only.
Short version:
git tag 0.1.3
git push origin 0.1.3For public distribution, configure Developer ID signing and notarization secrets before publishing the draft release.
Commit:
AppsDocsScriptsSourcesTestsVendor/AppleJournalCRDT/tools.github.gitignorePackage.swiftPackage.resolvedproject.ymlREADME.mdTODO.md
Do not commit generated output:
.buildbuilddistDerivedDataxcuserdataVendor/AppleJournalCRDT/.build
Markway is not affiliated with Apple or Obsidian. Apple Journal support relies on private implementation details that may change in future macOS releases.