Add "No labels" (Empty) option to label filters #906

Open
opened 2026-02-04 21:36:06 +03:00 by OVERLORD · 2 comments
Owner

Originally created by @timkam13 on GitHub (Jan 27, 2026).

Which part of the project does this feature apply to?

Frontend

What would you like?

Currently, Planka's filtering system only allows selecting existing labels. There is no way to filter for cards that have no labels assigned or to effectively exclude cards with specific labels from the view.

I suggest adding a special "No labels" (or "Empty") option at the top of the label filter dropdown.
When selected, the board should display cards that have no labels assigned.

This would allow users to isolate "unorganized" tasks or (in combination with other filters) exclude specific categories.

This feature is standard in other kanban tools (like Trello or Jira) and significantly improves board management for high-volume projects.

Why is this needed?

For example, if I mark completed cards with a "Done" label, I cannot configure the filter to show everything except those cards, because I cannot select "empty" cards to keep them in view.

Currently, the only workaround is to manually tag every single card with a placeholder label, which is inefficient and clutters the workflow.

Other information

Alternative: add filter "do NOT show labels"

Originally created by @timkam13 on GitHub (Jan 27, 2026). ### Which part of the project does this feature apply to? Frontend ### What would you like? Currently, Planka's filtering system only allows selecting existing labels. There is no way to filter for cards that have no labels assigned or to effectively exclude cards with specific labels from the view. I suggest adding a special "No labels" (or "Empty") option at the top of the label filter dropdown. When selected, the board should display cards that have no labels assigned. This would allow users to isolate "unorganized" tasks or (in combination with other filters) exclude specific categories. This feature is standard in other kanban tools (like Trello or Jira) and significantly improves board management for high-volume projects. ### Why is this needed? For example, if I mark completed cards with a "Done" label, I cannot configure the filter to show everything except those cards, because I cannot select "empty" cards to keep them in view. Currently, the only workaround is to manually tag every single card with a placeholder label, which is inefficient and clutters the workflow. ### Other information Alternative: add filter "do NOT show labels"
OVERLORD added the enhancement label 2026-02-04 21:36:06 +03:00
Author
Owner

@timkam13 commented on GitHub (Jan 27, 2026):

Additionally, I would like to request label activity tracking.

It would be extremely helpful for reporting and analytics if the system saved and displayed:
Timestamp: Exactly when a label was added to or removed from a card (as MVP only added is enought).
Author: Which user performed the action.

Why this is important:
This data is essential for calculating lead times and generating reports.

For example, if I use a "Ready for Review" or "Done" label, I need to know exactly when those labels were applied to measure how long a task stayed in a particular state.

Currently, it's difficult to track the lifecycle of a task based solely on labels without this history.

@timkam13 commented on GitHub (Jan 27, 2026): **Additionally, I would like to request label activity tracking.** It would be extremely helpful for reporting and analytics if the system saved and displayed: Timestamp: Exactly when a label was added to or removed from a card (as MVP only added is enought). Author: Which user performed the action. **Why this is important:** This data is essential for calculating lead times and generating reports. For example, if I use a "Ready for Review" or "Done" label, I need to know exactly when those labels were applied to measure how long a task stayed in a particular state. Currently, it's difficult to track the lifecycle of a task based solely on labels without this history.
Author
Owner

@hwelch-fle commented on GitHub (Jan 27, 2026):

This is somewhat possible using the API. Here's some plankapy code that shows some of what you want:

>>> from plankapy.v2 import Planka
>>> planka = Planka('https://<url>')
>>> planka.login(username='user', password='password')
>>> board = prj.boards[0]
>>> for card in board.cards:
...     print(f'{card.name}: {card.labels.extract('name')}')
Card 1.1: []
Card 1.2: []
Card 1.3: []
Card 1.4: ['Label 1']
Card 1.5: []
Card 1.6: []
Card 1.7: []
Card 1.8: ['Label 4', 'Label 5']
Card 1.10: []
Card 1.9: ['Label 1', 'Label 2']

>>> for label in board.labels:
...    print(f'{label.name}: {label.get_cards().extract('name')}')    
Label 1: ['Card 1.4', 'Card 1.9']
Label 2: ['Card 1.9']
Label 4: ['Card 1.8']
Label 5: ['Card 1.8']

>>> for card_label in board.card_labels:
...    print(f'{card_label.label.name} added to {card_label.card.name} on {card_label.created_at.strftime('%Y-%m-%d')}')
Label 1 added to Card 1.4 on 2026-01-27
Label 1 added to Card 1.9 on 2026-01-26
...

Since removing a label from a card just deletes the associated CardLabel record from the database, tracing label deletions is a bit trickier. There is a webhook event that will send a POST request when a label is deleted from a card cardLabelCreate and cardLabelDelete. So if you wanted to monitor events as they happen, you could subscribe to that webhook and log the events as they happen.

@hwelch-fle commented on GitHub (Jan 27, 2026): This is somewhat possible using the API. Here's some plankapy code that shows some of what you want: ```python >>> from plankapy.v2 import Planka >>> planka = Planka('https://<url>') >>> planka.login(username='user', password='password') >>> board = prj.boards[0] >>> for card in board.cards: ... print(f'{card.name}: {card.labels.extract('name')}') Card 1.1: [] Card 1.2: [] Card 1.3: [] Card 1.4: ['Label 1'] Card 1.5: [] Card 1.6: [] Card 1.7: [] Card 1.8: ['Label 4', 'Label 5'] Card 1.10: [] Card 1.9: ['Label 1', 'Label 2'] >>> for label in board.labels: ... print(f'{label.name}: {label.get_cards().extract('name')}') Label 1: ['Card 1.4', 'Card 1.9'] Label 2: ['Card 1.9'] Label 4: ['Card 1.8'] Label 5: ['Card 1.8'] >>> for card_label in board.card_labels: ... print(f'{card_label.label.name} added to {card_label.card.name} on {card_label.created_at.strftime('%Y-%m-%d')}') Label 1 added to Card 1.4 on 2026-01-27 Label 1 added to Card 1.9 on 2026-01-26 ... ``` Since removing a label from a card just deletes the associated `CardLabel` record from the database, tracing label deletions is a bit trickier. There is a webhook event that will send a POST request when a label is deleted from a card `cardLabelCreate` and `cardLabelDelete`. So if you wanted to monitor events as they happen, you could subscribe to that webhook and log the events as they happen.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/planka#906