makeplane / makeplane/plane

[bug]: Plain description is not rendered when creating intake issues via API on Community self-hosted

Open
#9,180 3 comments 0 reactions 2 assignees View on GitHub

@vihar is already working on this.

Since May 31, 2026.

🐛bug plane
Dominant language
TypeScript
Stars
59.6k
Forks
5.8k
Avg merge
1d 22h
Merged PRs (30d)
49

Description

Is there an existing issue for this?
  • I have searched the existing issues
Current behavior

Environment

  • Plane edition: Community Edition
  • Deployment: Self-hosted
  • Setup: Docker Compose
  • Version: v1.3.1

Current behavior

When creating an intake issue through the API on Plane Community self-hosted using only name, description, and priority, the plain text description does not render correctly in the UI.

The intake issue is created successfully, and the title/priority are saved correctly. However, the description is not displayed as expected in the Plane UI.

Looking at the database, the plain string sent in issue.description appears to be stored in description_json, while the renderable description fields such as description_html and description_stripped remain empty/default.

Example observed result:

  • description_json = "Description created via API to validate the Intake"
  • description_html = "<p></p>"
  • description_stripped = ""

When creating an intake issue manually through the UI, description_json remains as {} and the description is rendered correctly through the appropriate description fields.

Expected behavior

When creating an intake issue through the documented API payload, a plain string passed as issue.description should render correctly in the Plane UI.

For plain text descriptions, the API should not store the string directly as description_json. Instead, it should keep description_json as an object, for example {}, and populate the renderable/plain description fields accordingly.

Expected result:

  • description_json = {}
  • description_html = "<p>Description created via API to validate the Intake</p>"
  • description_stripped = "Description created via API to validate the Intake"

If description is provided as a structured object/list, or if description_json is provided explicitly, the existing structured description behavior should be preserved.

Steps to reproduce

Steps to reproduce

  1. Run Plane Community Edition self-hosted using Docker Compose.

  2. Create an intake issue through the API using only name, description, and priority:

curl -X POST \
  "https://<domain>/api/v1/workspaces/<workspace_slug>/projects/<project_id>/intake-issues/" \
  -H "X-API-Key: <api_key>" \
  -H "Content-Type: application/json" \
  -d '{
    "issue": {
      "name": "API test",
      "description": "Description created via API to validate the Intake",
      "priority": "medium"
    }
  }'
  1. Open the created intake issue in the Plane UI.

  2. Check whether the description is displayed.

  3. Optionally, inspect the created issue in the database and compare description_json, description_html, and description_stripped.

Additional context

The documented API example allows sending description as part of the issue payload when creating an intake issue.

The behavior seems to happen because the intake creation flow accepts both description and description_json, but a plain string passed as description can end up being assigned to description_json instead of being converted into renderable HTML/plain text fields.

Environment

Production

Browser

Google Chrome

Variant

Self-hosted

Version

v1.3.1

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.