{"id":"alternativelua/plottr","name":"plottr","scope":"alternativelua","platform":"roblox","description":"A GUI graph rendering library for Roblox.","version":"0.2.0","latest":"0.2.0","versions":["0.1.0","0.2.0"],"license":"MIT","licenseRating":"safe","licenseCaveats":[],"licenseVerified":true,"dependencies":{},"integrity":"0889d78e2f1bb59382f7ee2cefafe1c97a6dda803d561464e101b0d5e514909e","likes":0,"downloads":0,"install":"forest install alternativelua/plottr","url":"https://forest.dev/p/roblox/alternativelua/plottr","files":"https://api.forest.dev/ai/package/roblox/alternativelua/plottr/files","readme":"# Plottr\n\nA GUI graph rendering library for Roblox. Client-side, no UI framework dependencies. Strictly typed (`--!strict` throughout), fully animated, and modular. Inspired by [boatbeaker/GraphModule](https://github.com/boatbeaker/GraphModule).\n\n**[Documentation and API reference →](https://alternativelua.github.io/Plottr/)**\n\n## Install\n\n```toml\n[dependencies]\nPlottr = \"alternativelua/plottr@0.2.0\"\n```\n\nOr copy `src` into your project as `ReplicatedStorage.Plottr`.\n\n## Quick start\n\n```lua\nlocal Plottr = require(ReplicatedStorage.Plottr)\n\nlocal graph = Plottr.new(containerFrame, {\n    theme = Plottr.Themes.Midnight,\n    xLabels = { \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\" },\n})\n\ngraph:setSeries({\n    { name = \"Revenue\", values = { 4200, 5100, 4800, 6900, 8400, 9600 } },\n    { name = \"Costs\", values = { 3100, 3300, 3600, 4100, 4400, 4900 }, kind = \"bar\" },\n})\n```\n\nThe graph animates in, re-renders whenever data or config changes, and redraws\non container resize. Line and bar series, gradient infill, curve smoothing,\nhover and touch tooltips, a toggleable legend, axis titles, pinned axis ranges,\nrealtime streaming, and grid dashboards — all covered in the\n[docs](https://alternativelua.github.io/Plottr/).\n\n## Module layout\n\n```\nsrc/\n├── init.luau            -- public entry point + exported types\n├── Types.luau           -- all public type definitions\n├── Themes.luau          -- theme presets + Themes.extend\n├── Graph.luau           -- graph class: layout, scheduling, orchestration\n├── GraphGroup.luau      -- grid layout for multi-graph dashboards\n├── Internal/\n│   ├── Constants.luau   -- layout metrics, text defaults, the None sentinel\n│   ├── Layout.luau      -- data summaries, y range, plot rect, x placement\n│   ├── Validate.luau    -- argument checking and config clamping\n│   ├── Scale.luau       -- nice-tick math, range mapping, value formatting\n│   ├── Smooth.luau      -- monotone cubic curve smoothing for line paths\n│   ├── Pool.luau        -- recycles a render's instances for the next one\n│   ├── Animator.luau    -- TweenService wrapper honouring AnimationConfig\n│   └── Trove.luau       -- cleanup collector\n└── Renderers/\n    ├── Axes.luau        -- grid lines, baseline, tick labels, titles\n    ├── LineRenderer.luau -- antialiased Path2D stroke + hoverable points\n    ├── AreaRenderer.luau -- gradient infill between a line and the baseline\n    └── BarRenderer.luau  -- rounded bars growing from the baseline\n```\n\n## Development\n\n```sh\naftman install       # rojo, wally, stylua, luau-lsp\nwally install        # dev dependencies (TestEZ)\nrojo serve dev.project.json\n```\n\nOpen the place in Studio and hit Play — `test/TestRunner.client.luau` runs the\nTestEZ specs and `test/Demo.client.luau` shows a live animated demo.\n\nFormat with `stylua src test`; type-check with\n`luau-lsp analyze --defs=<globalTypes.d.luau> --sourcemap=sourcemap.json src`.\nCI runs both, plus Moonwave doc extraction and a Rojo build, on every push and\npull request. The specs need a Roblox runtime, so they run in Studio.\n\nAPI documentation lives in [Moonwave](https://eryn.io/moonwave/) doc comments\nin the source; `moonwave dev` previews the site locally.\n","readmeTruncated":false}