- Update version to v1.26.1-moko.06.10.00 - Document 13 default statuses including Pending states - Document status replacing close button in comment form - Add Security scanning, MCP, Wiki folders to features list - Update roadmap with completed and planned items - Add features/ folder link to pages table
5.2 KiB
Custom Issue Statuses
Custom issue statuses extend Gitea's binary Open/Closed model with org-defined workflow states. Each status has a name, color, and an optional "closes issue" flag that triggers automatic close/reopen when selected.
Overview
Statuses are defined at the organization level and appear in the issue sidebar for all repositories under that organization. This is the same pattern as org-level labels and custom fields.
Key Concepts
- Status definitions are managed in Org Settings > Issue Statuses
- Status selection appears as a dropdown in the issue sidebar
- Auto close/reopen — selecting a status with
closes_issue = trueautomatically closes the issue; switching to a non-closing status reopens it - Status is supplemental — the existing Open/Closed binary state is preserved; statuses add granularity on top
Org Settings
Navigate to Organization Settings > Issue Statuses to manage status definitions.
Each status has:
| Field | Description |
|---|---|
| Name | Display name (e.g., "In Progress", "Won't Fix", "Blocked") |
| Color | Hex color for visual distinction (e.g., #2563eb) |
| Description | Help text shown to users |
| Closes Issue | When checked, selecting this status automatically closes the issue |
| Sort Order | Controls display order in dropdowns (ascending) |
| Is Active | Inactive statuses are hidden from dropdowns but preserved on existing issues |
Default Statuses (auto-seeded)
| Status | Color | Closes Issue | Use Case |
|---|---|---|---|
| In Progress | Blue | No | Work is actively being done |
| Needs Info | Yellow | No | Waiting for more information |
| Blocked | Red | No | Cannot proceed due to dependency |
| Resolved | Green | Yes | Fix implemented and verified |
| Won't Fix | Gray | Yes | Decided not to address |
| Duplicate | Purple | Yes | Already tracked elsewhere |
| Pending: Design | Lavender | No | Waiting on design work |
| Pending: Testing | Yellow | No | Waiting for testing |
| Pending: Review | Green | No | Waiting for code review |
| Pending: Feedback | Pink | No | Waiting for feedback |
| Pending: Documentation | Purple | No | Waiting for docs |
| Pending: Deployment | Blue | No | Ready to deploy |
| Pending: Dependency | Light Blue | No | Blocked by external dependency |
Statuses are auto-seeded when an org first accesses them. Admins can add, edit, reorder, or deactivate statuses.
Comment Form Integration
The status dropdown replaces the close/reopen button in the comment form footer for issues with org statuses:
- Open issues show all statuses plus a "Close" option
- Selecting a status with
closes_issue = trueauto-closes the issue - Closed issues show only "Reopen" for non-admin users
- Admins see the full dropdown on closed issues including "Reopen"
- PRs still use the standard close/reopen button
Issue List Badges
Status shows as a colored badge on each issue in the issue list view, alongside Type and Priority badges.
Issue Sidebar
Status also appears as a read-only display in the sidebar (the editable control is in the comment form). The dropdown:
- Displays a colored left border on each option
- Shows a power symbol on statuses that close the issue
- Selecting "—" (empty) clears the status
Auto Close/Reopen Behavior
| Current State | Selected Status | Result |
|---|---|---|
| Open | Status with closes_issue = true |
Issue is closed automatically |
| Closed | Status with closes_issue = false |
Issue is reopened automatically |
| Open | Status with closes_issue = false |
Status set, issue stays open |
| Closed | Status with closes_issue = true |
Status set, issue stays closed |
All close/reopen actions go through the standard Gitea service layer, so webhooks, notifications, and timeline events fire normally.
Database
Tables
issue_status_def (migration v346) — org-level status definitions
| Column | Type | Description |
|---|---|---|
| id | bigint | Primary key |
| org_id | bigint | Organization ID |
| name | varchar | Status name |
| color | varchar(7) | Hex color |
| description | text | Help text |
| closes_issue | bool | Auto-close flag |
| sort_order | int | Display order |
| is_active | bool | Visibility flag |
issue table — added status_id column (bigint, default 0)
Cascade on Delete
When a status definition is deleted, all issues referencing it have their status_id set to 0 (cleared). Issues are not closed or reopened during deletion.
Routes
Web Routes (Org Settings)
| Method | Path | Handler |
|---|---|---|
| GET | /org/{org}/settings/issue-statuses |
SettingsIssueStatuses |
| POST | /org/{org}/settings/issue-statuses |
SettingsIssueStatusesCreatePost |
| POST | /org/{org}/settings/issue-statuses/{id}/edit |
SettingsIssueStatusesEditPost |
| POST | /org/{org}/settings/issue-statuses/{id}/delete |
SettingsIssueStatusesDeletePost |
Web Routes (Issue Sidebar)
| Method | Path | Handler |
|---|---|---|
| POST | /{owner}/{repo}/issues/{id}/custom-status |
UpdateIssueCustomStatus |
| Revision | Date | Author | Description |
|---|---|---|---|
| 1.0 | 2026-06-06 | Jonathan Miller (@jmiller) | Initial version |