A local-first Markdown journal with calendar navigation, WYSIWYG editing and persistent links. GitPad+ aims to combine native Fluent/Material shells, portable Markdown files and a capability-based TypeScript Plugin SDK. Git history/sync, graphs, canvas, bases and timelines are product goals, not available features.
简体中文 · Specification · Architecture · Acceptance
Unreleased. No public pre-release download is approved. Actual Windows 11 and signed Android Release development probes have run locally. The current closeout integrates a verified source-built Windows x64 Win2D package with retained source and runtime terms; exact clean-main candidate acceptance and all release gates remain pending. Android evidence is emulator-only. Do not use this development version as the only copy of important notes.
Implemented and tested in the portable core/browser workflow:
- Calendar, multiple notes per date, switchable/closable tabs, two distinct editable document panes with restart restoration, title editing and local FTS5 search.
- Real Milkdown Crepe editing, GFM, formatting toolbar, directive marks, fold containers, callouts and opaque unknown-directive preservation.
- A three-second peek into actual Markdown source slices, with a separate apply action for source edits.
- RFC 9562 UUIDv7 identities, ProseMirror block tracking, W3C quote/context anchors, strict note/block/selection URIs, session-scoped Yjs positions and Text Fragment export.
- Markdown + hash/revision sidecars, serialized autosave, stale-write rejection, interrupted-save recovery, recoverable deletion and rebuildable SQLite indexes.
- Image import/deduplication, managed-vault path checks, dirty-state protection and a separate clear-data confirmation.
- Two official SDK plugins, durable plugin settings/object UUIDs, persisted disable preferences, lifecycle disposal, host capabilities and native-core checks on the packaged plugin RPC route.
MAUI 10/WinUI 3/Android shell source and CI builds are provided. The local native probes cover Windows materials, native pickers/bitmap clipboard, URI routing, workspace/plugin restoration, external conflict recovery, disposable clear and large-library rendering; Android probes cover native input, intents, lifecycle and storage. See the acceptance report for package-specific evidence, measured limits and remaining v0.1 gates. Browser tests are separate from native evidence.
Pinned versions: .NET SDK 10.0.403, Node.js 24.19.0 LTS, Corepack 0.34.6, pnpm 12.16.1. Run from the existing checkout; each cloud task is already isolated and needs no additional worktree.
# From the repository root, with the pinned tools on PATH:
pnpm install --frozen-lockfile
pnpm typecheck
pnpm lint
pnpm test
pnpm build
dotnet restore tests/dotnet/GitPadPlus.Core.Tests.csproj --locked-mode
dotnet test tests/dotnet/GitPadPlus.Core.Tests.csproj --no-restore
pnpm --filter @gitpad-plus/sdk build
pnpm exec playwright install chromium --only-shell
pnpm test:uiThe browser suite starts an isolated temporary .NET host and Vite, edits real files, then stops both processes. No persistent server is needed for either native application. A constrained execution sandbox may require the platform-approved context for VSTest sockets, browser processes and network access. The cloud image does not install native platform SDKs.
To try the test workflow, use pnpm test:ui --headed on a machine with a display. It creates disposable test notes. Native prerequisites and candidate commands are in BUILDING. The candidate release notes describe installation, first use and limits; they do not approve a public release.
apps/GitPadPlus.App is the native shell; web contains the embedded React/Milkdown UI. src/GitPadPlus.Core holds independently tested storage/domain/protocol code. packages/sdk is the public extension contract; plugins contains official consumers. The small GitPadPlus.DevHost adapts the same core to browser integration tests only.
Markdown in Vault/Journal and JSON in Vault/.gitpad/anchors are authoritative. SQLite is disposable. External Markdown modifications cause a recovery-required error instead of silently overwriting content; the Recovery interface compares current/staged/previous versions, archives every input, and applies explicitly chosen Markdown with stale-preview protection. Reconciled block links require repair rather than guessed relocation. Back up the whole vault before experimenting.
Plugins are reviewed/bundled code in this alpha. The permission adapter is not a sandbox for arbitrary JavaScript; no remote plugin execution or marketplace exists. See PLUGIN-SDK and SECURITY.
- v0.1: complete remaining native acceptance and reliability gates before publishing the first alpha.
- v0.2: GitHub/GitLab sync, diff/history and conflict handling.
- v0.3: timelines, backlinks and export.
- v0.4: graph, canvas, bases and advanced statistics.
- v0.5: stable SDK, plugin distribution and integrations.
- v1.0: mature cross-platform stability acceptance.
These are goals without release-date promises. Git currently reports NotConfigured; no remote synchronization is implemented.
GitPad+ source is AGPL-3.0-only; see the unmodified LICENSE. Third-party components retain their own licenses and copyright statements. Your diary content does not become AGPL source merely because you create it with GitPad+. See THIRD_PARTY_NOTICES, CONTRIBUTING and security reporting.