How to Check If a Conan Package Exists
If you're working with C or C++ projects, Conan has likely entered your workflow as a package manager that handles dependencies without the usual headaches. But before you can use a package, you need to know whether it actually exists — and that's less obvious than it sounds. Packages live in different remotes, versions vary, and the command syntax trips people up the first time.
Here's a clear breakdown of how package existence checks work in Conan, what factors shape the results, and why the same search can produce different outcomes depending on your setup.
What "Package Exists" Actually Means in Conan
Conan separates the concept of a recipe from a binary package. A recipe defines how a library is built — its name, version, options, and build instructions. A binary package is what gets generated when that recipe is compiled for a specific configuration (OS, compiler, architecture, build type).
When you ask "does this package exist?", you might mean:
- Does the recipe exist in a remote or local cache?
- Does a pre-compiled binary exist for my exact configuration?
- Is a specific version available?
These are three distinct questions, and Conan answers them differently.
Method 1: Using conan search
The most direct way to check for a package is the conan search command.
Search your local cache:
conan search <package-name> This checks what's already been downloaded to your machine. If nothing appears, the package may exist remotely but hasn't been fetched yet.
Search a remote repository:
conan search <package-name> --remote=<remote-name> For example, searching ConanCenter (the default public remote):
conan search zlib --remote=conancenter This returns all versions and configurations available for that package on that remote.
Search with a pattern:
conan search "zlib*" --remote=conancenter Wildcards are supported, which helps when you're unsure of exact naming.
Method 2: Using conan info
If you have a conanfile.txt or conanfile.py already set up, conan info checks whether the declared dependencies exist and are resolvable:
conan info . This resolves the full dependency graph and tells you which packages can or cannot be found. It's more useful during active development than as a standalone existence check, but it gives you a complete picture fast.
Method 3: Checking ConanCenter Directly 🔍
ConanCenter is the primary public registry for Conan packages, and it has a searchable web interface at conan.io/center. You can search by package name, browse available versions, and see supported configurations without running any commands locally.
This is useful when you're evaluating a dependency before adding it to your project, or when you're on a machine where Conan isn't installed yet.
Understanding Remotes and Why They Matter
A remote in Conan is a server that hosts package recipes and binaries. The result of your search depends entirely on which remotes are configured. Common remotes include:
| Remote | Description |
|---|---|
conancenter | Official public repository (community-maintained) |
conan-center (legacy) | Older Bintray-based remote, now deprecated |
| Custom corporate remote | Private packages for internal libraries |
| Local cache | Packages already on your machine |
To see which remotes are configured:
conan remote list If a package doesn't appear in your search, it may exist on a remote that isn't configured in your environment. Adding a remote and re-running the search will often surface packages that seemed missing.
Checking for Binary Compatibility, Not Just the Recipe
Finding a recipe doesn't guarantee a working installation. Conan packages are compiled against specific settings — things like:
- Operating system (Linux, Windows, macOS)
- Compiler and version (GCC 11, Clang 14, MSVC 2022)
- Architecture (x86_64, ARM)
- Build type (Release, Debug)
- C++ standard (C++14, C++17, C++20)
If a pre-compiled binary doesn't exist for your exact combination, Conan will either build from source (if the recipe allows it) or fail. You can check available binary configurations by running:
conan search <package/version> --remote=conancenter This lists every binary variant available for that package version. If your configuration isn't listed, you're looking at a source build.
Conan 1.x vs Conan 2.x Syntax Differences ⚠️
If your team is mid-migration between Conan versions, the commands behave differently. Conan 2.x introduced changes to the CLI that affect how searches work:
- Some flags were renamed or restructured
- The default remote handling changed
conan searchin Conan 2 requires explicit remote flags for remote queries
Always confirm which version you're running with conan --version and reference the version-specific documentation if commands return unexpected errors or empty results.
Variables That Change the Outcome
The same package search can produce completely different results depending on:
- Which remotes are configured — and in what priority order
- Conan version — 1.x and 2.x differ meaningfully
- Network access — corporate firewalls or proxy settings can silently block remote queries
- Package naming conventions — some packages use different names across remotes
- Cache state — a local cache hit won't reflect remote updates unless you refresh
A developer on macOS with Conan 2 and access to a private corporate remote will see entirely different results than a developer on Linux with Conan 1 and only ConanCenter configured — even searching for the same string.
When the Package Genuinely Doesn't Exist 🛠️
If a package isn't available on any configured remote, your options branch in different directions:
- Write your own recipe using
conan newand publish it to a private remote - Use a different package name — some libraries appear under aliases or have been renamed
- Check community forks — some packages moved from old remotes to ConanCenter under updated names
- Use system packages with
CMakeDepsor a wrapper recipe pointing to a system-installed library
What's available, and which path makes sense, depends on the library in question, your infrastructure, and how much control you have over your build environment.