Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
f20779a
Merge pull request #162 from contentstack/staging
Amitkanswal Oct 17, 2025
66373b2
sca-scan.yml
Aravind-Kumar-cstk Oct 24, 2025
9fee766
policy-scan.yml
Aravind-Kumar-cstk Oct 24, 2025
5722335
issues-jira.yml
Aravind-Kumar-cstk Oct 24, 2025
9eb3924
Updated codeowners
Aravind-Kumar-cstk Oct 24, 2025
a65f1c8
Update CODEOWNERS
Aravind-Kumar-cstk Oct 24, 2025
3097bd9
feat:field setData support in create entry page
Amitkanswal Oct 29, 2025
3043fa5
feat: add config support to search method for branch-specific searches
Rushikesh-Argade-Stack Nov 4, 2025
ff28162
fix: MKT-14048 revert apdater changes
pradyumna-garg-contentstack Nov 6, 2025
3951aa7
fix: revert codeowner changes
pradyumna-garg-contentstack Nov 6, 2025
219a6f3
fix: CODEOWNERS
Rushikesh-Argade-Stack Nov 10, 2025
a98e04b
fix: audit issue
abhishek-ezhava-cstk Dec 20, 2025
9222bc3
Update sca-scan.yml
dhavaljain999 Mar 3, 2026
b9406ea
chore: update dependencies and project configuration
Amitkanswal Mar 18, 2026
7b06617
chore: update dependencies and project configuration
Amitkanswal Mar 18, 2026
1495f9a
Merge branch 'main' into staging
rahul-contentstack Apr 20, 2026
61c3066
feat: added support for setdata on complex field and entry
Amitkanswal Apr 20, 2026
98a639c
feat: update test cases
Amitkanswal Apr 20, 2026
7029781
fix: fixed issue with onError propagation
Amitkanswal Apr 22, 2026
51fdd83
fix:validation error structure
Amitkanswal May 4, 2026
aaee69e
fix: audit fixes
Amitkanswal May 6, 2026
8d382bf
fix: nested field uid error
Amitkanswal May 8, 2026
7ccc03b
fix: field modifier onError support
Amitkanswal May 13, 2026
0ea04a9
Merge branch 'develop' into staging
Amitkanswal May 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
* @contentstack/ghost-pr-reviewers

* @contentstack/marketplace-pr-reviewers
.github/workflows/sca-scan.yml @contentstack/security-admin

**/.snyk @contentstack/security-admin

.github/workflows/policy-scan.yml @contentstack/security-admin

.github/workflows/issues-jira.yml @contentstack/security-admin
.github/workflows/issues-jira.yml @contentstack/security-admin
117 changes: 74 additions & 43 deletions .github/readme/blueprint.md
Original file line number Diff line number Diff line change
@@ -1,90 +1,121 @@
Contentstack App SDK Readme
# Contentstack App SDK Readme

The Contentstack App SDK allows you to customize your applications. This document will help you integrate the App SDK with your application.

Getting started
## Getting started

Include the compiled version of the extension client library by adding the following line to your application.

```html
<script
src="https://unpkg.com/@contentstack/app-sdk@{{pkg.version}}/dist/index.js"
integrity="{{subresourceIntegrity.js}}"
crossorigin="anonymous"
></script>
```

To include the App SDK in your project, you need to run the following command:

```sh
npm install @contentstack/app-sdk
```

Alternatively, you can use the following command within the script tag to install the App SDK:

```html
<script src="https://unpkg.com/@contentstack/app-sdk@2.0.0/dist/index.js"></script>
```

### Initializing the App SDK

Initializing the App SDK
To Initialize the App SDK you need to run the following command:

```js
ContentstackAppSdk.init().then(function (appSdk) {
// add code here
// add code here
});
For more information, please refer to our App SDK API Reference document.
```

For more information, please refer to our [App SDK API Reference](https://github.com/contentstack/app-sdk-docs#contentstack-app-sdk-api-reference) document.

## Download the Boilerplate

Download the Boilerplate
You can extend or customize the functionality of Contentstack CMS with Marketplace apps. To simplify and speed up the building process, boilerplates describe repetitive elements in a project. This boilerplate will help you build custom applications for your organization or stack.

Download the boilerplate.
Download the [boilerplate](https://github.com/contentstack/marketplace-app-boilerplate/archive/refs/heads/master.zip).

## UI Locations and Examples

UI Locations and Examples
UI Locations allow you to extend Contentstack's functionality. Through these UI locations, you can customize Contentstack's default behavior and UI. Integration of third-party applications is possible using different UI locations.

The Contentstack App SDK currently supports the following UI Locations:

Custom Field Location
Dashboard Location
Asset Sidebar Location
App Config Location
RTE Location
Sidebar Location
Field Modifier Location
Full Page Location
Custom Field Location
Custom Field Location allows you to create custom fields that can be used in your content types. You can integrate with various business applications, such as Bynder, Cloudinary, Shopify, by adding them as a custom field to your stack's content type.

Dashboard Location
With the Dashboard Location, you can create widgets for your stack dashboard. Integration with Google Analytics provides meaningful insights about your website.

Asset Sidebar Location
- [Custom Field Location](https://www.contentstack.com/docs/developers/developer-hub/custom-field-location)
- [Dashboard Location](https://www.contentstack.com/docs/developers/developer-hub/dashboard-location)
- [Asset Sidebar Location](https://www.contentstack.com/docs/developers/developer-hub/asset-sidebar-location)
- [App Config Location](https://www.contentstack.com/docs/developers/developer-hub/app-config-location)
- [RTE Location](https://www.contentstack.com/docs/developers/developer-hub/rte-location)
- [Sidebar Location](https://www.contentstack.com/docs/developers/developer-hub/sidebar-location)
- [Field Modifier Location](https://www.contentstack.com/docs/developers/developer-hub/field-modifier-location/)
- [Full Page Location](https://www.contentstack.com/docs/developers/developer-hub/full-page-location)

### Custom Field Location

Custom Field Location allows you to create custom fields that can be used in your content types. You can integrate with various business applications, such as [Bynder](https://www.contentstack.com/docs/developers/marketplace-apps/bynder), [Cloudinary](https://www.contentstack.com/docs/developers/marketplace-apps/cloudinary), [Shopify](https://www.contentstack.com/docs/developers/marketplace-apps/shopify), by adding them as a custom field to your stack's content type.

### Dashboard Location

With the Dashboard Location, you can create widgets for your stack dashboard. Integration with [Google Analytics](https://www.contentstack.com/docs/developers/marketplace-apps/google-analytics/) provides meaningful insights about your website.

### Asset Sidebar Location

Using the Asset Sidebar Location, you can create customized sidebar widgets to extend the functionality of your assets.

Manage, transform, and optimize your stack's assets efficiently using the Image Preset Builder.
Manage, transform, and optimize your stack's assets efficiently using the [Image Preset Builder](https://www.contentstack.com/docs/developers/marketplace-apps/image-preset-builder).

### App Config Location

App Config Location
App Config UI Location allows you to manage all the app settings centrally. Once configured, all other locations (where the app is installed) can access these settings.

RTE Location
### RTE Location

The RTE Location allows you to create custom plugins to expand the functionality of your JSON Rich Text Editor. Using the Audience and Variables plugin, you can tailor your content as per your requirements.

Sidebar Location
The Sidebar Location provides powerful tools for analyzing and recommending ideas for your entry. Use the Smartling sidebar location to help translate your content.
### Sidebar Location

The Sidebar Location provides powerful tools for analyzing and recommending ideas for your entry. Use the [Smartling](https://help.smartling.com/hc/en-us/articles/4865477629083) sidebar location to help translate your content.

### Field Modifier Location

Field Modifier Location
The Field Modifier Location is a type of UI location which extends the capabilities of entry fields. With the Field Modifier UI location, you can allow the different apps to appear on defined field data types such as Text, Number, JSON, Boolean, File, Reference fields etc.

Full Page Location
The Full Page location is a type of UI location that lets you view full page apps such as Release Preview within your stack.
### Full Page Location

The Full Page location is a type of UI location that lets you view full page apps such as [Release Preview](https://www.contentstack.com/docs/developers/marketplace-apps/release-preview) within your stack.

## Using Contentstack styles

Using Contentstack styles
Install the Venus UI library package to style your app according to the Contentstack UI:

```sh
npm i @contentstack/venus-components --save
For more information on styling your application, refer to our style guide.
```

For more information on styling your application, refer to our [style guide](https://www.contentstack.com/docs/developers/venus-component-library/).

## More information

- [App SDK API Reference](https://github.com/contentstack/app-sdk-docs#readme)
- [Marketplace Platform Guides](https://www.contentstack.com/docs/developers/marketplace-platform-guides/)
- [Marketplace Apps](https://www.contentstack.com/docs/developers/marketplace-apps/)
- [Contentstack App Development](https://www.contentstack.com/docs/developers/developer-hub/)

## App SDK v2.0.0 Migration Guide

This guide provides instructions for migrating your application to App SDK version 2.0.0. It covers changes in metadata responses, field modifier and full page location updates, and the transition from the `_extension` property to `_uiLocation`. If you are upgrading your app to the latest version, make sure to follow these steps for a smooth transition.

More information
App SDK API Reference
Marketplace Platform Guides
Marketplace Apps
Contentstack App Development
App SDK v2.0.0 Migration Guide
This guide provides instructions for migrating your application to App SDK version 2.0.0. It covers changes in metadata responses, field modifier and full page location updates, and the transition from the \_extension property to \_uiLocation. If you are upgrading your app to the latest version, make sure to follow these steps for a smooth transition.
[Read the Migration Guide](./docs/app-sdk-v2-migration.md)

Read the Migration Guide
## License

License
Licensed under MIT.
Licensed under [MIT](https://opensource.org/licenses/MIT).
3 changes: 3 additions & 0 deletions .github/workflows/sca-scan.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,6 @@ jobs:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
args: --all-projects --fail-on=all
json: true
continue-on-error: true
- uses: contentstack/sca-policy@main
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2022-2025 Contentstack
Copyright (c) 2026 Contentstack

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
28 changes: 26 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,21 @@
<!-- ⚠️ This README has been generated from the file(s) "./.github/readme/blueprint.md" ⚠️-->
[](#contentstack-app-sdk-readme)

# Contentstack App SDK Readme

The Contentstack App SDK allows you to customize your applications. This document will help you integrate the App SDK with your application.


[](#getting-started)

## Getting started

Include the compiled version of the extension client library by adding the following line to your application.

```html
<script
src="https://unpkg.com/@contentstack/app-sdk@2.1.0/dist/index.js"
integrity="sha512-wlEBUkZA+vdcHXRTK69fZvK44c5Y8KeU/kw9OOShWNDjddtrIB8a1lfbLjH5nKWQqkWZ2L9VYEqr96P7qx3ZZg=="
src="https://unpkg.com/@contentstack/app-sdk@2.4.0/dist/index.js"
integrity="sha512-oS3voAIrtiBqIsDI51ASg/yTDsH/cLfjlKAwqHQHMVswsHHzJw9thwb+4k6RQsk5E4OBCS96gFUtzySjkWXmQw=="
crossorigin="anonymous"
></script>
```
Expand Down Expand Up @@ -38,12 +44,18 @@ ContentstackAppSdk.init().then(function (appSdk) {

For more information, please refer to our [App SDK API Reference](https://github.com/contentstack/app-sdk-docs#contentstack-app-sdk-api-reference) document.


[](#download-the-boilerplate)

## Download the Boilerplate

You can extend or customize the functionality of Contentstack CMS with Marketplace apps. To simplify and speed up the building process, boilerplates describe repetitive elements in a project. This boilerplate will help you build custom applications for your organization or stack.

Download the [boilerplate](https://github.com/contentstack/marketplace-app-boilerplate/archive/refs/heads/master.zip).


[](#ui-locations-and-examples)

## UI Locations and Examples

UI Locations allow you to extend Contentstack's functionality. Through these UI locations, you can customize Contentstack's default behavior and UI. Integration of third-party applications is possible using different UI locations.
Expand Down Expand Up @@ -93,6 +105,9 @@ The Field Modifier Location is a type of UI location which extends the capabilit

The Full Page location is a type of UI location that lets you view full page apps such as [Release Preview](https://www.contentstack.com/docs/developers/marketplace-apps/release-preview) within your stack.


[](#using-contentstack-styles)

## Using Contentstack styles

Install the Venus UI library package to style your app according to the Contentstack UI:
Expand All @@ -103,19 +118,28 @@ npm i @contentstack/venus-components --save

For more information on styling your application, refer to our [style guide](https://www.contentstack.com/docs/developers/venus-component-library/).


[](#more-information)

## More information

- [App SDK API Reference](https://github.com/contentstack/app-sdk-docs#readme)
- [Marketplace Platform Guides](https://www.contentstack.com/docs/developers/marketplace-platform-guides/)
- [Marketplace Apps](https://www.contentstack.com/docs/developers/marketplace-apps/)
- [Contentstack App Development](https://www.contentstack.com/docs/developers/developer-hub/)


[](#app-sdk-v200-migration-guide)

## App SDK v2.0.0 Migration Guide

This guide provides instructions for migrating your application to App SDK version 2.0.0. It covers changes in metadata responses, field modifier and full page location updates, and the transition from the `_extension` property to `_uiLocation`. If you are upgrading your app to the latest version, make sure to follow these steps for a smooth transition.

[Read the Migration Guide](./docs/app-sdk-v2-migration.md)


[](#license)

## License

Licensed under [MIT](https://opensource.org/licenses/MIT).
20 changes: 19 additions & 1 deletion __test__/entry.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,25 @@ describe("Entry", () => {
let sendToParent: any;

beforeEach(() => {
sendToParent = () => {};
sendToParent = (action: string, dataObj: any) => {
if (action === "setData") {
// Check if this is a restricted field type
if (dataObj.uid === "group.group.group" || dataObj.uid === "modular_blocks.0") {
return Promise.resolve({
data: {
success: false,
error: {
message: "Cannot call set data for current field type",
details: []
}
}
});
}
// Default successful response for other setData calls
return Promise.resolve({ data: { success: true } });
}
return Promise.resolve();
};
connection = { sendToParent };

emitter = {
Expand Down
2 changes: 1 addition & 1 deletion __test__/field.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ describe("Field", () => {
describe("Generic", () => {
beforeEach(() => {
sendToParent = function () {
return Promise.resolve();
return Promise.resolve({ data: { success: true } });
};

connection = { sendToParent: sendToParent };
Expand Down
2 changes: 1 addition & 1 deletion __test__/fieldModifierLocation/field.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ describe("Field", () => {
describe("Generic", () => {
beforeEach(() => {
sendToParent = function () {
return Promise.resolve();
return Promise.resolve({ data: { success: true } });
};

connection = { sendToParent: sendToParent };
Expand Down
2 changes: 1 addition & 1 deletion blueprint.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@
},
"line": "none",
"subresourceIntegrity": {
"js": "sha512-wlEBUkZA+vdcHXRTK69fZvK44c5Y8KeU/kw9OOShWNDjddtrIB8a1lfbLjH5nKWQqkWZ2L9VYEqr96P7qx3ZZg=="
"js": "sha512-oS3voAIrtiBqIsDI51ASg/yTDsH/cLfjlKAwqHQHMVswsHHzJw9thwb+4k6RQsk5E4OBCS96gFUtzySjkWXmQw=="
}
}
Loading
Loading