{
  "_id": "6ace3a7da14063b82c3b197d",
  "Package": "restrictR",
  "Title": "Composable Runtime Contracts",
  "Version": "0.3.0",
  "Authors@R": "person(\"Gilles\", \"Colling\", email = \"gilles.colling051@gmail.com\",\nrole = c(\"aut\", \"cre\", \"cph\"),\ncomment = c(ORCID = \"0000-0003-3070-6066\"))",
  "Description": "Build reusable validators from small building blocks using\nthe base pipe operator. Define runtime contracts once with\nrestrict() and enforce them anywhere in code. Validators\ncompose naturally, support dependent rules via formulas, and\nproduce clear, path-aware error messages. No domain-specific\nlanguage, no operator overloading, just idiomatic R.",
  "License": "MIT + file LICENSE",
  "Language": "en-US",
  "Encoding": "UTF-8",
  "Roxygen": "list(markdown = TRUE)",
  "URL": "https://gillescolling.com/restrictR/,\nhttps://github.com/gcol33/restrictR",
  "BugReports": "https://github.com/gcol33/restrictR/issues",
  "VignetteBuilder": "knitr",
  "Config/testthat/edition": "3",
  "Config/roxygen2/version": "8.1.0",
  "Repository": "https://gcol33.r-universe.dev",
  "Date/Publication": "2026-10-10 12:14:21 UTC",
  "RemoteUrl": "https://github.com/gcol33/restrictr",
  "RemoteRef": "HEAD",
  "RemoteSha": "80094c71b2ef06eaa0be9ba06f01add14434d03b",
  "NeedsCompilation": "no",
  "Packaged": {
    "Date": "2026-10-13 13:38:27 UTC",
    "User": "root"
  },
  "Author": "Gilles Colling [aut, cre, cph] (ORCID:\n<https://orcid.org/0000-0003-3070-6066>)",
  "Maintainer": "Gilles Colling <gilles.colling051@gmail.com>",
  "_user": "gcol33",
  "_type": "src",
  "_file": "restrictR_0.3.0.tar.gz",
  "_fileid": "https://r2.ropensci.org/9e28b977d686720420bdb0c96127650a53ea14d21673ef87ffb3cc83f07520ee",
  "_filesize": 297576,
  "_sha256": "9e28b977d686720420bdb0c96127650a53ea14d21673ef87ffb3cc83f07520ee",
  "_expires": "2027-01-21T14:04:42.000Z",
  "_created": "2026-10-13T13:38:27.000Z",
  "_published": "2026-10-13T14:04:44.936Z",
  "_buildurl": "https://github.com/r-universe/gcol33/actions/runs/38406244185",
  "_status": "success",
  "_host": "GitHub-Actions",
  "_jobs": [
    {
      "job": 115327901321,
      "time": 117,
      "config": "linux-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "11817464500"
    },
    {
      "job": 115327900823,
      "time": 97,
      "config": "linux-release-x86_64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "11818688595"
    },
    {
      "job": 115327900972,
      "time": 115,
      "config": "macos-oldrel-arm64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "11820767349"
    },
    {
      "job": 115327900806,
      "time": 122,
      "config": "macos-release-arm64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "11820003307"
    },
    {
      "job": 115326677783,
      "time": 150,
      "config": "source",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "11816819640"
    },
    {
      "job": 115327900793,
      "time": 90,
      "config": "wasm-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "11819198135"
    },
    {
      "job": 115327901050,
      "time": 78,
      "config": "windows-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "11818243826"
    },
    {
      "job": 115327900954,
      "time": 98,
      "config": "windows-oldrel-x86_64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "11818983530"
    },
    {
      "job": 115327900901,
      "time": 86,
      "config": "windows-release-x86_64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "11819247850"
    }
  ],
  "_upstream": "https://github.com/gcol33/restrictr",
  "_commit": {
    "id": "80094c71b2ef06eaa0be9ba06f01add14434d03b",
    "author": "Gilles Colling <gilles.colling051@gmail.com>",
    "committer": "Gilles Colling <gilles.colling051@gmail.com>",
    "message": "docs: open the README and every vignette with the Installation section\n\nCo-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0125ATdzEWbbrr9yi1oqSP7S\n",
    "time": 1791634461
  },
  "_maintainer": {
    "name": "Gilles Colling",
    "email": "gilles.colling051@gmail.com",
    "login": "gcol33",
    "linkedin": "in/gilles-colling-0b3747306",
    "orcid": "0000-0003-3070-6066",
    "twitter": "@Gilles__Colling",
    "description": "Building tools for ecology in R, C++, and Rust.\nWhy did Microsoft have to buy it. Sadge :(",
    "uuid": 25009600
  },
  "_distro": "resolute",
  "_registered": true,
  "_dependencies": [
    {
      "package": "R",
      "version": ">= 4.1.0",
      "role": "Depends"
    },
    {
      "package": "knitr",
      "role": "Suggests"
    },
    {
      "package": "rmarkdown",
      "role": "Suggests"
    },
    {
      "package": "svglite",
      "role": "Suggests"
    },
    {
      "package": "testthat",
      "version": ">= 3.0.0",
      "role": "Suggests"
    }
  ],
  "_owner": "gcol33",
  "_selfowned": true,
  "_usedby": 0,
  "_updates": [
    {
      "week": "2026-10",
      "n": 19
    },
    {
      "week": "2026-11",
      "n": 1
    },
    {
      "week": "2026-21",
      "n": 1
    },
    {
      "week": "2026-22",
      "n": 3
    },
    {
      "week": "2026-24",
      "n": 6
    },
    {
      "week": "2026-25",
      "n": 1
    },
    {
      "week": "2026-27",
      "n": 2
    },
    {
      "week": "2026-41",
      "n": 7
    }
  ],
  "_tags": [
    {
      "name": "v0.1.0",
      "date": "2026-03-04"
    },
    {
      "name": "v0.1.2",
      "date": "2026-03-04"
    },
    {
      "name": "v0.2.0",
      "date": "2026-06-12"
    },
    {
      "name": "v0.3.0",
      "date": "2026-10-05"
    }
  ],
  "_topics": [
    "contracts",
    "runtime-checks",
    "runtime-contracts",
    "validation"
  ],
  "_stars": 7,
  "_contributors": [
    {
      "user": "gcol33",
      "count": 39,
      "uuid": 25009600
    }
  ],
  "_userbio": {
    "uuid": 25009600,
    "type": "user",
    "name": "Gilles Colling",
    "followers": 10,
    "description": "Building tools for ecology in R, C++, and Rust.\nWhy did Microsoft have to buy it. Sadge :("
  },
  "_downloads": {
    "count": 308,
    "source": "https://cranlogs.r-pkg.org/downloads/total/last-month/restrictR"
  },
  "_devurl": "https://github.com/gcol33/restrictr",
  "_pkgdown": "https://gillescolling.com/restrictR/",
  "_searchresults": 6,
  "_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/restrictR.html",
    "LICENSE"
  ],
  "_homeurl": "https://github.com/gcol33/restrictr",
  "_realowner": "gcol33",
  "_cranurl": true,
  "_releases": [
    {
      "version": "0.1.0",
      "date": "2026-03-09"
    },
    {
      "version": "0.3.0",
      "date": "2026-10-05"
    }
  ],
  "_exports": [
    "allow_null",
    "as_contract_block",
    "as_contract_text",
    "expect_invalid",
    "expect_valid",
    "fail",
    "is_valid",
    "require_any",
    "require_between",
    "require_character",
    "require_class",
    "require_col",
    "require_contains",
    "require_custom",
    "require_df",
    "require_dim",
    "require_dir_exists",
    "require_disjoint",
    "require_each",
    "require_fields",
    "require_file_exists",
    "require_finite",
    "require_function",
    "require_has_cols",
    "require_integer",
    "require_length",
    "require_length_matches",
    "require_length_max",
    "require_length_min",
    "require_levels",
    "require_logical",
    "require_named",
    "require_names",
    "require_nchar",
    "require_ncol_matches",
    "require_ncol_min",
    "require_negative",
    "require_no_na",
    "require_nonempty",
    "require_not_null",
    "require_nrow_matches",
    "require_nrow_min",
    "require_numeric",
    "require_one_of",
    "require_pattern",
    "require_positive",
    "require_readable",
    "require_scalar",
    "require_set_equal",
    "require_sorted",
    "require_unique",
    "require_unique_names",
    "require_valid",
    "require_writable",
    "restrict",
    "steps",
    "validation_errors"
  ],
  "_help": [
    {
      "page": "allow_null",
      "title": "Allow NULL",
      "concept": [
        "composition"
      ],
      "topics": [
        "allow_null"
      ]
    },
    {
      "page": "as_contract_block",
      "title": "Convert a Validator to a Multi-Line Block",
      "concept": [
        "core"
      ],
      "topics": [
        "as_contract_block"
      ]
    },
    {
      "page": "as_contract_text",
      "title": "Convert a Validator to Plain Text",
      "concept": [
        "core"
      ],
      "topics": [
        "as_contract_text"
      ]
    },
    {
      "page": "expect_invalid",
      "title": "Expect a Value to Fail a Validator",
      "concept": [
        "testthat expectations"
      ],
      "topics": [
        "expect_invalid"
      ]
    },
    {
      "page": "expect_valid",
      "title": "Expect a Value to Pass a Validator",
      "concept": [
        "testthat expectations"
      ],
      "topics": [
        "expect_valid"
      ]
    },
    {
      "page": "fail",
      "title": "Format a Validation Error",
      "concept": [
        "core"
      ],
      "topics": [
        "fail"
      ]
    },
    {
      "page": "is_valid",
      "title": "Test Whether a Value Satisfies a Validator",
      "concept": [
        "core"
      ],
      "topics": [
        "is_valid"
      ]
    },
    {
      "page": "require_any",
      "title": "Require at Least One of Several Validators",
      "concept": [
        "composition"
      ],
      "topics": [
        "require_any"
      ]
    },
    {
      "page": "require_between",
      "title": "Require Value in Range",
      "concept": [
        "value checks"
      ],
      "topics": [
        "require_between"
      ]
    },
    {
      "page": "require_character",
      "title": "Require Character Type",
      "concept": [
        "type checks"
      ],
      "topics": [
        "require_character"
      ]
    },
    {
      "page": "require_class",
      "title": "Require a Specific Class",
      "concept": [
        "type checks"
      ],
      "topics": [
        "require_class"
      ]
    },
    {
      "page": "require_col",
      "title": "Validate a Data Frame Column with a Validator",
      "concept": [
        "composition"
      ],
      "topics": [
        "require_col"
      ]
    },
    {
      "page": "require_contains",
      "title": "Require All of a Set of Values",
      "concept": [
        "value checks"
      ],
      "topics": [
        "require_contains"
      ]
    },
    {
      "page": "require_custom",
      "title": "Create a Custom Validation Step",
      "concept": [
        "core"
      ],
      "topics": [
        "require_custom"
      ]
    },
    {
      "page": "require_df",
      "title": "Require a Data Frame",
      "concept": [
        "type checks"
      ],
      "topics": [
        "require_df"
      ]
    },
    {
      "page": "require_dim",
      "title": "Require Exact Dimensions",
      "concept": [
        "structure checks"
      ],
      "topics": [
        "require_dim"
      ]
    },
    {
      "page": "require_dir_exists",
      "title": "Require Existing Directories",
      "concept": [
        "file checks"
      ],
      "topics": [
        "require_dir_exists"
      ]
    },
    {
      "page": "require_disjoint",
      "title": "Require Values Disjoint From Context",
      "concept": [
        "value checks"
      ],
      "topics": [
        "require_disjoint"
      ]
    },
    {
      "page": "require_each",
      "title": "Validate Every Element of a List",
      "concept": [
        "composition"
      ],
      "topics": [
        "require_each"
      ]
    },
    {
      "page": "require_fields",
      "title": "Validate Named Fields of a List",
      "concept": [
        "composition"
      ],
      "topics": [
        "require_fields"
      ]
    },
    {
      "page": "require_file_exists",
      "title": "Require Existing Files",
      "concept": [
        "file checks"
      ],
      "topics": [
        "require_file_exists"
      ]
    },
    {
      "page": "require_finite",
      "title": "Require Finite Values",
      "concept": [
        "missingness checks"
      ],
      "topics": [
        "require_finite"
      ]
    },
    {
      "page": "require_function",
      "title": "Require a Function",
      "concept": [
        "function checks"
      ],
      "topics": [
        "require_function"
      ]
    },
    {
      "page": "require_has_cols",
      "title": "Require Specific Columns",
      "concept": [
        "structure checks"
      ],
      "topics": [
        "require_has_cols"
      ]
    },
    {
      "page": "require_integer",
      "title": "Require Integer Values",
      "concept": [
        "type checks"
      ],
      "topics": [
        "require_integer"
      ]
    },
    {
      "page": "require_length",
      "title": "Require Specific Length",
      "concept": [
        "structure checks"
      ],
      "topics": [
        "require_length"
      ]
    },
    {
      "page": "require_length_matches",
      "title": "Require Length Matching an Expression",
      "concept": [
        "structure checks"
      ],
      "topics": [
        "require_length_matches"
      ]
    },
    {
      "page": "require_length_max",
      "title": "Require Maximum Length",
      "concept": [
        "structure checks"
      ],
      "topics": [
        "require_length_max"
      ]
    },
    {
      "page": "require_length_min",
      "title": "Require Minimum Length",
      "concept": [
        "structure checks"
      ],
      "topics": [
        "require_length_min"
      ]
    },
    {
      "page": "require_levels",
      "title": "Require Factor Levels",
      "concept": [
        "value checks"
      ],
      "topics": [
        "require_levels"
      ]
    },
    {
      "page": "require_logical",
      "title": "Require Logical Type",
      "concept": [
        "type checks"
      ],
      "topics": [
        "require_logical"
      ]
    },
    {
      "page": "require_named",
      "title": "Require Named Value",
      "concept": [
        "structure checks"
      ],
      "topics": [
        "require_named"
      ]
    },
    {
      "page": "require_names",
      "title": "Require Names",
      "concept": [
        "structure checks"
      ],
      "topics": [
        "require_names"
      ]
    },
    {
      "page": "require_nchar",
      "title": "Require String Length",
      "concept": [
        "character checks"
      ],
      "topics": [
        "require_nchar"
      ]
    },
    {
      "page": "require_ncol_matches",
      "title": "Require Column Count Matching an Expression",
      "concept": [
        "structure checks"
      ],
      "topics": [
        "require_ncol_matches"
      ]
    },
    {
      "page": "require_ncol_min",
      "title": "Require Minimum Number of Columns",
      "concept": [
        "structure checks"
      ],
      "topics": [
        "require_ncol_min"
      ]
    },
    {
      "page": "require_negative",
      "title": "Require Negative Values",
      "concept": [
        "value checks"
      ],
      "topics": [
        "require_negative"
      ]
    },
    {
      "page": "require_no_na",
      "title": "Require No NA Values",
      "concept": [
        "missingness checks"
      ],
      "topics": [
        "require_no_na"
      ]
    },
    {
      "page": "require_nonempty",
      "title": "Require Non-Blank Strings",
      "concept": [
        "character checks"
      ],
      "topics": [
        "require_nonempty"
      ]
    },
    {
      "page": "require_not_null",
      "title": "Require Non-NULL Value",
      "concept": [
        "missingness checks"
      ],
      "topics": [
        "require_not_null"
      ]
    },
    {
      "page": "require_nrow_matches",
      "title": "Require Row Count Matching an Expression",
      "concept": [
        "structure checks"
      ],
      "topics": [
        "require_nrow_matches"
      ]
    },
    {
      "page": "require_nrow_min",
      "title": "Require Minimum Number of Rows",
      "concept": [
        "structure checks"
      ],
      "topics": [
        "require_nrow_min"
      ]
    },
    {
      "page": "require_numeric",
      "title": "Require Numeric Type",
      "concept": [
        "type checks"
      ],
      "topics": [
        "require_numeric"
      ]
    },
    {
      "page": "require_one_of",
      "title": "Require Value from a Set",
      "concept": [
        "value checks"
      ],
      "topics": [
        "require_one_of"
      ]
    },
    {
      "page": "require_pattern",
      "title": "Require Strings Matching a Pattern",
      "concept": [
        "character checks"
      ],
      "topics": [
        "require_pattern"
      ]
    },
    {
      "page": "require_positive",
      "title": "Require Positive Values",
      "concept": [
        "value checks"
      ],
      "topics": [
        "require_positive"
      ]
    },
    {
      "page": "require_readable",
      "title": "Require Readable Paths",
      "concept": [
        "file checks"
      ],
      "topics": [
        "require_readable"
      ]
    },
    {
      "page": "require_scalar",
      "title": "Require Scalar Value",
      "concept": [
        "structure checks"
      ],
      "topics": [
        "require_scalar"
      ]
    },
    {
      "page": "require_set_equal",
      "title": "Require the Same Set of Values",
      "concept": [
        "value checks"
      ],
      "topics": [
        "require_set_equal"
      ]
    },
    {
      "page": "require_sorted",
      "title": "Require Sorted Values",
      "concept": [
        "structure checks"
      ],
      "topics": [
        "require_sorted"
      ]
    },
    {
      "page": "require_unique",
      "title": "Require Unique Values",
      "concept": [
        "value checks"
      ],
      "topics": [
        "require_unique"
      ]
    },
    {
      "page": "require_unique_names",
      "title": "Require Unique Names",
      "concept": [
        "structure checks"
      ],
      "topics": [
        "require_unique_names"
      ]
    },
    {
      "page": "require_valid",
      "title": "Include Another Validator's Steps",
      "concept": [
        "composition"
      ],
      "topics": [
        "require_valid"
      ]
    },
    {
      "page": "require_writable",
      "title": "Require Writable Paths",
      "concept": [
        "file checks"
      ],
      "topics": [
        "require_writable"
      ]
    },
    {
      "page": "restrict",
      "title": "Create a Composable Validator",
      "concept": [
        "core"
      ],
      "topics": [
        "restrict"
      ]
    },
    {
      "page": "steps",
      "title": "List the Steps of a Validator",
      "concept": [
        "core"
      ],
      "topics": [
        "steps"
      ]
    },
    {
      "page": "validation_errors",
      "title": "Collect Validation Errors Without Throwing",
      "concept": [
        "core"
      ],
      "topics": [
        "validation_errors"
      ]
    }
  ],
  "_readme": "https://github.com/gcol33/restrictr/raw/HEAD/README.md",
  "_rundeps": [],
  "_vignettes": [
    {
      "source": "restrictR.Rmd",
      "filename": "restrictR.html",
      "title": "Runtime Contracts for R Functions",
      "author": "Gilles Colling",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Installation",
        "Overview",
        "Reusable Schemas",
        "Dependent Validation",
        "Enum Arguments",
        "Arbitrary Classes",
        "Data Frame with Mixed Constraints",
        "Composing Validators",
        "Strings, Paths, and Factor Levels",
        "Checking Without Stopping",
        "Testing Validators",
        "Custom Steps",
        "Self-Documentation",
        "Using Contracts in Packages",
        "Relation to checkmate"
      ],
      "created": "2026-03-04 15:19:30",
      "modified": "2026-10-10 12:14:21",
      "commits": 7
    }
  ],
  "_score": 5.447158031342219,
  "_indexed": true,
  "_nocasepkg": "restrictr",
  "_universes": [
    "gcol33"
  ],
  "_binaries": [
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.3.0",
      "date": "2026-10-13T13:40:23.000Z",
      "distro": "resolute",
      "commit": "80094c71b2ef06eaa0be9ba06f01add14434d03b",
      "fileid": "https://r2.ropensci.org/b1b1ca419ca667878247fe4322be2500595e7914e6fa1770bc5d611ccb1f70ad",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/gcol33/actions/runs/38406244185"
    },
    {
      "r": "4.6.1",
      "os": "linux",
      "version": "0.3.0",
      "date": "2026-10-13T13:40:12.000Z",
      "distro": "resolute",
      "commit": "80094c71b2ef06eaa0be9ba06f01add14434d03b",
      "fileid": "https://r2.ropensci.org/4bca65ebcccdf3e2aea4571d900e4ab418e693192cc29769df7d3175833fcfef",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/gcol33/actions/runs/38406244185"
    },
    {
      "r": "4.5.3",
      "os": "mac",
      "version": "0.3.0",
      "date": "2026-10-13T14:03:44.000Z",
      "commit": "80094c71b2ef06eaa0be9ba06f01add14434d03b",
      "fileid": "https://r2.ropensci.org/38dca83fcfa1c88eaf4dfcd95ee235c2aafea09883a8fa485e6f2836448692ec",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/gcol33/actions/runs/38406244185"
    },
    {
      "r": "4.6.1",
      "os": "mac",
      "version": "0.3.0",
      "date": "2026-10-13T14:03:01.000Z",
      "commit": "80094c71b2ef06eaa0be9ba06f01add14434d03b",
      "fileid": "https://r2.ropensci.org/7bb165c5034680795de348f69444960ec7c202c9e05bffe9f7aa9665639efcd2",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/gcol33/actions/runs/38406244185"
    },
    {
      "r": "4.6.0",
      "os": "wasm",
      "version": "0.3.0",
      "date": "2026-10-13T13:40:17.000Z",
      "commit": "80094c71b2ef06eaa0be9ba06f01add14434d03b",
      "fileid": "https://r2.ropensci.org/5c68402c681f88c0b829203821155fa70bece24ed77f892a480b95dd8e9f229b",
      "status": "success",
      "buildurl": "https://github.com/r-universe/gcol33/actions/runs/38406244185"
    },
    {
      "r": "4.7.0",
      "os": "win",
      "version": "0.3.0",
      "date": "2026-10-13T13:39:39.000Z",
      "commit": "80094c71b2ef06eaa0be9ba06f01add14434d03b",
      "fileid": "https://r2.ropensci.org/d081f2d4f41a7ccbdb6c47b7e1723209f1b7ece2ef065bcb77dd350856b4c443",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/gcol33/actions/runs/38406244185"
    },
    {
      "r": "4.5.3",
      "os": "win",
      "version": "0.3.0",
      "date": "2026-10-13T13:39:59.000Z",
      "commit": "80094c71b2ef06eaa0be9ba06f01add14434d03b",
      "fileid": "https://r2.ropensci.org/a01a76354f463b5242f1e53abbbfa2d0fe4e7543bf0c2825bf8b2e07873a3fc0",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/gcol33/actions/runs/38406244185"
    },
    {
      "r": "4.6.1",
      "os": "win",
      "version": "0.3.0",
      "date": "2026-10-13T13:39:49.000Z",
      "commit": "80094c71b2ef06eaa0be9ba06f01add14434d03b",
      "fileid": "https://r2.ropensci.org/46628bb52888159a1d2edf2ca8a87e8741158a2cd1b9740d7049aa71f79a701d",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/gcol33/actions/runs/38406244185"
    }
  ]
}