一个无忧的自主托管 Google 字体的方式。获取 eot、ttf、svg、woff 和 woff2 文件以及 CSS 片段
一个无忧的自主托管 Google 字体的方式。获取 eot、ttf、svg、woff 和 woff2 文件以及 CSS 片段
A Hassle-Free Way to Self-Host Google Fonts
Help me keep this service alive by sponsoring me. Thank you. ❤️
This service might be handy if you want to host a specific Google font on your own server:
.eot, .woff, .woff2, .svg, .ttf font file formats download (zipped).I provide prebuilt Docker images via GitHub Packages. You can use them as follows:
# See https://developers.google.com/fonts/docs/developer_api for creating your own API-Key.
docker run -e GOOGLE_FONTS_API_KEY=<YOUR-API-KEY> -p 8080:8080 ghcr.io/majodev/google-webfonts-helper:<TAG>
# Express server listening on 8080, in production mode
Do this to setup a development environment:
…
If you want to build and run your own production container locally:
# Build the production docker container (final stage)
docker build . -t <your-image-tag>
# Run it (if you have previously started the development container, halt it!)
./docker-helper.sh --halt
docker run -e GOOGLE_FONTS_API_KEY=<YOUR-API-KEY> -p 8080:8080 <your-image-tag>
# Express server listening on 8080, in production mode
To mitigate security issues especially with the projects' deprecated dependencies, the final image is based on a minimal container image. It runs rootless and has no development dependencies.
The API is public, feel free to use it directly (rate-limits may apply).
/api/fontsReturns a list of all fonts, sorted by popularity. E.g. curl https://gwfh.mranftl.com/api/fonts:
[{
"id": "open-sans",
"family": "Open Sans",
"variants": ["300", "300italic", "regular", "italic", "600", "600italic", "700", "700italic", "800", "800italic"],
"subsets": ["devanagari", "greek", "latin", "cyrillic-ext", "cyrillic", "greek-ext", "vietnamese", "latin-ext"],
"category": "sans-serif",
"version": "v10",
"lastModified": "2014-10-17",
"popularity": 1,
"defSubset": "latin",
"defVariant": "regular"
} [...]
]
/api/fonts/[id]?subsets=latin,latin-extReturns a font with urls to the actual font files google's servers. subsets is optional (will serve the defSubset if unspecified). E.g. curl "https://gwfh.mranftl.com/api/fonts/modern-antiqua?subsets=latin,latin-ext" (the double quotes are important as query parameters may else be stripped!):
…
/api/fonts/[id]?download=zip&subsets=latin&formats=woff,woff2&variants=regularDownload a zipped archive with all .eot, .woff, .woff2, .svg, .ttf files of a specified font. The query parameters formats and variants are optional (includes everything if no filtering is applied). is E.g. curl -o fontfiles.zip "https://gwfh.mranftl.com/api/fonts/lato?download=zip&subsets=latin,latin-ext&variants=regular,700&formats=woff" (the double quotes are important as query parameters may else be stripped!)
2025:
node:22 for the final image.2024:
node:20 for the final image.2023:
/server was fully refactored/modernized (async/await) and now compiles with TypeScript.node:18 for the final image./client can still be considered very legacy Angular code.2022:
This service was mostly on life-support, most of its code and dependencies can be considered deprecated. The current docker image wrapping [email protected] runs rootless and is hopefully enough to keep the bandits out. API attack surface should be minimal anyways.
2014:
This service was originally a prototype I've created to get familiar with Angular and Express. All magic by generator-angular-fullstack. See my note here.
Idea originally by Clemens Lang who created an awesome bash script to download Google fonts in all formats.
(c) Mario Ranftl MIT License
暂无开放 Issues,或尚未同步最近议题。