{"id":48589898,"url":"https://github.com/virtuslab/cellar","last_synced_at":"2026-04-08T19:01:34.241Z","repository":{"id":341041952,"uuid":"1164236603","full_name":"VirtusLab/cellar","owner":"VirtusLab","description":"CLI tool for coding agents and developers to query the public API of any Maven JVM dependency — get symbol signatures, list packages, search by name, and inspect dependency trees. Powered by Coursier and tasty-query.","archived":false,"fork":false,"pushed_at":"2026-04-07T20:05:31.000Z","size":432,"stargazers_count":31,"open_issues_count":2,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-04-07T22:15:46.471Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Scala","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/VirtusLab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-22T20:48:36.000Z","updated_at":"2026-04-07T20:05:53.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/VirtusLab/cellar","commit_stats":null,"previous_names":["simple-scala-tooling/cellar","virtuslab/cellar"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/VirtusLab/cellar","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VirtusLab%2Fcellar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VirtusLab%2Fcellar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VirtusLab%2Fcellar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VirtusLab%2Fcellar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/VirtusLab","download_url":"https://codeload.github.com/VirtusLab/cellar/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VirtusLab%2Fcellar/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31569400,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"ssl_error","status_checked_at":"2026-04-08T14:31:17.202Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-08T19:01:33.348Z","updated_at":"2026-04-08T19:01:34.232Z","avatar_url":"https://github.com/VirtusLab.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/cellar.png\" alt=\"Cellar\" width=\"200\"/\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eCellar\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  Look up the public API of any JVM dependency from the terminal.\n\u003c/p\u003e\n\n---\n\nWhen a coding agent needs to call an unfamiliar library method, its options are bad: parse HTML docs (expensive, unreliable), find source on GitHub (requires knowing the URL), or hallucinate the API.\n\nCellar gives agents — and humans — a single shell command that returns exactly the type signatures, members, and docs needed to write correct code. Output is plain Markdown on stdout, ready to be injected into an LLM prompt with zero post-processing.\n\n## Supported artifacts\n\n| Format | Support |\n|---|---|\n| Scala 3 (TASTy) | Full — signatures, flags, companions, sealed hierarchies, givens, extensions, docstrings |\n| Scala 2 (pickles) | Best-effort — type information may be incomplete |\n| Java (.class) | Good — signatures, members |\n\n## Installation\n\n### Nix\n\nRun without installing:\n\n```sh\nnix run github:VirtusLab/cellar -- get-external org.typelevel:cats-core_3:2.10.0 cats.Monad\n```\n\nInstall into your profile:\n\n```sh\nnix profile install github:VirtusLab/cellar\n```\n\nA Nix overlay is also available at `github:VirtusLab/cellar#overlays.default`.\n\n### Manual\n\nDownload the native binary for your platform from https://github.com/VirtusLab/cellar/releases/latest, then extract and install:\n\n```sh\ntar xz -f cellar-*.tar.gz\nsudo mv cellar /usr/local/bin/\n```\n\nTo verify checksums and signatures, see [RELEASING.md](RELEASING.md).\n\n## Quick start\n\n```sh\n# Look up a trait from cats\ncellar get-external org.typelevel:cats-core_3:2.10.0 cats.Monad\n\n# List top-level symbols in a package\ncellar list-external org.typelevel:cats-core_3:2.10.0 cats\n\n# Search for a method name\ncellar search-external org.typelevel:cats-core_3:2.10.0 flatMap\n\n# View source code\ncellar get-source org.typelevel:cats-core_3:2.10.0 cats.Monad\n\n# Dependency tree\ncellar deps org.typelevel:cats-effect_3:3.5.4\n```\n\n## Commands\n\nCellar has two modes: **project-aware** commands that work against your current project's classpath, and **external** commands that query arbitrary Maven coordinates.\n\n### Project-aware commands\n\nRun from your project root. Cellar auto-detects the build tool (Mill, sbt, or scala-cli), extracts the classpath, and queries your project's code and all its dependencies.\n\n```sh\ncellar get [--module \u003cname\u003e] \u003cfqn\u003e\ncellar list [--module \u003cname\u003e] \u003cpackage\u003e\ncellar search [--module \u003cname\u003e] \u003cquery\u003e\n```\n\n- **Mill / sbt**: `--module` is required (e.g. `--module lib`, `--module core`)\n- **scala-cli**: `--module` is not supported — omit it\n\nThe classpath is cached after the first run. Use `--no-cache` to force re-extraction.\n\n### External commands\n\nQuery any published Maven artifact by explicit coordinate:\n\n```sh\ncellar get-external \u003ccoordinate\u003e \u003cfqn\u003e\ncellar list-external \u003ccoordinate\u003e \u003cpackage\u003e\ncellar search-external \u003ccoordinate\u003e \u003cquery\u003e\ncellar get-source \u003ccoordinate\u003e \u003cfqn\u003e\ncellar deps \u003ccoordinate\u003e\n```\n\n### Command reference\n\n| Command | Description |\n|---|---|\n| `get` | Symbol info from the current project (signature, flags, members, docs) |\n| `get-external` | Symbol info from a Maven coordinate |\n| `get-source` | Source code from a published `-sources.jar` |\n| `list` | List public symbols in a package/class from the current project |\n| `list-external` | List public symbols from a Maven coordinate |\n| `search` | Case-insensitive substring search in the current project |\n| `search-external` | Case-insensitive substring search from a Maven coordinate |\n| `deps` | Print the transitive dependency tree |\n\n### Maven coordinates\n\nCoordinates use the format `group:artifact:version`. The `::` shorthand is **not** supported — use the full artifact name.\n\n```\norg.typelevel:cats-core_3:2.10.0        # Scala 3\norg.typelevel:cats-core_2.13:2.10.0     # Scala 2\norg.apache.commons:commons-lang3:3.14.0 # Java\n```\n\nUse `latest` as the version to automatically resolve the most recent release:\n\n```sh\ncellar get-external org.typelevel:cats-core_3:latest cats.Monad\n```\n\n### Options\n\n| Flag | Applies to | Description |\n|---|---|---|\n| `--module \u003cname\u003e`, `-m` | project commands | Build module name (required for Mill/sbt) |\n| `--no-cache` | project commands | Skip classpath cache, re-extract from build tool |\n| `--java-home \u003cpath\u003e` | all | Use a specific JDK for JRE classpath |\n| `-r`, `--repository \u003curl\u003e` | external commands | Extra Maven repository URL (repeatable) |\n| `-l`, `--limit \u003cN\u003e` | `list`, `search` | Max results (default: 50) |\n\n## Configuration\n\nCellar loads configuration from HOCON files and environment variables. Files are loaded in order, with later values overriding earlier ones:\n\n1. Built-in defaults\n2. `~/.cellar/cellar.conf` (user-level, optional)\n3. `.cellar/cellar.conf` (project-level, optional)\n\nUse `--config \u003cpath\u003e` / `-c \u003cpath\u003e` to load a specific file instead.\n\n### Default config\n\n```hocon\nmill {\n  # Binary to invoke when extracting Mill classpaths\n  binary = \"./mill\"           # env: CELLAR_MILL_BINARY\n}\n\nsbt {\n  # Binary to invoke when extracting sbt classpaths (e.g. \"sbt\", \"sbtn\")\n  binary = \"sbt\"              # env: CELLAR_SBT_BINARY\n  # Extra arguments passed to sbt, space-separated (e.g. \"--client\")\n  extra-args = \"\"             # env: CELLAR_SBT_EXTRA_ARGS\n}\n```\n\n### Examples\n\nUse `sbtn` instead of `sbt`:\n\n```hocon\nsbt { binary = \"sbtn\" }\n```\n\nUse sbt in `--client` mode:\n\n```hocon\nsbt { extra-args = \"--client\" }\n```\n\nUse a custom Mill wrapper:\n\n```hocon\nmill { binary = \"./millw\" }\n```\n\nOr via environment: `CELLAR_SBT_BINARY=sbtn cellar get --module core cats.Monad`\n\n## Output conventions\n\n- **stdout** — Markdown content (signatures, docs, source)\n- **stderr** — diagnostics (warnings, truncation notices)\n- **Exit 0** — success\n- **Exit 1** — error\n\n## Example output\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003ecellar get-external org.typelevel:cats-core_3:2.10.0 cats.Monad\u003c/code\u003e\u003c/summary\u003e\n\n    ## cats.Monad\n    ```scala\n    trait Monad[F] extends FlatMap[F] with Applicative[F]\n    ```\n    Monad.\n    Allows composition of dependent effectful functions.\n\n    **Flags:** abstract\n    **Origin:** cats.Monad\n    **Members:**\n    ```scala\n    def flatMap[A, B](fa: F[A])(f: Function1[A, F[B]]): F[B]\n    def pure[A](x: A): F[A]\n    def flatten[A](ffa: F[F[A]]): F[A]\n    def iterateWhile[A](f: F[A])(p: Function1[A, Boolean]): F[A]\n    ...\n    ```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003ecellar list-external org.typelevel:cats-core_3:2.10.0 cats --limit 5\u003c/code\u003e\u003c/summary\u003e\n\n    object Eval$\n    trait ComposedContravariantCovariant[F, G] extends Contravariant[TypeLambda]\n    object Later$\n    object Show$\n    trait EvalSemigroup[A] extends Semigroup[Eval[A]]\n    Note: results truncated at 5. Use --limit to increase.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003ecellar search-external org.typelevel:cats-core_3:2.10.0 flatMap --limit 3\u003c/code\u003e\u003c/summary\u003e\n\n    cats.FlatMap — object FlatMap$\n    cats.FlatMap — trait FlatMap[F] extends Apply[F] with FlatMapArityFunctions[F]\n    cats.FlatMap$ — object FlatMap$\n    Note: results truncated at 3. Use --limit to increase.\n\n\u003c/details\u003e\n\n## Using cellar with Claude Code\n\n### As a plugin (recommended)\n\nInstall cellar as a Claude Code plugin for auto-updates:\n\n```sh\n/plugin marketplace add virtuslab/cellar\n/plugin install cellar@cellar\n```\n\nClaude will automatically have access to the `/cellar:cellar` skill and know when to use it.\n\n### Manual setup\n\nAlternatively, add the following to your project's `CLAUDE.md`:\n\n````markdown\n## Cellar\n\nWhen you need the API of a JVM dependency, use cellar. Always prefer cellar over hallucinating API signatures.\n\n### Project-aware commands (run from project root)\n\nFor querying the current project's code and dependencies (auto-detects build tool):\n\n    cellar get [--module \u003cname\u003e] \u003cfqn\u003e       # single symbol\n    cellar list [--module \u003cname\u003e] \u003cpackage\u003e  # explore a package\n    cellar search [--module \u003cname\u003e] \u003cquery\u003e  # find by name\n\n- Mill/sbt projects: `--module` is required (e.g. `--module lib`, `--module core`)\n- scala-cli projects: `--module` is not supported (omit it)\n- `--no-cache`: skip classpath cache, re-extract from build tool\n- `--java-home`: override JRE classpath\n\n### External commands (query arbitrary Maven coordinates)\n\nFor querying any published artifact by explicit coordinate:\n\n    cellar get-external \u003ccoordinate\u003e \u003cfqn\u003e       # single symbol\n    cellar list-external \u003ccoordinate\u003e \u003cpackage\u003e  # explore a package\n    cellar search-external \u003ccoordinate\u003e \u003cquery\u003e  # find by name\n    cellar get-source \u003ccoordinate\u003e \u003cfqn\u003e         # source code\n    cellar deps \u003ccoordinate\u003e                     # dependency tree\n\nCoordinates must be explicit: `group:artifact_3:version` (use `latest` for newest version).\n\n### Workflow\n\n1. **Don't know the package?** → `cellar search \u003cquery\u003e` or `cellar search-external \u003ccoordinate\u003e \u003cquery\u003e`\n2. **Know the package, not the type?** → `cellar list \u003cpackage\u003e` or `cellar list-external \u003ccoordinate\u003e \u003cpackage\u003e`\n3. **Know the type?** → `cellar get \u003cfqn\u003e` or `cellar get-external \u003ccoordinate\u003e \u003cfqn\u003e`\n4. **Need the source?** → `cellar get-source \u003ccoordinate\u003e \u003cfqn\u003e`\n````\n\n## Building from source\n\nRequires JDK 17+ and [Mill](https://mill-build.org/).\n\n```sh\n# Fat JAR\n./mill cli.assembly\njava -jar out/cli/assembly.dest/out.jar get-external org.typelevel:cats-core_3:2.10.0 cats.Monad\n\n# Native image (GraalVM)\n./mill cli.nativeImage\n\n# Wrapper script (for development)\n./scripts/cellar get-external org.typelevel:cats-core_3:2.10.0 cats.Monad\n```\n\n### Running tests\n\n```sh\n# Publish test fixtures to local Maven first\n./mill publishFixtures\n\n# Run tests\n./mill lib.test\n```\n\n### Installing a local build with Nix\n\n```sh\n./mill cli.nativeImage \u0026\u0026 nix profile install --impure .#dev\n```\n\n## Tech stack\n\nScala 3, Cats Effect, fs2, [tasty-query](https://github.com/scalacenter/tasty-query), [Coursier](https://get-coursier.io/), [decline](https://ben.kirw.in/decline/), Mill.\n\n## License\n\n[MPL-2.0](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvirtuslab%2Fcellar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvirtuslab%2Fcellar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvirtuslab%2Fcellar/lists"}