Last modified: August 22, 2025
You can create a React-based app card for projects on the latest version (2025.2) of the developer platform. App cards work similarly to existing cards you may have built for legacy apps, with some minor modifications to your configuration files. This guide walks you through how to create a boilerplate app card in an existing app, along with how to upload and preview your card in HubSpot. You’ll then upload all these files to your project, where you can preview the card in a developer test account where you’ve installed your app.

Prerequisites

Create an app card

1

Add a card component to your project

To add a new app card component to your project, use the terminal to navigate into your local project directory, then run the following command:
hs project add
Then, when prompted to select a component to add, select Card.Screenshot of the terminal prompt for selecting the type of component to addIf your project doesn’t contain any app cards yet, a cards/ directory will be created for you in the app/ directory. The cards/ directory will contain:
  • A JSON card configuration file (*-hsmeta.json)
  • A React component file (.jsx)
  • A package.json file
If your project already includes app cards, the above files will be added to the existing cards/ directory (excluding package.json if it already exists).
myProject
└── src/
    └── app/
        └── cards/
            ├── NewCard-hsmeta.json
            ├── NewCard.jsx
            └── package.json
Learn more about these files in the app cards reference documentation.
2

Upload to HubSpot

To upload the new card to your HubSpot account:
  • Run hs project install-deps to install the dependencies needed for the app card. This will update the cards/ directory with the necessary Node modules and a package-lock.json file, which will speed up the build of the uploaded app card extension and ensure that any dependencies in your local development environment and production match.
  • Then, run hs project upload to upload the project to your default account.
  • To specify a different account (such as a separate test account), include the --account flag and specify the HubID of the account. For example hs project upload --account 123456.
  • If the project hasn’t been uploaded before, you’ll be prompted to confirm that you want to create the project in your account. Otherwise, the terminal will display the build and deploy status, then confirm once the project has been successfully uploaded.

View the card in HubSpot

After uploading the project, you can view it in HubSpot by running hs project open. A browser tab will open to the project details page, where you can view your project, app, and its new card component.
Screenshot of the project details page in HubSpot showing an app with a card component
If you haven’t yet installed the app in the account, you’ll need to do so before you can view the card. To install the app:
  • Click the name of the app in the project summary on the left, or under Project components.
Screenshot of the app on the project details page in HubSpot
  • Click the Distribution tab.
  • Click Install now.
Screenshot of the install now button on the app distribution tab
The boilerplate app card created by hs project add is configured to appear in the middle column of contact records. To display the card, you’ll first need to add it to the contact record view:
  • In your HubSpot account, navigate to CRM > Contacts.
  • Click the name of a contact.
  • At the top of the middle column of the contact record, click Customize.
Screenshot of the customize button on the contact timeline
  • Click Default view.
  • Select the tab that you want to add the card to. You can then hover over the location where you want to place the card and click the plus button. This can be adjusted at any time after initial setup.
Screenshot showing the plus button to add a card to the contact record view
  • In the right sidebar, click the Card library tab. Then, click the Card types dropdown menu and select App to filter for app cards.
Screenshot showing the apps filter in the card library
  • Click Add card under the app card you created, then click the close button in the top right of the sidebar.
  • In the top right, click Save and exit.
You’ll then be redirected back to the contact record where your card will now appear. Keep the contact record page open in your browser for the next step, when you’ll start the local development server.

Start local development

With your app card added to all contact records, you can now continue to build the app card. The easiest way to quickly iterate is to start the local development server with the hs project dev command:
  • In the terminal, run hs project dev.
  • Follow the terminal prompts to select the account you want to use for local development.
  • The terminal will start the local development server, then confirm once it’s running.
  • With the server running, navigate back to the browser tab with the contact record and reload the page.
The app card will display with a Developing locally tag, indicating that the local development server is ready.
Screenshot showing the app card rendered on the contact timeline with the Developing Locally tag
The local development server will automatically detect any changes saved to the app card’s front-end React files (i.e., any .jsx or .tsx files). If you need to make changes to other file types, such as a .json configuration file, you’ll need to reupload the project and restart the local development server.

Next steps

Check out the following resources to build out the card’s appearance and functionality.

Migrating a previously created app card

If you need to migrate an existing project with app cards to the developer platform, check out the following guides:
If your existing project had a card with custom objects connected, confirm that you have the crm.objects.custom.read scope on your app before migration. For projects built before the latest version of 2025.2, custom object cards could be built with only the crm.schemas.custom.read scope required. In the latest version (2025.2) of the developer platform, crm.objects.custom.read is required. If you don’t include this scope, the build during the migration will fail with the following error:[ERROR] Build failed or timed out. Inspect the failure to update your build and retry the migration.Your customer-facing app will be unaffected, despite the status in the project details page. To fix the issue, add the crm.objects.custom.read scope to your legacy app’s scopes, re-build the app on version 2023.2, then re-try the migration.