Provider reference
Availability, authentication, trust, and fallback behavior.
GetFonts
- Name:
getfonts - Default: enabled
- Authentication: none
- Endpoint: the current GetFonts JSON search API
- Result trust: untrusted
- License:
unknownunless the source supplies a hint
GetFonts is the zero-configuration default.
DaFont
- Name:
dafont - Default: enabled
- Authentication: none
- Endpoint: DaFont's public search catalog and direct ZIP downloads
- Result trust: untrusted download bytes
- License:
unknown; check the author and license information before use
Moji parses bounded catalog results, chooses at most three closest family
matches, and sends the direct ZIP downloads through the same archive path,
entry-count, expanded-size, format, and HTTPS checks as other providers. This
also covers names that do not exist in the structured registries, such as a
Peanuts search matching the Peanuts Gang family.
Font Squirrel
- Name:
fontsquirrel - Default: disabled because site protection can challenge API clients
- Authentication: none
- Endpoint: Font Squirrel's JSON family catalog and official ZIP downloads
- Result trust: untrusted download bytes
- License:
unknown; check the license file included with the family
Moji matches the query against the catalog, inspects up to three closest family
archives, and emits only members in the requested formats. Archive paths, entry
counts, and expanded sizes pass through the same fixed safety limits as web
search downloads. Select it explicitly with --provider fontsquirrel or enable
it in the config. A site challenge is reported as a blocked provider.
Fontshare
- Name:
fontshare - Default: enabled
- Authentication: none
- Endpoint: Fontshare's v2 catalog and official family ZIP downloads
- Result trust: untrusted download bytes
- License: the catalog's
license_typevalue when present, otherwiseunknown
Fontshare uses the same bounded family matching and archive inspection path as Font Squirrel. A catalog license code identifies the agreement to check; it is not a substitute for reading that agreement before redistribution.
GitHub
- Name:
github - Default: enabled
- Authentication: optional; required for Code Search
- Token sources, in precedence order:
GITHUB_TOKEN, config or--token-stdin, then an existing authenticated GitHub CLI session - Queries: adaptive filename and contextual variants within GitHub's remaining allowance
- Result trust: untrusted
GitHub's general unauthenticated REST allowance does not unlock Code Search;
the Code Search endpoint returns Requires authentication. Without a token,
Moji skips that guaranteed failure and uses its bounded repository, tree, and
release search. When no explicit token exists, Moji reads gh auth token if
GitHub CLI is installed and already authenticated. It does not initiate login
or persist that token. The TUI home screen explains when GitHub search remains
limited.
Code Search generates literal TTF and OTF filenames, space, hyphen, underscore,
and compact filename conventions, then broader contextual forms. Moji reads
GitHub's remaining Code Search allowance after every response, uses as many
variants as the current allowance permits, and stops before making a guaranteed
rate-limited request. Repository-tree matching normalizes the same conventions.
GitHub's REST endpoint does not support
the website's combined extension: and filename: recipe, so Moji uses these
bounded REST-compatible queries instead. Multiple queries are needed because a
candidate URL is not known to contain valid font bytes until download validation.
Duplicate direct URLs are discarded. CSS, documentation, and source matches seed at most
three recursive repository tree reads. Full paths are matched locally using
normalized family names and bounded foundry abbreviations such as Premr for
Premier. Adaptive query spellings share this Code Search budget. If contextual trees miss,
Moji inspects at most two repositories from repository search. Tree files use
raw GitHub URLs; release results must be direct font or supported archive assets.
Registry
- Name:
registry - Default: enabled
- Backends: Fontsource metadata and Google Fonts CSS2
- Authentication: none
- Result trust: trusted catalog metadata
Registry searches use structured endpoints rather than general webpages. Fontsource supplies direct variant URLs. Google Fonts supplies direct WOFF or WOFF2 URLs from its generated stylesheet. A missing family is an empty result, not a provider failure.
Web search
- Name:
websearch - Default: enabled when
kagi-cliis installed or SearXNG is configured - Backends: auto-detected Kagi CLI and optional SearXNG JSON search
- Configuration:
providers.websearch.instance - Result policy: only direct links with a selected font extension
- Result trust: untrusted
Kagi authentication is managed by kagi-cli; run kagi auth. Its backend
runs one structured search and converts GitHub blob links to HTTPS raw-file
URLs. Ordinary pages are discarded.
The SearXNG backend runs nine bounded queries concurrently: quoted TTF and OTF
filenames, a VK-scoped query, an index-of query covering configured formats,
GitHub title query, CSS @font-face query, and three grouped queries across
font indexes such as OnlineWebFonts, wFonts, BeFonts, CufonFonts, FontsFree,
DFonts, FFonts, and FontBolt. Kagi receives the same grouped index clauses in
its bounded query.
Only direct font files are emitted. Direct ZIP, TAR, and compressed TAR results are inspected within fixed entry and expanded-size limits. Extensionless or mislabeled responses are considered only when the bytes match a supported archive signature. Explicit HTML, text, JSON, and XML response types are rejected before reading the body. Download forms and gated flows remain excluded. Both backends run concurrently and merge by direct URL plus archive member. A failure in one backend does not discard results from the other.
Source plugins
- Name:
plugins - Default: enabled when
source_pluginscontains an executable - Configuration:
source_plugins - Protocol: versioned JSON over stdin and stdout
- Result trust: supplied per result, default false
Plugins extend discovery without extending Moji's download trust boundary. Moji accepts only direct HTTPS URLs for configured formats, CSS files that resolve to such URLs, or supported archives with safe font members. See the source plugin protocol.
Partial failure
Providers run independently. Moji keeps results from healthy providers when
another provider fails. It retries bounded transient failures, respects a
provider Retry-After value, and reports searching, throttled, failed, and
done states to the TUI.
If every selected provider fails, Moji exits with an actionable summary and does not begin a download.