Release Pageden Obsidian plugin 0.1.0

This commit is contained in:
Chris Ian Fiel 2026-06-14 12:01:11 +08:00
commit 25f80a1a9f
7 changed files with 44263 additions and 0 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
.DS_Store

21
LICENSE Normal file
View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2026 PageDen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

87
README.md Normal file
View file

@ -0,0 +1,87 @@
# Pageden for Obsidian
Connect an Obsidian vault to Pageden, a server-owned Markdown workspace for teams and AI agents.
Use it to browse remote documents, download folders into your vault, sync local edits back to
Pageden, and import an existing vault into a workspace.
## Requirements
- Obsidian 1.5.0 or newer.
- A Pageden workspace. The hosted server defaults to `https://go.pageden.app`.
- Network access to your Pageden server.
## Commands
- `Pageden: Validate connection`
- `Pageden: Browse remote documents`
- `Pageden: Search remote documents`
- `Pageden: Open live document`
- `Pageden: Push active document`
- `Pageden: Sync now`
- `Pageden: Download a Pageden folder`
- `Pageden: Download all Pageden documents`
- `Pageden: Import this vault to Pageden`
- `Pageden: Resolve conflict for this note`
- `Pageden: Log in with device code`
## Setup
1. Open Obsidian settings.
2. Go to **Community plugins** and enable Pageden.
3. Open **Pageden** settings.
4. Keep the default server URL, or enter your self-hosted Pageden server.
5. Click **Connect to Pageden** and approve the login in your browser.
6. Pick the workspace to sync with this vault.
## Settings Reference
- Server URL, default `https://go.pageden.app`
- Personal access token from the web app's Obsidian token screen, or a token from device-code login
- Workspace ID
- Local folder, default `Remote Docs`
- Background sync toggle
- Sync interval in minutes
Downloaded files are written under the local folder. Sync metadata is stored in
`.server-meta.json` next to the plugin files and is keyed by `documentId`.
## Sync Behavior
Pushes send the recorded `baseVersion`, LF-canonicalized content, and checksum. On a conflict,
the local file is left untouched and the server copy is written as `*.conflict.md`.
New local Markdown notes can also be created in Pageden. Put the note inside the configured
local folder, for example `Remote Docs/team/plan.md`, then run `Pageden: Push active document`.
The plugin creates any missing remote folders, creates the document, and records sync metadata
so later edits use normal push/pull conflict checks. Background sync also auto-creates new
unlinked notes that are saved under the configured local folder.
Remote search uses the server's permission-filtered `GET /search` endpoint and can download a
matching document into the configured local folder.
## Live Documents
Live document mode opens a custom Pageden editor pane inside Obsidian instead of editing a
downloaded Markdown file. It joins the same Yjs/WebSocket room as the web app's Live mode, merges
simultaneous edits, and autosaves the merged Markdown through the normal revision API. Use this
when you want Google Docs-style co-editing; use downloaded files + background sync when you want
the native Obsidian vault/file workflow.
## Attachments
Attachment sync follows Markdown links such as `![diagram](diagram.png)` and Obsidian embeds
such as `![[diagram.png]]`. Downloading or pulling a document writes server attachments beside
the local Markdown file. Pushing a document uploads changed referenced local attachments and
deletes remote attachments only when a previously tracked local attachment file was removed.
## Privacy And Network Access
Pageden for Obsidian communicates with the Pageden server configured in settings. Document
content, metadata, attachment files, and sync state are sent to that server when you download,
push, import, or use live editing. The plugin does not send data to unrelated third-party
services.
## Source
The plugin is developed in the main PageDen repository and published here as a standalone
community plugin package.

44064
main.js Normal file

File diff suppressed because one or more lines are too long

9
manifest.json Normal file
View file

@ -0,0 +1,9 @@
{
"id": "pageden",
"name": "Pageden",
"version": "0.1.0",
"minAppVersion": "1.5.0",
"description": "Edit your team's server-owned Markdown documents from Obsidian.",
"author": "ccfiel",
"isDesktopOnly": false
}

78
styles.css Normal file
View file

@ -0,0 +1,78 @@
.pageden-live-view {
display: flex;
flex-direction: column;
height: 100%;
}
.pageden-live-header {
align-items: flex-start;
border-bottom: 1px solid var(--background-modifier-border);
display: flex;
gap: 12px;
justify-content: space-between;
padding: 14px 18px 10px;
}
.pageden-live-header h2 {
margin: 0;
}
.pageden-live-header p {
color: var(--text-muted);
margin: 4px 0 0;
}
.pageden-live-status {
background: var(--background-modifier-border);
border-radius: 999px;
color: var(--text-muted);
font-size: 12px;
padding: 4px 9px;
white-space: nowrap;
}
.pageden-live-toolbar {
align-items: center;
border-bottom: 1px solid var(--background-modifier-border);
display: flex;
flex-wrap: wrap;
gap: 6px;
padding: 8px 18px;
}
.pageden-live-button {
background: var(--background-secondary);
border: 1px solid var(--background-modifier-border);
border-radius: 6px;
color: var(--text-normal);
font-size: 13px;
min-height: 30px;
padding: 4px 9px;
}
.pageden-live-button:hover {
background: var(--background-modifier-hover);
}
.pageden-live-editor {
flex: 1;
overflow: auto;
padding: 18px;
}
.pageden-live-prosemirror {
margin: 0 auto;
max-width: 760px;
min-height: 100%;
outline: none;
}
.pageden-live-prosemirror p {
margin: 0.35rem 0;
}
.pageden-live-prosemirror h1,
.pageden-live-prosemirror h2,
.pageden-live-prosemirror h3 {
margin: 1rem 0 0.45rem;
}

3
versions.json Normal file
View file

@ -0,0 +1,3 @@
{
"0.1.0": "1.5.0"
}