Danila Poyarkov
4ad90d4819
Add MCP server package with stdio and HTTP transports
...
29 tools: open_file, save_file, new_document + all 26 from @open-pencil/core.
Stdio for MCP clients (Claude Code, Cursor), HTTP (Hono + Streamable HTTP
with sessions) for scripts, browser extensions, CI.
Runs on both Bun and Node.js (via tsx).
2026-03-02 14:20:49 +03:00
Danila Poyarkov
eeaef12c27
Update Penpot comparison to reflect WASM renderer (render-wasm/v1)
...
Penpot 2.x ships with Rust/Skia WASM rendering enabled by default.
Update architecture diagram, rendering pipeline, and file format sections
to reflect the current state instead of the old SVG-based renderer.
2026-03-02 13:35:09 +03:00
Danila Poyarkov
c3c5253642
Acknowledge Anton Soldatov for docs
2026-03-02 12:27:05 +03:00
Danila Poyarkov
518ddb0c5b
Release v0.3.2
2026-03-02 11:36:18 +03:00
Danila Poyarkov
527be98f2a
Re-apply SkPicture scene caching with visual regression tests
2026-03-02 11:33:45 +03:00
Danila Poyarkov
1b414bf680
Release v0.3.1
2026-03-02 11:14:15 +03:00
Danila Poyarkov
11bff6d83f
Remove COMPARISON.md (moved to docs site)
2026-03-02 11:13:59 +03:00
Danila Poyarkov
3011d603ab
Fix macOS startup hang: async font loading, show_main_window on reopen
2026-03-02 11:13:50 +03:00
Danila Poyarkov
38aeade46e
Revert SkPicture scene caching (breaks text rendering on hover)
2026-03-02 11:13:46 +03:00
Danila Poyarkov
d5ca92e01f
Add MIT license
2026-03-02 08:31:54 +03:00
Danila Poyarkov
c2e77ff63d
Fix Figma MCP timeline, update tool counts to 26, add AI providers to roadmap
2026-03-02 08:19:08 +03:00
Danila Poyarkov
d24e0ee767
Style roadmap as blockquote
2026-03-02 08:00:58 +03:00
Danila Poyarkov
ca5f0929d1
Add roadmap to README, update plan.md to current state
2026-03-02 07:56:52 +03:00
Danila Poyarkov
f495f4072a
Release v0.3.0
2026-03-01 22:46:06 +03:00
Danila Poyarkov
a9c096a69d
Fix npm publish: pnpm for workspace resolution, update README, read CLI version from package.json
2026-03-01 22:44:56 +03:00
Danila Poyarkov
1ee8e8e5af
Add render performance benchmark test
2026-03-01 22:35:16 +03:00
Danila Poyarkov
9431918634
SkPicture scene caching for fast pan/zoom
2026-03-01 22:28:03 +03:00
Danila Poyarkov
80beba3348
Cache vector paths and pen paints across frames
2026-03-01 22:21:20 +03:00
Danila Poyarkov
97f4727e26
Cache ruler paints, disable preserveDrawingBuffer outside tests
2026-03-01 22:16:13 +03:00
Danila Poyarkov
5e209eca1c
Fix trackpad pinch-to-zoom on Safari macOS
2026-03-01 22:07:47 +03:00
Danila Poyarkov
13a95bf517
Release v0.2.1
2026-03-01 21:25:52 +03:00
Danila Poyarkov
091861f32a
Update changelog for v0.2.1
2026-03-01 21:17:07 +03:00
Danila Poyarkov
3e81c15689
Center empty chat placeholder text
2026-03-01 21:15:32 +03:00
Danila Poyarkov
0ba1f00e74
Hide panels by default on mobile
2026-03-01 21:13:51 +03:00
Danila Poyarkov
d4b8a2a310
Always show local user avatar in collab header
2026-03-01 21:12:22 +03:00
Danila Poyarkov
ab658ac33f
Add ⌘\ to toggle side panels, header with logo and editable filename
...
Header row with app icon, double-click-to-rename document name, and
sidebar toggle button. Shows in both Tauri and browser.
When panels are hidden, a floating bar on the canvas provides the same
controls to restore the UI.
2026-03-01 21:07:02 +03:00
Danila Poyarkov
575914b194
Add touch support for pan and pinch-zoom on iOS
2026-03-01 20:13:21 +03:00
Danila Poyarkov
c3844db2bd
Stub shiki to eliminate 9MB of unused language grammars
...
vue-stream-markdown bundles all 359 shiki grammar chunks by default.
We only need plain text code blocks in chat. Alias shiki to an empty
module — build drops from 20MB/377 files to 11MB/103 files.
2026-03-01 20:05:52 +03:00
Danila Poyarkov
e8b685ad0a
Update screenshot
2026-03-01 18:44:52 +03:00
Danila Poyarkov
deac6e6019
Release v0.2.0
2026-03-01 18:43:09 +03:00
Danila Poyarkov
6e4332a6ba
Release v0.2.0
2026-03-01 18:27:12 +03:00
Danila Poyarkov
56aa194785
Toast notifications via Reka UI Toast
...
- AppToast component: top-center blue pill (info), red pill (errors)
- Global error handler catches window.error + unhandledrejection
- Link copied toast on share and copy link button
- use-toast composable: toast.show(message, variant)
2026-03-01 18:25:04 +03:00
Danila Poyarkov
f90e1400b7
P2P collaboration: cursors, follow mode, cleanup
...
- Broadcast cursor position from canvas mouse move via awareness
- Broadcast selection changes via reactive watcher on selectedIds
- Follow mode: click peer avatar to track their viewport (pan + zoom)
- Zoom broadcast via watcher on store.state.zoom, not just mouse move
- Figma-style cursor arrows: colored fill, white border, name pill
- Stale cursor cleanup: removeAwarenessStates on peer leave
- MQTT signaling (replace Nostr), STUN + TURN ICE servers
- Collab constants extracted to src/constants.ts
- crypto.getRandomValues() replaces Math.random() everywhere
- Provide/inject for collab composable (COLLAB_KEY)
- Update README (collab section, tech stack), CHANGELOG, AGENTS.md
- AGENTS.md: release process, CI workflows, documentation guidelines
2026-03-01 18:11:07 +03:00
Danila Poyarkov
7a2694b6bc
Emphasize no subscription, bring your own API key
2026-03-01 17:26:30 +03:00
Danila Poyarkov
3427b7fd3c
Replace Durable Object relay with Trystero P2P + y-indexeddb
...
- Remove packages/collab/ (CF Worker + Durable Object server)
- Replace WebSocket relay with Trystero (serverless WebRTC P2P)
- Peers connect via Nostr relays for signaling (free, public)
- All sync traffic flows directly peer-to-peer
- Automatic chunking for large Yjs updates
- Add y-indexeddb for local persistence
- Each client persists Y.Doc to IndexedDB
- Room survives browser refresh, loads instantly
- Yjs sync protocol over Trystero actions:
- yjs-update: incremental doc updates
- sync-step1/sync-reply: full state sync on peer join
- awareness: cursor, selection, presence
- Zero server cost at any scale
2026-03-01 17:25:46 +03:00
Danila Poyarkov
8695ba6d1b
Emphasize no subscription, bring your own API key
2026-03-01 17:24:54 +03:00
Danila Poyarkov
76134ccc1a
Collab UI polish, vue-router, extract HsvColorArea
...
- Move CollabPanel to right panel header (like Figma)
- /share/:roomId shows join dialog with name input before connecting
- Add vue-router with / and /share/:roomId routes
- Extract EditorView from App.vue
- Extract HsvColorArea component from ColorPicker + FillPicker
(eliminates ~160 lines of duplicated HSV logic)
- Extract syncNodePropsToYMap in use-collab.ts
- Register Yjs update listener before opening WebSocket (fix race)
- Scrollable AppMenu without scrollbar (scrollbar-none utility)
- Overflow-x hidden on LayersPanel
- Gitignore .wrangler build artifacts
- SPA catch-all redirect for Cloudflare Pages
2026-03-01 17:15:08 +03:00
Danila Poyarkov
2add3ac4c0
Real-time collaboration with Yjs CRDT over Cloudflare Durable Objects
...
- Cloudflare Worker + Durable Object server (packages/collab/)
- One DO per room with WebSocket Hibernation for near-zero idle cost
- Yjs sync protocol for document state (CRDT merge)
- Yjs awareness protocol for cursors, selection, presence
- Persists doc state to DO storage
- CORS headers for cross-origin WebSocket upgrade
- Client composable (src/composables/use-collab.ts)
- Y.Doc ↔ SceneGraph bidirectional binding
- Awareness: broadcasts cursor position, selection, name, color
- Auto-join from /share/:roomId URL
- Suppresses echo loops between Yjs and graph updates
- CollabPanel component (src/components/CollabPanel.vue)
- Share button generates room link, copies to clipboard
- Join flow: paste link or room ID
- Avatar stack with colored initials and tooltips
- Name input persisted to localStorage
- Remote cursor rendering in CanvasKit
- Colored arrow cursor + name label pill per remote peer
- Remote selection outlines in peer's color
- Only shows cursors on the same page
- SPA redirect for /share/* routes (Cloudflare Pages _redirects)
2026-03-01 16:44:37 +03:00
Danila Poyarkov
9f8242bce5
Add download links to README, docs landing, and getting started
2026-03-01 16:32:45 +03:00
Danila Poyarkov
fb8891c431
Fix case-sensitive filename: ApiKeySetup.vue → APIKeySetup.vue
2026-03-01 16:29:54 +03:00
Danila Poyarkov
0acfd50a67
Add npm publish with trusted publishing to release workflow
2026-03-01 16:27:41 +03:00
Danila Poyarkov
1e873d64b1
Add repository field and provenance to package configs
2026-03-01 16:23:30 +03:00
Danila Poyarkov
c4e6514ea2
Update repo references to open-pencil/open-pencil
2026-03-01 16:18:11 +03:00
Danila Poyarkov
74d4b6862e
Use app favicon for docs site (symlink to public/favicon-32.png)
2026-03-01 16:14:06 +03:00
Danila Poyarkov
baee65e599
Add CHANGELOG.md, update build workflow for v0.1.0-alpha
...
- Add Linux x64 build target
- Add patchelf for Linux AppImage builds
- Release body links to CHANGELOG.md
- Release name includes 'OpenPencil' prefix
2026-03-01 16:09:25 +03:00
Danila Poyarkov
515c8125ed
Add app and docs links to README
2026-03-01 16:03:25 +03:00
Danila Poyarkov
10848d8319
Add app.openpencil.dev links to docs
2026-03-01 16:02:08 +03:00
Danila Poyarkov
268c4029e9
Add CI workflow for app.openpencil.dev deploy
2026-03-01 16:00:19 +03:00
Danila Poyarkov
0f0ca8db4b
Update screenshot, remove duplicate from repo root
...
Single screenshot lives in packages/docs/public/. README references it
from there. Custom VitePress layout places it between hero and features.
2026-03-01 15:57:01 +03:00
Danila Poyarkov
503a561753
Symlink favicons from desktop/icons, add all sizes for Safari/Chrome
...
.ico (any), 32px PNG, 128px PNG, apple-touch-icon (512px).
Symlinks instead of copies so icons stay in sync.
2026-03-01 15:46:31 +03:00