Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

SiYuan plugin sample

License

NotificationsYou must be signed in to change notification settings

siyuan-note/plugin-sample

Repository files navigation

中文

SiYuan plugin sample

Get started

  • Make a copy of this repo as a template with theUse this template button, please note that the repo name must be the same as the plugin name, the default branch must bemain
  • Clone your repo to a local development folder. For convenience, you can place this folder in your{workspace}/data/plugins/ folder
  • InstallNodeJS andpnpm, then runpnpm i in the command line under your repo folder
  • Executepnpm run dev for real-time compilation
  • Open SiYuan marketplace and enable plugin in downloaded tab

Development

I18n

In terms of internationalization, our main consideration is to support multiple languages. Specifically, we need tocomplete the following tasks:

  • Meta information about the plugin itself, such as plugin description and readme
    • displayName,description andreadme fields in plugin.json, and the corresponding README*.md file
  • Text used in the plugin, such as button text and tooltips
    • src/i18n/*.json language configuration files
    • Usethis.i18.key to get the text in the code

It is recommended that the plugin supports at least English and Simplified Chinese, so that more people can use it more conveniently. Unsupported languages do not need to be declared in thedisplayName,description andreadme fields in plugin.json.

plugin.json

A typical example is as follows:

{"name":"plugin-sample","author":"Vanessa","url":"https://github.com/siyuan-note/plugin-sample","version":"0.4.2","minAppVersion":"3.3.0","backends": ["all"],"frontends": ["all"],"disabledInPublish":false,"displayName": {"default":"Plugin Sample","zh_CN":"插件示例"  },"description": {"default":"This is a plugin development sample","zh_CN":"这是一个插件开发示例"  },"readme": {"default":"README.md","zh_CN":"README_zh_CN.md"  },"funding": {"custom": ["https://ld246.com/sponsor"]  },"keywords": ["开发者参考","developer reference","示例插件"  ]}
  • name: Plugin package name, must be the same as the GitHub repository name, and cannot be duplicated with other plugins in the marketplace
  • author: Plugin author name
  • url: Plugin repo URL
  • version: Plugin version number, needs to follow thesemver specification
  • minAppVersion: Minimum SiYuan version required to use this plugin
  • disabledInPublish: Whether to disable the plugin when using the publish service, defaults to false, i.e., not disabled
  • backends: Backend environment required by the plugin, optional values arewindows,linux,darwin,docker,android,ios,harmony andall
    • windows: Windows desktop
    • linux: Linux desktop
    • darwin: macOS desktop
    • docker: Docker
    • android: Android APP
    • ios: iOS APP
    • harmony: HarmonyOS APP
    • all: All environments
  • frontends: Frontend environment required by the plugin, optional values aredesktop,desktop-window,mobile,browser-desktop,browser-mobile andall
    • desktop: Desktop
    • desktop-window: Desktop window converted from tab
    • mobile: Mobile APP
    • browser-desktop: Desktop browser
    • browser-mobile: Mobile browser
    • all: All environments
  • displayName: Plugin name, displayed in the marketplace list
    • default: Default language, must exist. If the plugin supports English, English should be used here
    • zh_CN,en_US and other languages: optional
  • description: Plugin description, displayed in the marketplace list
    • default: Default language, must exist. If the plugin supports English, English should be used here
    • zh_CN,en_US and other languages: optional
  • readme: Readme file name, displayed in the marketplace details page
    • default: Default language, must exist. If the plugin supports English, English should be used here
    • zh_CN,en_US and other languages: optional
  • funding: Plugin sponsorship information, only one type will be displayed in the marketplace
    • openCollective: Open Collective name
    • patreon: Patreon name
    • github: GitHub login name
    • custom: Custom sponsorship link list
  • keywords: Search keyword list, used for marketplace search function, supplements search keywords beyond the values ofname,author,displayName, anddescription fields

Package

No matter which method is used to compile and package, we finally need to generate a package.zip, which contains atleast the following files:

  • i18n/* (If the plugin supports multiple languages, language files need to be packaged to this directory, otherwise this directory is not needed)
  • icon.png (recommended size: 160*160, file size should not exceed 20KB)
  • index.css
  • index.js
  • plugin.json
  • preview.png (recommended size: 1024*768, file size should not exceed 200KB)
  • README*.md

List on the marketplace

  • Executepnpm run build to generate package.zip
  • Create a new GitHub release using your new version number as the "Tag version". See here for anexample:https://github.com/siyuan-note/plugin-sample/releases
  • Upload the file package.zip as binary attachments
  • Publish the release

If this is the first release, you also need to create a PR to theCommunity Bazaar repository and modify the plugins.json file in it. This file is the index of all community plugin repositories, the format is:

{"repos": ["username/reponame"  ]}

After the PR is merged, the bazaar will automatically update the index and deploy through GitHub Actions. For subsequent plugin releases, you only need to follow the above steps to create a new release, and you don't need to PR the community bazaar repository.

Under normal circumstances, the community bazaar repository will automatically update the index and deploy every hour, and you can check the deployment status athttps://github.com/siyuan-note/bazaar/actions.

Developer's Guide

Developers need to pay attention to the following specifications.

1. File Reading and Writing Specifications

If plugins or external extensions require direct reading or writing of files under thedata directory, please use the kernel API to achieve this.Do not callfs or other electron or nodejs APIs directly, as it may result in data loss during synchronization and cause damage to cloud data.

Related APIs can be found at:/api/file/* (e.g.,/api/file/getFile).

2. Daily Note Attribute Specifications

When creating a daily note in SiYuan, a custom-dailynote-yyyymmdd attribute will be automatically added to the document to distinguish it from regular documents.

For more details, please refer toGithub Issue #9807.

Developers should pay attention to the following when developing the functionality to manually create Daily Notes:

  • If/api/filetree/createDailyNote is called to create a daily note, the attribute will be automatically added to the document, and developers do not need to handle it separately
  • If a document is created manually by developer's code (e.g., using thecreateDocWithMd API to create a daily note), please manually add this attribute to the document

About

SiYuan plugin sample

Topics

Resources

License

Stars

Watchers

Forks

Contributors7


[8]ページ先頭

©2009-2025 Movatter.jp