Cursors
New pointer styles with rest and click states, plus precise hotspots, right in the cursor picker.
Community packs install into the editor's own pickers. Each one is a manifest and a few static files, hash-checked.
A pack feeds the pickers you already use. Nothing new to learn.
New pointer styles with rest and click states, plus precise hotspots, right in the cursor picker.
Wallpapers that drop straight into the canvas background picker.
Curated gradient sets, rendered live in both the preview and the export.
Solid color swatches for the canvas, ready to click.
Ready-made caption looks (font, color, outline, backing), applied in one click to overlay and burned-in captions.
Named motion curves for zoom and cursor animation.
Cursor smoothing recipes, strength plus click snap, that you can share as packs.
Open Extensions, browse the registry, or paste a pack URL to install directly.
Downloads, every asset gets hash-checked, installs locally. No account, nothing phones home.
Cursors, backgrounds, gradients, presets show up in the pickers you already use.
No code runs. A pack is assets, so plugin supply-chain attacks do not apply.
A pack is a manifest plus static files. Nothing executes.
Every asset is checked against its SHA-256 on download. Tampered files fail the install.
Asset packs can't request capabilities. A pack never reaches further than the app already can.
The registry is public on GitHub, CI checks every submission for schema, hashes, and safe filenames.
Drop your files in a folder, write a manifest, open a PR. CI checks the rest.
Cursors as SVG, backgrounds as PNG, JPG or WebP. Bare files in the pack folder.
A few lines of JSON saying what each file contributes. No hashes to write by hand.
Run pnpm verify:extensions, push, and the Verify Extensions workflow takes over.
{
"id": "my-cursors",
"name": "My Cursors",
"version": "1.0.0",
"kind": "asset-pack",
"permissions": [],
"contributes": {
"cursors": [
{ "id": "ring", "label": "Ring",
"rest": "ring",
"hotspot": { "x": 32, "y": 32 } }
]
},
"assets": [
{ "id": "ring", "file": "assets/ring.svg" }
]
}