versa/skills/versatiles-fonts/SKILL.md
VersaTiles SDF font glyphs for MapLibre GL JS. 10 font families (Fira Sans, Lato, Libre Baskerville, Merriweather Sans, Noto Sans, Nunito, Open Sans, PT Sans, Roboto, Source Sans 3) bundled locally from versatiles-org/versatiles-fonts GitHub releases. Installed so the notebook's shortbread MapLibre cell renders labels without hitting tiles.versatiles.org as a runtime font CDN. Re-exported by the versatiles-frontend layer's http.server at /fonts/. MUST be invoked before building, deploying, or troubleshooting the versatiles-fonts layer.
npx skillsauth add overthinkos/overthink-plugins versatiles-fontsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
| Property | Value |
|----------|-------|
| Dependencies | supervisord (transitive; no service of its own) |
| Distros | arch + fedora |
| Build deps | curl, jq |
| Install path | /opt/versatiles-fonts/ |
| Re-exported at | /opt/versatiles-frontend/fonts/ (by the versatiles-frontend layer) |
versatiles-org/versatiles-fonts releases a fonts.tar.gz containing
all 10 font families pre-rendered as SDF (signed distance field) PBFs
that MapLibre GL JS can fetch via its standard glyph URL template:
{glyphs}/{fontstack}/{range}.pbf
The directory layout inside the tarball (verified at install time):
versatiles-fonts/
├── Fira Sans Regular/
│ ├── 0-255.pbf
│ ├── 256-511.pbf
│ └── ...
├── Noto Sans Regular/
│ ├── 0-255.pbf
│ └── ...
├── Roboto Regular/
│ └── ...
└── ...
The notebook's shortbread cell patches the style's glyphs URL:
style.glyphs = 'http://127.0.0.1:28002/fonts/{fontstack}/{range}.pbf';
MapLibre substitutes {fontstack} (e.g. Noto Sans Regular) and
{range} (e.g. 0-255) when fetching each glyph range as the user
pans/zooms. The versatiles-frontend http.server serves the files
directly — no special URL rewriting needed.
Build-scope:
versatiles-fonts-bundle-present — at least one *.pbf glyph file exists under /opt/versatiles-fonts/versatiles-fonts-noto-sans — Noto Sans Regular family is present (sanity check that the tarball wasn't a partial variant)/charly-versa:versa — image composing this layer/charly-versa:versatiles-style — sibling MapLibre style generator; the generated styles reference the glyph URL pattern this layer provides/charly-versa:versatiles-frontend — re-exports this bundle at /fonts//charly-versa:maplibre-versatiles-styler — UI control that lets users switch between font families exposed by this layer/charly-versa:notebook-osm — the shortbread MapLibre cell that patches style.glyphs to point at this layer's bundletools
Use when authoring or modifying a charly PLUGIN — a candy with a `plugin:` block that contributes Providers (verbs/kinds/deploy-targets/steps/builders/commands), its own CUE schema, builtin (compiled-in) or external (out-of-tree git repo). Covers the unified Provider model, the per-plugin CUE-schema contract (single source → Go params for dev + schema-over-Describe RPC for runtime), the SDK, and the loader.
tools
The CUE data-validation / configuration CLI (cue), pinned to v0.16.1. Use when working with the cue candy, installing the cue binary into a box or onto a target:local dev host, or running the offline schema-vendoring pipeline that feeds charly's egress validation.
tools
CUE EGRESS validation — validating (and, where it adds value, generating) the config files charly WRITES to a system BEFORE the bytes hit disk. MUST be invoked before working on charly/egress.go, the vendored schemas under candy/plugin-egress/egress-schemas/vendor/, the ValidateEgress / registerVendoredEgressKind path, the offline `task cue:vendor` pipeline, or adding an egress schema for any written artifact (cloud-init, k8s manifests, traefik routes, runtime config, install ledger, systemd/quadlet units, ssh_config, libvirt XML).
tools
Kubernetes cluster-probe declarative check verb — the `kube:` check verb (nodes, pods, ingress, storage class, addon health, apply/delete, and arbitrary resource GETs) served out-of-process by the candy/plugin-kube plugin (vendored client-go; no external kubectl required).