{
  "_id": "6a499fdf162b78b26a583593",
  "Package": "plumber2",
  "Title": "Easy and Powerful Web Servers",
  "Version": "0.2.0.9000",
  "Authors@R": "c(\nperson(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"aut\", \"cre\"),\ncomment = c(ORCID = \"0000-0002-5147-4711\")),\nperson(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"),\ncomment = c(ROR = \"03wc8by49\"))\n)",
  "Description": "Automatically create a web server from annotated 'R' files\nor by building it up programmatically. Provides automatic\n'OpenAPI' documentation, input handling, asynchronous\nevaluation, and plugin support.",
  "License": "MIT + file LICENSE",
  "Encoding": "UTF-8",
  "Roxygen": "list(markdown = TRUE)",
  "RoxygenNote": "7.3.3",
  "VignetteBuilder": "quarto",
  "URL": "https://plumber2.posit.co/, https://github.com/posit-dev/plumber2",
  "BugReports": "https://github.com/posit-dev/plumber2/issues",
  "Config/testthat/edition": "3",
  "Config/pak/sysreqs": "cmake libfontconfig1-dev libfreetype6-dev\nlibfribidi-dev make libharfbuzz-dev libicu-dev libjpeg-dev\nlibpng-dev libsodium-dev libtiff-dev libuv1-dev libwebp-dev\nlibxml2-dev libssl-dev libx11-dev xz-utils zlib1g-dev\nlibclang-dev",
  "Repository": "https://posit-dev.r-universe.dev",
  "Date/Publication": "2026-01-21 06:59:21 UTC",
  "RemoteUrl": "https://github.com/posit-dev/plumber2",
  "RemoteRef": "HEAD",
  "RemoteSha": "b10bbd08f0d643c7aae6d3775215355b4073ae90",
  "NeedsCompilation": "no",
  "Packaged": {
    "Date": "2026-06-20 06:50:57 UTC",
    "User": "root"
  },
  "Author": "Thomas Lin Pedersen [aut, cre] (ORCID:\n<https://orcid.org/0000-0002-5147-4711>),\nPosit Software, PBC [cph, fnd] (ROR: <https://ror.org/03wc8by49>)",
  "Maintainer": "Thomas Lin Pedersen <thomas.pedersen@posit.co>",
  "_user": "posit-dev",
  "_type": "src",
  "_file": "plumber2_0.2.0.9000.tar.gz",
  "_fileid": "https://r2.ropensci.org/7f23145ee0cbc9c5d3243d4af5da74532aeb1bc6dff8bb6ee1f50e8f6dd2d24b",
  "_filesize": 4487122,
  "_sha256": "7f23145ee0cbc9c5d3243d4af5da74532aeb1bc6dff8bb6ee1f50e8f6dd2d24b",
  "_expires": "2026-10-13T00:05:49.000Z",
  "_created": "2026-06-20T06:50:57.000Z",
  "_published": "2026-07-05T00:05:51.176Z",
  "_jobs": [
    {
      "job": 85177720959,
      "time": 169,
      "config": "linux-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "7762990256"
    },
    {
      "job": 85177721122,
      "time": 227,
      "config": "linux-release-x86_64",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7762997149"
    },
    {
      "job": 85177721047,
      "time": 148,
      "config": "macos-oldrel-arm64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "7762987879"
    },
    {
      "job": 85177721169,
      "time": 130,
      "config": "macos-release-arm64",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7762985503"
    },
    {
      "job": 85177720874,
      "time": 271,
      "config": "source",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7762969993"
    },
    {
      "job": 85177721029,
      "time": 158,
      "config": "wasm-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7762988999"
    },
    {
      "job": 85177720930,
      "time": 158,
      "config": "windows-devel",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "7762989154"
    },
    {
      "job": 85177721118,
      "time": 152,
      "config": "windows-oldrel",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "7762988357"
    },
    {
      "job": 85177721141,
      "time": 139,
      "config": "windows-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7762986734"
    }
  ],
  "_host": "GitHub-Actions",
  "_buildurl": "https://github.com/r-universe/posit-dev/actions/runs/27863304844",
  "_status": "success",
  "_upstream": "https://github.com/posit-dev/plumber2",
  "_commit": {
    "id": "b10bbd08f0d643c7aae6d3775215355b4073ae90",
    "author": "Joseph Barbier <79746670+JosephBARBIERDARNAL@users.noreply.github.com>",
    "committer": "GitHub <noreply@github.com>",
    "message": "fix typo (#74)\n\n",
    "time": 1768978761
  },
  "_maintainer": {
    "name": "Thomas Lin Pedersen",
    "email": "thomas.pedersen@posit.co",
    "login": "thomasp85",
    "mastodon": "@thomasp85@fosstodon.org",
    "linkedin": "in/thomasp85",
    "orcid": "0000-0002-5147-4711",
    "twitter": "@thomasp85",
    "description": "Maker of tools focusing on data science and data visualisation",
    "uuid": 1775316
  },
  "_distro": "noble",
  "_registered": true,
  "_dependencies": [
    {
      "package": "R",
      "version": ">= 4.2",
      "role": "Depends"
    },
    {
      "package": "base64enc",
      "role": "Imports"
    },
    {
      "package": "cli",
      "role": "Imports"
    },
    {
      "package": "fiery",
      "version": ">= 1.5.0",
      "role": "Imports"
    },
    {
      "package": "fireproof",
      "role": "Imports"
    },
    {
      "package": "firesafety",
      "role": "Imports"
    },
    {
      "package": "firesale",
      "role": "Imports"
    },
    {
      "package": "firestorm",
      "role": "Imports"
    },
    {
      "package": "fs",
      "role": "Imports"
    },
    {
      "package": "jsonlite",
      "role": "Imports"
    },
    {
      "package": "promises",
      "role": "Imports"
    },
    {
      "package": "R6",
      "role": "Imports"
    },
    {
      "package": "ragg",
      "role": "Imports"
    },
    {
      "package": "rapidoc",
      "role": "Imports"
    },
    {
      "package": "readr",
      "role": "Imports"
    },
    {
      "package": "reqres",
      "version": ">= 1.0.0",
      "role": "Imports"
    },
    {
      "package": "rlang",
      "version": ">= 1.1.0",
      "role": "Imports"
    },
    {
      "package": "routr",
      "version": ">= 2.0.0",
      "role": "Imports"
    },
    {
      "package": "roxygen2",
      "role": "Imports"
    },
    {
      "package": "stringi",
      "role": "Imports"
    },
    {
      "package": "svglite",
      "role": "Imports"
    },
    {
      "package": "utils",
      "role": "Imports"
    },
    {
      "package": "webutils",
      "role": "Imports"
    },
    {
      "package": "yaml",
      "role": "Imports"
    },
    {
      "package": "arrow",
      "role": "Suggests"
    },
    {
      "package": "callr",
      "role": "Suggests"
    },
    {
      "package": "geojsonsf",
      "role": "Suggests"
    },
    {
      "package": "htmlwidgets",
      "role": "Suggests"
    },
    {
      "package": "later",
      "role": "Suggests"
    },
    {
      "package": "mirai",
      "role": "Suggests"
    },
    {
      "package": "nanoparquet",
      "role": "Suggests"
    },
    {
      "package": "quarto",
      "role": "Suggests"
    },
    {
      "package": "redoc",
      "role": "Suggests"
    },
    {
      "package": "rmarkdown",
      "role": "Suggests"
    },
    {
      "package": "shiny",
      "role": "Suggests"
    },
    {
      "package": "storr",
      "role": "Suggests"
    },
    {
      "package": "swagger",
      "role": "Suggests"
    },
    {
      "package": "testthat",
      "version": ">= 3.0.0",
      "role": "Suggests"
    },
    {
      "package": "tomledit",
      "role": "Suggests"
    }
  ],
  "_owner": "posit-dev",
  "_selfowned": true,
  "_usedby": 4,
  "_updates": [
    {
      "week": "2025-25",
      "n": 27
    },
    {
      "week": "2025-26",
      "n": 31
    },
    {
      "week": "2025-28",
      "n": 1
    },
    {
      "week": "2025-30",
      "n": 1
    },
    {
      "week": "2025-32",
      "n": 14
    },
    {
      "week": "2025-35",
      "n": 4
    },
    {
      "week": "2025-36",
      "n": 9
    },
    {
      "week": "2025-38",
      "n": 1
    },
    {
      "week": "2025-39",
      "n": 15
    },
    {
      "week": "2025-40",
      "n": 3
    },
    {
      "week": "2025-41",
      "n": 17
    },
    {
      "week": "2025-43",
      "n": 4
    },
    {
      "week": "2025-45",
      "n": 6
    },
    {
      "week": "2025-46",
      "n": 1
    },
    {
      "week": "2025-47",
      "n": 2
    },
    {
      "week": "2025-50",
      "n": 8
    },
    {
      "week": "2025-51",
      "n": 2
    },
    {
      "week": "2026-02",
      "n": 2
    },
    {
      "week": "2026-03",
      "n": 1
    },
    {
      "week": "2026-04",
      "n": 7
    }
  ],
  "_tags": [
    {
      "name": "v0.1.0",
      "date": "2025-09-15"
    },
    {
      "name": "v0.1.1",
      "date": "2025-12-17"
    },
    {
      "name": "v0.2.0",
      "date": "2026-01-20"
    }
  ],
  "_topics": [
    "webapi",
    "quarto"
  ],
  "_stars": 115,
  "_contributors": [
    {
      "user": "thomasp85",
      "count": 248,
      "uuid": 1775316
    },
    {
      "user": "schloerke",
      "count": 4,
      "uuid": 93231
    },
    {
      "user": "andreranza",
      "count": 3,
      "uuid": 43607279
    },
    {
      "user": "link-ny",
      "count": 2,
      "uuid": 4392950
    },
    {
      "user": "yutannihilation",
      "count": 1,
      "uuid": 1978793
    },
    {
      "user": "josephbarbierdarnal",
      "count": 1,
      "uuid": 79746670
    },
    {
      "user": "maelle",
      "count": 1,
      "uuid": 8360597
    },
    {
      "user": "hrbrmstr",
      "count": 1,
      "uuid": 509878
    },
    {
      "user": "bowerth",
      "count": 1,
      "uuid": 2896281
    }
  ],
  "_userbio": {
    "uuid": 107264312,
    "type": "organization",
    "name": "posit-dev",
    "followers": 959
  },
  "_downloads": {
    "count": 615,
    "source": "https://cranlogs.r-pkg.org/downloads/total/last-month/plumber2"
  },
  "_devurl": "https://github.com/posit-dev/plumber2",
  "_pkgdown": "https://plumber2.posit.co/",
  "_searchresults": 63,
  "_quarto": true,
  "_rbuild": "4.6.0",
  "_assets": [
    "extra/citation.cff",
    "extra/citation.html",
    "extra/citation.json",
    "extra/citation.txt",
    "extra/contents.json",
    "extra/NEWS.html",
    "extra/NEWS.txt",
    "extra/plumber2.html",
    "extra/readme.html",
    "extra/readme.md",
    "LICENSE",
    "manual.pdf"
  ],
  "_homeurl": "https://github.com/posit-dev/plumber2",
  "_realowner": "posit-dev",
  "_cranurl": true,
  "_releases": [
    {
      "version": "0.1.0",
      "date": "2025-09-22"
    },
    {
      "version": "0.1.1",
      "date": "2025-12-18"
    },
    {
      "version": "0.2.0",
      "date": "2026-01-20"
    }
  ],
  "_exports": [
    "abort_bad_request",
    "abort_conflict",
    "abort_forbidden",
    "abort_gone",
    "abort_http_problem",
    "abort_internal_error",
    "abort_method_not_allowed",
    "abort_not_acceptable",
    "abort_not_found",
    "abort_status",
    "abort_unauthorized",
    "add_plumber2_tag",
    "all_opts",
    "api",
    "api_add_route",
    "api_any",
    "api_any_header",
    "api_assets",
    "api_auth",
    "api_auth_guard",
    "api_connect",
    "api_connect_header",
    "api_datastore",
    "api_delete",
    "api_delete_header",
    "api_doc_add",
    "api_doc_setting",
    "api_forward",
    "api_get",
    "api_get_header",
    "api_head",
    "api_head_header",
    "api_logger",
    "api_message",
    "api_off",
    "api_on",
    "api_options",
    "api_options_header",
    "api_package",
    "api_parse",
    "api_patch",
    "api_patch_header",
    "api_post",
    "api_post_header",
    "api_put",
    "api_put_header",
    "api_redirect",
    "api_report",
    "api_run",
    "api_security_cors",
    "api_security_headers",
    "api_security_resource_isolation",
    "api_session_cookie",
    "api_shiny",
    "api_statics",
    "api_stop",
    "api_trace",
    "api_trace_header",
    "apply_plumber2_block",
    "Break",
    "clean_formatter",
    "close_formatter",
    "combined_log_format",
    "common_log_format",
    "create_server_yml",
    "csp",
    "device_formatter",
    "format_bmp",
    "format_cat",
    "format_csv",
    "format_feather",
    "format_format",
    "format_geojson",
    "format_htmlwidget",
    "format_jpeg",
    "format_parquet",
    "format_pdf",
    "format_png",
    "format_print",
    "format_rds",
    "format_svg",
    "format_tiff",
    "format_tsv",
    "format_unboxed",
    "format_yaml",
    "get_async",
    "get_opts",
    "get_parsers",
    "get_serializers",
    "init_formatter",
    "is_plumber_api",
    "logger_console",
    "logger_file",
    "logger_logger",
    "logger_null",
    "logger_otel",
    "logger_switch",
    "mirai_async",
    "Next",
    "openapi",
    "openapi_contact",
    "openapi_content",
    "openapi_header",
    "openapi_info",
    "openapi_license",
    "openapi_operation",
    "openapi_parameter",
    "openapi_path",
    "openapi_request_body",
    "openapi_response",
    "openapi_schema",
    "openapi_tag",
    "parse_csv",
    "parse_feather",
    "parse_geojson",
    "parse_multipart",
    "parse_octet",
    "parse_parquet",
    "parse_plumber_file",
    "parse_rds",
    "parse_text",
    "parse_tsv",
    "parse_yaml",
    "Plumber2",
    "random_key",
    "register_async",
    "register_parser",
    "register_serializer",
    "should_break",
    "show_registered_async",
    "show_registered_parsers",
    "show_registered_serializers",
    "sts",
    "with_formatter"
  ],
  "_help": [
    {
      "page": "add_plumber2_tag",
      "title": "Add a tag extension to plumber2",
      "topics": [
        "add_plumber2_tag"
      ]
    },
    {
      "page": "api",
      "title": "Create a new plumber API, optionally based on one or more plumber files",
      "topics": [
        "api",
        "api_parse",
        "is_plumber_api"
      ]
    },
    {
      "page": "api_add_route",
      "title": "Add a new route to either the request or header router",
      "topics": [
        "api_add_route"
      ]
    },
    {
      "page": "api_assets",
      "title": "Serve resources from your file system",
      "topics": [
        "api_assets",
        "api_statics"
      ]
    },
    {
      "page": "api_auth",
      "title": "Add auth to an endpoint",
      "topics": [
        "api_auth"
      ]
    },
    {
      "page": "api_auth_guard",
      "title": "Add an auth guard to your API",
      "topics": [
        "api_auth_guard"
      ]
    },
    {
      "page": "api_datastore",
      "title": "Persistent server-side data storage",
      "topics": [
        "api_datastore"
      ]
    },
    {
      "page": "api_docs",
      "title": "Configure your API for serving documentation for itself",
      "topics": [
        "api_docs",
        "api_doc_add",
        "api_doc_setting"
      ]
    },
    {
      "page": "api_forward",
      "title": "Set up a plumber2 api to act as a reverse proxy",
      "topics": [
        "api_forward"
      ]
    },
    {
      "page": "api_logger",
      "title": "Set logging function and access log format for the API",
      "topics": [
        "api_logger",
        "combined_log_format",
        "common_log_format",
        "logger_console",
        "logger_file",
        "logger_logger",
        "logger_null",
        "logger_otel",
        "logger_switch"
      ]
    },
    {
      "page": "api_message",
      "title": "Add a handler to a WebSocket message",
      "topics": [
        "api_message"
      ]
    },
    {
      "page": "api_on",
      "title": "Add a handler to an event",
      "topics": [
        "api_off",
        "api_on"
      ]
    },
    {
      "page": "api_package",
      "title": "Load up an API distributed with a package",
      "topics": [
        "api_package"
      ]
    },
    {
      "page": "api_redirect",
      "title": "Redirect request to another resource",
      "topics": [
        "api_redirect"
      ]
    },
    {
      "page": "api_report",
      "title": "Serve Quarto and Rmarkdown documents from a plumber2 api",
      "topics": [
        "api_report"
      ]
    },
    {
      "page": "api_request_handlers",
      "title": "Add a handler for a request",
      "concept": [
        "Request Handlers"
      ],
      "topics": [
        "api_any",
        "api_connect",
        "api_delete",
        "api_get",
        "api_head",
        "api_options",
        "api_patch",
        "api_post",
        "api_put",
        "api_request_handlers",
        "api_trace"
      ]
    },
    {
      "page": "api_request_header_handlers",
      "title": "Add a handler for a request header",
      "concept": [
        "Request Handlers"
      ],
      "topics": [
        "api_any_header",
        "api_connect_header",
        "api_delete_header",
        "api_get_header",
        "api_head_header",
        "api_options_header",
        "api_patch_header",
        "api_post_header",
        "api_put_header",
        "api_request_header_handlers",
        "api_trace_header"
      ]
    },
    {
      "page": "api_run",
      "title": "Launch the API",
      "topics": [
        "api_run",
        "api_stop"
      ]
    },
    {
      "page": "api_security_cors",
      "title": "Set up CORS for a path in your plumber2 API",
      "concept": [
        "security features"
      ],
      "topics": [
        "api_security_cors"
      ]
    },
    {
      "page": "api_security_headers",
      "title": "Add various security related headers to your plumber2 API",
      "concept": [
        "security features"
      ],
      "topics": [
        "api_security_headers"
      ]
    },
    {
      "page": "api_security_resource_isolation",
      "title": "Set up resource isolation for a path",
      "concept": [
        "security features"
      ],
      "topics": [
        "api_security_resource_isolation"
      ]
    },
    {
      "page": "api_session_cookie",
      "title": "Turn on session cookie data storage for your API",
      "topics": [
        "api_session_cookie"
      ]
    },
    {
      "page": "api_shiny",
      "title": "Serve a Shiny app from a plumber2 api",
      "topics": [
        "api_shiny"
      ]
    },
    {
      "page": "async_evaluators",
      "title": "Async evaluators provided by plumber",
      "topics": [
        "async_evaluators",
        "mirai_async"
      ]
    },
    {
      "page": "create_server_yml",
      "title": "Create a _server.yml file to describe your API",
      "topics": [
        "create_server_yml"
      ]
    },
    {
      "page": "get_opts",
      "title": "Retrieve options for creating a plumber2 api",
      "topics": [
        "all_opts",
        "get_opts"
      ]
    },
    {
      "page": "Next",
      "title": "Router control flow",
      "topics": [
        "Break",
        "Next",
        "should_break"
      ]
    },
    {
      "page": "openapi",
      "title": "Construct OpenAPI specifications",
      "topics": [
        "openapi",
        "openapi_contact",
        "openapi_content",
        "openapi_header",
        "openapi_info",
        "openapi_license",
        "openapi_operation",
        "openapi_parameter",
        "openapi_path",
        "openapi_request_body",
        "openapi_response",
        "openapi_schema",
        "openapi_tag"
      ]
    },
    {
      "page": "parsers",
      "title": "Parser functions provided by plumber2",
      "topics": [
        "parsers",
        "parse_csv",
        "parse_feather",
        "parse_geojson",
        "parse_multipart",
        "parse_octet",
        "parse_parquet",
        "parse_rds",
        "parse_text",
        "parse_tsv",
        "parse_yaml"
      ]
    },
    {
      "page": "Plumber2",
      "title": "The Plumber2 Class",
      "topics": [
        "Plumber2"
      ]
    },
    {
      "page": "register_async",
      "title": "Register an async evaluator",
      "topics": [
        "get_async",
        "register_async",
        "show_registered_async"
      ]
    },
    {
      "page": "register_parser",
      "title": "Register or fetch a parser",
      "topics": [
        "get_parsers",
        "register_parser",
        "show_registered_parsers"
      ]
    },
    {
      "page": "register_serializer",
      "title": "Register or fetch a serializer",
      "topics": [
        "get_serializers",
        "register_serializer",
        "show_registered_serializers"
      ]
    },
    {
      "page": "serializers",
      "title": "Serializer functions provided by plumber2",
      "topics": [
        "format_bmp",
        "format_cat",
        "format_csv",
        "format_feather",
        "format_format",
        "format_geojson",
        "format_htmlwidget",
        "format_jpeg",
        "format_parquet",
        "format_pdf",
        "format_png",
        "format_print",
        "format_rds",
        "format_svg",
        "format_tiff",
        "format_tsv",
        "format_unboxed",
        "format_yaml",
        "serializers"
      ]
    }
  ],
  "_pkglogo": "https://github.com/posit-dev/plumber2/raw/HEAD/man/figures/logo.svg",
  "_readme": "https://github.com/posit-dev/plumber2/raw/HEAD/README.md",
  "_rundeps": [
    "AsioHeaders",
    "askpass",
    "base64enc",
    "bit",
    "bit64",
    "brew",
    "brio",
    "brotli",
    "callr",
    "cli",
    "clipr",
    "commonmark",
    "cpp11",
    "crayon",
    "curl",
    "desc",
    "digest",
    "evaluate",
    "fastmap",
    "fiery",
    "fireproof",
    "firesafety",
    "firesale",
    "firestorm",
    "fs",
    "glue",
    "highr",
    "hms",
    "httpuv",
    "jose",
    "jsonlite",
    "knitr",
    "later",
    "lifecycle",
    "magrittr",
    "mirai",
    "nanonext",
    "openssl",
    "otel",
    "pillar",
    "pkgbuild",
    "pkgconfig",
    "pkgload",
    "prettyunits",
    "processx",
    "progress",
    "promises",
    "ps",
    "R6",
    "ragg",
    "rapidoc",
    "Rcpp",
    "readr",
    "reqres",
    "rlang",
    "routr",
    "roxygen2",
    "rprojroot",
    "sodium",
    "storr",
    "stringi",
    "svglite",
    "sys",
    "systemfonts",
    "textshaping",
    "tibble",
    "tidyselect",
    "triebeard",
    "tzdb",
    "urltools",
    "utf8",
    "vctrs",
    "vroom",
    "waysign",
    "websocket",
    "webutils",
    "withr",
    "xfun",
    "xml2",
    "yaml"
  ],
  "_vignettes": [
    {
      "source": "server_yml.qmd",
      "filename": "server_yml.html",
      "title": "_server.yml for framework developers",
      "engine": "quarto::html",
      "headings": [
        "The standard",
        "The _server.yml file",
        "The engine",
        "The server",
        "Recommendations for _server.yml engines",
        "File paths",
        "Options",
        "Case study: plumber2",
        "YAML content",
        "launch_server()",
        "Supported frameworks"
      ],
      "created": "2025-10-06 07:54:08",
      "modified": "2025-10-06 07:54:08",
      "commits": 1
    },
    {
      "source": "annotations.qmd",
      "filename": "annotations.html",
      "title": "Annotations reference",
      "engine": "quarto::html",
      "headings": [
        "Annotations",
        "Annotation settings",
        "Use roxygen prefix",
        "Annotations example",
        "Equivalent programmatic usage",
        "Specifying route name",
        "Specifying route order",
        "Specifying root url for the whole file",
        "Global annotations",
        "Handler annotations",
        "Endpoint",
        "More details on Type",
        "Asset annotation",
        "Equivalent programmatic usage (note that argument order is reversed)",
        "Auth guard annotation",
        "Datastore annotation",
        "plumber2 annotation",
        "Forwards and redirects",
        "Annotation example",
        "Shiny",
        "Reports"
      ],
      "created": "2025-03-21 10:12:50",
      "modified": "2025-12-11 07:32:13",
      "commits": 23
    },
    {
      "source": "extending.qmd",
      "filename": "extending.html",
      "title": "Extending plumber2",
      "engine": "quarto::html",
      "headings": [
        "What does it mean to extend plumber2",
        "Adding new tags",
        "Tag registration",
        "New block type",
        "Existing block type",
        "apply_plumber2_block methods",
        "Single main class",
        "Subclass",
        "Adding a programmatic interface",
        "New parsers, serializers, and async engines",
        "Serializers",
        "Graphics output",
        "Parsers",
        "Asynchronous engines",
        "The Plumber2 object and its extension points"
      ],
      "created": "2025-09-22 21:21:40",
      "modified": "2025-11-17 08:14:38",
      "commits": 7
    },
    {
      "source": "plumber.qmd",
      "filename": "plumber.html",
      "title": "Get Started",
      "engine": "quarto::html",
      "headings": [
        "Specifying the Inputs",
        "Customizing The Output"
      ],
      "created": "2025-04-02 06:53:53",
      "modified": "2025-10-06 09:44:09",
      "commits": 10
    },
    {
      "source": "hosting.qmd",
      "filename": "hosting.html",
      "title": "Hosting",
      "engine": "quarto::html",
      "headings": [
        "The _server.yml file",
        "Creating a _server.yml file",
        "Testing your _server.yml file",
        "Posit Connect",
        "DigitalOcean",
        "Prerequisites",
        "Basic Deployment",
        "Learn More",
        "Docker",
        "Choosing a Base Image",
        "System Dependencies",
        "Example Dockerfile",
        "pm2",
        "Setting up pm2 for plumber2",
        "Starting Your API with pm2",
        "Managing Your API",
        "Running Multiple Instances",
        "Automatic Startup on Boot",
        "Using an Ecosystem File",
        "Monitoring and Logs",
        "systemd",
        "Creating a systemd Service",
        "Setting Up Your Application",
        "Managing the Service",
        "Viewing Logs",
        "Service Management Commands"
      ],
      "created": "2025-03-21 10:12:50",
      "modified": "2026-01-20 08:47:05",
      "commits": 12
    },
    {
      "source": "otel.qmd",
      "filename": "otel.html",
      "title": "Instrumentation with OpenTelemetry",
      "engine": "quarto::html",
      "headings": [
        "Traces",
        "Subtraces",
        "Metrics",
        "Logs"
      ],
      "created": "2025-10-09 08:26:34",
      "modified": "2025-11-17 08:13:40",
      "commits": 4
    },
    {
      "source": "introduction.qmd",
      "filename": "introduction.html",
      "title": "Introduction",
      "engine": "quarto::html",
      "headings": [
        "Web APIs"
      ],
      "created": "2025-03-21 10:12:50",
      "modified": "2025-09-05 13:51:29",
      "commits": 8
    },
    {
      "source": "programmatic-usage.qmd",
      "filename": "programmatic-usage.html",
      "title": "Programmatic Usage",
      "engine": "quarto::html",
      "headings": [
        "Creating and Controlling routers",
        "Defining handlers",
        "Listening for and triggering events",
        "Static File Routers"
      ],
      "created": "2025-03-21 10:12:50",
      "modified": "2025-08-08 18:54:19",
      "commits": 7
    },
    {
      "source": "rendering-output.qmd",
      "filename": "rendering-output.html",
      "title": "Rendering Output",
      "engine": "quarto::html",
      "headings": [
        "The Response Object",
        "Serializers",
        "Standard serializers",
        "Boxed vs Unboxed JSON",
        "Graphics serializers",
        "Bypassing Serialization",
        "Custom serializers",
        "Error Handling",
        "Setting Cookies",
        "Setting Unencrypted Cookies",
        "Setting Encrypted Cookies",
        "Documenting responses"
      ],
      "created": "2025-03-21 10:12:50",
      "modified": "2025-10-06 09:44:09",
      "commits": 8
    },
    {
      "source": "routing-and-input.qmd",
      "filename": "routing-and-input.html",
      "title": "Routing & Input",
      "engine": "quarto::html",
      "headings": [
        "Handlers",
        "Handler methods",
        "Paths",
        "Path parameters",
        "Path wildcard",
        "Path priority",
        "Handler input",
        "Handler arguments",
        "query",
        "body",
        "request",
        "Cookies",
        "Headers",
        "response",
        "server",
        "client_id",
        "Type casting input",
        "Defaults",
        "Required parameters",
        "Static File Handler"
      ],
      "created": "2025-03-21 10:12:50",
      "modified": "2026-01-21 06:59:21",
      "commits": 14
    },
    {
      "source": "execution-model.qmd",
      "filename": "execution-model.html",
      "title": "Runtime",
      "engine": "quarto::html",
      "headings": [
        "Execution Model",
        "Environments",
        "Performance & Request Processing",
        "Managing State",
        "In-Memory",
        "File System",
        "Cookies",
        "External Data Store",
        "Exit Handlers"
      ],
      "created": "2025-03-21 10:12:50",
      "modified": "2025-09-22 20:26:38",
      "commits": 9
    },
    {
      "source": "security.qmd",
      "filename": "security.html",
      "title": "Security",
      "engine": "quarto::html",
      "headings": [
        "Networking & Firewalls",
        "HTTPS",
        "Denial Of Service (DoS)",
        "Sanitization & Injection",
        "Security Headers",
        "Cross-Origin Resource Sharing (CORS)",
        "Resource Isolation Policies",
        "Cookies"
      ],
      "created": "2025-03-21 10:12:50",
      "modified": "2025-10-06 09:44:09",
      "commits": 12
    },
    {
      "source": "tips-and-tricks.qmd",
      "filename": "tips-and-tricks.html",
      "title": "Tips & Tricks",
      "engine": "quarto::html",
      "headings": [
        "Debugging",
        "Print Debugging",
        "Router Stage Debugging",
        "Interactive Debugging",
        "Port Range"
      ],
      "created": "2025-03-21 10:12:50",
      "modified": "2025-08-08 18:54:19",
      "commits": 7
    },
    {
      "source": "migration.qmd",
      "filename": "migration.html",
      "title": "Upgrading From Plumber",
      "engine": "quarto::html",
      "headings": [
        "Moving from plumber",
        "pr_*() to api_*()",
        "Only path arguments are passed as named arguments to your handler",
        "No more filter and preempt",
        "forward replaced by Next and Break",
        "New Request and Response objects",
        "New Plumber object",
        "Added @query and @body tags"
      ],
      "created": "2025-03-21 10:12:50",
      "modified": "2025-05-21 10:22:00",
      "commits": 7
    }
  ],
  "_score": 10.988437658525001,
  "_indexed": true,
  "_nocasepkg": "plumber2",
  "_universes": [
    "posit-dev",
    "thomasp85"
  ],
  "_binaries": [
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.2.0.9000",
      "date": "2026-06-20T06:53:31.000Z",
      "distro": "noble",
      "commit": "b10bbd08f0d643c7aae6d3775215355b4073ae90",
      "fileid": "https://r2.ropensci.org/8cc15bd78dd043e62295b33c674bf74caa7e372748582b3ef6db4ee4bceace2b",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/posit-dev/actions/runs/27863304844"
    },
    {
      "r": "4.6.0",
      "os": "linux",
      "version": "0.2.0.9000",
      "date": "2026-06-20T06:54:29.000Z",
      "distro": "noble",
      "commit": "b10bbd08f0d643c7aae6d3775215355b4073ae90",
      "fileid": "https://r2.ropensci.org/09189979f6557d8500ce8cd8e065b2e613f68a9454b5594d1cc991980318e738",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/posit-dev/actions/runs/27863304844"
    },
    {
      "r": "4.5.3",
      "os": "mac",
      "version": "0.2.0.9000",
      "date": "2026-06-20T06:53:22.000Z",
      "commit": "b10bbd08f0d643c7aae6d3775215355b4073ae90",
      "fileid": "https://r2.ropensci.org/5bbe3577253c8eea9d47c97fe89bfb30c657ef7f12320d3fcab78581dfa09a6b",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/posit-dev/actions/runs/27863304844"
    },
    {
      "r": "4.6.0",
      "os": "mac",
      "version": "0.2.0.9000",
      "date": "2026-06-20T06:53:07.000Z",
      "commit": "b10bbd08f0d643c7aae6d3775215355b4073ae90",
      "fileid": "https://r2.ropensci.org/5c6e3cf7719b20572c99e47c8daa93ff581cc07e6c1562ed31fd5e9c4121c4de",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/posit-dev/actions/runs/27863304844"
    },
    {
      "r": "4.6.0",
      "os": "wasm",
      "version": "0.2.0.9000",
      "date": "2026-06-20T06:54:01.000Z",
      "commit": "b10bbd08f0d643c7aae6d3775215355b4073ae90",
      "fileid": "https://r2.ropensci.org/9956d9a03ca08b5a613a0408a20dac17e39f6a1423f9c03afba673b8a8a72633",
      "status": "success",
      "buildurl": "https://github.com/r-universe/posit-dev/actions/runs/27863304844"
    },
    {
      "r": "4.7.0",
      "os": "win",
      "version": "0.2.0.9000",
      "date": "2026-06-20T06:52:59.000Z",
      "commit": "b10bbd08f0d643c7aae6d3775215355b4073ae90",
      "fileid": "https://r2.ropensci.org/4c6a560d56b1b595ee224d20843a914645ba44e290650c6988d4f530ce40234d",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/posit-dev/actions/runs/27863304844"
    },
    {
      "r": "4.5.3",
      "os": "win",
      "version": "0.2.0.9000",
      "date": "2026-06-20T06:52:44.000Z",
      "commit": "b10bbd08f0d643c7aae6d3775215355b4073ae90",
      "fileid": "https://r2.ropensci.org/6f4fc4a6cf0b52a11b22c2a40f5d61114c4da4efb514bc49a98a82f2bb3e96b0",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/posit-dev/actions/runs/27863304844"
    },
    {
      "r": "4.6.0",
      "os": "win",
      "version": "0.2.0.9000",
      "date": "2026-06-20T06:52:45.000Z",
      "commit": "b10bbd08f0d643c7aae6d3775215355b4073ae90",
      "fileid": "https://r2.ropensci.org/8d8d2e4561425092e7304f86f1307d1702ec9a645a5269bc1ddbedb60c8a036e",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/posit-dev/actions/runs/27863304844"
    }
  ]
}