packages/twenty-codex-plugin/references/publish-app/prepare-for-app-store.md
Use this reference for the publish-facing documentation and visuals of a Twenty app. It complements create-app; read this when the app is ready for packaging, marketplace listing, npm publishing, private sharing, or user-facing review.
Use this when the user asks to:
README.md.defineApplication() marketplace metadata.public/ for marketplace, front components, or logic functions.Twenty marketplace metadata comes from defineApplication():
displayNamedescriptionauthorcategorylogoUrlscreenshotsaboutDescriptionwebsiteUrltermsUrlemailSupportissueReportUrllogoUrl and screenshots must reference files from the app public/ folder, for example public/logo.png and public/screenshot-1.png. If aboutDescription is omitted, the marketplace uses the package README.md from npm as the About tab content.
Files in public/ are public, synced in dev mode, included in builds, and served without authentication. Never put secrets, private data, customer records, real tokens, or unreleased confidential material in public assets.
Before writing, inspect the app:
sed -n '1,220p' package.json
sed -n '1,220p' src/application-config.ts
find src -maxdepth 3 -type f | sort
find public -maxdepth 2 -type f | sort
Read app entities to understand the actual product surface:
Write the README for the person installing or evaluating the app, not for the original implementer.
Use this structure unless the app already has a stronger local convention:
# App Display Name
One-sentence summary of what the app adds to Twenty.
## What It Does
- Concrete user-facing capability.
- Concrete user-facing capability.
- Concrete user-facing capability.
## What It Adds To Twenty
- Objects:
- Fields:
- Views and navigation:
- Page layouts:
- Front components:
- Logic functions:
- Skills and agents:
- Connections:
## Requirements
- Twenty server/version requirement, if any.
- Third-party account or OAuth app requirements, if any.
- Required server variables or application variables.
## Setup
1. Install or deploy the app.
2. Configure required variables.
3. Add any required connections.
4. Open the relevant Twenty view or app settings page.
## Usage
Short workflow with concrete user actions and expected result.
## Development
Commands for local setup, dev sync, tests, build, deploy, and publish.
## Permissions And Data
What the app reads, writes, updates, deletes, and sends to third-party services.
## Support
Support email, issue tracker, docs, terms, or website links.
Keep the README accurate and specific. Do not claim the app supports an entity, workflow, permission, integration, or marketplace capability unless it exists in code.
Use plain product language:
<SERVER_URL>/apps/oauth/callback.Avoid:
Put marketplace and runtime visuals in public/:
public/
logo.png
screenshot-1.png
screenshot-2.png
screenshot-3.png
Use stable, descriptive filenames. Prefer PNG for marketplace visuals. Keep source files only if the project already keeps editable artwork.
Logo guidance:
Screenshot guidance:
yarn twenty dev --once or watch-mode sync.When a visual is generated or edited, store the final bitmap in public/ and reference it from defineApplication(). If the image appears in README markdown, include useful alt text.
Update src/application-config.ts with marketplace metadata when publishing:
export default defineApplication({
universalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER,
displayName: APP_DISPLAY_NAME,
description: APP_DESCRIPTION,
defaultRoleUniversalIdentifier: DEFAULT_ROLE_UNIVERSAL_IDENTIFIER,
author: 'Your Company',
category: 'Productivity',
logoUrl: 'public/logo.png',
screenshots: [
'public/screenshot-1.png',
'public/screenshot-2.png',
],
websiteUrl: 'https://example.com',
termsUrl: 'https://example.com/terms',
emailSupport: '[email protected]',
issueReportUrl: 'https://github.com/org/app/issues',
});
Only set aboutDescription when the marketplace About tab should differ from the npm README. Otherwise keep one source of truth in README.md.
If the app requires a specific Twenty server version, set engines.twenty in package.json. If publishing to npm, add the twenty-app keyword.
Before considering README and visuals done:
yarn twenty dev --once
yarn twenty dev:build
Then check:
logoUrl and screenshots path exists in public/.README.md setup steps match actual variables, connections, and commands.package.json has keywords: ["twenty-app"] when the app is intended for npm marketplace publishing.defineApplication() metadata does not reference placeholder URLs, support addresses, screenshots, or terms.If visual verification matters, run the app in a browser and capture fresh screenshots instead of relying on stale files.