Sign inTry it

Search Dart and Flutter packages.

Searches pub.dev, the Dart and Flutter package index, like its packages page: package name, latest version, description, pub points and link. First page of results (about 10 packages, in the site's order). Returns an empty list when nothing matches.

No reports yetRead-only, no login
Site
pub.dev, United States
Version
v1
Runs, last 7 days
No reports yet
sha256
e9f58da6e65d…

Run it with your agent

after installing Wield

Ask in plain words. Your agent finds this recipe and calls it:

“Search Dart and Flutter packages.”

Read-only: it changes nothing on the site. No login needed.

{
  "tool": "run",
  "arguments": {
    "recipe_id": "pub.dev/search-packages",
    "params": {
      "query": "http"
    }
  }
}

Requests

sent from your browser, in order
  1. 1GET/packages?qServer-rendered search results page /packages?q=…; read-only GET. Each result is div.packages-item with a title link (h3.packages-title), a description, a version link whose title reads 'Visit <name> <version> page' and a pub points score.

Parameters

from your agent
querystringrequiredPackage name or keyword, e.g. 'http', 'provider', 'camera flutter'

Returns

to your agent
packagesobject[]description, name, points, url, version
querystring

Where it can send

  • pub.dev

Anything else is blocked by the extension.

Reads from your session

Nothing. Your browser attaches the site's cookies by itself.

Used only in requests to the addresses on the left. Never sent to wield.run or your agent.

Checks

a run passes when
  • length(output.packages) > `0`
  • length(output.packages[?starts_with(url, 'https://pub.dev/packages/')]) == length(output.packages)
  • length(output.packages[?name != `null`]) == length(output.packages)
  • length(output.packages[?version != `null`]) > `0`

Raw recipe

Served as canonical JSON from /api/v1/recipes/pub.dev/search-packages, so its sha256 matches the ETag and the index.

Check it yourself
curl -s https://wield.run/api/v1/recipes/pub.dev/search-packages | shasum -a 256
# e9f58da6e65df25bb5fcbd90797e9e744e396e234483e60e7353a6dfe617e16f
pub.dev/search-packages.json, v1
{
  "description": "Searches pub.dev, the Dart and Flutter package index, like its packages page: package name, latest version, description, pub points and link. First page of results (about 10 packages, in the site's order). Returns an empty list when nothing matches.",
  "effect": "read",
  "id": "pub.dev/search-packages",
  "keywords": [
    "pub.dev",
    "pub",
    "dart",
    "flutter",
    "dart packages",
    "flutter packages",
    "packages",
    "plugins",
    "library",
    "libraries",
    "http",
    "provider",
    "riverpod"
  ],
  "output": {
    "schema": {
      "properties": {
        "packages": {
          "items": {
            "properties": {
              "description": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "name": {
                "type": "string"
              },
              "points": {
                "description": "Pub points, the package health and quality score out of 160",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "url": {
                "type": "string"
              },
              "version": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "name",
              "url"
            ],
            "type": "object"
          },
          "type": "array"
        },
        "query": {
          "type": "string"
        }
      },
      "required": [
        "query",
        "packages"
      ],
      "type": "object"
    },
    "value": "{query: params.query, packages: steps.search.packages[?name != `null` && href != `null`].{name: name, version: (version_label && split(version_label, ' ')[2]) || `null`, description: description || `null`, points: (points && to_number(points)) || `null`, url: join('', ['https://pub.dev', href])}}"
  },
  "params": {
    "additionalProperties": false,
    "properties": {
      "query": {
        "description": "Package name or keyword, e.g. 'http', 'provider', 'camera flutter'",
        "maxLength": 100,
        "minLength": 2,
        "type": "string"
      }
    },
    "required": [
      "query"
    ],
    "type": "object"
  },
  "provenance": {
    "method": "har",
    "notes": "GET /packages?q=<query> answers 200 HTML with the first page of results as div.packages-item. Name and link come from the title link, description from the description span, version from the title attribute of the version link ('Visit <name> <version> page'), and points from the health score. Likes and 30-day downloads are not returned: they are abbreviated (for example 8.48k, 14.8M) in the page.",
    "recorded_at": "2026-11-08T16:30:00.000Z",
    "recorded_by": "wield-forge (claude-haiku agent)"
  },
  "requires_login": false,
  "schema": "https://wield.run/schema/recipe/v1.json",
  "site": {
    "country": "US",
    "id": "pub.dev",
    "language": "en",
    "name": "pub.dev",
    "origin": "https://pub.dev",
    "origins": [
      "https://pub.dev"
    ]
  },
  "steps": [
    {
      "description": "Server-rendered search results page /packages?q=…; read-only GET. Each result is div.packages-item with a title link (h3.packages-title), a description, a version link whose title reads 'Visit <name> <version> page' and a pub points score.",
      "expect": {
        "content_type": "html",
        "status": [
          200
        ]
      },
      "extract": {
        "html_items": {
          "packages": {
            "fields": {
              "description": {
                "selector": "div.packages-description > span"
              },
              "href": {
                "attr": "href",
                "selector": "h3.packages-title > a"
              },
              "name": {
                "selector": "h3.packages-title > a"
              },
              "points": {
                "selector": ".packages-score-health .packages-score-value-number"
              },
              "version_label": {
                "attr": "title",
                "selector": "a[title^='Visit']"
              }
            },
            "max": 50,
            "selector": "div.packages-item"
          }
        }
      },
      "id": "search",
      "request": {
        "headers": {
          "Accept": "text/html"
        },
        "method": "GET",
        "query": {
          "q": "{{params.query}}"
        },
        "url": "/packages"
      }
    }
  ],
  "task": "Search Dart and Flutter packages",
  "tos": {
    "notes": "Not reviewed. One search page per call, the same page a visitor loads. The site's terms on automated access were not checked.",
    "reviewed": false
  },
  "verify": {
    "checks": [
      "length(output.packages) > `0`",
      "length(output.packages[?starts_with(url, 'https://pub.dev/packages/')]) == length(output.packages)",
      "length(output.packages[?name != `null`]) == length(output.packages)",
      "length(output.packages[?version != `null`]) > `0`"
    ],
    "example_params": {
      "query": "http"
    },
    "max_ms": 5000
  },
  "version": 1
}