minnedocs

Reference

Build from source

Minne is a Swift menu-bar app and a Bun-compiled TypeScript sidecar. Both build from a clean checkout with two commands.

Minne is two halves that speak JSON-lines over stdio: a native Swift app that owns capture, UI, permissions and hotkeys, and a TypeScript "brain", compiled to a single Bun binary, that owns the LLM calls and every write to the wiki.

Minne.app (Swift)              minne-brain (TypeScript, Bun binary)
  capture · UI · hotkey   ⇄      pi agent · OAuth · wiki maintenance
                └────── stdio ──────┘
                         ▼
        ~/Minne/  sources/  wiki/  SCHEMA.md

#Requirements

  • macOS 14 or later
  • Swift 6.0+
  • Bun 1.2+

There is no Xcode project. The app is plain SwiftPM, and scripts/build.sh assembles the .app bundle itself.

#Build

git clone https://github.com/mandgie/minne
cd minne

# Full bundle -> build/Minne.app, with the compiled brain inside
scripts/build.sh

# Development: uncompiled brain + debug app, as a bare executable.
# Ctrl-C to quit.
scripts/dev.sh

Each half also builds on its own:

cd app   && swift build
cd brain && bun install && bun run typecheck && bun test

#Package a release

scripts/release.sh builds the bundle and packages it as build/Minne-<version>.dmg. The version comes from the VERSION file at the repo root — the single source for both CFBundleShortVersionString and the version the brain reports.

# Contributors: ad-hoc signed dmg, no Apple developer account needed
scripts/release.sh

# Maintainers: signed, notarized and stapled
MINNE_SIGN_IDENTITY="Developer ID Application: Your Name (TEAMID)" \
MINNE_NOTARY_PROFILE=minne-notary \
  scripts/release.sh

Without those two variables the script signs the app ad-hoc — same hardened runtime, same entitlements, no Apple identity — and skips notarization, saying so as it goes.

An ad-hoc bundle passes codesign --verify --strict --deep, which a genuinely unsigned one does not: the linker ad-hoc signs every arm64 executable, and that signature alone claims a bundle seal that was never created. It runs fine when you build it yourself, but macOS quarantines it if it travels through a browser or a chat app. Open it once with right-click → Open, or clear the flag:

xattr -dr com.apple.quarantine Minne.app

MINNE_NOTARY_PROFILE names a keychain profile you create once with xcrun notarytool store-credentials. The bundled brain is a Bun binary and is signed separately with scripts/minne-brain.entitlements, which grants the JIT exception JavaScriptCore needs under the hardened runtime.

#CI

.github/workflows/ci.yml builds and tests both halves on every push and pull request. Pushing a v* tag that matches VERSION runs the same checks and then publishes the dmg to a GitHub Release (.github/workflows/release.yml); it signs and notarizes only if the repository provides the signing secrets.

#Licence

MIT. Read the code.