https://github.com/adobe/aem-headless-client-js
AEM Headless Client for JavaScript
https://github.com/adobe/aem-headless-client-js
adobe aem headless javascript sdk
Last synced: 5 days ago
JSON representation
AEM Headless Client for JavaScript
- Host: GitHub
- URL: https://github.com/adobe/aem-headless-client-js
- Owner: adobe
- License: apache-2.0
- Created: 2021-02-01T22:24:52.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2026-07-08T07:56:29.000Z (30 days ago)
- Last Synced: 2026-07-08T08:21:19.564Z (30 days ago)
- Topics: adobe, aem, headless, javascript, sdk
- Language: JavaScript
- Homepage:
- Size: 1020 KB
- Stars: 34
- Watchers: 11
- Forks: 12
- Open Issues: 13
-
Metadata Files:
- Readme: README.md
- Contributing: .github/CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Copyright: COPYRIGHT
Awesome Lists containing this project
README
[](https://npmjs.org/package/@adobe/aem-headless-client-js)
[](https://npmjs.org/package/@adobe/aem-headless-client-js)
[](https://github.com/adobe/aem-headless-client-js/actions)
[](https://opensource.org/licenses/Apache-2.0)
# AEM Headless Client for JavaScript
See [aem-headless-client-java](https://github.com/adobe/aem-headless-client-java) for the Java variant of this client
and [aem-headless-client-nodejs](https://github.com/adobe/aem-headless-client-nodejs) for the server-side Node.js variant.
## Installation
```bash
$ npm install @adobe/aem-headless-client-js
```
## Usage
### Create AEMHeadless client
```javascript
const AEMHeadless = require('@adobe/aem-headless-client-js');
```
Configure SDK with Host and Auth data (if needed)
```javascript
const aemHeadlessClient = new AEMHeadless({
serviceURL: '',
endpoint: '',
auth: '' || ['', ''],
headers: {'': '', ...}
})
// Eg:
const aemHeadlessClient = new AEMHeadless({
serviceURL: AEM_HOST_URI,
endpoint: 'content/graphql/endpoint.gql',
auth: [AEM_USER, AEM_PASS],
headers: {'customerheadername': 'customerheadervalue'}
})
```
### Use AEMHeadless client
#### Promise syntax:
```javascript
aemHeadlessClient.runQuery(queryString)
.then(data => console.log(data))
.catch(e => console.error(e.toJSON()))
aemHeadlessClient.listPersistedQueries()
.then(data => console.log(data))
.catch(e => console.error(e.toJSON()))
aemHeadlessClient.persistQuery(queryString, 'wknd/persist-query-name')
.then(data => console.log(data))
.catch(e => console.error(e.toJSON()))
aemHeadlessClient.runPersistedQuery('wknd/persist-query-name')
.then(data => console.log(data))
.catch(e => console.error(e.toJSON()))
aemHeadlessClient.runPersistedQuery('wknd/persist-query-name-with-variables', { name: 'John Doe'})
.then(data => console.log(data))
.catch(e => console.error(e.toJSON()))
```
#### Within async/await:
```javascript
(async () => {
let postData
try {
postData = await aemHeadlessClient.runQuery(queryString)
} catch (e) {
console.error(e.toJSON())
}
let list
try {
list = await aemHeadlessClient.listPersistedQueries()
} catch (e) {
console.error(e.toJSON())
}
try {
await aemHeadlessClient.persistQuery(queryString, 'wknd/persist-query-name')
} catch (e) {
console.error(e.toJSON())
}
let getData
try {
getData = await aemHeadlessClient.runPersistedQuery('wknd/persist-query-name')
} catch (e) {
console.error(e.toJSON())
}
})()
```
#### Pagination:
```javascript
(async () => {
const model = 'article'
const fields = `{
title
_path
authorFragment {
firstName
profilePicture {
...on ImageRef {
_authorUrl
}
}
}
}`
// Loop all pages (default Cursor based)
const cursorQueryAll = await aemHeadlessClient.runPaginatedQuery(model, fields, { pageSize: 3 })
for await (let value of cursorQueryAll) {
console.log('cursorQueryAll', value)
}
// Manually get next page (default pageSize = 10)
const cursorQuery = await aemHeadlessClient.runPaginatedQuery(model, fields)
while (true) {
const { done, value } = await cursorQuery.next();
if (done) break
console.log('cursorQuery', value)
}
})()
```
## Authorization
If `auth` param is a string, it's treated as a Bearer token
If `auth` param is an array, expected data is ['user', 'pass'] pair, and Basic Authorization will be used
If `auth` is not defined, Authorization header will not be set
## API Reference
See generated [API Reference](./api-reference.md)
## Contributing
Contributions are welcome! Read the [Contributing Guide](./.github/CONTRIBUTING.md) for more information.
## Licensing
This project is licensed under the Apache V2 License. See [LICENSE](LICENSE) for more information.