Data endpoints plus the hosted progress store and web component script.json is shaped for the component, use text, ascii, or svg for direct consumption. SVG defaults to light mode. Pass dark=true for dark mode or dark=false to stay on light.color and bg work with either mode.
/progress/v1/progress/v1/day/progress/v1/year/progress/v1/multi/progress/v1/store/progress/v1/store/{id}/progress/v1/store/{id}/progress/v1/store/{id}/progress-bar.jscurl "https://api.gru0.dev/progress/v1?value=847&max=1000"
# → 84.70valueNon-negative number,maxPositive number,unitShort label (max 32 chars),tzAny IANA timezone, auto-detected via headerproxy header → UTCformattext · ascii · json · svg · element · iframeelementstyleblocks · shades · dots · arrows · line · mosaicblocksdecimals0, 60width10, 20040showpct · value · both · nonepctlabelCustom text (max 64 chars)generatedcolorBar accent (any CSS color, SVG + element, global for multi)#6366f1bgCard background (any CSS color, SVG + element)#f8fafcdarkDark mode (true/1) or light (false/0), SVG + iframefalse (light)compactMinimal layout, removes card wrapper,no-cardRemoves card background/shadow,srcCustom JSON endpoint URL,refreshPolling interval in seconds (1,300)60barsPipe-separated bar definitions: Label:value:max[:color] (max 6 bars)required for /multiThe element format uses the <progress-bar> custom element. It loads JSON from the API and renders inside closed Shadow DOM, no site CSS can leak in.
Adapts to any theme: reads CSS custom properties (--primary, --accent, --card, --surface, --foreground, --radius, --font-mono, and more) so it blends into any site by default. Use color / bg attributes to override.
<script src="https://api.gru0.dev/progress-bar.js" defer></script>
<progress-bar value="847" max="1000" label="Sprints" unit="tasks"></progress-bar>Attributes: value, max, label, unit, tz, day, year, color, bg, compact, no-card, src (custom JSON URL), refresh (polling seconds, 1,300).
day, year, and date-range modes update the percentage in real time every second using client-side interpolation. Custom src endpoints use the refresh interval for polling.