> For the complete documentation index, see [llms.txt](https://docs.zongsoft.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.zongsoft.com/documentation/en/framework/externals.md).

# Extension Plugins

Select third-party adapters according to application scenarios, and understand the relationship between public contracts, plugin deployment, and external operating environments.

![Different external capabilities are connected to the framework through adaptation interfaces](https://1509929121-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FVtPQeWxVwz4p7FTcxkG8%2Fuploads%2Fgit-blob-96960db9e82ea1da895ebe9e9cfd35643c96829d%2Fzongsoft-externals-cover.png?alt=media)

External extensions integrate third-party runtimes, infrastructure or cloud services with Zongsoft. The business module relies on the framework contract as much as possible, and the application composition layer is responsible for selecting the provider; the actual protocol, resources and fault behavior are still determined by the specific implementation.

## Read on Demand

| demand                                                          | Expand               | Topics                                                                                        |
| --------------------------------------------------------------- | -------------------- | --------------------------------------------------------------------------------------------- |
| Cache, serial number, distributed lock, in-process cache server | Redis、etcd、Garnet    | [Caching and Distributed Coordination](/documentation/en/framework/externals/caching.md)      |
| Rule calculations, language scripts, text expressions           | Lua、Python、Scriban   | [Scripts and Expressions](/documentation/en/framework/externals/scripting.md)                 |
| Background jobs, retries, timeouts and circuit breaking         | Hangfire、Polly       | [Task Scheduling and Resilient Execution](/documentation/en/framework/externals/execution.md) |
| Workbook exchange, template and cell operations                 | ClosedXml、OpenXml    | [Spreadsheet and Template Extensions](/documentation/en/framework/externals/documents.md)     |
| Object storage, SMS push, WeChat and callback                   | Amazon、Aliyun、Wechat | [Cloud Services and Callbacks](/documentation/en/framework/externals/cloud.md)                |
| Industrial communication and equipment data integration         | Opc                  | [OPC UA Device Protocol](/documentation/en/framework/externals/integration.md)                |

## Browse by Project

If the project name has been determined, you can enter the independent pages of 14 projects including Aliyun, Amazon, Redis, etcd, and Hangfire from [Project index](/documentation/en/framework/externals/projects.md) to view packages, configuration entries, and implementation restrictions.

## Common Path of Integration

First determine the required public capabilities, and then deploy the implementation package and its accompanying files. After the plugin is loaded, check the configuration, service registration or plugin tree node, and finally perform a controlled call. Just seeing the name in the plugin list does not prove that the lazy link, native library, or third-party dependency version is correct.

{% code title=".deploy (taking Scriban as an example)" %}

```ini
[plugins zongsoft externals scriban]
nuget:Zongsoft.Externals.Scriban
```

{% endcode %}

This content should be merged into the existing host's deployment manifest. See [Deployment Tool](/documentation/en/tools/deployer.md) for deployment parameters and runtime directory; see [The first business plugin](/documentation/en/get-started/first-business-plugin.md) for how to enable business plugins through configuration selection.

## Three Common Integration Forms

**service provider**supplies cache, lock and other instances by connection name;**Matchable services**finds evaluators and archivers by name or format;**plugin tree builtin** mounts the file system, [worker](https://github.com/Zongsoft/framework/blob/main/Zongsoft.Core/src/Components/IWorker.cs) and handler collections through extended paths. They are both plugin extensions, but they are obtained in different ways.

Don't see a type in the package and infer that it must be registered in the container; don't apply Redis's alias rules to other providers. See [Service Resolution and Ownership](/documentation/en/framework/core/services/locating.md) for detailed differences.

## Run and Version Boundaries

External service addresses, credentials, databases, buckets, certificates, and licenses are provided by the deployment environment. Package versions should be checked against a combination of host and third-party dependencies, especially if multiple deployment manifests copy different versions of DLLs to the same directory.

The framework adapter does not automatically create all cloud resources or override their permission configuration. The script plugin does not automatically become a security sandbox, and the Dashboard does not automatically become a complete operation and maintenance authority system. Each topic describes the capabilities that have been achieved, the responsibilities that need to be applied and the verification path.

Source references: [external extension directory](https://github.com/Zongsoft/framework/tree/main/externals).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.zongsoft.com/documentation/en/framework/externals.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
