Guidelines for developing a TINKER plugin.
src/
renderer/
App.tsx
main.tsx
index.scss
preload/
index.ts
index.html
package.json
icon.png
- React + TypeScript + Tailwind.
- Small, focused components.
- Avoid unnecessary comments.
Declare tinker in package.json:
"tinker": {
"name": "Template",
"main": "dist/renderer/index.html",
"icon": "icon.png",
"preload": "dist/preload/index.js",
"locales": { "zh-CN": { "name": "模板" } }
}
Notes: preload only when needed; locales for localized names; prefer tinker-xxx package name.
Global tinker is available in renderer and preload (see node_modules/tinker-api-types/tinker.d.ts):
- Theme/locale:
getTheme()/getLanguage() - Dialogs:
showOpenDialog()/showSaveDialog() - System:
showItemInPath()/showContextMenu()/setTitle() - Clipboard:
getClipboardFilePaths() - File IO:
readFile()/writeFile() - Events:
on('changeTheme' | 'changeLanguage', ...)
- Node APIs only in
preload/index.ts. - Expose minimal APIs via
contextBridge.exposeInMainWorld().
contextBridge.exposeInMainWorld('api', {
readText: (path: string) => tinker.readFile(path, 'utf-8'),
})Local development with global plugin:
npm linkRestart Tinker after npm link to load the global plugin.