diff --git a/modules/ROOT/pages/8.0-release-notes.adoc b/modules/ROOT/pages/8.0-release-notes.adoc index 7c62f25b54..4277348511 100644 --- a/modules/ROOT/pages/8.0-release-notes.adoc +++ b/modules/ROOT/pages/8.0-release-notes.adoc @@ -1,4 +1,3 @@ - = {productname} {release-version} :release-version: 8.0.0 :navtitle: {productname} {release-version} @@ -27,8 +26,10 @@ include::partial$misc/admon-releasenotes-for-stable.adoc[] * xref:deprecated[Deprecated] * xref:known-issues[Known issues] -[NOTE] -For additional details on {productname} {release-version} breaking changes when considering upgrading, see xref:migration-from-7x.adoc[Migrating from {productname} 7 to {productname} {release-version}]. +[IMPORTANT] +==== +This release includes breaking changes to the license key system. All commercial self-hosted deployments must update their license keys to use the new `T8LK:` prefix format. For details on this and other breaking changes when considering upgrading, see xref:migration-from-7x.adoc[Migrating from {productname} 7 to {productname} {release-version}]. +==== [[new-premium-plugin]] New Premium plugin @@ -119,7 +120,62 @@ For information on using Enhanced Skins & Icon Packs, see: xref:enhanced-skins-a [[changes]] == Changes -{productname} {release-version} also includes the following change: +{productname} {release-version} includes the following changes: + +=== Enhanced license key system with T8LK prefix + +The license key system in {productname} 8 has been enhanced to provide improved subscription access control and streamlined renewal processes. This change primarily affects self-hosted deployments, as cloud users ({cloudname}) do not require a license key. + +[IMPORTANT] +==== +* If you use {cloudname}, no license key is required - your cloud subscription automatically includes the commercial license. +* For self-hosted deployments, all commercial license keys must use the new `T8LK:` prefix format. +* Existing TinyMCE 7 license keys cannot be made compatible with TinyMCE 8 by adding the T8LK prefix. +==== + +Key changes for self-hosted deployments: + +* New `T8LK:` prefix requirement for all commercial license keys. +* No server communication or "phone home" checks required +* Support for both date-based and version-locked keys +* Streamlined hybrid deployment configuration +* Improved support for air-gapped and offline environments + +[IMPORTANT] +==== +*Cloud Deployments:* + +* When using {cloudname}, only an API key is required - no license key needed +* Your cloud subscription automatically includes the commercial license + +*Self-hosted Deployments:* + +* Commercial use: Contact your account manager or visit link:https://www.tiny.cloud/my-account[Tiny Cloud Account] to obtain a T8LK-prefixed license key +* GPL use: Set `license_key: 'gpl'` (case insensitive) +* Open source projects using premium features: Use the combined format `license_key: 'GPL+T8LK:...'` + +*Required License Key Manager Setup for Self-hosted Commercial Deployments:* + +For commercial license keys to function, the license key manager must be properly configured. **The editor will not work without this setup.** + +* **Standalone hosting** (e.g., in a `/public` folder): The `+licensekeymanager+` folder is **required** to be located within the `+plugins+` folder alongside all other plugins. +* **Bundled applications**: The `+licensekeymanager/index.js+` file is **required** to be imported, otherwise the editor will result in a disabled state. + +.Example: Importing the License Key Manager in a bundled application +[source,javascript] +---- +import 'tinymce/plugins/licensekeymanager'; +---- + +==== + +=== Upgrading from TinyMCE 7 + +* *Cloud Users ({cloudname})*: No license key changes needed - simply update your {productname} version. +* *Self-hosted Users*: Contact your account manager to obtain a new T8LK-prefixed license key. + +For more information on the new license key system, see: xref:license-key.adoc[License Key]. + // === // #TINY-vwxyz1 @@ -182,4 +238,4 @@ There known issue in {productname} {release-version}. // #TINY-vwxyz1 // CCFR here. -// **Status**: This issue is currently being investigated. \ No newline at end of file +// **Status**: This issue is currently being investigated. diff --git a/modules/ROOT/pages/license-key.adoc b/modules/ROOT/pages/license-key.adoc index 7cd007e07e..58c4874066 100644 --- a/modules/ROOT/pages/license-key.adoc +++ b/modules/ROOT/pages/license-key.adoc @@ -1,55 +1,362 @@ = License key :description_short: {productname} License Configuration Guide | {productname} -:description: Learn how to configure license key and stop {productname} from running in the evaluation mode. +:description: Learn how to configure a license key in {productname}. :keywords: {productname}, cloud, script, textarea, apiKey, faq, license key, frequently asked questions, +== Overview +{productname} 8 uses an enhanced license key system to ensure compliance with {productname} licensing terms. + [IMPORTANT] ==== -{productname} 7 is licensed under the GNU General Public License Version 2 or later. A new configuration option called 'license_key' requires developers to make a conscious decision to use {productname} with the GPLv2+ license or with a commercial license. +{productname} is licensed under the GNU General Public License Version 2 or later. A configuration option called `+'license_key'+` introduced in {productname} 7 requires developers to make a conscious decision to use {productname} with the GPLv2+ license or with a commercial license. -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. +When using {productname} 8 in a self-hosted environment, a license key must be provided and it must be valid. Otherwise, the editor will be disabled. A license key is not required when loading {productname} from {cloudname}, as it is already under a commercial license. -This message will not be shown when loading {productname} from {cloudname}, as it is already under a commercial license. +In addition, when using {productname} 8 in a self-hosted environment for commercial use, a commercial license key manager addon is required in order for the editor to operate. ==== include::partial$misc/setting-the-license.adoc[] +== Setting up the Commercial License Key Manager + +[NOTE] +==== +`+'licensekeymanager'+` does not need to be added to the `+plugins+` configuration option. +==== + +A commercial license key manager (`+licensekeymanager+`) is required to be loaded by the editor when using a commercial license key. The commercial license key manager can be set up like any other plugin for self-hosted installations. However, it does not need to be specified in the `+plugins+` configuration option as the editor will attempt to automatically load the license key manager when required. + +The commercial license key manager is available: + +* in a purchased self-hosted plan - a `licensekeymanager` folder will be present in the `plugins` folder of the {productname} `+.zip+`. +* in a purchased self-hosted addon - a `licensekeymanager` folder will be present in addition to the purchased addon. +* as a standalone addon - a `licensekeymanager` folder will be present. + +[IMPORTANT] +==== +The following setup steps are **required** for the editor to function with commercial license keys. The editor will not work without proper license key manager configuration. +==== + +If hosting {productname} standalone, for example, in a `/public` folder, **ensure** the `+licensekeymanager+` folder is included in the `+plugins+` folder with all of the other plugins. The editor will not function without this. + +If bundling {productname} as part of an application **ensure** the `+licensekeymanager/index.js+` file is imported, otherwise the editor will not function without this. + +.Example importing the License Key Manager in a bundled application +[source,javascript] +---- +import 'tinymce/plugins/licensekeymanager'; +---- + +== License Types and Deployment Options + +=== License Key Types + +There are two different license types: + +. **GPL license** +. **Commercial license** + +A commercial license can be broken down into sub-types: + +[cols="1,2,2", options="header"] +|=== +| **Type** | **Key Features** | **Best For** + +| Time-based Keys +a| +* Expiry date +* Optional grace period +* Premium plugin access +* No patch version locking +a| + ** Developers that can perform regular license rotation. + ** Developers that want a license key to work across patch versions. +| Version-locked Keys +a| +* Specific patch version only +* No expiration date +* Premium plugin access +a| +* Environments where regular license key rotation cannot be performed. +|=== + +=== Deployment Types + +[cols="1,2,2", options="header"] +|=== +| **Type** | **Key Configuration** | **Capabilities** + +| Cloud-only +a| +* API key required for: + ** Cloud services access + ** Premium plugin access + ** Automatic updates +* No license key required as its automatically issued. (defaults to a commercial license) +a| +* Fully managed service: + ** No local deployment needed + ** Automatic updates and CDN delivery + +| Self-hosted +a| +* A GPL or commercial license key is required +* No API key required +a| +* Complete local control: + ** Self-hosted editor and premium plugins + ** Custom deployment options + ** No cloud dependencies + ** No internet connectivity needed + +| Hybrid +a| +* Both keys required: + ** API key for cloud features + ** License key for self-hosted editor and self-hosted premium plugins +a| +* Best of both worlds: + ** Access to cloud features + ** Custom deployment options +|=== + +== License States + +[cols="1,2,1", options="header"] +|=== +| State | Features & Behavior | Applicable To + +| Active +a| +* Full editor and premium plugin functionality +* No restrictions on features +| All license types + +| Grace Period +a| +* All features remain functional +* Warnings that the license key is in grace period and will be not work in the future +| Time-based keys only + +| Expired +a| +* Editor is disabled +* Must obtain a new license key to continue using {productname} +| Time-based keys only +| Invalid +a| +* Editor is disabled +* Editor notifications notifying that the license key is not valid +| All license types +|=== + == FAQ === What does the GPL license mean? -{productname} 7 is licensed under the GNU General Public License Version 2 or later, often abbreviated to GPLv2+. https://www.gnu.org/licenses/old-licenses/gpl-2.0.html[Read more about the license terms here.^] +{productname} 8 is licensed under the GNU General Public License Version 2 or later, often abbreviated to GPLv2+. https://www.gnu.org/licenses/old-licenses/gpl-2.0.html[Read more about the license terms here.^] The GPLv2+ license was chosen to provide the best compatibility with existing GPL licensed open source projects. === What is the difference between a license key and the API key? -The **API key** is used when loading {productname} from the {cloudname}. The **license key** is used to declare the license terms when self-hosting {productname}. +The **API key** is used when loading {productname} from the {cloudname}. The license key is used to declare the license terms when self-hosting {productname}. === Who needs to get a license key? -Anyone who intends to self-host {productname} will need to provide a valid commercial license key or declare their intention to use {productname} under the GPLv2+ license. +Anyone who intends to self-host {productname} will need to obtain a T8LK-prefixed commercial license key or use GPL mode === How will I know if this change affects me? -If {productname} detects that the `license_key` configuration is missing or invalid, it will display a console log warning. If you have actively suppressed or hidden this message, please remove those overrides. If no notification appears, you are not affected. +If {productname} detects that the `license_key` configuration is missing or invalid, it will display a console log warning message and/or editor notification and set the editor to disabled. These warnings and restrictions are designed to ensure compliance and provide transparency during evaluation periods. + +[TIP] +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. === Should I be using both an API key and a license key? -No, an API key and a license key should not be used simultaneously. The API key should only be used if {productname} is loaded from the {cloudname}. If {productname} is being self-hosted, the license key option should be used instead. +See the <> section above for more information. + +[IMPORTANT] +==== +Only use both keys in properly configured hybrid deployments. Using both keys without proper hybrid deployment configuration **may cause** validation conflicts and unexpected behavior. +==== + +=== Will {productname} "phone home" to check the license key? -=== Will {productname} “phone home” to check the license key? +No, {productname} does not contact any server to validate the license key for self-hosted deployments. -No. {productname} does not contact any server to validate the license key. +If using a cloud or hybrid deployment configuration, the license key may be checked by {cloudname}. === What happens if I don't provide a valid license key? -The console log message or notification will persist until a valid license key or 'gpl' is provided. +In addition to the editor being disabled, a console log warning message and/or editor notification will persist until a valid license key or 'gpl' is provided. === Why is a license key required? The license key ensures compliance with {productname} licensing terms. It's part of our efforts to refine the license key system and may have additional functionalities in the future. +=== How do I obtain a {productname} 8 license key? + +To obtain a new {productname} 8 license key (T8LK-prefixed): + +* *Existing customers*: Contact your account manager or visit link:https://www.tiny.cloud/my-account[Tiny Cloud Account] to upgrade your subscription. +* *New customers*: Visit link:https://www.tiny.cloud/pricing[Tiny Cloud Pricing] to purchase a new license. + +[IMPORTANT] +==== +Existing {productname} 7 license keys cannot be modified to work with {productname} 8 by adding the T8LK prefix. A new {productname} 8 license must be obtained through the proper channels listed above. +==== + +=== If im upgrading from TinyMCE 7 how do I get a TinyMCE 8 license key? + +If you are using {cloudname} (cloud-hosted): + +* No license key is required - simply update your {productname} version as your cloud subscription includes the commercial license. + +If you are an existing {productname} 7 self-hosted customer upgrading to {productname} 8: + +. *Active Subscription*: +* Contact your account manager or visit link:https://www.tiny.cloud/my-account[Tiny Cloud Account] to obtain a new T8LK-prefixed license key. +. *Expired Subscription*: +* Contact your account manager or visit link:https://www.tiny.cloud/pricing[Tiny Cloud Pricing] to renew your subscription. +* A new T8LK-prefixed license key will be provided as part of the renewal process. + +[NOTE] +==== +Your existing {productname} 7 license key will continue to work with {productname} 7 self-hosted installations. But, you will require a separate T8LK-prefixed license key for {productname} 8 editor instances for self-hosted installations. +==== + === How can I get further assistance? -For any licensing or technical support questions, see our available options on the https://www.tiny.cloud/docs/tinymce/latest/support/[support page.] \ No newline at end of file +For any licensing or technical support questions, see our available options on the https://www.tiny.cloud/docs/tinymce/latest/support/[support page.] + +=== Technical Support + +For licensing or technical support: +* API key issues: Visit link:https://www.tiny.cloud/my-account[Tiny Cloud Account] +* License key issues: Visit link:https://www.tiny.cloud/my-account[Tiny Cloud Account] or contact your account manager +* Technical support: Visit link:https://support.tiny.cloud[Support Portal] +* Documentation: See link:https://www.tiny.cloud/docs/tinymce/latest/[{productname} Docs] + +== License Key Error Messages + +The following table lists common license key error messages that may appear in the console or editor, along with their descriptions and solutions: + +[cols="1,2,2,2", options="header"] +|=== +| Error Type | Console Message | Editor Notifications | Solution + +| xref:invalid-license-key[Invalid license key (General)] +| The editor is disabled because the license key provided is invalid [+${errorType}+] +| The editor is disabled because the license key provided is invalid. +a| * Verify that the license key is correctly copied from your link:https://www.tiny.cloud/my-account[Tiny Cloud Account] +* Ensure there are no extra spaces or characters in the key +* Check if the key matches your deployment type (Cloud vs Self-hosted) + +| xref:load-error[Load error (Cloud)] +| The editor is disabled because the TinyMCE API key could not be validated. The TinyMCE Commercial License Key Manager plugin is required for the provided API key to be validated but could not be loaded. +| The editor is disabled because the TinyMCE API key could not be validated. +a| * Verify that your API key is valid +* Check if your subscription is active +* Visit the link:https://support.tiny.cloud[Support Portal] if the issue persists + +| xref:load-error[Load error (Self-Hosted)] +| The editor is disabled because the license key provided is invalid. The TinyMCE Commercial License Key Manager plugin is required for the provided license key to be validated but could not be loaded. +| The editor is disabled because the TinyMCE license key could not be validated. +a| * Check if the license key matches your deployment type: GPL or commercial, Cloud or Self-hosted +* Ensure the license key manager is set up correctly: <> + +| xref:expired[Expired] +| The editor is disabled because the license key has expired and is no longer valid +| The editor is disabled because the license key has expired and is no longer valid. +a| * Visit link:https://www.tiny.cloud/my-account[Tiny Cloud Account] to obtain a new license key +* Update your configuration with the new key +* Visit the link:https://support.tiny.cloud[Support Portal] if you believe your license should still be valid + +| xref:grace-period[Grace period] +| The editor will be disabled in the near future because the license key has expired +| The editor will be disabled in the near future because the license key has expired. +a| * Visit link:https://www.tiny.cloud/my-account[Tiny Cloud Account] to obtain a new license key +* Update your configuration before the grace period ends +* Visit the link:https://support.tiny.cloud[Support Portal] if you need assistance with license renewal + +| xref:invalid-editor-version[Invalid editor version] +| The editor is disabled because the license key is not valid with this version of {productname} +| The editor is disabled because the license key is not valid with this version of {productname}. +a| * Verify that your {productname} version matches the license key version +* Update either your {productname} version or obtain a new license key +* For version-locked keys, ensure you're using the correct patch version + +| xref:no-license-key[No license key] +| The editor is disabled because a {productname} license key has not been provided. Make sure to provide a valid license key or add license_key: 'gpl' to the init config to agree to the open source license terms. +| The editor is disabled because a {productname} license key has not been provided. +a| * Add the `license_key` parameter to your {productname} configuration +* For GPL usage, set `license_key: 'gpl'` +* For commercial usage, enter your valid commercial license key + +| xref:invalid-plugin[Invalid plugin] +| The "+${pluginCode}+" plugin requires a valid {productname} license key +| _No editor message_ +a| * Verify that your license includes access to the premium plugin +* Check if your license key is valid and not expired +* Visit the link:https://support.tiny.cloud[Support Portal] if you believe you should have access to this plugin + +| xref:online-api-key-error-fallback[Online API Key Error (5xx - Fallback)] +| The API key could not be validated by the API key validation server [type: +${errorType}${statusMsg}+]. Attempting fallback to provided license key. +| +a| * Check your internet connection +* Verify your firewall settings allow access to the validation server +* The editor will attempt to use the provided license key as fallback + +| xref:online-api-key-error-disable[Online API Key Error (4xx - Disable)] +| The editor is disabled because the API key could not be validated by the API key validation server [type: +${errorType}${statusMsg}+] +| The editor is disabled because the API key could not be validated by the API key validation server. +a| * Verify that your API key is valid +* Check if your subscription is active +* Visit the link:https://support.tiny.cloud[Support Portal] if the issue persists +|=== + +=== Detailed Error Descriptions + +[[invalid-license-key]] +==== Invalid license key (General) +The provided license key is not recognized as a valid {productname} license key. This can occur if the key is malformed, expired, or doesn't match your deployment type. For self-hosted installations, ensure you're using a valid T8LK-prefixed license key. Visit the link:https://www.tiny.cloud/my-account[Tiny Cloud Account] to verify your license key. + +[[load-error-cloud]] +==== Load error (Cloud) +The TinyMCE Commercial License Key Manager plugin is automatically loaded from the Tiny Cloud CDN for cloud deployments. If it cannot be loaded, the editor will be disabled. Review your subscription details in your link:https://www.tiny.cloud/my-account[Tiny Cloud Account] to check its status. + +[[load-error-selfhosted]] +==== Load error (Self-hosted) +For self-hosted installations, the TinyMCE Commercial License Key Manager plugin is required for commercial license keys otherwise the editor will be disabled. If it cannot be loaded, see the <> section for implementation details + +[[expired]] +==== Expired +The license key has reached its expiration date and is no longer valid for use. The editor will be disabled until a new valid license key is provided. For time-based keys, refer to the <> section. To renew your license, visit link:https://www.tiny.cloud/pricing[Tiny Cloud Pricing] or contact your account manager. + +[[grace-period]] +==== Grace period +The license key has reached its initial expiration date but is still within the grace period. The editor will continue to function but will be disabled when the grace period ends. See the <> section for more information about grace periods. Contact your account manager or visit link:https://www.tiny.cloud/my-account[Tiny Cloud Account] to renew your license before the grace period expires. + +[[invalid-editor-version]] +==== Invalid editor version +The license key is not compatible with the current version of {productname}. This typically occurs with version-locked keys when using a different patch version. Visit link:https://www.tiny.cloud/docs/tinymce/latest/[TinyMCE Documentation] to check your editor version. Review the <> section about version-locked keys. If you're upgrading from {productname} 7, visit link:https://www.tiny.cloud/my-account[Tiny Cloud Account] to obtain a new license key or see <> for guidance. For new licenses, visit link:https://www.tiny.cloud/pricing[Tiny Cloud Pricing]. + +[[no-license-key]] +==== No license key +No license key has been provided in the {productname} configuration. For self-hosted installations, you must either provide a valid commercial license key or explicitly opt into GPL usage. See the <> section for implementation details and the "<>" section for GPL licensing information. + +[[invalid-plugin]] +==== Invalid plugin +The attempted use of a premium plugin without a valid commercial license key. This occurs when trying to use premium features with a GPL license or an invalid commercial license. Review your subscription details in your link:https://www.tiny.cloud/my-account[Tiny Cloud Account] to verify plugin access. See the <> section for more information about license types and plugin access. + +[[online-api-key-error-fallback]] +==== Online API Key Error (5xx - Fallback) +A server-side error occurred while validating the API key. The editor will attempt to use the provided license key as a fallback mechanism. This typically occurs in hybrid deployments - see the <> section for proper configuration. If the issue persists, visit link:https://support.tiny.cloud[Support Portal] for assistance. + +[[online-api-key-error-disable]] +==== Online API Key Error (4xx - Disable) +The API key validation failed due to an invalid key or inactive subscription. The editor will be disabled until a valid API key is provided. For API key issues, visit link:https://www.tiny.cloud/my-account[Tiny Cloud Account] or see the "<>" section for clarification. + +For additional assistance, visit our link:https://support.tiny.cloud[Support Portal] or contact your link:https://www.tiny.cloud/my-account[Tiny Cloud Account] manager. diff --git a/modules/ROOT/pages/vite-es6-npm.adoc b/modules/ROOT/pages/vite-es6-npm.adoc index 2d8c93d9e7..eb2cf0f801 100644 --- a/modules/ROOT/pages/vite-es6-npm.adoc +++ b/modules/ROOT/pages/vite-es6-npm.adoc @@ -15,8 +15,18 @@ This guide requires the following: * Node.js and npm. * Basic knowledge of how to use https://vitejs.dev[Vite]. +* For self-hosted deployments: A valid license key starting with `T8LK:` from your link:{accountpageurl}/[{accountpage}] * (Optional: For premium features) The latest premium .zip bundle of TinyMCE that includes premium plugins. +[IMPORTANT] +==== +When self-hosting TinyMCE 8: + +* A license key is required for commercial deployments +* Keys must start with the `T8LK:` prefix +* For hybrid deployments that need both cloud features and local fallback, you can use both `license_key` and `api_key` +==== + == Procedures :is_zip_install: vite @@ -72,4 +82,6 @@ npx vite preview ---- :!is_zip_install: + + include::partial$module-loading/bundling-next-steps.adoc[] diff --git a/modules/ROOT/partials/install/basic-quickstart-base.adoc b/modules/ROOT/partials/install/basic-quickstart-base.adoc index 4138ee9009..4ef25386f9 100644 --- a/modules/ROOT/partials/install/basic-quickstart-base.adoc +++ b/modules/ROOT/partials/install/basic-quickstart-base.adoc @@ -182,7 +182,7 @@ ifeval::["{productSource}" != "cloud"] diff --git a/modules/ROOT/partials/integrations/angular-tech-ref.adoc b/modules/ROOT/partials/integrations/angular-tech-ref.adoc index 4a7261db9f..3efbba4023 100644 --- a/modules/ROOT/partials/integrations/angular-tech-ref.adoc +++ b/modules/ROOT/partials/integrations/angular-tech-ref.adoc @@ -130,21 +130,18 @@ include::partial$misc/get-an-api-key.adoc[] [[licensekey]] === `+licenseKey+` -{cloudname} License key. +include::partial$integrations/common/license-key-property.adoc[] -Use this when self-hosting {productname} instead of loading from {cloudname}. For more information, see: xref:license-key.adoc[License Key]. - -*Type:* `+String+` - -*Default value:* `+undefined+` - -*Possible values:* `undefined`, `'gpl'` or a valid {productname} license key - -==== Example: using `+licenseKey+` +==== Example: Commercial license +[source,html] +---- + +---- -[source,jsx] +==== Example: using `+licenseKey+` with GPL +[source,html] ---- - + ---- [[cloudchannel]] diff --git a/modules/ROOT/partials/integrations/blazor-postinstall.adoc b/modules/ROOT/partials/integrations/blazor-postinstall.adoc index 212562feaf..05f04d7bf4 100644 --- a/modules/ROOT/partials/integrations/blazor-postinstall.adoc +++ b/modules/ROOT/partials/integrations/blazor-postinstall.adoc @@ -1,4 +1,4 @@ -. Verify the installation by checking the `+ItemGroup+` references in the project file. For example, if the project is named _BlazorApp_, the relevant file would be `+BlazorApp.csproj+` with the dependency referenced as follows: +. Verify the installation by checking the `+ItemGroup+` references in the project file. For example, if the project is named _BlazorApp_, the relevant file would be `+BlazorApp.csproj+` with the dependency referenced as follows: + [source,xml] ---- @@ -16,9 +16,9 @@ + [NOTE] ==== -The location of the script depends on the type of Blazor app, including Blazor Server and Blazor WebAssembly (WASM) which are not covered in this guide. +The location of the script depends on the type of Blazor app, including Blazor Server and Blazor WebAssembly (WASM) which are not covered in this guide. -* If using Blazor Server, add the script in `+Pages/_Host.cshtml+`, for example: +* If using Blazor Server, add the script in `+Pages/_Host.cshtml+`, for example: + [source,html] ---- @@ -35,8 +35,8 @@ The location of the script depends on the type of Blazor app, including Blazor S ==== + -. Add the `+Editor+` component to a page by either: -* Using the `+using+` directive: +. Add the `+Editor+` component to a page by either: +* Using the `+using+` directive: + [source,cs] ---- @@ -44,7 +44,7 @@ The location of the script depends on the type of Blazor app, including Blazor S ---- + -For example: +For example: + _File:_ `+Pages/Index.razor+` + @@ -58,7 +58,7 @@ _File:_ `+Pages/Index.razor+`

Welcome to your new app.

---- -* Using the component with its namespace: +* Using the component with its namespace: + [source,cs] ---- @@ -78,10 +78,10 @@ _File:_ `+Pages/Index.razor+`

Hello, world!

Welcome to your new app.

----- +---- + [IMPORTANT] -In a Blazor Web App, different render modes determine how components are rendered and how interactivity is handled. To enable JavaScript interactivity, ensure that `+@rendermode InteractiveServer+` is specified in a page component. +In a Blazor Web App, different render modes determine how components are rendered and how interactivity is handled. To enable JavaScript interactivity, ensure that `+@rendermode InteractiveServer+` is specified in a page component. + ifeval::["{productSource}" == "cloud"] @@ -91,7 +91,7 @@ ifeval::["{productSource}" == "cloud"] [source,cs] ---- ----- +---- + endif::[] @@ -101,8 +101,8 @@ ifeval::["{productSource}" != "cloud"] + [source,cs] ---- - ----- + +---- + . To load {productname} from the self-hosted package instead of the {cloudname}, configure the `+ScriptSrc+` property: diff --git a/modules/ROOT/partials/integrations/blazor-tech-ref.adoc b/modules/ROOT/partials/integrations/blazor-tech-ref.adoc index bf708c773c..bafa0b8e13 100644 --- a/modules/ROOT/partials/integrations/blazor-tech-ref.adoc +++ b/modules/ROOT/partials/integrations/blazor-tech-ref.adoc @@ -19,7 +19,7 @@ The `+TinyMCE.Blazor+` `+Editor+` component accepts the following properties: JsConfSrc="path_to_jsObj" Conf="@yourConf" ApiKey="no-api-key" - LicenseKey="your-license-key" + LicenseKey="gpl" ScriptSrc="/path/to/tinymce.min.js" ClassName="tinymce-wrapper" /> @@ -188,19 +188,29 @@ In your component: === `LicenseKey` -Specifies the {productname} license key. Required for self-hosted deployments of {productname}. This property is not required for deployments using the {cloudname}. For more information on licensing, see: xref:license-key.adoc[License key]. -*Type:* `+String+` +include::partial$integrations/common/license-key-property.adoc[] + +==== Example: Commercial license (TinyMCE 8+) +[source,cs] +---- + +---- -==== Example using LicenseKey +Use this example when you have a commercial license for TinyMCE 8 or newer. The T8LK prefix is required. +==== Example: Open source GPL license [source,cs] ---- ---- +Use this example when you're using TinyMCE under the open source GPL license in a self-hosted environment. + === `ScriptSrc` Use the `+ScriptSrc+` property to specify the location of {productname} to lazy load when the application is not using {cloudname}. This setting is required if the application uses a self-hosted version of {productname}, such as the https://www.nuget.org/packages/TinyMCE/[{productname} NuGet package] or a .zip package of {productname}. diff --git a/modules/ROOT/partials/integrations/common/license-key-property.adoc b/modules/ROOT/partials/integrations/common/license-key-property.adoc new file mode 100644 index 0000000000..815629ec26 --- /dev/null +++ b/modules/ROOT/partials/integrations/common/license-key-property.adoc @@ -0,0 +1,20 @@ +Specifies the {productname} license key. Required for self-hosted deployments of {productname}. This property is **not required** for cloud-only deployments using the {cloudname} as your cloud subscription automatically includes the commercial license. For more information, see: xref:license-key.adoc[License Key]. + +*Type:* `+String+` + +*Default value:* `+undefined+` + +*Possible values:* +* `undefined` - Use this when loading from {cloudname} with an API key +* `'gpl'` - For open source projects using GPL license +* `'T8LK:...'` - For commercial {productname} installations (must use this prefix for version 8+) +* `'GPL+T8LK:'` - For open source projects that require premium features while maintaining GPL compliance. + +[NOTE] +==== +In hybrid deployments (using both cloud and self-hosted features): + +* You can provide both an API key and a license key +* The editor will use cloud services when available +* It will automatically fall back to the local license key if cloud services are not contactable +==== diff --git a/modules/ROOT/partials/integrations/jquery-quick-start.adoc b/modules/ROOT/partials/integrations/jquery-quick-start.adoc index 9880f39997..c04e43f54a 100644 --- a/modules/ROOT/partials/integrations/jquery-quick-start.adoc +++ b/modules/ROOT/partials/integrations/jquery-quick-start.adoc @@ -119,7 +119,7 @@ ifeval::["{productSource}" == "package-manager"] @@ -149,7 +149,7 @@ ifeval::["{productSource}" == "package-manager"] + ---- The default {productname} editor will load at this location if the page is opened in a web browser. diff --git a/modules/ROOT/partials/integrations/webcomponent-tech-ref.adoc b/modules/ROOT/partials/integrations/webcomponent-tech-ref.adoc index 1640dc3354..6a421869a9 100644 --- a/modules/ROOT/partials/integrations/webcomponent-tech-ref.adoc +++ b/modules/ROOT/partials/integrations/webcomponent-tech-ref.adoc @@ -3,6 +3,7 @@ * xref:use-a-cloud-version-of-the-tinymce-web-component-integration[Use a cloud version of the {productname} Web Component integration] * xref:installing-the-tinymce-web-component-integration[Installing the {productname} Web Component integration] * xref:loading-tinymce[Loading {productname}] +* xref:licensekey[Setting the license key] * xref:configuring-the-editor[Configuring the editor] ** xref:setting-the-initial-content[Setting the initial content] ** xref:loading-plugins[Loading plugins] @@ -75,6 +76,42 @@ To use {productname} Web Component with a self-hosted copy of {productname}, ens To use {productname} from the {cloudname}, add the `+api-key+` attribute to the `+tinymce-editor+` element with an API from link:{accountpageurl}/[{accountpage}]. +[[licensekey]] +== Setting the license key + +include::partial$integrations/common/license-key-property.adoc[] + +=== Example: Commercial license +[source,html] +---- + + +---- + +=== Example: Open source GPL license +[source,html] +---- + + +---- + +[IMPORTANT] +==== +* The license key is only required when self-hosting {productname} +* License keys starting with "T8LK:" use client-side validation. +* Do not use both an API key and a license key - use API key for cloud deployments, and license key for self-hosted deployments +==== + +For more information on licensing, see: xref:license-key.adoc[License Key]. + [[configuring-the-editor]] == Configuring the editor diff --git a/modules/ROOT/partials/misc/setting-the-license.adoc b/modules/ROOT/partials/misc/setting-the-license.adoc index 57f6e78eb5..0ee4d87229 100644 --- a/modules/ROOT/partials/misc/setting-the-license.adoc +++ b/modules/ROOT/partials/misc/setting-the-license.adoc @@ -2,7 +2,7 @@ === Use {productname} with the GPLv2+ license -If the developer intends to self-host {productname} under the GPL license, they can set the `license_key` config option to 'gpl'. Case sensitivity does not matter. +If the developer intends to self-host {productname} under the GPL license and agree to its terms, they can set the `license_key` config option to 'gpl'. Case sensitivity does not matter. ==== Example @@ -18,12 +18,30 @@ tinymce.init({ If the developer intends to self-host {productname} under a commercial license, a valid license key must be provided. Customers who have purchased a self-hosted-eligible license for {productname} will find their license key in the link:https://www.tiny.cloud/auth/login/[account portal]. To purchase a commercial license, see available options on the link:{pricingpage}/[pricing page]. +The {productname} 8 commercial license key will have a `+T8LK:+` prefix. + ==== Example [source,js] ---- tinymce.init({ selector: 'textarea', // change this value according to your HTML - license_key: '' + license_key: 'T8LK:...' +}); +---- + +=== Use {productname} under GPL with Premium Features + +If the developer intends to self-host the {productname} editor under the GPL license and agree to its terms, whilst also self-hosting premium features, a valid license key must be provided. Customers who have purchased a self-hosted-eligible license for {productname} will find their license key in the link:https://www.tiny.cloud/auth/login/[account portal]. To purchase a commercial license, see available options on the link:{pricingpage}/[pricing page]. + +This type of license key is specifically for open source projects that need premium features while maintaining GPL compliance. + +The {productname} 8 commercial license key will have a `+GPL+T8LK:+` prefix. + +[source,js] +---- +tinymce.init({ + selector: 'textarea', // change this value according to your HTML + license_key: 'GPL+T8LK:...' }); ---- diff --git a/modules/ROOT/partials/module-loading/bundling-vite-es6-npm_editor.adoc b/modules/ROOT/partials/module-loading/bundling-vite-es6-npm_editor.adoc index a26d8d2c51..150aef7df2 100644 --- a/modules/ROOT/partials/module-loading/bundling-vite-es6-npm_editor.adoc +++ b/modules/ROOT/partials/module-loading/bundling-vite-es6-npm_editor.adoc @@ -44,10 +44,11 @@ import contentCss from 'tinymce/skins/content/default/content.js'; export function render () { tinymce.init({ selector: 'textarea#editor', + license_key: 'gpl', plugins: 'advlist code emoticons link lists table', toolbar: 'bold italic | bullist numlist | link emoticons', skin_url: 'default', content_css: 'default', }); }; ----- \ No newline at end of file +----