I wanted to share an update on GGG (Guile Glyph Generator), a lightweight tool built with GNU Guile Scheme designed to generate crisp, minimalist status badges (1 to 3 parts) as SVG and PNG files. We hit v0.6.1 already :)
https://codeberg.org/jjba23/ggg
If you're tired of static, rigid badge generators, old badges in low quality PNG, or heavy JavaScript tooling for simple vector assets, GGG offers a functional, data-driven approach leveraging a custom Lisp DSL and SXML. All we need now is some community help to expand the library of available badges, and the world's READMEs will flourish.
Instead of relying on heavy browser engines or complex layout trees, GGG combines mathematical character-width estimation with standard SVG primitives using SXML (S-expressions representing XML):
- Dynamic Text Metrics: Estimates pixel widths per character based on font size and length bounds to apply optimal padding automatically.
- Geometric Precision: Renders with
shape-rendering="geometricPrecision" enabled to prioritize clean vector geometry on high-DPI displays.
- Data-Driven Declarative Specs: Simple association lists define structure, style, and vector paths.
Glyphs are defined cleanly inside Scheme modules (by default expected at (ggg config)):
Scheme
(define-module (ggg config)
#:declarative? #t)
(define my-scheme-guile-glyph
`((sections ((background . "#555")
(text . "Scheme")
(color . "#fff")
(logo . lambda))
((background . "#d0730f")
(text . "Guile")
(color . "#fff")))
(id . scheme-guile)))
;; Export your list of glyphs to render
(define ggg-glyphs
(list my-scheme-guile-glyph))
GGG includes a collection of free-licensed vector icons out of the box (Emacs, GNU, Guix, Lambda, Scala, Rust, Fish, etc.) in resources/svg-paths.
🦸🏼 Interactive REPL Workflow
Because GGG is built on Guile Scheme, you don't need to endure slow edit-save-compile-run loops.
Connected to an environment like GNU Guix + Emacs + Geiser/Arei, you get a live development feedback loop:
- Inspect, evaluate, and tweak individual badge calculation functions on the fly.
- Test new font sizing logic or custom SVG path integrations instantly inside a live REPL.
GGG is distributed under free software licenses (AGPLv3+ for code, GFDL v1.3+ for documentation).
Also, feel free to look in ./dist folder where I upload my personal generated glyphs (some might be useful to you)
If you use Guix, dependencies (guile, imagemagick) are managed seamlessly:
Bash
# Enter an ephemeral development shell
guix shell -f guix.scm
# Run GGG with your custom configuration
ggg --file ./glyphs/jjba23.scm --destination ./dist
Container images are also available on DockerHub:
docker run -v /path/to/local/glyphs:/config \
docker.io/jjba23/ggg:latest ggg --file /config/glyphs.scm --destination /config/dist
🔗 Project Links & Resources
Contributions, feedback, and pull requests are always welcome!
Happy hacking! λ