Verify, pack, and publish

Before you ship, confirm the app passes the FDK and behaves correctly in Freshdesk. Then pack and upload it for review.

Validate

From the app root:

fdk validate

Fix all reported platform and lint issues. Common gotchas:

  • manifest.json must reference files that actually exist under app/ (index.html, ticketSidebar.html, icon paths).
  • platform-version is 3.0 and modules/locations match the placement rules: full_page_app under common, ticket_sidebar under support_ticket for Freshdesk.
  • Every template name in config/requests.json is also declared under modules.common.requests in manifest.json. Names must match exactly.

Run locally and configure iparams

fdk run

Then do the following:

  • Open http://localhost:10001/system_settings and subscribe to common and support_ticket with your Freshdesk account URL.
  • Open http://localhost:10001/custom_configs and save a real Freshdesk domain and API key.
  • Open Freshdesk with ?dev=true (or &dev=true if there are existing query params).

Manual test checklist

SurfaceWhat to doWhat you should see
Full pageApps launcher → your appTicket CRUD UI loads; Recent tickets list loads from your Freshdesk
Full page (create)Fill subject/email/description → Create ticketNew ticket appears in Freshdesk’s native ticket list and refreshes in the app
Full page (delete)Paste a ticket id → DeleteTicket disappears from the list (moved to trash in Freshdesk)
Ticket sidebarOpen an existing ticket with ?dev=trueSidebar shows #id, subject, status, and priority
Ticket sidebar (status)Click Open / Pending / Resolved / ClosedTicket property widget updates; toast confirms
Ticket sidebar (priority)Click Low / Medium / High / UrgentTicket property widget updates; toast confirms

If the sidebar is blank, confirm ticketSidebar.html includes <script src="{{{appclient}}}"></script>, app.initialized() runs without errors, and the page you opened actually has ticket context (the ticket list view doesn’t).

Common failure modes

SymptomLikely cause
window.app is undefinedHTML entry missing <script src="{{{appclient}}}"></script>
401 Unauthorized from a templatefreshdeskApi iparam blank or wrong; re-save at /custom_configs
Template <name> not foundListed in config/requests.json but not declared in manifest.json under modules.common.requests
Sidebar loads the full-page UIticketSidebar.html is importing the full-page entry file instead of a dedicated sidebar entry

Pack the app

When all checks pass, produce the submission artifact:

fdk pack

FDK writes a packaged zip to dist/<app-name>.zip at the app root. That zip is what you upload. It includes only the files the platform needs and excludes node_modules/, logs, and anything listed under fdkExcludeFiles in package.json.

Upload to the marketplace

  • Sign in to the Freshworks Developer Portal.
  • Create a new app (or a new version of an existing app).
  • Upload dist/<app-name>.zip.
  • Fill in listing details (icon, screenshots, description, support email, installation instructions) then submit for review.

Review usually takes a few business days. The reviewer validates the app end-to-end on a clean Freshdesk account, so make sure the iparams page clearly explains what domain and API key format you expect.

Keep going

See App submission process and Rate limits and constraints for the full reviewer checklist and runtime limits.