---
agentTools:
  projectIndex: https://developers.pipefy.com/llms.txt
---

# Manifest reference

More details about attributes inside manifest.json

The `manifest.json` is how Pipefy learns about your app: what it's called, where to load it from, and which [features](https://developers.pipefy.com/docs/features) it adds to the product. You host it yourself, and give Pipefy its URL when you [register the app](https://app.pipefy.com/developers/apps).

Pipefy re-reads the manifest when your app loads, so changing it does not require re-registering.

## Sample

This is the manifest from the [HelloPipefy sample app](https://github.com/Pipefyteam/sample-app-react):

```json
{
  "name": "HelloPipefy",
  "short_description": "A sample app demonstrating how to customize Pipefy components.",
  "description": "HelloPipefy is a beginner-friendly sample app showing how to extend Pipefy with React — pipe views, card tabs, card buttons, dropdowns, pipe buttons, modals and sidebars. \n **This is a sample app.**",
  "icon": "./pfy.png",
  "author": "Pipefy, Inc.",
  "init_url": "./",
  "screenshots": ["./screenshots/card-tab.png"],
  "features": [
    "pipe-buttons",
    "card-buttons",
    "card-badges",
    "card-tab"
  ]
}
```

## Properties

| Property               | Required    | Description                                                                                                |
| :--------------------- | :---------- | :--------------------------------------------------------------------------------------------------------- |
| **name**               | Yes         | App name, shown wherever the app appears                                                                   |
| **init\_url**          | Yes         | Path to your HTML page that calls `PipefyApp.initCall()`. See [resolution](#how-paths-are-resolved) below. |
| **features**           | Yes         | Which [features](https://developers.pipefy.com/docs/features) this app uses. An app with an empty list has nowhere to render.             |
| **short\_description** | Recommended | One line, shown in the app list. Keep it to roughly a sentence — long values are truncated in the listing. |
| **description**        | Recommended | The long description shown on the app's own page. Supports basic Markdown and `\n` line breaks.            |
| **icon**               | Recommended | Your app's icon. SVG preferred; PNG works. Square images render best.                                      |
| **author**             | Recommended | Your name or company                                                                                       |
| **screenshots**        | Optional    | Array of image paths shown on the app's page                                                               |

`features` accepts any combination of:

| Feature        | Where it appears                             |
| :------------- | :------------------------------------------- |
| `card-badges`  | Indicators on cards in the board             |
| `card-buttons` | A button on an open card                     |
| `card-tab`     | A tab inside an open card                    |
| `pipe-buttons` | A button on the pipe header                  |
| `pipe-view`    | A full-width view replacing the Kanban board |

[Click here to learn more about features](https://developers.pipefy.com/docs/features)

## How paths are resolved

`init_url`, `icon` and `screenshots` are resolved **relative to the manifest's own URL**. If your manifest is at `https://my-app.example.com/manifest.json`, then:

| Value                        | Resolves to                             |
| :--------------------------- | :-------------------------------------- |
| `"init_url": "./"`           | `https://my-app.example.com/`           |
| `"init_url": "./index.html"` | `https://my-app.example.com/index.html` |
| `"icon": "./pfy.png"`        | `https://my-app.example.com/pfy.png`    |

Absolute URLs also work for `icon` and `screenshots`, if you serve your assets from a CDN on another host:

```json
"icon": "https://cdn.example.com/my-app/icon.svg"
```

The same relative-path rule applies inside your app: the `icon` on a button, and the `url` on a card tab or pipe view, resolve against your `init_url`.

> ⚠️ Everything must be served over HTTPS
>
> Pipefy loads your app in an iframe on an HTTPS page, so the manifest and every asset it points at must be HTTPS too. Mixed content is blocked by the browser, and shows up as an app that silently fails to load.

## Requirements checklist

Before registering your app, confirm:

* The manifest is reachable over HTTPS and returns `application/json`.
* Your app's server allows being framed by `https://app.pipefy.com` and accepts CORS requests from it. See [Frequently Asked Questions](https://developers.pipefy.com/docs/frequently-asked-questions).
* The page at `init_url` loads the SDK and calls `PipefyApp.initCall()`.
* Every feature you listed has a matching handler in that `initCall()`.

## See also

* [Introduction](https://developers.pipefy.com/docs/build-your-first-pipefy-app) — the full setup walkthrough
* [Features](https://developers.pipefy.com/docs/features) — what each feature does and the shape its handler returns
* [Client SDK overview](https://developers.pipefy.com/docs/getting-the-sdk) — what goes on the `init_url` page
* [Publishing your App](https://developers.pipefy.com/docs/publishing-you-app) — sharing your app beyond your own organization