{
  "_id": "6aca7a0efe5cc25786e89dbe",
  "Package": "vellum",
  "Title": "Low-Level Graphics with Device-Independent Layout and Queryable\nScenes",
  "Version": "0.7.0.9000",
  "Authors@R": "person(\"David\", \"Schoch\", , \"david.schoch@cynkra.com\", role = c(\"aut\", \"cre\"))",
  "Description": "A grid-like low-level graphics system for R. Text metrics\nand layout are resolved without a graphics device, so one\nsolved scene renders to PNG, SVG, or PDF with the same\ngeometry, and the finished scene can report that geometry back\nelement by element (a data key and a resolved device-pixel box)\nor be queried by point. The scene graph, unit/layout engine,\nand rendering run in a Rust backend.",
  "License": "MIT + file LICENSE",
  "URL": "https://github.com/r-vellum/vellum,\nhttps://r-vellum.github.io/vellum/,\nhttps://schochastics.r-universe.dev/vellum",
  "BugReports": "https://github.com/r-vellum/vellum/issues",
  "Encoding": "UTF-8",
  "Roxygen": "list(markdown = TRUE)",
  "RoxygenNote": "8.0.0.9000",
  "Config/rextendr/version": "0.5.0",
  "SystemRequirements": "Cargo (Rust's package manager), rustc >= 1.92.0, xz",
  "VignetteBuilder": "knitr",
  "Config/testthat/edition": "3",
  "Collate": "'gpar.R' 'viewport.R' 'grob.R' 'api.R' 'analysis.R'\n'animate.R' 'datashade.R' 'debug.R' 'device.R'\n'extendr-wrappers.R' 'fonts.R' 'geometry2.R' 'lint.R'\n'output.R' 'paint.R' 'pick.R' 'place.R' 'scene-model.R'\n'serialize.R' 'spread.R' 'style.R' 'text.R' 'unit.R'\n'vellum-package.R' 'zzz.R'",
  "Config/pak/sysreqs": "libfontconfig1-dev libfreetype6-dev libfribidi-dev\nlibharfbuzz-dev libicu-dev xz-utils libclang-dev",
  "Repository": "https://schochastics.r-universe.dev",
  "Date/Publication": "2026-09-03 17:09:11 UTC",
  "RemoteUrl": "https://github.com/r-vellum/vellum",
  "RemoteRef": "HEAD",
  "RemoteSha": "51f18676989ec8cdb4c4a401a900106b247a0adb",
  "NeedsCompilation": "yes",
  "Packaged": {
    "Date": "2026-10-10 16:36:16 UTC",
    "User": "root"
  },
  "Author": "David Schoch [aut, cre]",
  "Maintainer": "David Schoch <david.schoch@cynkra.com>",
  "_user": "schochastics",
  "_type": "src",
  "_file": "vellum_0.7.0.9000.tar.gz",
  "_fileid": "https://r2.ropensci.org/ff153f5f31862e20904e1b28d22412abbb7345bad67102a7797946ee43c87e23",
  "_filesize": 10578712,
  "_sha256": "ff153f5f31862e20904e1b28d22412abbb7345bad67102a7797946ee43c87e23",
  "_expires": "2027-01-18T17:46:51.000Z",
  "_created": "2026-10-10T16:36:16.000Z",
  "_published": "2026-10-10T17:46:54.380Z",
  "_buildurl": "https://github.com/r-universe/schochastics/actions/runs/38067892369",
  "_status": "success",
  "_host": "GitHub-Actions",
  "_jobs": [
    {
      "job": 114260961959,
      "time": 333,
      "config": "linux-devel-arm64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "11675558227"
    },
    {
      "job": 114260961926,
      "time": 397,
      "config": "linux-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "11675731993"
    },
    {
      "job": 114260961929,
      "time": 328,
      "config": "linux-release-arm64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "11676441288"
    },
    {
      "job": 114260962013,
      "time": 366,
      "config": "linux-release-x86_64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "11675598280"
    },
    {
      "job": 114260961928,
      "time": 327,
      "config": "macos-oldrel-arm64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "11677109624"
    },
    {
      "job": 114260961881,
      "time": 703,
      "config": "macos-oldrel-x86_64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "11675519135"
    },
    {
      "job": 114260962002,
      "time": 364,
      "config": "macos-release-arm64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "11677631428"
    },
    {
      "job": 114260961880,
      "time": 556,
      "config": "macos-release-x86_64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "11676447686"
    },
    {
      "job": 114259261546,
      "time": 515,
      "config": "source",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "11675796397"
    },
    {
      "job": 114260961846,
      "time": 237,
      "config": "wasm-release",
      "r": "4.6.0",
      "check": "FAIL",
      "artifact": ""
    },
    {
      "job": 114260961971,
      "time": 589,
      "config": "windows-devel-arm64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "11675473908"
    },
    {
      "job": 114260961910,
      "time": 632,
      "config": "windows-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "11676068306"
    },
    {
      "job": 114260961975,
      "time": 396,
      "config": "windows-oldrel-x86_64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "11675457353"
    },
    {
      "job": 114260962007,
      "time": 681,
      "config": "windows-release-arm64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "11676381840"
    },
    {
      "job": 114260961969,
      "time": 577,
      "config": "windows-release-x86_64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "11675968364"
    }
  ],
  "_upstream": "https://github.com/r-vellum/vellum",
  "_commit": {
    "id": "51f18676989ec8cdb4c4a401a900106b247a0adb",
    "author": "David Schoch <david@schochastics.net>",
    "committer": "David Schoch <david@schochastics.net>",
    "message": "dev version\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>\n",
    "time": 1788455351
  },
  "_maintainer": {
    "name": "David Schoch",
    "email": "david.schoch@cynkra.com",
    "login": "schochastics",
    "mastodon": "@schochastics@fosstodon.org",
    "bluesky": "@schochastics.net",
    "description": "Data Scientist/DevOps Engineer at cynkra and #RStats developer",
    "uuid": 17147355
  },
  "_distro": "resolute",
  "_registered": true,
  "_dependencies": [
    {
      "package": "R",
      "version": ">= 4.2",
      "role": "Depends"
    },
    {
      "package": "cli",
      "role": "Imports"
    },
    {
      "package": "grDevices",
      "role": "Imports"
    },
    {
      "package": "grid",
      "role": "Imports"
    },
    {
      "package": "S7",
      "role": "Imports"
    },
    {
      "package": "systemfonts",
      "role": "Imports"
    },
    {
      "package": "textshaping",
      "role": "Imports"
    },
    {
      "package": "vctrs",
      "role": "Imports"
    },
    {
      "package": "jsonlite",
      "role": "Suggests"
    },
    {
      "package": "testthat",
      "version": ">= 3.0.0",
      "role": "Suggests"
    },
    {
      "package": "withr",
      "role": "Suggests"
    },
    {
      "package": "ggplot2",
      "role": "Suggests"
    },
    {
      "package": "knitr",
      "role": "Suggests"
    },
    {
      "package": "png",
      "role": "Suggests"
    },
    {
      "package": "base64enc",
      "role": "Suggests"
    },
    {
      "package": "rmarkdown",
      "role": "Suggests"
    },
    {
      "package": "xml2",
      "role": "Suggests"
    },
    {
      "package": "magick",
      "role": "Suggests"
    }
  ],
  "_owner": "r-vellum",
  "_selfowned": true,
  "_usedby": 3,
  "_updates": [
    {
      "week": "2026-26",
      "n": 68
    },
    {
      "week": "2026-27",
      "n": 26
    },
    {
      "week": "2026-28",
      "n": 23
    },
    {
      "week": "2026-29",
      "n": 26
    },
    {
      "week": "2026-30",
      "n": 6
    },
    {
      "week": "2026-31",
      "n": 44
    },
    {
      "week": "2026-32",
      "n": 7
    },
    {
      "week": "2026-34",
      "n": 4
    },
    {
      "week": "2026-36",
      "n": 5
    }
  ],
  "_tags": [
    {
      "name": "v0.1.0",
      "date": "2026-07-07"
    },
    {
      "name": "v0.1.1",
      "date": "2026-07-08"
    },
    {
      "name": "v0.2.0",
      "date": "2026-07-10"
    },
    {
      "name": "v0.3.0",
      "date": "2026-07-15"
    },
    {
      "name": "v0.4.0",
      "date": "2026-07-16"
    },
    {
      "name": "v0.5.0",
      "date": "2026-07-20"
    },
    {
      "name": "v0.5.1",
      "date": "2026-07-21"
    },
    {
      "name": "v0.6.0",
      "date": "2026-07-31"
    },
    {
      "name": "v0.6.1",
      "date": "2026-07-31"
    },
    {
      "name": "v0.6.2",
      "date": "2026-07-31"
    },
    {
      "name": "v0.6.3",
      "date": "2026-07-31"
    },
    {
      "name": "v0.6.4",
      "date": "2026-07-31"
    },
    {
      "name": "v0.6.5",
      "date": "2026-07-31"
    },
    {
      "name": "v0.6.6",
      "date": "2026-08-01"
    },
    {
      "name": "v0.6.7",
      "date": "2026-08-02"
    },
    {
      "name": "v0.6.8",
      "date": "2026-08-04"
    },
    {
      "name": "v0.6.9",
      "date": "2026-08-23"
    },
    {
      "name": "v0.7.0",
      "date": "2026-09-03"
    }
  ],
  "_topics": [
    "data-visualization",
    "dataviz",
    "extendr",
    "graphics",
    "rust",
    "scene-graph",
    "cargo"
  ],
  "_stars": 24,
  "_contributors": [
    {
      "user": "schochastics",
      "count": 210,
      "uuid": 17147355
    }
  ],
  "_userbio": {
    "uuid": 17147355,
    "type": "user",
    "name": "David Schoch",
    "followers": 470,
    "description": "Data Scientist/DevOps Engineer at cynkra and #RStats developer"
  },
  "_downloads": {
    "count": 0,
    "source": "https://cranlogs.r-pkg.org/downloads/total/last-month/vellum"
  },
  "_devurl": "https://github.com/r-vellum/vellum",
  "_pkgdown": "https://r-vellum.github.io/vellum/",
  "_searchresults": 56,
  "_cargo": true,
  "_rbuild": "4.6.1",
  "_assets": [
    "extra/citation.cff",
    "extra/citation.html",
    "extra/citation.json",
    "extra/citation.txt",
    "extra/contents.json",
    "extra/manual.pdf",
    "extra/NEWS.html",
    "extra/NEWS.txt",
    "extra/readme.html",
    "extra/readme.md",
    "extra/vellum.html",
    "LICENSE"
  ],
  "_cranurl": false,
  "_exports": [
    "as_mask",
    "as_scene_spec",
    "as_vellum",
    "as_vellum_scene",
    "bezier_grob",
    "circle_grob",
    "contour_grob",
    "datashade",
    "datashade_lines",
    "datashade_segments",
    "describe",
    "display",
    "draw",
    "dynspread",
    "edit_node",
    "element_geometry",
    "font_check",
    "font_pin",
    "from_scene_spec",
    "get_node",
    "grid_layout",
    "grobheight",
    "grobwidth",
    "hexagon_grob",
    "hit_test",
    "is_unit",
    "linear_gradient",
    "lines_grob",
    "loop_grob",
    "md",
    "node_names",
    "path_grob",
    "pdf_pages",
    "points_grob",
    "polygon_grob",
    "pop",
    "profile_render",
    "push",
    "radial_gradient",
    "raster_grob",
    "rect_grob",
    "render",
    "render_all",
    "render_grid",
    "roundrect_grob",
    "scene_diff",
    "scene_fonts",
    "scene_hash",
    "scene_inset",
    "scene_model",
    "scene_pdf",
    "scene_png",
    "scene_raster",
    "scene_read",
    "scene_stats",
    "scene_svg",
    "scene_write",
    "sector_grob",
    "segments_grob",
    "sketch",
    "spline_grob",
    "spread",
    "stroke_to_path",
    "style",
    "svg_grob",
    "text_grob",
    "text_path_grob",
    "vl_arrow",
    "vl_buffer",
    "vl_clear_render_cache",
    "vl_contour",
    "vl_convert",
    "vl_empty_region",
    "vl_gpar",
    "vl_hatch",
    "vl_hull",
    "vl_lint",
    "vl_lint_assert",
    "vl_lint_finding",
    "vl_lint_overlay",
    "vl_lint_rule",
    "vl_lint_rules",
    "vl_nearest",
    "vl_path_op",
    "vl_pattern",
    "vl_place",
    "vl_render_animation",
    "vl_repel",
    "vl_scene",
    "vl_shadow",
    "vl_strheight",
    "vl_strwidth",
    "vl_svg_path",
    "vl_unit",
    "vl_viewport",
    "why_size"
  ],
  "_help": [
    {
      "page": "as_mask",
      "title": "Masks",
      "topics": [
        "as_mask"
      ]
    },
    {
      "page": "as_scene_spec",
      "title": "Convert a scene to and from a plain list",
      "topics": [
        "as_scene_spec",
        "from_scene_spec"
      ]
    },
    {
      "page": "as_vellum",
      "title": "Render grid graphics (ggplot2 / lattice / grid) through vellum",
      "topics": [
        "as_vellum",
        "render_grid"
      ]
    },
    {
      "page": "as_vellum_scene",
      "title": "Coerce an object to a vellum scene",
      "topics": [
        "as_vellum_scene"
      ]
    },
    {
      "page": "datashade",
      "title": "Aggregate-then-shade a large point cloud (datashader-style)",
      "topics": [
        "datashade"
      ]
    },
    {
      "page": "datashade_lines",
      "title": "Aggregate-then-shade dense lines and segments (datashader-style)",
      "topics": [
        "datashade_lines",
        "datashade_segments"
      ]
    },
    {
      "page": "describe",
      "title": "Set a scene's accessibility name and description",
      "topics": [
        "describe"
      ]
    },
    {
      "page": "display",
      "title": "Display a scene in the active graphics device",
      "topics": [
        "display"
      ]
    },
    {
      "page": "dynspread",
      "title": "Dynamically spread a raster grob to a target density",
      "topics": [
        "dynspread"
      ]
    },
    {
      "page": "element_geometry",
      "title": "The true geometry of a scene's addressable elements",
      "topics": [
        "element_geometry"
      ]
    },
    {
      "page": "font_pin",
      "title": "Pin a scene's fonts, and check them later",
      "topics": [
        "font_check",
        "font_pin"
      ]
    },
    {
      "page": "gradients",
      "title": "Gradient fills",
      "topics": [
        "gradients",
        "linear_gradient",
        "radial_gradient"
      ]
    },
    {
      "page": "grob",
      "title": "Graphical objects (grobs)",
      "topics": [
        "bezier_grob",
        "circle_grob",
        "grob",
        "hexagon_grob",
        "lines_grob",
        "loop_grob",
        "path_grob",
        "points_grob",
        "polygon_grob",
        "raster_grob",
        "rect_grob",
        "roundrect_grob",
        "sector_grob",
        "segments_grob",
        "spline_grob",
        "text_grob"
      ]
    },
    {
      "page": "grobwidth",
      "title": "Size a unit by a grob's extent",
      "topics": [
        "grobheight",
        "grobwidth"
      ]
    },
    {
      "page": "hit_test",
      "title": "Hit-test a scene",
      "topics": [
        "hit_test"
      ]
    },
    {
      "page": "md",
      "title": "Rich-text labels (markdown subset)",
      "topics": [
        "md"
      ]
    },
    {
      "page": "node_names",
      "title": "Inspect and edit a scene by node name",
      "topics": [
        "edit_node",
        "get_node",
        "node_names"
      ]
    },
    {
      "page": "pdf_pages",
      "title": "Write several scenes as the pages of one PDF",
      "topics": [
        "pdf_pages"
      ]
    },
    {
      "page": "profile_render",
      "title": "Where a scene spends its render time",
      "topics": [
        "profile_render"
      ]
    },
    {
      "page": "render_all",
      "title": "Render many scenes in parallel",
      "topics": [
        "render_all"
      ]
    },
    {
      "page": "scene_diff",
      "title": "What changed between two scenes",
      "topics": [
        "scene_diff"
      ]
    },
    {
      "page": "scene_fonts",
      "title": "Which fonts a scene actually used",
      "topics": [
        "scene_fonts"
      ]
    },
    {
      "page": "scene_hash",
      "title": "A content fingerprint for a scene",
      "topics": [
        "scene_hash"
      ]
    },
    {
      "page": "scene_inset",
      "title": "Inset one scene inside another",
      "topics": [
        "scene_inset"
      ]
    },
    {
      "page": "scene_model",
      "title": "A serializable, per-element model of a scene",
      "topics": [
        "scene_model"
      ]
    },
    {
      "page": "scene_png",
      "title": "Render a scene to PNG or PDF bytes",
      "topics": [
        "scene_pdf",
        "scene_png"
      ]
    },
    {
      "page": "scene_raster",
      "title": "Read a rendered scene back as pixels",
      "topics": [
        "scene_raster"
      ]
    },
    {
      "page": "scene_stats",
      "title": "Ink and overplotting statistics for a scene",
      "topics": [
        "scene_stats"
      ]
    },
    {
      "page": "scene_svg",
      "title": "Render a scene to an SVG string",
      "topics": [
        "scene_svg"
      ]
    },
    {
      "page": "scene_write",
      "title": "Write and read a scene",
      "topics": [
        "scene_read",
        "scene_write"
      ]
    },
    {
      "page": "sketch",
      "title": "Hand-drawn (\"sketch\") rendering",
      "topics": [
        "sketch"
      ]
    },
    {
      "page": "spread",
      "title": "Spread (dilate) the pixels of a raster grob",
      "topics": [
        "spread"
      ]
    },
    {
      "page": "stroke_to_path",
      "title": "Freeze a stroke into a fillable outline",
      "topics": [
        "stroke_to_path"
      ]
    },
    {
      "page": "style",
      "title": "Reusable style classes",
      "topics": [
        "style"
      ]
    },
    {
      "page": "text_path_grob",
      "title": "Text set along a path",
      "topics": [
        "text_path_grob"
      ]
    },
    {
      "page": "vl_arrow",
      "title": "Arrowheads",
      "topics": [
        "vl_arrow"
      ]
    },
    {
      "page": "vl_buffer",
      "title": "Buffer a polygon outward",
      "topics": [
        "vl_buffer"
      ]
    },
    {
      "page": "vl_clear_render_cache",
      "title": "Clear the render cache",
      "topics": [
        "vl_clear_render_cache"
      ]
    },
    {
      "page": "vl_contour",
      "title": "Contour lines from a grid",
      "topics": [
        "contour_grob",
        "vl_contour"
      ]
    },
    {
      "page": "vl_convert",
      "title": "Convert a unit to another unit, in a scene's context",
      "topics": [
        "vl_convert"
      ]
    },
    {
      "page": "vl_empty_region",
      "title": "Find the largest empty rectangle in a scene",
      "topics": [
        "vl_empty_region"
      ]
    },
    {
      "page": "vl_gpar",
      "title": "Graphical parameters",
      "topics": [
        "vl_gpar"
      ]
    },
    {
      "page": "vl_hatch",
      "title": "Hatch fill",
      "topics": [
        "vl_hatch"
      ]
    },
    {
      "page": "vl_hull",
      "title": "Hull of a point set",
      "topics": [
        "vl_hull"
      ]
    },
    {
      "page": "vl_lint",
      "title": "Check a scene for likely mistakes",
      "topics": [
        "vl_lint"
      ]
    },
    {
      "page": "vl_lint_assert",
      "title": "Fail on lint findings",
      "topics": [
        "vl_lint_assert"
      ]
    },
    {
      "page": "vl_lint_finding",
      "title": "Build a lint finding",
      "topics": [
        "vl_lint_finding"
      ]
    },
    {
      "page": "vl_lint_overlay",
      "title": "Draw lint findings onto the scene",
      "topics": [
        "vl_lint_overlay"
      ]
    },
    {
      "page": "vl_lint_rule",
      "title": "Register a lint rule",
      "topics": [
        "vl_lint_rule",
        "vl_lint_rules"
      ]
    },
    {
      "page": "vl_nearest",
      "title": "Find the marks nearest a point, by true geometry",
      "topics": [
        "vl_nearest"
      ]
    },
    {
      "page": "vl_path_op",
      "title": "Boolean operations on paths",
      "topics": [
        "vl_path_op"
      ]
    },
    {
      "page": "vl_pattern",
      "title": "Tiling-pattern fills",
      "topics": [
        "vl_pattern"
      ]
    },
    {
      "page": "vl_place",
      "title": "Move labels so they stop overlapping",
      "topics": [
        "vl_place",
        "vl_repel"
      ]
    },
    {
      "page": "vl_render_animation",
      "title": "Render a keyframe animation",
      "topics": [
        "vl_render_animation"
      ]
    },
    {
      "page": "vl_scene",
      "title": "Build and render a scene",
      "topics": [
        "draw",
        "pop",
        "push",
        "render",
        "vl_scene"
      ]
    },
    {
      "page": "vl_shadow",
      "title": "Drop shadow for a viewport group",
      "topics": [
        "vl_shadow"
      ]
    },
    {
      "page": "vl_strwidth",
      "title": "Measure text",
      "topics": [
        "vl_strheight",
        "vl_strwidth"
      ]
    },
    {
      "page": "vl_svg_path",
      "title": "SVG path data as scene geometry",
      "topics": [
        "svg_grob",
        "vl_svg_path"
      ]
    },
    {
      "page": "vl_unit",
      "title": "Units of measurement",
      "topics": [
        "is_unit",
        "vl_unit"
      ]
    },
    {
      "page": "vl_viewport",
      "title": "Viewports and layouts",
      "topics": [
        "grid_layout",
        "vl_viewport"
      ]
    },
    {
      "page": "why_size",
      "title": "Explain why a node has its resolved size",
      "topics": [
        "why_size"
      ]
    }
  ],
  "_pkglogo": "https://github.com/r-vellum/vellum/raw/HEAD/man/figures/logo.png",
  "_readme": "https://github.com/r-vellum/vellum/raw/HEAD/README.md",
  "_rundeps": [
    "base64enc",
    "cli",
    "cpp11",
    "glue",
    "jsonlite",
    "lifecycle",
    "rlang",
    "S7",
    "stringi",
    "systemfonts",
    "textshaping",
    "vctrs"
  ],
  "_vignettes": [
    {
      "source": "accessible-output.Rmd",
      "filename": "accessible-output.html",
      "title": "Accessible output, and fonts you can trust",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Marks that mean something",
        "Roles",
        "Two things this does not change",
        "Fonts you can trust",
        "What it is for",
        "What it deliberately is not",
        "Still missing: selectable, faithful SVG text",
        "Where to go next"
      ],
      "created": "2026-07-31 08:34:04",
      "modified": "2026-08-03 19:53:22",
      "commits": 2
    },
    {
      "source": "retained-mode.Rmd",
      "filename": "retained-mode.html",
      "title": "Asking a scene what it drew: read-back, picking, and editing",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Naming nodes",
        "Editing a node",
        "Hit-testing",
        "A per-element model of the scene",
        "Every mark family can be keyed",
        "Hit-testing that respects the shape",
        "For a host that cannot ask",
        "Why this matters"
      ],
      "created": "2026-07-05 18:15:36",
      "modified": "2026-09-03 15:52:13",
      "commits": 9
    },
    {
      "source": "output-formats.Rmd",
      "filename": "output-formats.html",
      "title": "Choosing an output format",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Still pictures",
        "Animation",
        "Documents and batches",
        "Formats vellum does not write",
        "Where to go next"
      ],
      "created": "2026-07-31 08:55:55",
      "modified": "2026-07-31 08:55:55",
      "commits": 1
    },
    {
      "source": "coming-from-grid.Rmd",
      "filename": "coming-from-grid.html",
      "title": "Coming from grid",
      "engine": "knitr::rmarkdown",
      "headings": [
        "The concept map",
        "Things grid has no equivalent for",
        "Side by side",
        "What is different, and why",
        "The builder is functional, not stateful",
        "Metrics are eager, so there is no draw-time hook protocol",
        "Units are records, not expression trees",
        "The tree is a value, and it can report geometry",
        "vl_gpar inherits, but there is no cascade",
        "Do I have to rewrite my grid code?"
      ],
      "created": "2026-07-05 18:15:36",
      "modified": "2026-07-30 20:03:54",
      "commits": 5
    },
    {
      "source": "datashading.Rmd",
      "filename": "datashading.html",
      "title": "Datashading: millions of points, honestly",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Generating an orbit",
        "Shading in one call",
        "Why aggregation wins",
        "Mapping density to colour",
        "Lining up with data axes",
        "A gallery",
        "Lines: dense timeseries",
        "Segments: network edges",
        "Keeping thin marks visible: spread",
        "Recap",
        "In a grammar"
      ],
      "created": "2026-07-05 18:26:07",
      "modified": "2026-08-03 13:25:57",
      "commits": 6
    },
    {
      "source": "geometry-operations.Rmd",
      "filename": "geometry-operations.html",
      "title": "Geometry operations: booleans, contours, imported paths",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Boolean operations",
        "Why not just clip?",
        "Holes",
        "Contours",
        "Over a datashaded base",
        "SVG path data",
        "Because it is geometry",
        "Where to go next"
      ],
      "created": "2026-07-31 07:46:17",
      "modified": "2026-08-03 13:25:57",
      "commits": 3
    },
    {
      "source": "vellum.Rmd",
      "filename": "vellum.html",
      "title": "Get started",
      "engine": "knitr::rmarkdown",
      "headings": [
        "A first scene",
        "Building a scene: push, draw, pop",
        "Rendering to a file",
        "Where to go next"
      ],
      "created": "2026-07-05 18:15:36",
      "modified": "2026-07-30 20:03:54",
      "commits": 5
    },
    {
      "source": "inspecting-scenes.Rmd",
      "filename": "inspecting-scenes.html",
      "title": "Inspecting a scene: linting, coverage, profiling",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Why this can exist here",
        "vl_lint(): static analysis for graphics",
        "Seeing the findings",
        "The rules that ship",
        "Adding your own rules",
        "scene_stats(): how crowded is this, really?",
        "profile_render(): where the time goes",
        "Putting it in a test",
        "Where to go next"
      ],
      "created": "2026-07-30 20:03:54",
      "modified": "2026-08-03 19:53:22",
      "commits": 3
    },
    {
      "source": "placement.Rmd",
      "filename": "placement.html",
      "title": "Placement: repelling labels, finding room, outlining groups",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Repelling labels",
        "It does not care what coordinate system you used",
        "The solve on its own",
        "How it works, and where it gives up",
        "Where is there room?",
        "Outlining a group",
        "Where to go next"
      ],
      "created": "2026-07-31 07:10:09",
      "modified": "2026-08-03 19:53:22",
      "commits": 4
    },
    {
      "source": "render-quality.Rmd",
      "filename": "render-quality.html",
      "title": "Render quality: accessibility, crisp edges, group effects",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Colour-vision simulation",
        "Crisp gridlines",
        "Group effects",
        "Where to go next"
      ],
      "created": "2026-07-30 20:03:54",
      "modified": "2026-08-03 19:53:22",
      "commits": 4
    },
    {
      "source": "grid-interop.Rmd",
      "filename": "grid-interop.html",
      "title": "Rendering grid and ggplot2 through vellum",
      "engine": "knitr::rmarkdown",
      "headings": [
        "How it works",
        "A grid grob tree",
        "A ggplot2 plot",
        "When to use interop versus the native API"
      ],
      "created": "2026-07-05 18:15:36",
      "modified": "2026-07-09 16:07:05",
      "commits": 3
    },
    {
      "source": "scenes-as-values.Rmd",
      "filename": "scenes-as-values.html",
      "title": "Scenes as values: saving, comparing, composing",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Saving a scene",
        "Fingerprinting",
        "Comparing",
        "Composing",
        "Where to go next"
      ],
      "created": "2026-07-30 21:03:12",
      "modified": "2026-07-30 21:03:12",
      "commits": 1
    },
    {
      "source": "scene-contract.Rmd",
      "filename": "scene-contract.html",
      "title": "The scene contract: what vellumplot and vellumwidget depend on",
      "engine": "knitr::rmarkdown",
      "headings": [
        "The seam, in one picture",
        "Carrying identity on a grob",
        "scene_model(): the per-element table",
        "elements",
        "panels",
        "The meta key vocabulary",
        "scene_svg(): the emitted attributes",
        "Pannable panels",
        "Accessibility",
        "Invariants the contract guarantees",
        "For contributors"
      ],
      "created": "2026-07-07 19:41:21",
      "modified": "2026-07-30 20:03:54",
      "commits": 9
    },
    {
      "source": "scene-and-paint.Rmd",
      "filename": "scene-and-paint.html",
      "title": "The scene graph and the paint model",
      "engine": "knitr::rmarkdown",
      "headings": [
        "The scene graph",
        "Units",
        "The paint model",
        "Gradients",
        "Patterns",
        "Hatching",
        "Masks and group opacity",
        "Stroking with a gradient",
        "Dash phase",
        "Per-segment style",
        "Filling a line",
        "A width that varies",
        "The same taper, resolved at render",
        "A note on dense paths",
        "Recap"
      ],
      "created": "2026-07-05 18:15:36",
      "modified": "2026-09-03 16:44:59",
      "commits": 12
    },
    {
      "source": "typography.Rmd",
      "filename": "typography.html",
      "title": "Typography: layout, halos and OpenType features",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Text that fits a box",
        "Alignment",
        "Auto-fit",
        "Text on a path",
        "Halos",
        "OpenType features",
        "Measurement follows features",
        "Both together"
      ],
      "created": "2026-07-30 18:31:13",
      "modified": "2026-08-03 13:25:57",
      "commits": 3
    }
  ],
  "_score": 7.911945550988157,
  "_indexed": true,
  "_nocasepkg": "vellum",
  "_universes": [
    "schochastics",
    "r-vellum"
  ],
  "_binaries": [
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.7.0.9000",
      "date": "2026-10-10T16:40:24.000Z",
      "distro": "resolute",
      "arch": "aarch64",
      "commit": "51f18676989ec8cdb4c4a401a900106b247a0adb",
      "fileid": "https://r2.ropensci.org/eb8e8a1586e5b136a64ed9966b44388f3521a44b916c641034dc84828802a3b7",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/schochastics/actions/runs/38067892369"
    },
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.7.0.9000",
      "date": "2026-10-10T16:40:48.000Z",
      "distro": "resolute",
      "arch": "x86_64",
      "commit": "51f18676989ec8cdb4c4a401a900106b247a0adb",
      "fileid": "https://r2.ropensci.org/cc163997993c2ff905925ddfcc3621e39d0a457edd349ee799186ace7e612241",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/schochastics/actions/runs/38067892369"
    },
    {
      "r": "4.6.1",
      "os": "linux",
      "version": "0.7.0.9000",
      "date": "2026-10-10T16:40:22.000Z",
      "distro": "resolute",
      "arch": "aarch64",
      "commit": "51f18676989ec8cdb4c4a401a900106b247a0adb",
      "fileid": "https://r2.ropensci.org/b6cf475412a4ee7178491c6f1f98cb1ce9b4bc11fc6a94bcb6912cd63d2092f5",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/schochastics/actions/runs/38067892369"
    },
    {
      "r": "4.6.1",
      "os": "linux",
      "version": "0.7.0.9000",
      "date": "2026-10-10T16:40:38.000Z",
      "distro": "resolute",
      "arch": "x86_64",
      "commit": "51f18676989ec8cdb4c4a401a900106b247a0adb",
      "fileid": "https://r2.ropensci.org/ec98caad33477350c905f04530eb374802ab82af881f441586440d8833957021",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/schochastics/actions/runs/38067892369"
    },
    {
      "r": "4.5.3",
      "os": "mac",
      "version": "0.7.0.9000",
      "date": "2026-10-10T17:41:08.000Z",
      "arch": "aarch64",
      "commit": "51f18676989ec8cdb4c4a401a900106b247a0adb",
      "fileid": "https://r2.ropensci.org/2cef95da3f67eb9c405fba5c7d91ef4810cb9c36f65acc032a2d5543343fd7f8",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/schochastics/actions/runs/38067892369"
    },
    {
      "r": "4.5.3",
      "os": "mac",
      "version": "0.7.0.9000",
      "date": "2026-10-10T16:41:26.000Z",
      "arch": "x86_64",
      "commit": "51f18676989ec8cdb4c4a401a900106b247a0adb",
      "fileid": "https://r2.ropensci.org/87556519c505ee58e9d605024d3e6443919bd6f5388a5e898c5ac84a5414bdb5",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/schochastics/actions/runs/38067892369"
    },
    {
      "r": "4.6.1",
      "os": "mac",
      "version": "0.7.0.9000",
      "date": "2026-10-10T17:41:32.000Z",
      "arch": "aarch64",
      "commit": "51f18676989ec8cdb4c4a401a900106b247a0adb",
      "fileid": "https://r2.ropensci.org/9ebd485bbc876779fc180701bbcefb3b9436d5685a5e18ed63727f25b2fc1f62",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/schochastics/actions/runs/38067892369"
    },
    {
      "r": "4.6.1",
      "os": "mac",
      "version": "0.7.0.9000",
      "date": "2026-10-10T16:41:34.000Z",
      "arch": "x86_64",
      "commit": "51f18676989ec8cdb4c4a401a900106b247a0adb",
      "fileid": "https://r2.ropensci.org/86e12bf3f405d1ba5853c419512d30cbf440afd382d1bd5424568f728dcfa22a",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/schochastics/actions/runs/38067892369"
    },
    {
      "r": "4.7.0",
      "os": "win",
      "version": "0.7.0.9000",
      "date": "2026-10-10T16:41:41.000Z",
      "arch": "aarch64",
      "commit": "51f18676989ec8cdb4c4a401a900106b247a0adb",
      "fileid": "https://r2.ropensci.org/9d2ac1b5098ab435d50d62ec312355105f0f842013872e49cfaf3f066dc98a80",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/schochastics/actions/runs/38067892369"
    },
    {
      "r": "4.7.0",
      "os": "win",
      "version": "0.7.0.9000",
      "date": "2026-10-10T16:39:49.000Z",
      "arch": "x86_64",
      "commit": "51f18676989ec8cdb4c4a401a900106b247a0adb",
      "fileid": "https://r2.ropensci.org/76c8c8193bff4fc68049f02666f6754f382a309c7403b0fd9c8fb753aca10715",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/schochastics/actions/runs/38067892369"
    },
    {
      "r": "4.5.3",
      "os": "win",
      "version": "0.7.0.9000",
      "date": "2026-10-10T16:39:43.000Z",
      "arch": "x86_64",
      "commit": "51f18676989ec8cdb4c4a401a900106b247a0adb",
      "fileid": "https://r2.ropensci.org/c9cce78ad50f9ec6d557edabf84f13d0cdf7ae0bef99de3c88ecde8097702c65",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/schochastics/actions/runs/38067892369"
    },
    {
      "r": "4.6.1",
      "os": "win",
      "version": "0.7.0.9000",
      "date": "2026-10-10T16:42:54.000Z",
      "arch": "aarch64",
      "commit": "51f18676989ec8cdb4c4a401a900106b247a0adb",
      "fileid": "https://r2.ropensci.org/c360499f3cd92080b2d3931c1a7e2f323e165f930f3fc8fbe686182e7078a111",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/schochastics/actions/runs/38067892369"
    },
    {
      "r": "4.6.1",
      "os": "win",
      "version": "0.7.0.9000",
      "date": "2026-10-10T16:40:08.000Z",
      "arch": "x86_64",
      "commit": "51f18676989ec8cdb4c4a401a900106b247a0adb",
      "fileid": "https://r2.ropensci.org/3cbcd2394de38fe623f72f63a065119f2321989c24d994b261fc1065ea66cb5b",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/schochastics/actions/runs/38067892369"
    }
  ]
}