Cursorly.js is a lightweight, customizable JavaScript library for creating custom cursors with animated trails, emojis, and visual effects. It supports multiple cursor icons, dynamic effects,custom emoji and easy integration with any web project.
Effect Name | Description | Type |
---|---|---|
trail | Rainbow particle trail | default |
sparkle | Glitter sparkle effect | default |
emoji | Emoji trail (โจ) | emoji |
firing | Fire-like explosion | firing |
circle | Circular light trail | circle |
none | Disables particle effect | default |
neonGlow | Neon-style glow | default |
fireworks | Multi-color burst | default |
snowfall | Soft white snow | default |
aura | Gradient aura | default |
comet | Comet trail | default |
emojiHearts | ๐ trail | emoji |
emojiStars | โญ trail | emoji |
emojiFire | ๐ฅ trail | emoji |
emojiSnow | โ๏ธ trail | emoji |
emojiMagic | ๐ช trail | emoji |
Cursorly.js works in all modern browsers (Chrome, Firefox, Safari, Edge).
Include via CDN:
<script src="https://cdn.jsdelivr.net/gh/iamashruu/cursorly.js@v1.0.1/dist/cursorly.min.js"></script>
Initialize the cursor with default options:
const cursor = Cursorly.init();
OR, Initialize with custom icon and effect:
const cursor = Cursorly.init({
cursor: 0, // Index of the cursor icon (default: 0)
effect: { name: "trail", color: "rainbow" } // Effect name and color are required
});
OR, Initialize with custom icon and emoji effect
const cursor = Cursorly.init({
cursor: 0,
effect: { name: "emoji", shape:"๐ป"}
});
Cursorly supports multiple icons. Change icon dynamically:
cursor.setIcon(1); // Change to icon index 1
Effect options (only name and color are required):
cursor.setEffect({
name: "sparkle", // 'trail', 'sparkle', or 'emojiSnow',etc
color: "#ff4081", // Hex color or "rainbow"
density: 10, // Optional, number of particles per mouse move
size: [3, 12], // Optional, min and max particle size
decay: 0.92, // Optional, particle shrink rate
});
You can define custom effects using the same structure as built-ins.
const starlightBurst = {
name: "starlightBurst",
color: ["#ffcc00", "#ffffff", "#ff99ff"],
density: 8,
size: [3, 9],
decay: 0.9,
type: "default"
};
cursor.setEffect(starlightBurst);
Cursorly includes an emoji selector with 100+ emojis ready to use in effects, including:
โจ ๐ฅ ๐ โ๏ธ โญ ๐ช ๐ค ๐ ๐ซ ๐ฆ โก ๐ ๐ ๐ธ ๐ ๐ ๐ ๐ง ๐น๏ธ ๐ผ ๐บ ๐ป ๐ง ๐ซง ๐ช โ๏ธ
CursorlyJS supports custom emoji effects out of the box.
You can easily create and set them dynamically.
const emojiButterfly = {
name: "emojiButterfly",
shape: "๐ฆ",
color: "white",
density: 4,
size: [2, 5],
decay: 0.85,
type: "emoji",
};
cursor.setEffect(emojiButterfly);
๐ That's it โ no registration needed!
Alternatively, you can also set a custom emoji effect like this way (only name='emoji' and shape='your desired emoji' are required):
cursor.setEffect({
name: "emoji", // required, use 'emoji' always for custom emoji effect
shape: "๐ป", // required, put desired emoji
density: 10, // Optional, number of particles per mouse move
size: [3, 12], // Optional, min and max particle size
decay: 0.92, // Optional, particle shrink rate
});
Disable or enable effects dynamically::
cursor.disableEffect(); // Turn off particle effects
cursor.enableEffect(); // Turn on particle effects
Cursorly supports multiple icons. Change icon dynamically:
cursor.disable(); // Hide custom cursor, revert to default
cursor.enable(); // Show custom cursor again
We welcome contributions from the community!
MIT ยฉ 2025 [Ashraf]
CursorlyJS โ Because your pointer deserves some personality โจ