Emoji as task symbols

Not sure if this is a bug or a feature request, leaned towards bug.

I use Obsidian mostly to track “stuff” in my life, and I got pretty decent workflow using Tasks plugin, custom symbols (like - [P] for positive memories, - [D] events or - [&] for dreams) and Alternate Checkboxes to make them pretty. But the system is very rigid: You get only so many letters/symbols, and each symbol is “hardcoded” to its image.

So my idea was: why not use emoji - there are like thousands of them, and they convey meaning way better - you do - [✈️] and it’s immediately obvious what it is, comparing to `- [b]` or whatever letter someone chooses.

I cooked up a little CSS that does exactly that - renders the exact emoji that’s used as task symbol, keeping the checkbox function intact - but in the process I discovered a problem: Obsidian has a peculiar way of parsing the symbol inside square brackets.

CSS
/* edit mode */
.task-list-item-checkbox[data-task]:not([data-task=" "]):not([data-task="x"]),
/* read mode */
.task-list-item.is-checked[data-task]:not([data-task=" "]):not([data-task="x"]) input[type=checkbox] {
  border: none;
  background-color: unset;
}

/* make task symbol variable to reuse in input (read mode) - it doesn't have data-task attribute */
.task-list-item.is-checked[data-task]:not([data-task=" "]):not([data-task="x"]) {
  --task-symbol: attr(data-task);
}

.task-list-item-checkbox[data-task]:not([data-task=" "]):not([data-task="x"])::after,
.task-list-item.is-checked[data-task]:not([data-task=" "]):not([data-task="x"]) input[type=checkbox]::after {
  font-family: "Twemoji";
  content: attr(data-task, var(--task-symbol));
  mask-image: unset;
  font-size: 1.2em;
  line-height: 1.2;
  top: auto;
  left: auto;
}

I’m no expert on emoji, so not sure what’s really going on, but it looks like only a very specific subset of emojis are properly interpreted: so called “BMP symbols” or “Dingbats” U+2600–26FF and “Miscellaneous Symbols” U+2700–27BF form the emoji range. My internet research says something about parsing a single UTF-16 character. And this is an issue only for emojis inside square brackets - in any other context, emojis work perfectly fine.

Here is the list
Unicode Symbol Name
U+263A :smiling_face: smiling face
U+2639 :frowning: frowning face
U+2620 :skull_and_crossbones: skull and crossbones
U+2763 :heart_exclamation: heart exclamation
U+2764 :heart: red heart
U+270B :raised_hand: raised hand
U+270C :victory_hand: victory hand
U+261D :index_pointing_up: index pointing up
U+270A :raised_fist: raised fist
U+270D :writing_hand: writing hand
U+26F7 :skier: skier
U+26F9 :person_bouncing_ball: person bouncing ball
U+2618 :shamrock: shamrock
U+2615 :hot_beverage: hot beverage
U+26F0 :mountain: mountain
U+26EA :church: church
U+26E9 :shinto_shrine: shinto shrine
U+26F2 :fountain: fountain
U+26FA :tent: tent
U+2668 :hot_springs: hot springs
U+26FD :fuel_pump: fuel pump
U+2693 :anchor: anchor
U+26F5 :sailboat: sailboat
U+26F4 :ferry: ferry
U+2708 :airplane: airplane
U+231B :hourglass_done: hourglass done
U+23F3 :hourglass_not_done: hourglass not done
U+231A :watch: watch
U+23F0 :alarm_clock: alarm clock
U+23F1 :stopwatch: stopwatch
U+23F2 :timer_clock: timer clock
U+2600 :sun: sun
U+2B50 :star: star
U+2601 :cloud: cloud
U+26C5 :sun_behind_cloud: sun behind cloud
U+26C8 :cloud_with_lightning_and_rain: cloud with lightning and rain
U+2602 :umbrella: umbrella
U+2614 :umbrella_with_rain_drops: umbrella with rain drops
U+26F1 :umbrella_on_ground: umbrella on ground
U+26A1 :high_voltage: high voltage
U+2744 :snowflake: snowflake
U+2603 :snowman: snowman
U+26C4 :snowman_without_snow: snowman without snow
U+2604 :comet: comet
U+2728 :sparkles: sparkles
U+26BD :soccer_ball: soccer ball
U+26BE :baseball: baseball
U+26F3 :in_hole: flag in hole
U+26F8 :ice_skate: ice skate
U+2660 :spade_suit: spade suit
U+2665 :heart: heart suit
U+2666 :diamond_suit: diamond suit
U+2663 :club_suit: club suit
U+265F :chess_pawn: chess pawn
U+26D1 :rescue_worker_s_helmet: rescue worker’s helmet
U+260E :telephone: telephone
U+2328 :keyboard: keyboard
U+2709 :envelope: envelope
U+270F :pencil: pencil
U+2712 :black_nib: black nib
U+2702 :scissors: scissors
U+26CF :pick: pick
U+2692 :hammer_and_pick: hammer and pick
U+2694 :crossed_swords: crossed swords
U+2699 :gear: gear
U+2696 :balance_scale: balance scale
U+26D3 :chains: chains
U+2697 :alembic: alembic
U+26B0 :coffin: coffin
U+26B1 :funeral_urn: funeral urn
U+267F :wheelchair_symbol: wheelchair symbol
U+26A0 :warning: warning
U+26D4 :no_entry: no entry
U+2622 :radioactive: radioactive
U+2623 :biohazard: biohazard
U+2B06 :up_arrow: up arrow
U+2197 :up_right_arrow: up-right arrow
U+27A1 :right_arrow: right arrow
U+2198 :down_right_arrow: down-right arrow
U+2B07 :down_arrow: down arrow
U+2199 :down_left_arrow: down-left arrow
U+2B05 :left_arrow: left arrow
U+2196 :up_left_arrow: up-left arrow
U+2195 :up_down_arrow: up-down arrow
U+2194 left-right arrow
U+21A9 :right_arrow_curving_left: right arrow curving left
U+21AA :left_arrow_curving_right: left arrow curving right
U+2934 :right_arrow_curving_up: right arrow curving up
U+2935 :right_arrow_curving_down: right arrow curving down
U+269B :atom_symbol: atom symbol
U+2721 :star_of_david: star of David
U+2638 :wheel_of_dharma: wheel of dharma
U+262F :yin_yang: yin yang
U+271D :latin_cross: latin cross
U+2626 :orthodox_cross: orthodox cross
U+262A :star_and_crescent: star and crescent
U+262E :peace_symbol: peace symbol
U+2648 :aries: Aries
U+2649 :taurus: Taurus
U+264A :gemini: Gemini
U+264B :cancer: Cancer
U+264C :leo: Leo
U+264D :virgo: Virgo
U+264E :libra: Libra
U+264F :scorpio: Scorpio
U+2650 :sagittarius: Sagittarius
U+2651 :capricorn: Capricorn
U+2652 :aquarius: Aquarius
U+2653 :pisces: Pisces
U+26CE :ophiuchus: Ophiuchus
U+25B6 :play_button: play button
U+23E9 :fast_forward_button: fast-forward button
U+23ED :next_track_button: next track button
U+23EF :play_or_pause_button: play or pause button
U+25C0 :reverse_button: reverse button
U+23EA :fast_reverse_button: fast reverse button
U+23EE :last_track_button: last track button
U+23EB :fast_up_button: fast up button
U+23EC :fast_down_button: fast down button
U+23F8 :pause_button: pause button
U+23F9 :stop_button: stop button
U+23FA :record_button: record button
U+23CF :eject_button: eject button
U+2640 :female_sign: female sign
U+2642 :male_sign: male sign
U+26A7 :transgender_symbol: transgender symbol
U+2716 :multiply: multiply
U+2795 :plus: plus
U+2796 :minus: minus
U+2797 :divide: divide
U+267E :infinity: infinity
U+203C :double_exclamation_mark: double exclamation mark
U+2049 :exclamation_question_mark: exclamation question mark
U+2753 :red_question_mark: red question mark
U+2754 :white_question_mark: white question mark
U+2755 :white_exclamation_mark: white exclamation mark
U+2757 :red_exclamation_mark: red exclamation mark
U+3030 :wavy_dash: wavy dash
U+2695 :medical_symbol: medical symbol
U+267B :recycling_symbol: recycling symbol
U+269C :fleur_de_lis: fleur-de-lis
U+2B55 :hollow_red_circle: hollow red circle
U+2705 :white_check_mark: check mark button
U+2611 :check_box_with_check: check box with check
U+2714 :check_mark: check mark
U+274C :cross_mark: cross mark
U+274E :cross_mark_button: cross mark button
U+27B0 :curly_loop: curly loop
U+27BF :double_curly_loop: double curly loop
U+303D :part_alternation_mark: part alternation mark
U+2733 :eight_spoked_asterisk: eight-spoked asterisk
U+2734 :eight_pointed_star: eight-pointed star
U+2747 :sparkle: sparkle
U+00A9 © copyright
U+00AE ® registered
U+2122 trade mark
U+2139 :information_source: information
U+24C2 :circled_m: circled M
U+3297 :japanese_congratulations_button: Japanese “congratulations” button
U+3299 :japanese_secret_button: Japanese “secret” button
U+26AB :black_circle: black circle
U+26AA :white_circle: white circle
U+2B1B :black_large_square: black large square
U+2B1C :white_large_square: white large square
U+25FC :black_medium_square: black medium square
U+25FB :white_medium_square: white medium square
U+25FE :black_medium_small_square: black medium-small square
U+25FD :white_medium_small_square: white medium-small square
U+25AA :black_small_square: black small square
U+25AB :white_small_square: white small square

Now some of the emoji from this narrow range do have colorful glyphs assigned eg. in Twemoji font, but as I mentioned before, they are very limited. It would be great to use any emoji possible. AFAIU the change would be rather simple - updating the way task symbols are parsed from this single UTF-16 way to regular Unicode character.

This issue was mentioned 5 years ago, but it didn’t get much attention. I’m trying again, I think there’s real value fixing that. At least for me that is.

Steps to reproduce

  1. Add custom CSS style with the code provided above
  2. Create a Markdown file an paste this content:
- [☀] this works `☀`, ☀
- [☀️] this does not `☀️`, ☀️ 
- [☘] this works `☘`, ☘
- [☘️] this does not `☘️`, ☘️
- [✈] this works `✈`, ✈
- [✈️] this does not `✈️`, ✈️

Expected result

All lines properly interpreted as tasks:

Actual result

BMP symbols work fine, any other emojis don’t:

Environment

Environment

SYSTEM INFO:
Obsidian version: 1.12.7
Installer version: 1.12.7
Operating system: Darwin Kernel Version 25.4.0: Thu Mar 19 19:33:25 PDT 2026; root:xnu-12377.101.15~1/RELEASE_ARM64_T6041 25.4.0
Login status: not logged in
Language: pl
Insider build toggle: off
Live preview: on
Base theme: adapt to system
Community theme: none
Snippets enabled: 2
Restricted mode: off
Plugins installed: 7
Plugins enabled: 7
1: Tasks v7.23.1
2: Style Settings v1.0.9
3: User Plugins v1.4.0
4: Calendar v1.5.10
5: Custom File Explorer sorting v3.1.6
6: Map View v6.1.4
7: Beancount Reader v0.1.0

RECOMMENDATIONS:
Custom theme and snippets: for cosmetic issues, please first try updating your theme and disabling your snippets. If still not fixed, please try to make the issue happen in the Sandbox Vault or disable community theme and snippets.
Community plugins: for bugs, please first try updating all your plugins to latest. If still not fixed, please try to make the issue happen in the Sandbox Vault or disable community plugins.

Please, Open a FR.

Could you please move this topic to the FR category? I’d like to avoid duplication. I’ll update the post structure to match the FR template.