Back to free tools
UTF-8 facet offset calculator

BlueSky facets and byte offset calculator

Calculate byteStart and byteEnd ranges for app.bsky.richtext.facet links, mentions, and tags when emoji, accents, or non-English text make normal string positions unreliable.

Calculate a facet span

BlueSky facets use zero-indexed UTF-8 byte offsets with an inclusive start and exclusive end. JavaScript string indexes are UTF-16, so this tool converts the range before building JSON.

Span found
59
UTF-16 start
82
UTF-16 end
59
byteStart
82
byteEnd

UTF-8 byte map

TextCode pointUTF-16 rangeByte rangeBytes
CU+00430-10-11
aU+00611-21-21
fU+00662-32-31
eU+00653-43-41
spaceU+00204-54-51
nU+006E5-65-61
oU+006F6-76-71
tU+00747-87-81
eU+00658-98-91
sU+00739-109-101
spaceU+002010-1110-111
fU+006611-1211-121
oU+006F12-1312-131
rU+007213-1413-141
spaceU+002014-1514-151
@U+004015-1615-161
oU+006F16-1716-171
nU+006E17-1817-181
yU+007918-1918-191
xU+007819-2019-201
hU+006820-2120-211
qU+007121-2221-221
.U+002E22-2322-231
uU+007523-2423-241
sU+007324-2524-251
:U+003A25-2625-261
spaceU+002026-2726-271
cU+006327-2827-281
aU+006128-2928-291
lU+006C29-3029-301
cU+006330-3130-311
uU+007531-3231-321
lU+006C32-3332-331
aU+006133-3433-341
tU+007434-3534-351
eU+006535-3635-361
spaceU+002036-3736-371
fU+006637-3837-381
aU+006138-3938-391
cU+006339-4039-401
eU+006540-4140-411
tU+007441-4241-421
sU+007342-4342-431
spaceU+002043-4443-441
bU+006244-4544-451
eU+006545-4645-461
fU+006646-4746-471
oU+006F47-4847-481
rU+007248-4948-491
eU+006549-5049-501
spaceU+002050-5150-511
pU+007051-5251-521
oU+006F52-5352-531
sU+007353-5453-541
tU+007454-5554-551
iU+006955-5655-561
nU+006E56-5756-571
gU+006757-5857-581
spaceU+002058-5958-591
hU+006859-6059-601
tU+007460-6160-611
tU+007461-6261-621
pU+007062-6362-631
sU+007363-6463-641
:U+003A64-6564-651
/U+002F65-6665-661
/U+002F66-6766-671
oU+006F67-6867-681
nU+006E68-6968-691
yU+007969-7069-701
xU+007870-7170-711
hU+006871-7271-721
qU+007172-7372-731
.U+002E73-7473-741
uU+007574-7574-751
sU+007375-7675-761
/U+002F76-7776-771
tU+007477-7877-781
oU+006F78-7978-791
oU+006F79-8079-801
lU+006C80-8180-811
sU+007381-8281-821
spaceU+002082-8382-831
#U+002383-8483-841
BU+004284-8584-851
lU+006C85-8685-861
uU+007586-8786-871
eU+006587-8887-881
SU+005388-8988-891
kU+006B89-9089-901
yU+007990-9190-911

Inclusive start, exclusive end

A facet starts at byteStart and stops before byteEnd. The selected byte length is byteEnd minus byteStart.

Mentions need DIDs

The visible text may be a handle, but the mention facet stores a DID. Resolve handles before writing a final post record.

Keep byte math out of normal publishing

Byte offsets matter for custom AT Protocol tooling. For day-to-day growth, ONYX helps you write, review, schedule, and publish BlueSky posts from a content calendar without manually assembling rich text facet JSON.

Start Free
From free tool to scheduled queue

Stop fighting formatting limits and API bugs. Craft your blocks cleanly using our automated tools, then schedule them directly to your BlueSky feed using ONYX.

Start Planning for Free