MarkToGo

by scstc
5
4
3
2
1
Score: 50/100

Description

Template for Obsidian community plugins with build configuration and development best practices.

Reviews

  • P S
    Reviewed on Oct 30th, 2026
    No review text provided.

Stats

1
stars
28
downloads
0
forks
9
days
2
days
2
days
0
total PRs
0
open PRs
0
closed PRs
0
merged PRs
0
total issues
0
open issues
0
closed issues
17
commits

Latest Version

3 days ago

Changelog

简体中文

本次更新完善分享边界、文件复制和本地配置诊断,并加强社区扫描与发布检查。

  • 修复 Obsidian %%…%% 隐藏注释内图片仍参与上传的问题。注释原文保留,不自动删除敏感文字。
  • 修复表格中 ![[图片.png\|300]] 等尺寸、别名语法;同名参考定义采用第一项可见定义。
  • 多篇笔记分享与手动复制统一协调,以最新操作为准。较早结果会明确显示未自动复制,仍可手动复制。
  • 文件复制支持取消和插件卸载处理;保留可能已进入剪贴板的临时附件,避免破坏后续粘贴。
  • 新增 检查本地配置,检查程序、配置和目录信息,不上传图片、不运行 PicList 插件、不修改剪贴板;不验证图床凭证或网络。
  • 支持 Obsidian 1.13+ 的设置搜索,同时保留旧版设置页及最低兼容版本 1.0.0。
  • 无效超时输入会显示提示并在失焦时恢复有效值;修复保存后复制文件时的矛盾状态提示。
  • 保留安全的执行失败原因,区分程序缺失、权限、超时、输出超限和 CLI 失败,不展示原始输出或凭证。
  • 增加 Windows 发布前置回归与 Node 类型解析检查,更新开发期 Obsidian 类型。

扫描说明: 26.4.3 社区报告中的 254 条 unsafe 类型诊断,可通过移除分析环境中的 Node 类型声明精确复现;完整本地类型环境下为 0。本版本显式声明 Node 类型并增加解析检查,严格 lint 为 0 错误、0 警告。社区报告的重新扫描和刷新由外部服务控制。文件系统与子进程能力提示仍适用于 PicList、临时文件和 Windows 文件复制,不代表这两项能力已移除。

验证: 48 项自动测试、3 项真实 PicList 本地集成测试通过;生产构建、严格 lint 和 Node 类型解析检查通过。已在 Windows / Obsidian 1.14.5 中检查设置搜索、本地配置检查、保存后复制文件及原生 .md 附件粘贴。旧版 API 路径由模拟测试覆盖;未实机运行旧版 Obsidian。原笔记、配置和附件保持不变。

English

This release improves sharing correctness, file-copy coordination, local configuration diagnostics and release checks.

  • Exclude images in Obsidian %%…%% comments from uploads. Original comment text remains in the shared Markdown; this is not a redaction feature.
  • Fix escaped table image parameters such as ![[image.png\|300]] and use the first visible definition for repeated reference labels.
  • Coordinate automatic exports and manual copy actions so the latest action owns the clipboard. Older results remain available and clearly report skipped automatic copying.
  • Cancel file copying on newer actions or plugin unload when possible. Retain temporary attachments whose publication is uncertain so pending pastes remain valid.
  • Add Check local configuration without uploading images, running PicList plugins or changing the clipboard. It does not verify host credentials or network access.
  • Support settings search on Obsidian 1.13+ while retaining the legacy settings tab and minimum supported version 1.0.0.
  • Show invalid timeout input and restore the effective value on blur. Correct contradictory save/copy status text.
  • Preserve safe failure categories without exposing raw command output or credentials.
  • Gate release publication on Windows regression checks and verify Node type resolution explicitly.

Scan notes: The exact 254 unsafe-type diagnostics reported for 26.4.3 were reproduced by removing Node declarations from the analysis environment; the complete local type environment produced zero. This release declares Node types explicitly and adds a resolution check. Strict lint reports zero errors and warnings. The community service controls rescanning and report refresh. Filesystem and process-execution capability notices still apply to PicList, temporary files and Windows file copying.

Validation: All 48 automated tests, 3 real PicList local integration tests, production build, strict lint and Node type checks pass. Settings search, local configuration checks, saving followed by copying, and native .md attachment pasting were verified in Windows / Obsidian 1.14.5. Legacy API paths have simulated coverage and were not tested on an actual old Obsidian installation.

Full changelog: https://github.com/scstc/mark-to-go/compare/26.4.3...26.4.4

README file from

Github

MarkToGo

简体中文 · Website · User guide · Release history · Latest release · Obsidian directory

Share an Obsidian note without sending its images separately. MarkToGo uploads local images through PicList or directly to Alibaba Cloud OSS or AWS S3 and copies Markdown with online image links. Your original note stays unchanged.

Usage walkthrough

A 13-second, 2880 × 1620 animated PNG using a sample note and preset storage; it performs no uploads. Copy file is available on Windows. Reduced-motion preferences show a static preview.

Open the full-size animation · Play or pause on the website

Install

Find MarkToGo in Settings → Community plugins → Browse, then install and enable it. Alternatively, download main.js, manifest.json, and styles.css from the latest GitHub release into <Vault>/.obsidian/plugins/mark-to-go/.

Desktop only. Windows has been tested; macOS and Linux have not yet been tested.

Choose an upload method

Select Settings → MarkToGo → Upload method. We recommend a direct OSS or AWS S3 connection, with PicList as an alternative. Existing installations retain their selected provider, saved paths and preferences; installations upgrading from PicList-only versions keep PicList. Switching keeps all three configurations.

Alibaba Cloud OSS (direct)

Requires Obsidian 1.11.4+, an existing OSS bucket and a RAM AccessKey with oss:PutObject permission limited to your chosen prefix, for example acs:oss:*:*:your-bucket/mark-to-go/*. No PicList or separate Node.js installation is needed.

  1. Select Alibaba Cloud OSS and enter the region ID (such as cn-hangzhou), Bucket name and AccessKey ID.
  2. Select or create your AccessKey Secret using Obsidian secret storage. Plugin settings store only its reference name. Configure the secret separately on each device; do not paste it into a note or the upload cache.
  3. Keep the default OSS folder mark-to-go/, or choose your own. Optionally set a public HTTPS image base URL, including a path if needed. Otherwise, links use the official OSS endpoint.

Links are permanent, unsigned URLs: your bucket policy or public image domain must allow anonymous image reads. The plugin does not change bucket or object ACLs. A custom image base URL affects links only; authenticated uploads always use the standard regional OSS HTTPS endpoint. STS and expiring signed links are not supported.

Object names use a full SHA-256 hash of image bytes and extension. Different images with the same local filename get different names; identical bytes with the same extension reuse the same object. Original filenames are not sent as object names. Concurrent uploads or clearing the cache can write the same content-addressed object again; bucket versioning may retain additional versions. Images are streamed from temporary snapshots. Cancellation and timeouts stop the local request, but an object already accepted by OSS may remain.

Check local configuration validates fields and secret availability without a network request. It does not confirm OSS permissions or anonymous image access; verify a shared image URL in a browser after your first export.

AWS S3 (direct)

Requires Obsidian 1.11.4+, an existing AWS S3 general purpose bucket and an IAM access key. Select AWS S3, enter the region (for example us-east-1), Bucket and Access key ID, then select or create the Secret access key in Obsidian secret storage. The default folder is mark-to-go/. No PicList or separate Node.js installation is needed.

Grant only s3:PutObject on the target prefix, for example arn:aws:s3:::your-bucket/mark-to-go/* (arn:aws-cn:s3::: for AWS China). Buckets using SSE-KMS may also require KMS permissions. AWS China regions use amazonaws.com.cn. Dotted bucket names use path-style HTTPS to match AWS certificates.

Permanent, unsigned image links need anonymous read access through your bucket policy or a public image domain such as CloudFront. Set Public image base URL to that HTTPS domain when needed. The plugin does not change Block Public Access, bucket policies or object ACLs. Uploads use AWS SigV4 and stream signed snapshot bytes to the official regional endpoint, while cache entries stay separate from PicList and OSS. Filenames use full content hashes, and original notes remain unchanged.

This option supports standard AWS S3 endpoints and long-term IAM access keys. Custom S3-compatible endpoints, directory buckets, STS session tokens and expiring signed links are not supported. Check local configuration performs no network request and does not verify IAM or public read permissions.

PicList

PicList is an image uploader, not an image hosting service. You need an image host of your own, such as an object storage bucket, and configure it in PicList.

Component What it does
Image host Stores the uploaded images and provides URLs recipients can access.
PicList desktop Lets you configure your image host, credentials, and default uploader.
PicList CLI Lets MarkToGo upload images using that configuration. Install it separately below.
  1. Install PicList desktop, configure your image host, and select it as the default. Upload a test image in PicList and make sure its URL opens in a browser.

  2. Install Node.js LTS, then run this in a terminal:

    npm install -g piclist
    
  3. Enable MarkToGo. It tries to find Node.js, the CLI, and your desktop PicList configuration automatically. Leave those settings blank initially.

The npm package is named piclist, but its command is named picgo. Installing desktop PicList alone is not enough. The original PicGo CLI and PicList.exe are not the CLI this plugin expects. After configuration, the desktop app does not need to stay open.

Share a note

  1. Right-click a Markdown note and choose MarkToGo next to the MTG icon.
  2. Paste the copied Markdown wherever you want to share it. Local image links in this copy now point to your image host.
  3. On Windows, select Copy file in the result dialog to paste a .md attachment into an app that accepts files. Copy text copies the Markdown body instead. Select Save to Downloads to keep an exported file.

The dialog shows new and reused uploads. Copying a file or saving does not upload again; original notes and attachments are preserved. By default, only text is copied. Copy file uses a Windows temporary file with the original note name, without writing to Downloads or the export folder. Closing the dialog keeps the attachment available for pasting. The previous MarkToGo temporary attachment is removed when another file replaces it; other temporary copies may remain in the system temporary folder.

If PicList cannot be found

Select Settings → MarkToGo → Check local configuration first. This checks local programs, configuration and folders without uploading images, running PicList plugins, creating export folders or changing the clipboard. It does not test your image-host credentials or network connection.

Open Settings → MarkToGo and fill in only the paths that automatic discovery could not find:

Setting What to enter
PicList CLI entry Run npm root -g, then append /piclist/bin/picgo to that directory. Enter the full file path.
Node.js path The full path to node or node.exe.
PicList configuration file Your desktop PicList data.json; on Windows, usually %APPDATA%\piclist\data.json.

The CLI's default ~/.piclist/config.json is a different file. Use the desktop configuration you already tested. If upload fails, first confirm desktop PicList can still upload and that the resulting image URL is accessible. See the advanced guide for more settings and platform paths.

Good to know

  • Supports PNG, JPEG, GIF, WebP, SVG, standard Markdown images, reference images, and Obsidian image embeds. Existing online image links are preserved.
  • Excalidraw notes must be exported to PNG/SVG first. HTML images, ordinary attachment links, and note links are not converted.
  • Images inside Obsidian %%…%% comments are not uploaded. The comment text itself remains in the shared Markdown; this is not a redaction feature.
  • When sharing several notes, the latest share or explicit copy action takes priority for the clipboard. Older results remain available for manual copying.
  • Upload mappings are stored in MarkToGo/upload-cache.json. Sync this folder with your vault to reuse uploads on other computers. Simultaneous first uploads can still duplicate; there is no cross-device lock.
  • Saving currently requires a file system with hard-link support, such as NTFS. Exported files never overwrite existing ones.
  • Choose Follow Obsidian, English, or 简体中文 in the language setting.

Privacy

Only an explicit export sends referenced local images through your PicList CLI to your configured image host, or directly to your chosen Alibaba Cloud OSS or AWS S3 bucket. Authentication uses the access key ID and a signature derived from the locally stored secret; the secret itself is not sent. Note text is not uploaded to the image host, and MarkToGo collects no telemetry. MarkToGo is free; your chosen host may require an account or payment.

To upload and save exports, the plugin accesses Node.js/PicList, your PicList configuration and installed plugins, temporary files, and Downloads or your chosen export folder outside the vault. Temporary copies protect the original images and configuration. See the advanced guide for details.

Development

Build, cache behavior, limitations, and the roadmap are in the advanced guide. Versions follow YY.quarter.release-number: 26.4.1 means the first release in Q4 2026, followed by 26.4.2.

0-BSD license. Based on the official Obsidian sample plugin.