Skip to content

Commit 29d6c64

Browse files
committed
Add in-app updates and org profile assets
1 parent 9d9d341 commit 29d6c64

12 files changed

Lines changed: 653 additions & 10 deletions

File tree

.github/profile/README.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<div align="center">
2+
<img src="zennotes.png" alt="ZenNotes" width="140">
3+
<h1>ZenNotes</h1>
4+
<p><strong>Keyboard-first local Markdown notes with Vim motions, diagrams, and first-party MCP integration.</strong></p>
5+
<p>Plain files. Fast editing. AI tools working directly against the same vault.</p>
6+
<p>
7+
<a href="https://github.com/ZenNotes/zennotes/releases/latest">Download Latest Release</a>
8+
·
9+
<a href="https://github.com/ZenNotes/zennotes">Main Repository</a>
10+
·
11+
<a href="https://github.com/ZenNotes/zennotes/issues">Report an Issue</a>
12+
</p>
13+
</div>
14+
15+
---
16+
17+
<div align="center">
18+
ZenNotes keeps your notes as ordinary local Markdown files and layers on preview and split workflows,
19+
math and diagram rendering, tasks and tags, and a bundled MCP server for Claude Code, Claude Desktop, and Codex.
20+
</div>
21+
22+
## What Ships Today
23+
24+
- Plain-file vaults with `inbox`, `quick`, `archive`, and `trash`
25+
- Fast markdown editing with Vim mode and remappable shortcuts
26+
- Preview and split workflows with KaTeX, Mermaid, TikZ, JSXGraph, and function-plot
27+
- Tags, tasks, search, backlinks, and local attachments
28+
- Built-in MCP installation flows for Claude Code, Claude Desktop, and Codex
29+
30+
## Get ZenNotes
31+
32+
- [Latest release downloads](https://github.com/ZenNotes/zennotes/releases/latest)
33+
- [Source code](https://github.com/ZenNotes/zennotes)

.github/profile/zennotes.png

1.64 MB
Loading

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# ZenNotes
22

3+
<p align="center">
4+
<img src="build/icon.png" alt="ZenNotes app icon" width="160">
5+
</p>
6+
37
ZenNotes is a keyboard-first desktop notes app built on Electron,
48
React, TypeScript, and CodeMirror 6. It keeps notes as ordinary local
59
Markdown files, adds a Vim-friendly editing and navigation model, and

package-lock.json

Lines changed: 96 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
"@replit/codemirror-vim": "^6.3.0",
4949
"chokidar": "^4.0.3",
5050
"codemirror": "^6.0.1",
51+
"electron-updater": "^6.8.3",
5152
"font-list": "^2.0.2",
5253
"function-plot": "^1.25.3",
5354
"fuse.js": "^7.0.0",
@@ -105,6 +106,14 @@
105106
"out/**/*",
106107
"!**/*.map"
107108
],
109+
"publish": [
110+
{
111+
"provider": "github",
112+
"owner": "ZenNotes",
113+
"repo": "zennotes"
114+
}
115+
],
116+
"electronUpdaterCompatibility": ">=2.16",
108117
"mac": {
109118
"category": "public.app-category.productivity",
110119
"extendInfo": {

src/main/index.ts

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,13 @@ import {
5555
installMcpForClient,
5656
uninstallMcpForClient
5757
} from './mcp-integrations'
58+
import {
59+
checkForAppUpdates,
60+
downloadAppUpdate,
61+
getAppUpdateState,
62+
initAppUpdater,
63+
installAppUpdate
64+
} from './updater'
5865
import type { McpClientId, McpInstructionsPayload } from '@shared/mcp-clients'
5966
import {
6067
instructionsFilePath,
@@ -433,6 +440,12 @@ function registerIpc(): void {
433440
console.log(`listFontFamilies: returning ${list.length} families`)
434441
return list
435442
})
443+
ipcMain.handle(IPC.APP_UPDATER_GET_STATE, () => getAppUpdateState())
444+
ipcMain.handle(IPC.APP_UPDATER_CHECK, async () => await checkForAppUpdates())
445+
ipcMain.handle(IPC.APP_UPDATER_DOWNLOAD, async () => await downloadAppUpdate())
446+
ipcMain.handle(IPC.APP_UPDATER_INSTALL, () => {
447+
installAppUpdate()
448+
})
436449

437450
ipcMain.handle(IPC.VAULT_GET_CURRENT, async () => {
438451
if (currentVault) return currentVault
@@ -781,11 +794,18 @@ function installAppMenu(): void {
781794
submenu: [
782795
{ label: 'About ZenNotes', role: 'about' },
783796
{ type: 'separator' },
797+
{
798+
label: 'Check for Updates…',
799+
click: () => {
800+
void checkForAppUpdates()
801+
}
802+
},
803+
{ type: 'separator' },
784804
{
785805
label: 'Settings…',
786806
accelerator: 'CmdOrCtrl+,',
787807
click: () => {
788-
mainWindow?.webContents.send('menu:open-settings')
808+
mainWindow?.webContents.send(IPC.APP_OPEN_SETTINGS)
789809
}
790810
},
791811
{ type: 'separator' },
@@ -877,6 +897,7 @@ app.whenReady().then(async () => {
877897

878898
installAppMenu()
879899
registerIpc()
900+
initAppUpdater()
880901
await createWindow()
881902

882903
app.on('activate', () => {

0 commit comments

Comments
 (0)