You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Enhance license key documentation for TinyMCE 8, clarifying T8LK prefix usage and client-side JWT validation across various integration references and examples.
{productname} 8 introduces an enhanced license key system that provides improved subscription access control and streamlined renewal processes. This system includes both date-based and version-locked keys, supporting various deployment scenarios including cloud, self-hosted, and hybrid configurations.
7
+
{productname} 8 uses an enhanced license key system that provides improved subscription access control and streamlined renewal processes. This system includes both **date-based** and **version-locked** keys, supporting various deployment scenarios including cloud, self-hosted, hybrid and offline (air-gapped) environment configurations.
9
8
10
9
[IMPORTANT]
11
10
====
12
-
If you are using {productname} 7, it is licensed under the GNU General Public License Version 2 or later. A configuration option called 'license_key' requires developers to make a conscious decision to use {productname} with the GPLv2+ license or with a commercial license.
11
+
{productname} is licensed under the GNU General Public License Version 2 or later. A configuration option called 'license_key' introduced in v7 required developers to make a conscious decision to use {productname} with the GPLv2+ license or with a commercial license.
12
+
13
+
For {productname} 8, self-hosted, hybrid, and offline deployments require a valid license key with the `+"T8LK:"+` prefix such as `+license_key: "T8LK:your-license-key"+`. This prefix indicates that the key is for version 8 and provides enhanced validation and management features.
13
14
14
15
If you are using {productname} in a self-hosted environment, a console log warning message will display if the license key config option is missing or invalid. This message aims to ensure compliance with licensing requirements and provide transparency during the evaluation period.
15
16
16
17
This message will not be shown when loading {productname} from {cloudname}, as it is already under a commercial license.
17
-
18
-
For {productname} 8, license keys use the `+"T8LK:"+` prefix and provide enhanced validation and management features. These keys support both online and offline validation modes.
19
18
====
20
19
21
20
include::partial$misc/setting-the-license.adoc[]
22
21
23
22
== License Types and Deployment Options
24
23
25
-
=== Date-based Keys (Standard)
26
-
27
-
The standard license key type in {productname} 8 is date-based, meaning:
28
-
29
-
* The key has a soft expiration date that matches your subscription end date.
30
-
* After the soft expiration, the editor enters a grace period in `read-only` mode.
31
-
* After the grace period expires, the editor becomes completely disabled.
32
-
* Premium plugins are disabled at the soft expiration date.
33
-
* In-editor messaging will notify users about approaching expiration.
34
-
35
-
=== Version-locked Keys (Alternative)
36
-
37
-
For customers who cannot use date-based keys, version-locked keys are available:
38
-
39
-
* The key is locked to specific {productname} versions.
40
-
* No expiration date - the key continues working for allowed versions.
41
-
* Cannot be used with versions released after your subscription ends.
42
-
* Must contact account manager to get access to newer versions.
43
-
* Suitable for air-gapped environments or strict deployment policies.
44
-
45
-
=== Deployment Patterns
46
-
47
-
==== Cloud-only
48
-
49
-
* Use API key.
50
-
* Premium features via subscription.
51
-
* CDN-hosted resources.
52
-
* Automatic updates.
53
-
54
-
==== Self-hosted
55
-
56
-
* Use license key with `T8LK` prefix.
57
-
* Local premium plugins.
58
-
* Manual updates.
59
-
* Full control over assets.
60
-
61
-
==== Hybrid
62
-
63
-
* Both API key and license key.
64
-
* Mix of cloud and local features.
65
-
* Flexible deployment options.
66
-
* Fallback capabilities.
67
-
68
-
=== Offline Mode
69
-
70
-
For air-gapped environments or offline usage:
71
-
72
-
* Supports environments without internet connectivity
73
-
* Compatible with strict network security policies
74
-
* Maintains license compliance through client-side JWT validation
75
-
* Enforces version and domain restrictions without server connection
76
-
* Works with standard security controls and firewalls
77
-
* Requires version-locked keys for maximum compatibility
78
-
79
-
[NOTE]
80
-
====
81
-
For air-gapped environments:
82
-
* Use version-locked keys instead of date-based keys
83
-
* Premium plugins must be downloaded and bundled locally
84
-
* Updates require manual deployment of new versions
license_key: "T8LK:your-license", // For local fallback
145
-
// Optional: Configure failover behavior
177
+
178
+
// Failover configuration example
146
179
serviceLoadFailbackTime: 5000, // Wait 5s before falling back to local
180
+
181
+
// Custom handler for image uploads with cloud/local failover
147
182
images_upload_handler: function (blobInfo, progress) {
148
-
// Custom handler that tries cloud first, falls back to local
149
183
return new Promise((resolve, reject) => {
150
-
// Implementation of cloud/local failover logic
184
+
// Example implementation:
185
+
// 1. Try uploading to cloud service first
186
+
// 2. If cloud upload fails or times out, fall back to local storage
187
+
// 3. Handle progress updates for both scenarios
188
+
// 4. Return the URL of the uploaded image
189
+
190
+
// For detailed implementation, see the Image Upload documentation
151
191
});
152
192
}
153
193
});
@@ -156,6 +196,7 @@ tinymce.init({
156
196
[NOTE]
157
197
====
158
198
For hybrid deployments:
199
+
159
200
* Both `api_key` and `license_key` are used together
160
201
* Configure appropriate timeouts for service failover
161
202
* Consider implementing custom handlers for seamless fallback
@@ -188,32 +229,44 @@ tinymce.init({
188
229
[NOTE]
189
230
====
190
231
For offline deployments:
232
+
191
233
* All assets must be available locally
192
234
* Content delivery URLs should point to local resources
193
235
* Premium plugins must be downloaded and included in your bundle
236
+
* JWT validation is built into the {productname} core and works completely offline:
237
+
** No internet connectivity required for license validation
238
+
** No server communication or "phone home" checks
239
+
** All validation is performed securely within the browser
194
240
====
195
241
196
242
== License States
197
243
198
-
=== Active
199
-
200
-
* Full editor and premium plugin functionality.
201
-
* Regular version upgrades available (date-based keys).
202
-
* No restrictions on features.
203
-
204
-
=== Grace Period (Date-based keys only)
205
-
206
-
// TBA: Validate this date is correct
207
-
* Occurs 30 days before subscription end.
208
-
* All features remain functional.
209
-
* In-editor notifications about approaching expiration.
210
-
* Time to contact Tiny for renewal.
211
-
212
-
=== Expired
213
-
214
-
* Date-based keys: Editor disabled after grace period.
215
-
* Version-locked keys: Cannot use new versions.
216
-
* Must obtain new license key after renewal.
244
+
[cols="1,2,1", options="header"]
245
+
|===
246
+
| State | Features & Behavior | Applicable To
247
+
248
+
| Active
249
+
a|
250
+
* Full editor and premium plugin functionality
251
+
* Regular version upgrades available
252
+
* No restrictions on features
253
+
| All license types
254
+
255
+
| Grace Period
256
+
a|
257
+
* All features remain functional
258
+
* In-editor notifications about approaching expiration
259
+
* Occurs 30 days before subscription end
260
+
* Time to contact Tiny for renewal
261
+
| Date-based keys only
262
+
263
+
| Expired
264
+
a|
265
+
* Date-based keys: Editor disabled
266
+
* Version-locked keys: Cannot use new versions
267
+
* Must obtain new license key after renewal
268
+
| All license types
269
+
|===
217
270
218
271
== FAQ
219
272
@@ -225,39 +278,47 @@ The GPLv2+ license was chosen to provide the best compatibility with existing GP
225
278
226
279
=== What is the difference between a license key and the API key?
227
280
228
-
The **API key** is used when loading {productname} from the {cloudname} and undergoes server-side validation. The **license key** (starting with T8LK: in version 8) is used to declare the license terms when self-hosting {productname} and uses client-side JWT validation in the browser.
281
+
The **API key** is used when loading {productname} from the {cloudname} and undergoes server-side validation. The **license key** (starting with `T8LK:` in version 8) is used to declare the license terms when self-hosting {productname}. The license key contains a JSON Web Token (JWT) that enables secure client-side validation performed entirely within the browser, requiring no server communication or "phone home" checks.
229
282
230
283
=== Who needs to get a license key?
231
284
232
285
Anyone who intends to self-host {productname} will need to:
286
+
233
287
* For version 7: Provide a valid commercial license key or declare their intention to use {productname} under the GPLv2+ license
234
288
* For version 8: Obtain a T8LK-prefixed commercial license key or use GPL mode
235
289
236
290
=== How will I know if this change affects me?
237
291
238
-
If {productname} detects that the `license_key` configuration is missing or invalid, it will display a console log warning message. These warnings are designed to ensure compliance and provide transparency during evaluation periods. If you have actively suppressed or hidden these messages, please remove those overrides to maintain proper license validation. If no notification appears, you are not affected.
292
+
If {productname} detects that the `license_key` configuration is missing or invalid, it will display a console log warning message. These warnings are designed to ensure compliance and provide transparency during evaluation periods.
293
+
294
+
[TIP]
295
+
If you have actively suppressed or hidden these messages, please remove those overrides to maintain proper license validation. If no notification appears, you are not affected.
239
296
240
297
=== Should I be using both an API key and a license key?
241
298
242
299
For standard deployments, use only one of the following:
300
+
243
301
* *API key* - For cloud deployments
244
302
** Server-side validation
245
303
** Automatic updates and CDN delivery
246
304
** Premium plugin access via subscription
247
305
** No client-side validation required
248
306
249
307
* *License key* - For self-hosted deployments
250
-
** Client-side JWT validation
308
+
** Client-side JWT validation is automatically performed
251
309
** T8LK prefix required for version 8
252
310
** Supports air-gapped environments
253
311
** Local premium plugin validation
254
312
255
313
*Hybrid Deployment Cases:*
314
+
256
315
* Using both keys together requires specific configuration:
257
-
** Set up cloud services with API key
258
-
** Configure local fallback with license key
259
-
** Enable high availability features
260
-
** Access both cloud and local premium plugins
316
+
** Set up cloud services with API key for primary cloud access
317
+
** Configure local fallback with license key for offline operation
318
+
** Configure service failover timeouts (e.g., `serviceLoadFailbackTime`)
319
+
** Ensure premium plugins are available both via cloud and locally
320
+
** Implement custom handlers for seamless cloud/local failover
321
+
** Test both online and offline scenarios thoroughly
Use this when self-hosting {productname} instead of loading from {cloudname}. License keys must start with the "T8LK:" prefix and use client-side JWT validation. For more information, see: xref:license-key.adoc[License Key].
135
+
Use this when self-hosting {productname} instead of loading from {cloudname}. License keys must start with the "T8LK:" prefix and use client-side JWT validation that runs entirely in the browser, requiring no server communication or "phone home" checks. For more information, see: xref:license-key.adoc[License Key].
Copy file name to clipboardExpand all lines: modules/ROOT/partials/integrations/blazor-tech-ref.adoc
+2-1Lines changed: 2 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -190,7 +190,7 @@ In your component:
190
190
191
191
Specifies the {productname} license key. Required for self-hosted deployments of {productname}. This property is not required for deployments using the {cloudname}.
192
192
193
-
License keys must start with the "T8LK:" prefix and use client-side JWT validation. For more information, see: xref:license-key.adoc[License Key].
193
+
License keys must start with the "T8LK:" prefix and use client-side JWT validation that runs entirely in the browser, requiring no server communication or "phone home" checks. For more information, see: xref:license-key.adoc[License Key].
194
194
195
195
*Type:* `+String+`
196
196
@@ -206,6 +206,7 @@ License keys must start with the "T8LK:" prefix and use client-side JWT validati
206
206
LicenseKey="T8LK:your-license-key"
207
207
/>
208
208
----
209
+
209
210
Use this example when you have a commercial license for TinyMCE 8 or newer. The T8LK prefix is required.
Use this when self-hosting {productname} instead of loading from {cloudname}. License keys must start with the "T8LK:" prefix and use client-side JWT validation. For more information, see: xref:license-key.adoc[License Key].
192
+
Use this when self-hosting {productname} instead of loading from {cloudname}. License keys must start with the "T8LK:" prefix and use client-side JWT validation that runs entirely in the browser, requiring no server communication or "phone home" checks. For more information, see: xref:license-key.adoc[License Key].
Use this option when self-hosting {productname} instead of loading from {cloudname}. License keys must start with the "T8LK:" prefix and use client-side JWT validation. For more information, see: xref:license-key.adoc[License Key].
61
+
Use this option when self-hosting {productname} instead of loading from {cloudname}. License keys must start with the "T8LK:" prefix and use client-side JWT validation that runs entirely in the browser, requiring no server communication or "phone home" checks. For more information, see: xref:license-key.adoc[License Key].
Use this when self-hosting {productname} instead of loading from {cloudname}. License keys must start with the "T8LK:" prefix and use client-side JWT validation. For more information, see: xref:license-key.adoc[License Key].
142
+
Use this when self-hosting {productname} instead of loading from {cloudname}. License keys must start with the "T8LK:" prefix and use client-side JWT validation that runs entirely in the browser, requiring no server communication or "phone home" checks. For more information, see: xref:license-key.adoc[License Key].
0 commit comments