flare-plugin-sdk 0.1.0-beta.4 → 0.1.0-beta.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -12,6 +12,7 @@ With Node 22 or newer, run:
12
12
 
13
13
  ```sh
14
14
  npx flare-plugin-sdk@next init my-plugin
15
+ cd my-plugin
15
16
  ```
16
17
 
17
18
  This copies the GitHub template bundled with that SDK version into `my-plugin`:
@@ -32,60 +33,133 @@ them. The command uses bundled files only and does not install dependencies,
32
33
  initialize Git, contact your website, or publish anything. Run
33
34
  `npx flare-plugin-sdk@next --help` for usage.
34
35
 
35
- Adapt the illustrative API endpoints, replace the placeholder icon, and follow
36
- the generated README. In Desktop or native macOS, select the generated directory
37
- in Settings → Plugins → Plugin development to validate and reload it.
36
+ The generated `manifest.json` includes a `$schema` URL pinned to the SDK version
37
+ used to create it. Open it in VS Code or another JSON Schema editor for property
38
+ completion, descriptions, enum choices, and static validation. The complete schema
39
+ is bundled at `skill/flare-plugin/manifest.schema.json` inside the SDK.
38
40
 
39
- ## Install for editor types and packaging
41
+ Edit `plugin.js` to use your website's real authentication, endpoints, response
42
+ mapping, and pagination. The starter's `/api/me` and `/api/posts` are illustrative;
43
+ no demonstration server is included. Update the description, login methods and
44
+ capabilities in `manifest.json`, and replace the placeholder icon. The plain
45
+ JavaScript starter needs no dependency installation or build step.
40
46
 
41
- Install the npm preview:
47
+ For manual template copies, replace the example IDs and names before use. For
48
+ `npx` projects, keep the generated IDs. Read the
49
+ [complete developer guide](https://github.com/DimensionDev/Flare/tree/feature/plugin/feature/plugin/sdk/skill/flare-plugin)
50
+ for authentication, Host APIs, capabilities, and Wire data mapping.
42
51
 
43
- ```sh
44
- npm install --save-dev flare-plugin-sdk@next
45
- ```
52
+ ## Develop and debug in Flare
46
53
 
47
- To validate a Flare checkout without publication, build a local tarball instead:
54
+ 1. From `my-plugin`, check the source syntax:
48
55
 
49
- ```sh
50
- cd feature/plugin/sdk
51
- npm ci
52
- npm test
53
- npm pack --pack-destination /tmp
54
- ```
56
+ ```sh
57
+ node --check plugin.js
58
+ node -e 'JSON.parse(require("node:fs").readFileSync("manifest.json", "utf8")); console.log("Manifest JSON parses")'
59
+ ```
55
60
 
56
- Install the resulting `.tgz` in your plugin project with
57
- `npm install --save-dev /path/to/flare-plugin-sdk-VERSION.tgz`.
58
- These local checks and packaging commands do not publish anything.
59
-
60
- ## Create and develop a plugin
61
-
62
- 1. Create a plugin with the initializer above, or manually copy the contents of
63
- `node_modules/flare-plugin-sdk/skill/flare-plugin/assets/github-template/` into
64
- your repository. Manual copies retain example IDs and names; replace them.
65
- Adapt the icon and illustrative website endpoints using evidence from the real API.
66
- 2. Read the [complete developer guide](https://github.com/DimensionDev/Flare/tree/feature/plugin/feature/plugin/sdk/skill/flare-plugin).
67
- The same guide is bundled at `skill/flare-plugin/README.md` inside the npm package,
68
- with all authentication, capability, runtime, data, testing, and publication references.
69
- 3. Keep your ready-to-run `manifest.json`, classic-script `plugin.js`, one supported
70
- `assets/icon.<extension>`, and optional `locales/*.json` in a plugin output directory.
71
- For a TypeScript project, configure your bundler to produce that classic script.
72
- 4. In Desktop or native macOS, select the output directory in Settings → Plugins →
73
- Plugin development. Start development, then reload after edits or rebuilds.
74
- 5. For local file installation, package that directory from your plugin project:
61
+ Actual execution and manifest/registration validation happen in Flare, which
62
+ provides `definePlugin` and `flare`.
63
+ 2. In Compose Desktop or native macOS, open **Settings → Plugins → More → Plugin
64
+ development**. Choose the `my-plugin` directory, click **Start development**,
65
+ and confirm the access review.
66
+ 3. Add an account in Flare. Select your plugin platform explicitly, enter the
67
+ website's HTTPS API origin, and import a real access token using the starter's
68
+ login form. Adapt this step if you change the login method. Test login,
69
+ timeline refresh, older pages, end-of-list behavior, and website link clicks.
70
+ 4. Edit and save the files. Flare automatically validates changes; click **Reload
71
+ plugin** to apply the validated version. Invalid edits keep the last working
72
+ version running. The development panel shows validation errors and recent-call
73
+ diagnostics; recent calls contain method names and outcomes, without HTTP
74
+ request/response payloads.
75
+ 5. Click **Stop development** before installing or updating the same plugin.
76
+ Development temporarily overrides the running version; stopping restores the
77
+ previous version. App restarts do not automatically mount the directory.
78
+ Development uses real accounts and data, and remote writes are not rolled back.
79
+
80
+ Finish active writes before reloading; credential-schema changes may require
81
+ logging in again. For TypeScript, run your own compiler/watch command and
82
+ select its output directory; Flare loads one self-contained classic `plugin.js`.
83
+ See [development and testing details](https://github.com/DimensionDev/Flare/blob/feature/plugin/feature/plugin/sdk/skill/flare-plugin/references/testing.md#develop-locally-in-desktop).
84
+
85
+ ## Publish and install through GitHub (recommended)
86
+
87
+ 1. Create a public GitHub repository. Its tagged root must contain `manifest.json`,
88
+ the ready-to-run `plugin.js`, exactly one supported `assets/icon.<extension>`,
89
+ and optional `locales/*.json`. Update the project README with the actual website,
90
+ login instructions, supported features, and verification results. Flare reads
91
+ these files directly; commit any compiled output at the root before tagging.
92
+ 2. Commit and push the plugin files. For a new project and an empty GitHub
93
+ repository, replace `OWNER/REPO` and run from `my-plugin`:
94
+
95
+ ```sh
96
+ git init
97
+ git add manifest.json plugin.js assets README.md
98
+ # If used, also stage translations with: git add locales
99
+ git commit -m "Add Flare plugin"
100
+ git branch -M main
101
+ git remote add origin https://github.com/OWNER/REPO.git
102
+ git push -u origin main
103
+ ```
104
+
105
+ Use your existing Git setup if the project is already a repository. Keep real
106
+ credentials, private fixtures, `node_modules`, and build caches out of Git.
107
+ 3. Set a stable `manifest.version` and push a matching tag. The generated version
108
+ is `0.1.0`, so the first release can use:
75
109
 
76
110
  ```sh
77
- npx --package=flare-plugin-sdk@next flare-plugin-pack ./dist ./plugin.fpp
111
+ git tag v0.1.0
112
+ git push origin refs/tags/v0.1.0
78
113
  ```
79
114
 
80
- The packer accepts plugin files only, so keep source, `.git`, `package.json`,
81
- `node_modules`, and the generated `.fpp` outside `dist`. It checks archive structure;
82
- Flare still validates the manifest, registration, permissions, and runtime behavior.
83
- For GitHub installation, commit the ready-to-run plugin files at the repository
84
- root and publish a stable tag matching `manifest.version`. npm SDK versions and
85
- individual plugin versions are independent; GitHub plugin installation ignores
86
- prerelease tags even though the npm SDK can use them.
115
+ Commit and push any version edit before tagging. npm SDK versions are separate
116
+ from your plugin's version. Flare ignores prerelease plugin tags; pushing only
117
+ a branch does not create an installable version. A GitHub Release and `.fpp`
118
+ upload are unnecessary.
119
+ 4. Stop development, then open **Settings → Plugins → Add → Install from GitHub**
120
+ on any supported Flare platform. Enter `https://github.com/OWNER/REPO`, load the
121
+ latest stable version, and review its source and permissions before confirming.
122
+ Installation takes effect immediately. Add/log in to the plugin account and
123
+ verify its behavior on that device.
124
+ 5. For updates, increment `manifest.version`, commit and push, then publish a new
125
+ matching stable tag. Keep plugin/platform IDs unchanged. In Flare, check for
126
+ updates and review/confirm the offered version; app restart is unnecessary.
127
+
128
+ See [GitHub publication and update rules](https://github.com/DimensionDev/Flare/blob/feature/plugin/feature/plugin/sdk/skill/flare-plugin/references/publishing.md).
129
+
130
+ ## Optional: package and install a local file
131
+
132
+ Use `.fpp` for offline transfer or local testing when GitHub distribution is not
133
+ needed. From your project, create a new, empty `dist` directory and copy only
134
+ `manifest.json`, `plugin.js`, one `assets/icon.<extension>`, and any `locales/*.json`
135
+ into it, preserving those paths. Keep source, `.git`, `package.json`, `node_modules`,
136
+ and previous archives outside `dist`. Then run from the project root:
87
137
 
88
- ## Editor types
138
+ ```sh
139
+ npx --package=flare-plugin-sdk@next flare-plugin-pack ./dist ../my-plugin.fpp
140
+ ```
141
+
142
+ Stop development for this plugin. In **Settings → Plugins → Add**, choose file
143
+ installation, select the `.fpp`, review, and confirm. Installation is immediate.
144
+ Packaging checks archive structure; Flare still validates the manifest,
145
+ registration, permissions, and behavior. File installs have no GitHub update tracking.
146
+
147
+ ## Optional: editor types and TypeScript
148
+
149
+ For JSON Schema use without network access, install the SDK below and set the
150
+ manifest's `$schema` to `./node_modules/flare-plugin-sdk/skill/flare-plugin/manifest.schema.json`.
151
+ Keep these development files outside the optional `.fpp` staging directory.
152
+ Flare treats `$schema` as editor metadata and never downloads it. With an older
153
+ Flare build that rejects this field, remove it and use a VS Code `json.schemas`
154
+ association in workspace settings instead. See the
155
+ [manifest editor guide](https://github.com/DimensionDev/Flare/blob/feature/plugin/feature/plugin/sdk/skill/flare-plugin/references/manifest.md#json-schema-and-editor-support)
156
+ and [VS Code schema settings](https://code.visualstudio.com/docs/languages/json#_json-schemas-and-settings).
157
+
158
+ Install editor types in your authoring project:
159
+
160
+ ```sh
161
+ npm install --save-dev flare-plugin-sdk@next
162
+ ```
89
163
 
90
164
  Add the package to your TypeScript project's compiler options:
91
165
 
@@ -122,6 +196,14 @@ Initializer tests cover valid unique IDs, empty/nested/Unicode paths, invalid
122
196
  arguments, and preserving existing directories, files, and symlinks. They do not
123
197
  contact a website or publish to npm. Flare's Host and platform acceptance checks are
124
198
  documented in `skill/flare-plugin/references/testing.md`.
199
+ The draft-07 schema is compiled with Ajv in strict mode. Shared manifest cases
200
+ exercise both Schema and Host validation; Host tests also compare every field,
201
+ required property, enum, and known capability operation against Kotlin descriptors.
202
+
203
+ To try the SDK from a checkout before npm publication, run
204
+ `npm pack --pack-destination /tmp` after those checks, then install the resulting `.tgz` in
205
+ a separate authoring project with
206
+ `npm install --save-dev /path/to/flare-plugin-sdk-VERSION.tgz`.
125
207
 
126
208
  ## Publish this SDK (maintainers)
127
209
 
package/bin/cli.mjs CHANGED
@@ -32,6 +32,8 @@ async function main() {
32
32
  const template = fileURLToPath(new URL("../skill/flare-plugin/assets/github-template/", import.meta.url));
33
33
  const manifestPath = join(template, "manifest.json");
34
34
  const manifest = JSON.parse(await readFile(manifestPath, "utf8"));
35
+ const { version } = JSON.parse(await readFile(new URL("../package.json", import.meta.url), "utf8"));
36
+ manifest.$schema = `https://unpkg.com/flare-plugin-sdk@${version}/skill/flare-plugin/manifest.schema.json`;
35
37
  const identity = randomUUID().replaceAll("-", "");
36
38
  manifest.id = `local.plugin.p${identity}`;
37
39
  manifest.name = name;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flare-plugin-sdk",
3
- "version": "0.1.0-beta.4",
3
+ "version": "0.1.0-beta.6",
4
4
  "description": "Types, tooling, templates and authoring references for Flare plugins",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "homepage": "https://github.com/DimensionDev/Flare#plugins-beta",
@@ -32,6 +32,7 @@
32
32
  "test": "node --test scripts/*.test.mjs"
33
33
  },
34
34
  "devDependencies": {
35
+ "ajv": "8.20.0",
35
36
  "typescript": "6.0.3"
36
37
  }
37
38
  }
@@ -161,25 +161,39 @@ cases matter. It should identify gaps rather than invent website endpoints.
161
161
 
162
162
  ## Start a plugin repository
163
163
 
164
- 1. Copy the contents of [assets/github-template](assets/github-template/README.md)
165
- to a new repository root. Its example website contract needs adaptation; no
166
- demonstration server is required or provided.
167
- 2. Choose stable plugin/platform IDs, replace the placeholder icon, and adapt
164
+ 1. With Node 22 or newer, create the starter:
165
+
166
+ ```sh
167
+ npx flare-plugin-sdk@next init my-plugin
168
+ cd my-plugin
169
+ ```
170
+
171
+ It generates unique plugin/platform IDs and needs no dependency installation
172
+ or build step for plain JavaScript. For manual copies of
173
+ [assets/github-template](assets/github-template/README.md), replace its example
174
+ IDs and names first. The example API needs adaptation; no demonstration server
175
+ is provided.
176
+ 2. Keep the generated IDs stable, replace the placeholder icon, and adapt
168
177
  authentication and data mapping to your website. See [manifest](references/manifest.md)
169
178
  and [authentication](references/authentication.md).
170
179
  3. Implement the required capability methods and map the responses into
171
180
  [Wire data](references/wire-data.md). The starter uses token import and a
172
181
  read-only timeline whose posts open their website URLs.
173
182
  4. Use [Desktop plugin development](references/testing.md#develop-locally-in-desktop)
174
- to validate and reload a local directory. Follow the other testing checks, then
175
- commit the ready-to-run `plugin.js` and publish a public GitHub repository with a stable version tag.
176
- 5. In Flare's plugin management, enter `https://github.com/OWNER/REPO` and click
177
- **Install**. Flare downloads the latest stable version and shows its source and
178
- permissions in the same dialog. Confirm installation to use the plugin immediately.
179
- Follow the plugin's README to select the platform, origin, and login method.
180
-
181
- See [publishing](references/publishing.md) for exact tag rules and updates. Flare
182
- reads the tagged repository root; a subdirectory in the Flare repository itself
183
+ to start the local directory, test an account, and apply saved edits with
184
+ **Reload plugin** after automatic validation. Follow the syntax, behavior and
185
+ platform checks. Stop development before installing/updating the same plugin.
186
+ 5. Prefer GitHub distribution: commit the ready-to-run files at a public repository
187
+ root, then push a stable tag matching `manifest.version`. In Flare's plugin
188
+ management, enter `https://github.com/OWNER/REPO` and click **Install**. Review
189
+ source and permissions, then confirm to use the plugin immediately. Follow the
190
+ plugin's README to select the platform, origin, and login method.
191
+
192
+ The generated [project README](assets/github-template/README.md) contains the full
193
+ adaptation, local debugging, Git setup/tagging, GitHub installation and update path.
194
+ See [publishing](references/publishing.md) for exact tag rules, updates, and
195
+ [optional local `.fpp` installation](references/publishing.md#optional-local-installation).
196
+ Flare reads the tagged repository root; a subdirectory in the Flare repository itself
183
197
  is not a plugin installation URL. A GitHub Release or `.fpp` upload is unnecessary.
184
198
 
185
199
  ## Reference and example index
@@ -190,6 +204,7 @@ is not a plugin installation URL. A GitHub Release or `.fpp` upload is unnecessa
190
204
  | Boundary contract and registration | [ABI.md](ABI.md) |
191
205
  | Exact JavaScript signatures and field comments | [flare-plugin.d.ts](flare-plugin.d.ts) |
192
206
  | Manifest fields, defaults, enums, and validation | [Manifest](references/manifest.md) |
207
+ | JSON editor completion and static manifest checks | [JSON Schema](manifest.schema.json), [editor setup](references/manifest.md#json-schema-and-editor-support) |
193
208
  | All twelve capabilities, minimum methods, and UI requirements | [Capabilities](references/capabilities.md) |
194
209
  | Platform engines, async completion, HTTP, permissions, credentials, and state | [Runtime and HTTP](references/runtime-http.md) |
195
210
  | Detection and all five login methods | [Authentication](references/authentication.md) |
@@ -6,15 +6,28 @@ Adapt the paths, authentication, and mapping to your website before publishing.
6
6
  No demonstration server is included. Tests in Flare exercise this template with
7
7
  fixture HTTP responses through the real QuickJS runtime.
8
8
 
9
- ## Adapt the template
9
+ ## 1. Adapt the plugin
10
10
 
11
- 1. Copy this directory's contents to your own repository root.
12
- 2. Change `manifest.id`, `platform.id`, names, and description. Keep IDs stable
13
- after publication. Replace the one-pixel placeholder PNG with your own icon.
14
- 3. Adapt `plugin.js` using the Flare Plugin skill and your website's API evidence.
11
+ If you created this project with `npx flare-plugin-sdk@next init my-plugin`, work
12
+ inside `my-plugin` and keep its generated plugin/platform IDs. If you copied the
13
+ template manually, first copy its contents to your repository root and replace
14
+ the example `manifest.id`, `platform.id`, and names. Keep IDs stable for updates.
15
+
16
+ The generated manifest's `$schema` is pinned to the SDK version that created it.
17
+ Open `manifest.json` in VS Code or another JSON Schema editor for completion,
18
+ field descriptions, enum choices and static errors. Flare treats the URL as
19
+ metadata and never downloads it; actual registration and behavior are checked in
20
+ Flare. See the [manifest editor guide](https://github.com/DimensionDev/Flare/blob/feature/plugin/feature/plugin/sdk/skill/flare-plugin/references/manifest.md#json-schema-and-editor-support)
21
+ for offline use and older Flare builds that reject `$schema`.
22
+
23
+ 1. Update the description, login methods, and declared capabilities in
24
+ `manifest.json`. Replace the one-pixel placeholder PNG with your own icon.
25
+ 2. Adapt `plugin.js` using the
26
+ [developer guide](https://github.com/DimensionDev/Flare/tree/feature/plugin/feature/plugin/sdk/skill/flare-plugin)
27
+ and your website's API evidence.
15
28
  It currently verifies an imported bearer token with `/api/me`, then reads
16
29
  `/api/posts`. It registers no detector, so choose the platform explicitly.
17
- 4. Update this README with the actual website, token acquisition steps, supported
30
+ 3. Update this README with the actual website, token acquisition steps, supported
18
31
  features, verification results, and remaining limitations.
19
32
 
20
33
  The template requests no media permission and emits text-only posts. Every post
@@ -22,6 +35,112 @@ uses `detailType: "link"`, opening its HTTPS website URL. There is no arbitrary
22
35
  profile lookup, internal post detail, write capability, or guest access. The
23
36
  authenticated profile returned at login supplies the saved account identity.
24
37
 
38
+ ## 2. Develop and debug locally
39
+
40
+ The plain JavaScript starter needs Node 22 or newer for tooling, with no dependency
41
+ installation or build step. From this project directory, check syntax:
42
+
43
+ ```sh
44
+ node --check plugin.js
45
+ node -e 'JSON.parse(require("node:fs").readFileSync("manifest.json", "utf8")); console.log("Manifest JSON parses")'
46
+ ```
47
+
48
+ Flare supplies the `definePlugin` and `flare` globals and performs the actual
49
+ manifest, registration, and runtime checks. Use a Flare build with Plugins in Settings.
50
+
51
+ 1. In Compose Desktop or native macOS, open **Settings → Plugins → More → Plugin
52
+ development**. Choose this directory, click **Start development**, and confirm
53
+ the access review.
54
+ 2. Add an account, explicitly select this plugin platform, and enter your website's
55
+ HTTPS API origin. Import a real access token. After adapting the endpoints,
56
+ verify the account identity, Home refresh, older/empty/end pages, and link clicks.
57
+ 3. Edit and save `plugin.js`, `manifest.json`, the icon, or translations. Flare
58
+ automatically validates them; click **Reload plugin** to apply the validated
59
+ version. Invalid edits leave the previous working version running.
60
+ 4. Check validation errors and recent-call diagnostics in the development panel.
61
+ Recent calls show method names and outcomes, without HTTP request/response
62
+ payloads. Reproduce authentication, HTTP, response-mapping, and paging failures
63
+ against your website's documented API.
64
+ 5. Click **Stop development** before installing or updating this plugin. Stopping
65
+ restores the version that was running before development; app restarts do not
66
+ automatically mount this directory. Development uses real accounts and data,
67
+ and remote writes are not rolled back.
68
+
69
+ For TypeScript, run your own compiler/watch process and select its output directory.
70
+ Emit one self-contained classic `plugin.js`; Flare provides its Host APIs rather
71
+ than Node/browser APIs. Commit that built script at the repository root for release.
72
+ See [development and testing details](https://github.com/DimensionDev/Flare/blob/feature/plugin/feature/plugin/sdk/skill/flare-plugin/references/testing.md#develop-locally-in-desktop)
73
+ for reload restrictions, credential changes, and platform acceptance checks.
74
+
75
+ ## 3. Publish and install through GitHub (recommended)
76
+
77
+ Create a public GitHub repository with these ready-to-run files at its root:
78
+
79
+ ```text
80
+ manifest.json
81
+ plugin.js
82
+ assets/icon.png
83
+ README.md
84
+ locales/en.json # optional; other locale catalogs as needed
85
+ ```
86
+
87
+ The icon can also be JPEG, WebP, GIF, or ICO; keep exactly one supported icon.
88
+ Development files may coexist in the repository, but keep credentials,
89
+ `node_modules`, build caches, and private fixtures out of Git. Flare reads the
90
+ committed plugin files directly, so build TypeScript before committing/tagging.
91
+
92
+ For a new project and an empty GitHub repository, replace `OWNER/REPO` and run:
93
+
94
+ ```sh
95
+ git init
96
+ git add manifest.json plugin.js assets README.md
97
+ # If used, also stage translations with: git add locales
98
+ git commit -m "Add Flare plugin"
99
+ git branch -M main
100
+ git remote add origin https://github.com/OWNER/REPO.git
101
+ git push -u origin main
102
+ ```
103
+
104
+ Use the existing Git setup if the project is already a repository. The generated
105
+ `manifest.version` is `0.1.0`. After pushing the matching commit, publish its stable tag:
106
+
107
+ ```sh
108
+ git tag v0.1.0
109
+ git push origin refs/tags/v0.1.0
110
+ ```
111
+
112
+ If you changed the manifest version, commit/push it and use that exact version
113
+ after the optional lowercase `v`. npm SDK versions and plugin versions are
114
+ independent. Flare ignores prerelease plugin tags; a branch alone is insufficient.
115
+ A GitHub Release and uploaded `.fpp` asset are unnecessary.
116
+
117
+ Stop development, then in **Settings → Plugins → Add → Install from GitHub** enter
118
+ `https://github.com/OWNER/REPO`. Load the latest stable version, review its source
119
+ and permissions, and confirm. Installation takes effect immediately. Select the
120
+ plugin platform, HTTPS API origin, and real access token to verify it on each target
121
+ device. For later updates, increment `manifest.version`, commit/push, and publish
122
+ a new matching stable tag while preserving IDs. Check for updates in Flare and
123
+ review/confirm the new version. See the
124
+ [publication and update rules](https://github.com/DimensionDev/Flare/blob/feature/plugin/feature/plugin/sdk/skill/flare-plugin/references/publishing.md).
125
+
126
+ ## Alternative: package a local file
127
+
128
+ Use `.fpp` for offline transfer or local testing. Create a new, empty `dist`
129
+ directory and copy only `manifest.json`, `plugin.js`, one supported
130
+ `assets/icon.<extension>`, and any `locales/*.json` into it, keeping those paths.
131
+ Keep `.git`, `package.json`, `node_modules`, tests, and old archives outside `dist`.
132
+ From this project directory, run:
133
+
134
+ ```sh
135
+ npx --package=flare-plugin-sdk@next flare-plugin-pack ./dist ../my-plugin.fpp
136
+ ```
137
+
138
+ Stop development for this plugin, then choose file installation in **Settings →
139
+ Plugins → Add**, select the `.fpp`, review, and confirm. It becomes available
140
+ immediately. The packer checks archive structure; Flare still validates the
141
+ manifest, registration, permissions, and behavior. Local file installs have no
142
+ GitHub source/update tracking.
143
+
25
144
  ## Illustrative website API to replace
26
145
 
27
146
  The selected origin is an absolute HTTPS origin such as `https://api.example.org`
@@ -56,16 +175,5 @@ the actual API, including token expiry and rate-limit responses. The helper maps
56
175
  401/404/429 to typed errors, treats other HTTP failures as `Remote`, and parses
57
176
  the response's string `body` explicitly.
58
177
 
59
- ## Publish and install after adaptation
60
-
61
- - Commit `manifest.json`, the self-contained `plugin.js`, one `assets/icon.png` (or JPEG/WebP/GIF/ICO), and
62
- any `locales/*.json` at the root of a public GitHub repository.
63
- - Publish a stable tag matching the manifest version, initially `v0.1.0`.
64
- - In Flare plugin management, install `https://github.com/OWNER/REPO`, confirm the
65
- review. The plugin becomes available immediately. A GitHub Release or `.fpp` asset is not required.
66
- - Select your platform and HTTPS API origin, then import a real access token.
67
- Verify that the saved account, Home timeline, pagination, and link clicks work.
68
-
69
- Publish later changes under a new version tag. Keep tokens and Cookies out of
70
- the repository. Describe separately which checks passed with fixtures and which
71
- passed against the actual website and Flare UI.
178
+ Describe separately which checks passed with fixtures and which passed against
179
+ the actual website and Flare UI. Keep tokens and Cookies out of the repository.
@@ -1,4 +1,5 @@
1
1
  {
2
+ "$schema": "https://unpkg.com/flare-plugin-sdk@next/skill/flare-plugin/manifest.schema.json",
2
3
  "schemaVersion": 1,
3
4
  "apiVersion": 1,
4
5
  "id": "dev.example.flare.feed",
@@ -1,4 +1,5 @@
1
1
  {
2
+ "$schema": "https://unpkg.com/flare-plugin-sdk@next/skill/flare-plugin/manifest.schema.json",
2
3
  "schemaVersion": 1,
3
4
  "apiVersion": 1,
4
5
  "id": "dev.dimension.flare.sample.pixelfed",