> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://contentful.com/developers/docs/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://contentful.com/developers/docs/_mcp/server.

# Hosting an app

> Learn more about the different options of how to host an app | Hosting an app with Contentful or externally | Static site hosting

For an app to be accessible, Contentful needs to know the public URL of the app. For backend apps using [App Events](/extensibility/app-framework/app-events), you will need to provide the public URL. For frontend apps, you also have the option to host directly with Contentful.

### Hosting with Contentful

When hosting with Contentful, you upload your build folder which creates an [`AppBundle`](/extensibility/app-framework/app-bundle). You can upload multiple `AppBundle`s for the same app, just like you would deploy a different version for your website with each update. You can promote or roll them back at any time.

Keep in mind to include an `index.html` file in the output folder root as an entry point. There is also a limit of 10MB and a maximum of 500 files for each upload.

To upload an `AppBundle`, you can use the [app management view](https://app.contentful.com/deeplink?link=app-definition-list) and upload your output folder directly under the "Bundles" tab.

Before uploading, make sure to build your code first (`npm run build`).

You can also use [`create-contentful-app`](/extensibility/app-framework/create-contentful-app) on your CLI of choice. Running `npm run upload` will run you through the necessary steps for uploading your code.

![Using CLI for AppBundle](https://fdr-prod-docs-files-public.s3.us-east-1.amazonaws.com/contentful.docs.buildwithfern.com/1004c440161ef1335bb96943e0dfb3e619d3adf2f026562b0583f6ff48eaabf2/docs/assets/apps/app_bundle_upload_cli.svg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIA6KXJSKKNFOCF7G4B%2F20260929%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260929T234813Z&X-Amz-Expires=604800&X-Amz-Signature=7b1cfaae12e7069e4d7242b3243046a76b124e910dd88c0f25e7f0e18b024da3&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject)

If you haven't used `create-contentful-app` for bootstrapping, or are using an earlier version of it, you can run the global command `npx @contentful/app-scripts upload`.

### Hosting an app outside of Contentful

It is also possible to use any static site hosting by linking your app's public URL in your `AppDefinition`. You can achieve this by toggling off the "Hosted by Contentful" option in the app management view under the "General" tab. This allows you to enter a URL for your app instead.

![Using CLI for AppBundle](https://fdr-prod-docs-files-public.s3.us-east-1.amazonaws.com/contentful.docs.buildwithfern.com/bca9e9a93d1b3e17a68a23cc116e3c3d515c0e2fbcf841958031236e666b847e/docs/assets/apps/independent-app-hosting.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIA6KXJSKKNFOCF7G4B%2F20260929%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260929T234813Z&X-Amz-Expires=604800&X-Amz-Signature=762d3f0697d72522ec55ab9cc064c5ca0e264b38d91b6c18e1b50c53dc23da57&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject)