Skip to content

Transformations

Transformations are applied in a fixed order: emoji → number prefix → case → custom regex. Each step is optional.

OptionBehavior
stripEmoji: trueRemove leading and embedded emojis
stripEmoji: falseKeep emojis unchanged

Example (stripEmoji: true):

"📁 01 - Projects" → "01 - Projects"

Targets Johnny Decimal-style prefixes like 01 - or 1.2.3 at the start of a segment.

OptionBehavior
'strip'Remove the leading numeric prefix and separator
'keep'Preserve the prefix as part of the name

Example ('strip'):

"01 - Projects" → "Projects"
OptionExample output
snake_casemy_cool_thing
kebab-casemy-cool-thing
Title CaseMy Cool Thing
camelCasemyCoolThing
PascalCaseMyCoolThing
noneMy Cool Thing (unchanged)

Applied to each segment independently — path separators (/) are preserved.

Arbitrary pattern/replacement pairs, applied in array order after case conversion.

"customRegex": [
{ "pattern": "\\s+", "replacement": "_", "flags": "g" },
{ "pattern": "^_+|_+$", "replacement": "", "flags": "" }
]

Supports standard JavaScript regex syntax and flags.

Input folder path: "📁 01 - Projects/My Cool Thing"

"📁 01 - Projects/My Cool Thing"
↓ stripEmoji: true
"01 - Projects/My Cool Thing"
↓ handleNumberPrefix: 'strip'
"Projects/My Cool Thing"
↓ caseTransform: 'snake_case'
"projects/my_cool_thing"
↓ (tag entry point prefix)
"#projects/my_cool_thing"

The same pipeline drives both sync directions. For tag-to-folder, folderTransforms run on the captured tag segments to produce the folder name. If your tag convention and folder convention are different, define separate transforms for each direction on the same rule.