CINXE.COM
Glossary of package terms | Dart
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="x-ua-compatible" content="ie=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><script>!function(e,t,a,n){e[n]=e[n]||[],e[n].push({"gtm.start":(new Date).getTime(),event:"gtm.js"});var g=t.getElementsByTagName(a)[0],m=t.createElement(a);m.async=!0,m.src="https://www.googletagmanager.com/gtm.js?id=GTM-5VSZM5J",g.parentNode.insertBefore(m,g)}(window,document,"script","dataLayer")</script><meta name="description" content="A glossary of terms relating to Dart's package management tool, pub."><title>Glossary of package terms | Dart</title><link rel="icon" sizes="64x64" href="/assets/img/logo/dart-64.png" eleventy:ignore><link href="/assets/img/touch-icon-iphone.png" rel="apple-touch-icon" eleventy:ignore><link href="/assets/img/touch-icon-ipad.png" rel="apple-touch-icon" sizes="152x152" eleventy:ignore><link href="/assets/img/touch-icon-iphone-retina.png" rel="apple-touch-icon" sizes="180x180" eleventy:ignore><link href="/assets/img/touch-icon-ipad-retina.png" rel="apple-touch-icon" sizes="167x167" eleventy:ignore><meta name="twitter:card" content="summary"><meta name="twitter:site" content="@dart_lang"><meta name="twitter:title" content="Glossary of package terms"><meta name="twitter:description" content="A glossary of terms relating to Dart's package management tool, pub."><meta property="og:title" content="Glossary of package terms"><meta property="og:description" content="A glossary of terms relating to Dart's package management tool, pub."><meta property="og:url" content="/tools/pub/glossary/"><meta property="og:image" content="/assets/img/logo/dart-logo-for-shares.png?2" eleventy:ignore><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Google+Sans:wght@400;500;700&display=swap" rel="stylesheet"><link href="https://fonts.googleapis.com/css2?family=Google+Sans+Display:wght@400&display=swap" rel="stylesheet"><link href="https://fonts.googleapis.com/css2?family=Google+Sans+Mono:wght@400;500;700&display=swap" rel="stylesheet"><link href="https://fonts.googleapis.com/css2?family=Google+Sans+Text:wght@400;500;700&display=swap" rel="stylesheet"><link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0..1,0" rel="stylesheet"><link rel="stylesheet" href="/assets/css/main.css?v=3"><script src="/assets/js/os-tabs.js?v=3"></script><script src="/assets/js/main.js?v=3"></script><script>!function(e,a,t,n,c,o,s){e.GoogleAnalyticsObject=c,e[c]=e[c]||function(){(e[c].q=e[c].q||[]).push(arguments)},e[c].l=1*new Date,o=a.createElement(t),s=a.getElementsByTagName(t)[0],o.async=1,o.src="//www.google-analytics.com/analytics.js",s.parentNode.insertBefore(o,s)}(window,document,"script",0,"ga"),ga("create","UA-26406144-4","auto"),ga("send","pageview")</script></head><body class="default.html"><a id="skip-to-main" class="filled-button" href="#site-content-title" tabindex="1">Skip to main content</a><section id="cookie-notice"><div class="container"><p>dart.dev uses cookies from Google to deliver and enhance the quality of its services and to analyze traffic.</p><div class="button-group"><a class="text-button" href="https://policies.google.com/technologies/cookies" target="_blank" rel="noopener">Learn more</a> <button id="cookie-consent" class="filled-button">OK, got it</button></div></div></section><noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-5VSZM5J" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript><div id="site-banner" role="alert"><p>Announcing Dart 3.7! Find out about updates to the language, analyzer, pub.dev, and more, in the <a href="https://medium.com/dartlang/announcing-dart-3-7-bf864a1b195c" target="_blank">blog post</a>.</p></div><header id="site-header"><nav id="mainnav"><div id="menu-toggle"><span class="material-symbols" title="Toggle side navigation menu." aria-label="Toggle side navigation menu." type="button">menu</span></div><a href="/" class="brand" title="Dart"><img src="/assets/img/logo/logo-white-text.svg" alt="Dart"></a><ul class="navbar"><li><a href="/overview" class="nav-link">Overview</a></li><li class="mainnav__get-started"><a href="/docs" class="nav-link active"><span>Docs</span></a></li><li><a href="/community" class="nav-link">Community</a></li><li><a href="/#try-dart" class="nav-link">Try Dart</a></li><li><a href="/get-dart" class="nav-link">Get Dart</a></li><li class="searchfield"><form action="/search" class="site-header-search form-inline" id="cse-search-box"><input type="hidden" name="cx" value="011220921317074318178:_yy-tmb5t_i"> <input type="hidden" name="ie" value="UTF-8"> <input type="hidden" name="hl" value="en"> <input class="site-header-searchfield form-control search-field" type="search" name="q" id="search-main" autocomplete="off" placeholder="Search" aria-label="Search"></form></li></ul></nav></header><div id="site-below-header"><div id="site-main-row"><div id="sidenav"><form action="/search/" class="site-header-search form-inline"><input class="site-header-searchfield form-control search-field" type="search" name="q" id="search-side" autocomplete="off" placeholder="Search" aria-label="Search"></form><ul class="navbar-nav"><li aria-hidden="true"><div class="sidenav-divider"></div></li><li class="nav-item"><a href="/overview" class="nav-link">Overview</a></li><li class="nav-item"><a href="/community" class="nav-link">Community</a></li><li class="nav-item"><a href="https://dartpad.dev" class="nav-link">Try Dart</a></li><li class="nav-item"><a href="/get-dart" class="nav-link">Get Dart</a></li><li class="nav-item"><a href="/docs" class="nav-link">Docs</a></li><li aria-hidden="true"><div class="sidenav-divider"></div></li></ul><ul class="nav"><li class="nav-item"><button class="nav-link collapsed collapsible" data-toggle="collapse" data-target="#-sidenav-1" role="button" aria-expanded="false" aria-controls="-sidenav-1"><span>Language</span> <span class="material-symbols expander" aria-hidden="true">expand_more</span></button><ul class="nav collapse" id="-sidenav-1"><li class="nav-item"><a class="nav-link" href="/language"><div><span>Introduction</span></div></a></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#-sidenav-1-2" role="button" aria-expanded="false" aria-controls="-sidenav-1-2"><span>Syntax basics</span> <span class="material-symbols expander" aria-hidden="true">expand_more</span></button><ul class="nav collapse" id="-sidenav-1-2"><li class="nav-item"><a class="nav-link" href="/language/variables"><div><span>Variables</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/operators"><div><span>Operators</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/comments"><div><span>Comments</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/metadata"><div><span>Metadata</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/libraries"><div><span>Libraries & imports</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/keywords"><div><span>Keywords</span></div></a></li></ul></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#-sidenav-1-3" role="button" aria-expanded="false" aria-controls="-sidenav-1-3"><span>Types</span> <span class="material-symbols expander" aria-hidden="true">expand_more</span></button><ul class="nav collapse" id="-sidenav-1-3"><li class="nav-item"><a class="nav-link" href="/language/built-in-types"><div><span>Built-in types</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/records"><div><span>Records</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/collections"><div><span>Collections</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/generics"><div><span>Generics</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/typedefs"><div><span>Typedefs</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/type-system"><div><span>Type system</span></div></a></li></ul></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#-sidenav-1-4" role="button" aria-expanded="false" aria-controls="-sidenav-1-4"><span>Patterns</span> <span class="material-symbols expander" aria-hidden="true">expand_more</span></button><ul class="nav collapse" id="-sidenav-1-4"><li class="nav-item"><a class="nav-link" href="/language/patterns"><div><span>Overview & usage</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/pattern-types"><div><span>Pattern types</span></div></a></li><li class="nav-item"><a class="nav-link" href="https://codelabs.developers.google.com/codelabs/dart-patterns-records" target="_blank" rel="noopener"><div><span>Applied tutorial</span><span class="material-symbols" aria-hidden="true">open_in_new</span></div></a></li></ul></li><li class="nav-item"><a class="nav-link" href="/language/functions"><div><span>Functions</span></div></a></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#-sidenav-1-6" role="button" aria-expanded="false" aria-controls="-sidenav-1-6"><span>Control flow</span> <span class="material-symbols expander" aria-hidden="true">expand_more</span></button><ul class="nav collapse" id="-sidenav-1-6"><li class="nav-item"><a class="nav-link" href="/language/loops"><div><span>Loops</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/branches"><div><span>Branches</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/error-handling"><div><span>Error handling</span></div></a></li></ul></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#-sidenav-1-7" role="button" aria-expanded="false" aria-controls="-sidenav-1-7"><span>Classes & objects</span> <span class="material-symbols expander" aria-hidden="true">expand_more</span></button><ul class="nav collapse" id="-sidenav-1-7"><li class="nav-item"><a class="nav-link" href="/language/classes"><div><span>Classes</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/constructors"><div><span>Constructors</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/methods"><div><span>Methods</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/extend"><div><span>Extend a class</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/mixins"><div><span>Mixins</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/enums"><div><span>Enums</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/extension-methods"><div><span>Extension methods</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/extension-types"><div><span>Extension types</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/callable-objects"><div><span>Callable objects</span></div></a></li></ul></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#-sidenav-1-8" role="button" aria-expanded="false" aria-controls="-sidenav-1-8"><span>Class modifiers</span> <span class="material-symbols expander" aria-hidden="true">expand_more</span></button><ul class="nav collapse" id="-sidenav-1-8"><li class="nav-item"><a class="nav-link" href="/language/class-modifiers"><div><span>Overview & usage</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/class-modifiers-for-apis"><div><span>Class modifiers for API maintainers</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/modifier-reference"><div><span>Reference</span></div></a></li></ul></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#-sidenav-1-9" role="button" aria-expanded="false" aria-controls="-sidenav-1-9"><span>Concurrency</span> <span class="material-symbols expander" aria-hidden="true">expand_more</span></button><ul class="nav collapse" id="-sidenav-1-9"><li class="nav-item"><a class="nav-link" href="/language/concurrency"><div><span>Overview</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/async"><div><span>Asynchronous support</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/isolates"><div><span>Isolates</span></div></a></li></ul></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#-sidenav-1-10" role="button" aria-expanded="false" aria-controls="-sidenav-1-10"><span>Null safety</span> <span class="material-symbols expander" aria-hidden="true">expand_more</span></button><ul class="nav collapse" id="-sidenav-1-10"><li class="nav-item"><a class="nav-link" href="/null-safety"><div><span>Sound null safety</span></div></a></li><li class="nav-item"><a class="nav-link" href="/null-safety/migration-guide"><div><span>Migrating to null safety</span></div></a></li><li class="nav-item"><a class="nav-link" href="/null-safety/understanding-null-safety"><div><span>Understanding null safety</span></div></a></li><li class="nav-item"><a class="nav-link" href="/null-safety/unsound-null-safety"><div><span>Unsound null safety</span></div></a></li><li class="nav-item"><a class="nav-link" href="/null-safety/faq"><div><span>FAQ</span></div></a></li></ul></li></ul></li><li class="nav-item"><button class="nav-link collapsed collapsible" data-toggle="collapse" data-target="#-sidenav-2" role="button" aria-expanded="false" aria-controls="-sidenav-2"><span>Core libraries</span> <span class="material-symbols expander" aria-hidden="true">expand_more</span></button><ul class="nav collapse" id="-sidenav-2"><li class="nav-item"><a class="nav-link" href="/libraries"><div><span>Overview</span></div></a></li><li class="nav-item"><a class="nav-link" href="/libraries/dart-core"><div><span>dart:core</span></div></a></li><li class="nav-item"><a class="nav-link" href="/libraries/dart-async"><div><span>dart:async</span></div></a></li><li class="nav-item"><a class="nav-link" href="/libraries/dart-math"><div><span>dart:math</span></div></a></li><li class="nav-item"><a class="nav-link" href="/libraries/dart-convert"><div><span>dart:convert</span></div></a></li><li class="nav-item"><a class="nav-link" href="/libraries/dart-io"><div><span>dart:io</span></div></a></li><li class="nav-item"><a class="nav-link" href="/interop/js-interop"><div><span>dart:js_interop</span></div></a></li><div class="sidenav-divider"></div><li class="nav-item"><a class="nav-link" href="/libraries/collections/iterables"><div><span>Iterable collections</span></div></a></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#-sidenav-2-10" role="button" aria-expanded="false" aria-controls="-sidenav-2-10"><span>Asynchronous programming</span> <span class="material-symbols expander" aria-hidden="true">expand_more</span></button><ul class="nav collapse" id="-sidenav-2-10"><li class="nav-item"><a class="nav-link" href="/libraries/async/async-await"><div><span>Tutorial</span></div></a></li><li class="nav-item"><a class="nav-link" href="/libraries/async/futures-error-handling"><div><span>Futures and error handling</span></div></a></li><li class="nav-item"><a class="nav-link" href="/libraries/async/using-streams"><div><span>Using streams</span></div></a></li><li class="nav-item"><a class="nav-link" href="/libraries/async/creating-streams"><div><span>Creating streams</span></div></a></li></ul></li></ul></li><li class="nav-item"><button class="nav-link collapsed collapsible" data-toggle="collapse" data-target="#-sidenav-3" role="button" aria-expanded="false" aria-controls="-sidenav-3"><span>Effective Dart</span> <span class="material-symbols expander" aria-hidden="true">expand_more</span></button><ul class="nav collapse" id="-sidenav-3"><li class="nav-item"><a class="nav-link" href="/effective-dart"><div><span>Overview</span></div></a></li><li class="nav-item"><a class="nav-link" href="/effective-dart/style"><div><span>Style</span></div></a></li><li class="nav-item"><a class="nav-link" href="/effective-dart/documentation"><div><span>Documentation</span></div></a></li><li class="nav-item"><a class="nav-link" href="/effective-dart/usage"><div><span>Usage</span></div></a></li><li class="nav-item"><a class="nav-link" href="/effective-dart/design"><div><span>Design</span></div></a></li></ul></li><li class="nav-item"><button class="nav-link active collapsible" data-toggle="collapse" data-target="#-sidenav-4" role="button" aria-expanded="true" aria-controls="-sidenav-4"><span>Packages</span> <span class="material-symbols expander" aria-hidden="true">expand_more</span></button><ul class="nav collapse show" id="-sidenav-4"><li class="nav-item"><a class="nav-link" href="/tools/pub/packages"><div><span>How to use packages</span></div></a></li><li class="nav-item"><a class="nav-link" href="/resources/useful-packages"><div><span>Commonly used packages</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/pub/create-packages"><div><span>Creating packages</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/pub/publishing"><div><span>Publishing packages</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/pub/writing-package-pages"><div><span>Writing package pages</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/pub/workspaces"><div><span>Workspaces (monorepo support)</span></div></a></li><li class="nav-item"><button class="nav-link active collapsible" data-toggle="collapse" data-target="#-sidenav-4-7" role="button" aria-expanded="true" aria-controls="-sidenav-4-7"><span>Package reference</span> <span class="material-symbols expander" aria-hidden="true">expand_more</span></button><ul class="nav collapse show" id="-sidenav-4-7"><li class="nav-item"><a class="nav-link" href="/tools/pub/dependencies"><div><span>Dependencies</span></div></a></li><li class="nav-item"><a class="nav-link active" href="/tools/pub/glossary"><div><span>Glossary</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/pub/package-layout"><div><span>Package layout conventions</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/pub/environment-variables"><div><span>Pub environment variables</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/pub/pubspec"><div><span>Pubspec file</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/pub/troubleshoot"><div><span>Troubleshooting pub</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/pub/verified-publishers"><div><span>Verified publishers</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/pub/security-advisories"><div><span>Security advisories</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/pub/versioning"><div><span>Versioning</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/pub/custom-package-repositories"><div><span>Custom package repositories</span></div></a></li></ul></li><li class="nav-item"><a class="nav-link" href="/tools/pub/private-files"><div><span>What not to commit</span></div></a></li></ul></li><li class="nav-item"><button class="nav-link collapsed collapsible" data-toggle="collapse" data-target="#-sidenav-5" role="button" aria-expanded="false" aria-controls="-sidenav-5"><span>Development</span> <span class="material-symbols expander" aria-hidden="true">expand_more</span></button><ul class="nav collapse" id="-sidenav-5"><li class="nav-item"><a class="nav-link" href="/libraries/serialization/json"><div><span>JSON serialization</span></div></a></li><li class="nav-item"><a class="nav-link" href="/resources/language/number-representation"><div><span>Number representation</span></div></a></li><li class="nav-item"><a class="nav-link" href="/resources/google-apis"><div><span>Google APIs</span></div></a></li><li class="nav-item"><a class="nav-link" href="/multiplatform-apps"><div><span>Multi-platform apps</span></div></a></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#-sidenav-5-5" role="button" aria-expanded="false" aria-controls="-sidenav-5-5"><span>Command-line & server apps</span> <span class="material-symbols expander" aria-hidden="true">expand_more</span></button><ul class="nav collapse" id="-sidenav-5-5"><li class="nav-item"><a class="nav-link" href="/server"><div><span>Overview</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tutorials/server/get-started"><div><span>Get started</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tutorials/server/cmdline"><div><span>Write command-line apps</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tutorials/server/fetch-data"><div><span>Fetch data from the internet</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tutorials/server/httpserver"><div><span>Write HTTP servers</span></div></a></li><li class="nav-item"><a class="nav-link" href="/server/libraries"><div><span>Libraries & packages</span></div></a></li><li class="nav-item"><a class="nav-link" href="/server/google-cloud"><div><span>Google Cloud</span></div></a></li></ul></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#-sidenav-5-6" role="button" aria-expanded="false" aria-controls="-sidenav-5-6"><span>Web apps</span> <span class="material-symbols expander" aria-hidden="true">expand_more</span></button><ul class="nav collapse" id="-sidenav-5-6"><li class="nav-item"><a class="nav-link" href="/web"><div><span>Overview</span></div></a></li><li class="nav-item"><a class="nav-link" href="/web/get-started"><div><span>Get started</span></div></a></li><li class="nav-item"><a class="nav-link" href="/web/deployment"><div><span>Deployment</span></div></a></li><li class="nav-item"><a class="nav-link" href="/web/libraries"><div><span>Libraries & packages</span></div></a></li><li class="nav-item"><a class="nav-link" href="/web/wasm"><div><span>Wasm compilation</span></div></a></li></ul></li><li class="nav-item"><a class="nav-link" href="/libraries/core/environment-declarations"><div><span>Environment declarations</span></div></a></li></ul></li><li class="nav-item"><button class="nav-link collapsed collapsible" data-toggle="collapse" data-target="#-sidenav-6" role="button" aria-expanded="false" aria-controls="-sidenav-6"><span>Interoperability</span> <span class="material-symbols expander" aria-hidden="true">expand_more</span></button><ul class="nav collapse" id="-sidenav-6"><li class="nav-item"><a class="nav-link" href="/interop/c-interop"><div><span>C interop</span></div></a></li><li class="nav-item"><a class="nav-link" href="/interop/objective-c-interop"><div><span>Objective-C & Swift interop</span></div></a></li><li class="nav-item"><a class="nav-link" href="/interop/java-interop"><div><span>Java & Kotlin interop</span></div></a></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#-sidenav-6-4" role="button" aria-expanded="false" aria-controls="-sidenav-6-4"><span>JavaScript interop</span> <span class="material-symbols expander" aria-hidden="true">expand_more</span></button><ul class="nav collapse" id="-sidenav-6-4"><li class="nav-item"><a class="nav-link" href="/interop/js-interop"><div><span>Overview</span></div></a></li><li class="nav-item"><a class="nav-link" href="/interop/js-interop/usage"><div><span>Usage</span></div></a></li><li class="nav-item"><a class="nav-link" href="/interop/js-interop/js-types"><div><span>JS types</span></div></a></li><li class="nav-item"><a class="nav-link" href="/interop/js-interop/tutorials"><div><span>Tutorials</span></div></a></li><li class="nav-item"><a class="nav-link" href="/interop/js-interop/past-js-interop"><div><span>Past JS interop</span></div></a></li><div class="sidenav-divider"></div><li class="nav-item"><a class="nav-link" href="/interop/js-interop/package-web"><div><span>Web interop</span></div></a></li></ul></li></ul></li><li class="nav-item"><button class="nav-link collapsed collapsible" data-toggle="collapse" data-target="#-sidenav-7" role="button" aria-expanded="false" aria-controls="-sidenav-7"><span>Tools & techniques</span> <span class="material-symbols expander" aria-hidden="true">expand_more</span></button><ul class="nav collapse" id="-sidenav-7"><li class="nav-item"><a class="nav-link" href="/tools"><div><span>Overview</span></div></a></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#-sidenav-7-2" role="button" aria-expanded="false" aria-controls="-sidenav-7-2"><span>Editors & debuggers</span> <span class="material-symbols expander" aria-hidden="true">expand_more</span></button><ul class="nav collapse" id="-sidenav-7-2"><li class="nav-item"><a class="nav-link" href="/tools/jetbrains-plugin"><div><span>IntelliJ & Android Studio</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/vs-code"><div><span>VS Code</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/dart-devtools"><div><span>Dart DevTools</span></div></a></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#-sidenav-7-2-4" role="button" aria-expanded="false" aria-controls="-sidenav-7-2-4"><span>DartPad</span> <span class="material-symbols expander" aria-hidden="true">expand_more</span></button><ul class="nav collapse" id="-sidenav-7-2-4"><li class="nav-item"><a class="nav-link" href="/tools/dartpad"><div><span>Overview</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/dartpad/troubleshoot"><div><span>Troubleshooting DartPad</span></div></a></li></ul></li></ul></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#-sidenav-7-3" role="button" aria-expanded="false" aria-controls="-sidenav-7-3"><span>Command-line tools</span> <span class="material-symbols expander" aria-hidden="true">expand_more</span></button><ul class="nav collapse" id="-sidenav-7-3"><li class="nav-item"><button class="nav-link collapsible" data-toggle="collapse" data-target="#-sidenav-7-3-1" role="button" aria-expanded="true" aria-controls="-sidenav-7-3-1"><span>Dart SDK</span> <span class="material-symbols expander" aria-hidden="true">expand_more</span></button><ul class="nav collapse show" id="-sidenav-7-3-1"><li class="nav-item"><a class="nav-link" href="/tools/sdk"><div><span>Overview</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/dart-tool"><div><span>dart</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/dart-analyze"><div><span>dart analyze</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/dart-compile"><div><span>dart compile</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/dart-create"><div><span>dart create</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/dart-doc"><div><span>dart doc</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/dart-fix"><div><span>dart fix</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/dart-format"><div><span>dart format</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/dart-info"><div><span>dart info</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/pub/cmd"><div><span>dart pub</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/dart-run"><div><span>dart run</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/dart-test"><div><span>dart test</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/dartaotruntime"><div><span>dartaotruntime</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/experiment-flags"><div><span>Experiment flags</span></div></a></li></ul></li><li class="nav-item"><button class="nav-link collapsible" data-toggle="collapse" data-target="#-sidenav-7-3-2" role="button" aria-expanded="true" aria-controls="-sidenav-7-3-2"><span>Other command-line tools</span> <span class="material-symbols expander" aria-hidden="true">expand_more</span></button><ul class="nav collapse show" id="-sidenav-7-3-2"><li class="nav-item"><a class="nav-link" href="/tools/build_runner"><div><span>build_runner</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/webdev"><div><span>webdev</span></div></a></li></ul></li></ul></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#-sidenav-7-4" role="button" aria-expanded="false" aria-controls="-sidenav-7-4"><span>Static analysis</span> <span class="material-symbols expander" aria-hidden="true">expand_more</span></button><ul class="nav collapse" id="-sidenav-7-4"><li class="nav-item"><a class="nav-link" href="/tools/analysis"><div><span>Customizing static analysis</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/non-promotion-reasons"><div><span>Fixing type promotion failures</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/linter-rules"><div><span>Linter rules</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/diagnostic-messages"><div><span>Diagnostic messages</span></div></a></li></ul></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#-sidenav-7-5" role="button" aria-expanded="false" aria-controls="-sidenav-7-5"><span>Testing & optimization</span> <span class="material-symbols expander" aria-hidden="true">expand_more</span></button><ul class="nav collapse" id="-sidenav-7-5"><li class="nav-item"><a class="nav-link" href="/tools/testing"><div><span>Testing</span></div></a></li><li class="nav-item"><a class="nav-link" href="/web/debugging"><div><span>Debugging web apps</span></div></a></li></ul></li></ul></li><li aria-hidden="true"><div class="sidenav-divider"></div></li><li class="nav-item"><button class="nav-link collapsed collapsible" data-toggle="collapse" data-target="#-sidenav-9" role="button" aria-expanded="false" aria-controls="-sidenav-9"><span>Resources</span> <span class="material-symbols expander" aria-hidden="true">expand_more</span></button><ul class="nav collapse" id="-sidenav-9"><li class="nav-item"><a class="nav-link" href="/resources/dart-cheatsheet"><div><span>Language cheatsheet</span></div></a></li><li class="nav-item"><a class="nav-link" href="/resources/breaking-changes"><div><span>Breaking changes</span></div></a></li><li class="nav-item"><a class="nav-link" href="/resources/language/evolution"><div><span>Language evolution</span></div></a></li><li class="nav-item"><a class="nav-link" href="/resources/language/spec"><div><span>Language specification</span></div></a></li><li class="nav-item"><a class="nav-link" href="/resources/dart-3-migration"><div><span>Dart 3 migration guide</span></div></a></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#-sidenav-9-6" role="button" aria-expanded="false" aria-controls="-sidenav-9-6"><span>Coming from ...</span> <span class="material-symbols expander" aria-hidden="true">expand_more</span></button><ul class="nav collapse" id="-sidenav-9-6"><li class="nav-item"><a class="nav-link" href="/resources/coming-from/js-to-dart"><div><span>JavaScript to Dart</span></div></a></li><li class="nav-item"><a class="nav-link" href="/resources/coming-from/swift-to-dart"><div><span>Swift to Dart</span></div></a></li></ul></li><div class="sidenav-divider"></div><li class="nav-item"><a class="nav-link" href="/resources/faq"><div><span>FAQ</span></div></a></li><li class="nav-item"><a class="nav-link" href="/resources/glossary"><div><span>Glossary</span></div></a></li><li class="nav-item"><a class="nav-link" href="/resources/books"><div><span>Books</span></div></a></li><li class="nav-item"><a class="nav-link" href="/resources/videos"><div><span>Videos</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tutorials"><div><span>Tutorials</span></div></a></li></ul></li><li class="nav-item"><button class="nav-link collapsible" data-toggle="collapse" data-target="#-sidenav-10" role="button" aria-expanded="true" aria-controls="-sidenav-10"><span>Related sites</span> <span class="material-symbols expander" aria-hidden="true">expand_more</span></button><ul class="nav collapse show" id="-sidenav-10"><li class="nav-item"><a class="nav-link" href="https://api.dart.dev" target="_blank" rel="noopener"><div><span>API reference</span><span class="material-symbols" aria-hidden="true">open_in_new</span></div></a></li><li class="nav-item"><a class="nav-link" href="https://medium.com/dartlang" target="_blank" rel="noopener"><div><span>Blog</span><span class="material-symbols" aria-hidden="true">open_in_new</span></div></a></li><li class="nav-item"><a class="nav-link" href="https://dartpad.dev" target="_blank" rel="noopener"><div><span>DartPad (online editor)</span><span class="material-symbols" aria-hidden="true">open_in_new</span></div></a></li><li class="nav-item"><a class="nav-link" href="https://flutter.dev" target="_blank" rel="noopener"><div><span>Flutter</span><span class="material-symbols" aria-hidden="true">open_in_new</span></div></a></li><li class="nav-item"><a class="nav-link" href="https://pub.dev" target="_blank" rel="noopener"><div><span>Package site</span><span class="material-symbols" aria-hidden="true">open_in_new</span></div></a></li></ul></li></ul></div><main id="page-content"><div id="site-toc--side" class="site-toc"><header class="site-toc__title">Contents</header><ul class="section-nav"><li class="toc-entry nav-item"><a class="nav-link" href="#application-package">Application package</a></li><li class="toc-entry nav-item"><a class="nav-link" href="#content-hashes">Content hashes</a></li><li class="toc-entry nav-item"><a class="nav-link" href="#dependency">Dependency</a></li><li class="toc-entry nav-item"><a class="nav-link" href="#entrypoint">Entrypoint</a></li><li class="toc-entry nav-item"><a class="nav-link" href="#entrypoint-directory">Entrypoint directory</a></li><li class="toc-entry nav-item"><a class="nav-link" href="#immediate-dependency">Immediate dependency</a></li><li class="toc-entry nav-item"><a class="nav-link" href="#library">Library</a></li><li class="toc-entry nav-item"><a class="nav-link" href="#lockfile">Lockfile</a></li><li class="toc-entry nav-item"><a class="nav-link" href="#package">Package</a></li><li class="toc-entry nav-item"><a class="nav-link" href="#sdk-constraint">SDK constraint</a></li><li class="toc-entry nav-item"><a class="nav-link" href="#source">Source</a></li><li class="toc-entry nav-item"><a class="nav-link" href="#system-cache">System cache</a></li><li class="toc-entry nav-item"><a class="nav-link" href="#transitive-dependency">Transitive dependency</a></li><li class="toc-entry nav-item"><a class="nav-link" href="#uploader">Uploader</a></li><li class="toc-entry nav-item"><a class="nav-link" href="#verified-publisher">Verified publisher</a></li><li class="toc-entry nav-item"><a class="nav-link" href="#version-constraint">Version constraint</a></li><li class="toc-entry nav-item"><a class="nav-link" href="#workspace">Workspace</a></li></ul></div><article><div class="content"><div id="site-content-title"><h1>Glossary of package terms</h1></div><div id="site-toc--inline" class="site-toc toc-collapsible toc-collapsed"><header class="site-toc__title">Contents <span class="site-toc--inline__toggle toc-toggle-down"><i class="material-symbols">keyboard_arrow_down</i></span> <span class="site-toc--inline__toggle toc-toggle-up"><i class="material-symbols">keyboard_arrow_up</i></span></header><ul class="section-nav"><li class="toc-entry"><a href="#application-package">Application package</a></li><li class="toc-entry"><a href="#content-hashes">Content hashes</a></li><li class="toc-entry"><a href="#dependency">Dependency</a></li><li class="toc-entry"><a href="#entrypoint">Entrypoint</a></li><li class="toc-entry"><a href="#entrypoint-directory">Entrypoint directory</a></li><li class="toc-entry"><a href="#immediate-dependency">Immediate dependency</a></li><li class="toc-entry"><a href="#library">Library</a></li><li class="toc-entry"><a href="#lockfile">Lockfile</a></li><li class="toc-entry"><a href="#package">Package</a></li><li class="toc-entry"><a href="#sdk-constraint">SDK constraint</a></li><li class="toc-entry"><a href="#source">Source</a></li><li class="toc-entry"><a href="#system-cache">System cache</a></li><li class="toc-entry"><a href="#transitive-dependency">Transitive dependency</a></li><li class="toc-entry"><a href="#uploader">Uploader</a></li><li class="toc-entry"><a href="#verified-publisher">Verified publisher</a></li><li class="toc-entry"><a href="#version-constraint">Version constraint</a></li><li class="toc-entry"><a href="#workspace">Workspace</a></li></ul><span class="site-toc--inline__toggle toc-toggle-more-items"><i class="material-symbols">more_horiz</i></span></div><p>The following terms are used in the documentation for <a href="/tools/pub/packages">package management</a> and the <a href="/tools/pub/cmd">pub tool</a>.</p><div class="header-wrapper"><h2 id="application-package">Application package</h2><a class="heading-link" href="#application-package" aria-label="Link to 'Application package' section">#</a></div><p>A package that contains a program or app, with a <a href="#entrypoint">main entrypoint</a>. Meant to be run directly, either on the command line or in a browser.</p><p>Application packages may have <a href="#dependency">dependencies</a> on other packages, but are never depended on themselves. Unlike regular <a href="#package">packages</a>, they are not intended to be shared.</p><p>Application packages should check their <a href="#lockfile">lockfiles</a> into source control, so that everyone working on the application and every location the application is deployed has a consistent set of dependencies. Because their dependencies are constrained by the lockfile, application packages usually specify <code>any</code> for their dependencies' <a href="#version-constraint">version constraints</a>.</p><div class="header-wrapper"><h2 id="content-hashes">Content hashes</h2><a class="heading-link" href="#content-hashes" aria-label="Link to 'Content hashes' section">#</a></div><p>The pub.dev repository maintains a sha256 hash of each package version it hosts. Pub clients can use this hash to validate the integrity of downloaded packages, and protect against changes on the repository.</p><p>When <code>dart pub get</code> downloads a package, it computes the hash of the downloaded archive. The hash of each hosted dependency is stored with the <a href="/tools/pub/cmd/pub-get">resolution</a> in the <a href="#lockfile">lockfile</a>.</p><p>The pub client uses this content hash to verify that running <code>dart pub get</code> again using the same lockfile, potentially on a different computer, uses exactly the same packages.</p><p>If the locked hash doesn't match what's currently in the pub cache, pub redownloads the archive. If it still doesn't match, the lockfile updates and a warning is printed. For example:</p><div class="code-block-wrapper language-plaintext"><div class="code-block-body"><pre class="shiki dash-light" tabindex="0"><code><span class="line"><span>$ dart pub get</span></span> <span class="line"><span>Resolving dependencies...</span></span> <span class="line"><mark class="highlight"><span>Cached version of foo-1.0.0 has wrong hash - redownloading.</span></mark></span> <span class="line"><span> ~ foo 1.0.0 (was 1.0.0)</span></span> <span class="line"><mark class="highlight"><span>The existing content-hash from pubspec.lock doesn't match contents for:</span></mark></span> <span class="line"><span> * foo-1.0.0 from "pub.dev"</span></span> <span class="line"><span>This indicates one of:</span></span> <span class="line"><span> * The content has changed on the server since you created the pubspec.lock.</span></span> <span class="line"><span> * The pubspec.lock has been corrupted.</span></span> <span class="line"><span> </span></span> <span class="line"><mark class="highlight"><span>The content-hashes in pubspec.lock has been updated.</span></mark></span> <span class="line"><span></span></span> <span class="line"><span>For more information see:</span></span> <span class="line"><span>https://dart.dev/go/content-hashes</span></span> <span class="line"><span></span></span> <span class="line"><span>Changed 1 dependency!</span></span></code></pre></div></div><p>The updated content hash will show up in your version control diff, and should make you suspicious.</p><p>To make a discrepancy become an error instead of a warning, use <a href="/tools/pub/cmd/pub-get#enforce-lockfile"><code>dart pub get --enforce-lockfile</code></a>. It will cause the resolution to fail if it cannot find package archives with the same hashes, without updating the lockfile.</p><div class="code-block-wrapper language-plaintext"><div class="code-block-body"><pre class="shiki dash-light" tabindex="0"><code><span class="line"><span>$ dart pub get </span><mark class="highlight"><span>--enforce-lockfile</span></mark></span> <span class="line"><span>Resolving dependencies...</span></span> <span class="line"><span>Cached version of foo-1.0.0 has wrong hash - redownloading.</span></span> <span class="line"><span>~ foo 1.0.0 (was 1.0.0)</span></span> <span class="line"><span>The existing content-hash from pubspec.lock doesn't match contents for:</span></span> <span class="line"><span> * foo-1.0.0 from "pub.dev"</span></span> <span class="line"><span></span></span> <span class="line"><span>This indicates one of:</span></span> <span class="line"><span> * The content has changed on the server since you created the pubspec.lock.</span></span> <span class="line"><span> * The pubspec.lock has been corrupted.</span></span> <span class="line"><span></span></span> <span class="line"><span>For more information see:</span></span> <span class="line"><span>https://dart.dev/go/content-hashes</span></span> <span class="line"><mark class="highlight"><span>Would change 1 dependency.</span></mark></span> <span class="line"><mark class="highlight"><span>Unable to satisfy `pubspec.yaml` using `pubspec.lock`.</span></mark></span> <span class="line"><span></span></span> <span class="line"><span>To update `pubspec.lock` run `dart pub get` without</span></span> <span class="line"><span>`--enforce-lockfile`.</span></span></code></pre></div></div><div class="header-wrapper"><h2 id="dependency">Dependency</h2><a class="heading-link" href="#dependency" aria-label="Link to 'Dependency' section">#</a></div><p>Another package that your package relies on. If your package wants to import code from some other package, that package must be a dependency. Dependencies are specified in your package's <a href="/tools/pub/pubspec">pubspec</a> and described in <a href="/tools/pub/dependencies">Package dependencies</a>.</p><p>To see the dependencies used by a package, use <a href="/tools/pub/cmd/pub-deps"><code>pub deps</code></a>.</p><div class="header-wrapper"><h2 id="entrypoint">Entrypoint</h2><a class="heading-link" href="#entrypoint" aria-label="Link to 'Entrypoint' section">#</a></div><p>In the general context of Dart, an <em>entrypoint</em> is a Dart library that is directly invoked by a Dart implementation. When you reference a Dart library in a <code><script></code> tag or pass it as a command-line argument to the standalone Dart VM, that library is the entrypoint. In other words, it's usually the <code>.dart</code> file that contains <code>main()</code>.</p><p>In the context of pub, an <em>entrypoint package</em> or <em>root package</em> is the root of a dependency graph. It will usually be an application. When you run your app, it's the entrypoint package. Every other package it depends on will not be an entrypoint in that context.</p><p>A package can be an entrypoint in some contexts and not in others. Say your app uses a package <code>A</code>. When you run your app, <code>A</code> is not the entrypoint package. However, if you go over to <code>A</code> and execute its tests, in that context, it <em>is</em> the entrypoint since your app isn't involved.</p><div class="header-wrapper"><h2 id="entrypoint-directory">Entrypoint directory</h2><a class="heading-link" href="#entrypoint-directory" aria-label="Link to 'Entrypoint directory' section">#</a></div><p>A directory inside your package that is allowed to contain <a href="#entrypoint">Dart entrypoints</a>.</p><p>Pub has a list of these directories: <code>benchmark</code>, <code>bin</code>, <code>example</code>, <code>test</code>, <code>tool</code>, and <code>web</code> (and <code>lib</code>, for <a href="https://docs.flutter.dev/packages-and-plugins/developing-packages">Flutter apps</a>). Any subdirectories of those (except <code>bin</code>) may also contain entrypoints.</p><div class="header-wrapper"><h2 id="immediate-dependency">Immediate dependency</h2><a class="heading-link" href="#immediate-dependency" aria-label="Link to 'Immediate dependency' section">#</a></div><p>A <a href="#dependency">dependency</a> that your package directly uses itself. The dependencies you list in your pubspec are your package's immediate dependencies. All other dependencies are <a href="#transitive-dependency">transitive dependencies</a>.</p><div class="header-wrapper"><h2 id="library">Library</h2><a class="heading-link" href="#library" aria-label="Link to 'Library' section">#</a></div><p>A library is a single compilation unit, made up of a single primary file and any optional number of <a href="/resources/glossary#part-file">parts</a>. Libraries have their own private scope.</p><div class="header-wrapper"><h2 id="lockfile">Lockfile</h2><a class="heading-link" href="#lockfile" aria-label="Link to 'Lockfile' section">#</a></div><p>A file named <code>pubspec.lock</code> that specifies the concrete versions and other identifying information for every immediate and transitive dependency a package relies on.</p><p>Unlike the pubspec, which only lists immediate dependencies and allows version ranges, the lockfile comprehensively pins down the entire dependency graph to specific versions of packages. A lockfile ensures that you can recreate the exact configuration of packages used by an application.</p><p>The lockfile is generated automatically for you by pub when you run <a href="/tools/pub/cmd/pub-get"><code>pub get</code></a>, <a href="/tools/pub/cmd/pub-upgrade"><code>pub upgrade</code></a>, or <a href="/tools/pub/cmd/pub-downgrade"><code>pub downgrade</code></a>. Pub includes a <a href="#content-hashes">content hash</a> for each package to check against during future resolutions.</p><p>If your package is an <a href="#application-package">application package</a>, you will typically check this into source control. For regular packages, you usually won't.</p><p><a id="library-package"></a></p><div class="header-wrapper"><h2 id="package">Package</h2><a class="heading-link" href="#package" aria-label="Link to 'Package' section">#</a></div><p>A collection of <a href="#library">libraries</a> under a directory, with a <a href="/tools/pub/pubspec">pubspec.yaml</a> in the root of that directory.</p><p>Packages can have <a href="#dependency">dependencies</a> on other packages <em>and</em> can be dependencies themselves. A package's <code>/lib</code> directory contains the <a href="/tools/pub/package-layout#public-libraries">public libraries</a> that other packages can import and use. They can also include scripts to be run directly. A package that is not intended to be depended on by other packages is an <a href="#application-package">application package</a>. Shared packages are <a href="/tools/pub/publishing">published</a> to pub.dev, but you can also have non-published packages.</p><p>Don't check the <a href="#lockfile">lockfile</a> of a package into source control, since libraries should support a range of dependency versions. The <a href="#version-constraint">version constraints</a> of a package's <a href="#immediate-dependency">immediate dependencies</a> should be as wide as possible while still ensuring that the dependencies will be compatible with the versions that were tested against.</p><p>Since <a href="https://semver.org/spec/v2.0.0-rc.1.html">semantic versioning</a> requires that libraries increment their major version numbers for any backwards incompatible changes, packages will usually require their dependencies' versions to be greater than or equal to the versions that were tested and less than the next major version. So if your library depended on the (fictional) <code>transmogrify</code> package and you tested it at version 1.2.1, your version constraint would be <a href="/tools/pub/dependencies#caret-syntax"><code>^1.2.1</code></a>.</p><div class="header-wrapper"><h2 id="sdk-constraint">SDK constraint</h2><a class="heading-link" href="#sdk-constraint" aria-label="Link to 'SDK constraint' section">#</a></div><p>The declared versions of the Dart SDK itself that a package declares that it supports. An SDK constraint is specified using normal <a href="#version-constraint">version constraint</a> syntax, but in a special <em>environment</em> section <a href="/tools/pub/pubspec#sdk-constraints">in the pubspec</a>.</p><div class="header-wrapper"><h2 id="source">Source</h2><a class="heading-link" href="#source" aria-label="Link to 'Source' section">#</a></div><p>A kind of place that pub can get packages from. A source isn't a specific place like the pub.dev site or some specific Git URL. Each source describes a general procedure for accessing a package in some way. For example, <em>git</em> is one source. The git source knows how to download packages given a Git URL. Several different <a href="/tools/pub/dependencies#dependency-sources">supported sources</a> are available.</p><div class="header-wrapper"><h2 id="system-cache">System cache</h2><a class="heading-link" href="#system-cache" aria-label="Link to 'System cache' section">#</a></div><p>When pub gets a remote package, it downloads it into a single <em>system cache</em> directory maintained by pub. On Mac and Linux, this directory defaults to <code>~/.pub-cache</code>. On Windows, the directory defaults to <code>%LOCALAPPDATA%\Pub\Cache</code>, though its exact location may vary depending on the Windows version. You can specify a different location using the <a href="/tools/pub/environment-variables">PUB_CACHE</a> environment variable.</p><p>Once packages are in the system cache, pub creates a <code>package_config.json</code> file that maps each package used by your application to the corresponding package in the cache.</p><p>You only have to download a given version of a package once and can then reuse it in as many packages as you would like. If you specify the <code>--offline</code> flag to use cached packages, you can delete and regenerate your <code>package_config.json</code> files without having to access the network.</p><div class="header-wrapper"><h2 id="transitive-dependency">Transitive dependency</h2><a class="heading-link" href="#transitive-dependency" aria-label="Link to 'Transitive dependency' section">#</a></div><p>A dependency that your package indirectly uses because one of its dependencies requires it. If your package depends on A, which in turn depends on B which depends on C, then A is an <a href="#immediate-dependency">immediate dependency</a> and B and C are transitive ones.</p><div class="header-wrapper"><h2 id="uploader">Uploader</h2><a class="heading-link" href="#uploader" aria-label="Link to 'Uploader' section">#</a></div><p>Someone who has administrative permissions for a package. A package uploader can upload new versions of the package, and they can also <a href="/tools/pub/publishing#uploaders">add and remove other uploaders</a> for that package.</p><p>If a package has a verified publisher, then all members of the publisher can upload the package.</p><div class="header-wrapper"><h2 id="verified-publisher">Verified publisher</h2><a class="heading-link" href="#verified-publisher" aria-label="Link to 'Verified publisher' section">#</a></div><p>One or more users who own a set of packages. Each verified publisher is identified by a verified domain name, such as <strong>dart.dev</strong>. For general information about verified publishers, see the <a href="/tools/pub/verified-publishers">verified publishers page</a>. For details on creating a verified publisher and transferring packages to it, see the documentation for <a href="/tools/pub/publishing#verified-publisher">publishing packages</a>.</p><div class="header-wrapper"><h2 id="version-constraint">Version constraint</h2><a class="heading-link" href="#version-constraint" aria-label="Link to 'Version constraint' section">#</a></div><p>A constraint placed on each <a href="#dependency">dependency</a> of a package that specifies which versions of that dependency the package is expected to work with. This can be a single version (<code>0.3.0</code>) or a range of versions (<code>^1.2.1</code>). While <code>any</code> is also allowed, for performance reasons we don't recommend it.</p><p>For more information, see <a href="/tools/pub/dependencies#version-constraints">Version constraints</a>.</p><p><a href="#package">Packages</a> should always specify version constraints for all of their dependencies. <a href="#application-package">Application packages</a>, on the other hand, should usually allow any version of their dependencies, since they use the <a href="#lockfile">lockfile</a> to manage their dependency versions.</p><p>For more information, see <a href="/tools/pub/versioning">Pub Versioning Philosophy</a>.</p><div class="header-wrapper"><h2 id="workspace">Workspace</h2><a class="heading-link" href="#workspace" aria-label="Link to 'Workspace' section">#</a></div><p>A collection of packages that are developed together with a shared resolution of their dependency constraints. Useful for developing in a monorepo.</p><p>The packages have a shared <code>pubspec.lock</code> and <code>.dart_tool/package_config.json</code>.</p><p>To learn more about setting up and developing in a workspace, check out <a href="/tools/pub/workspaces">Pub workspaces</a>.</p><p id="page-github-links"><span>Unless stated otherwise, the documentation on this site reflects Dart 3.7.1. Page last updated on 2024-12-10.</span> <a href="https://github.com/dart-lang/site-www/tree/main/src/content/tools/pub/glossary.md" target="_blank" rel="noopener">View source</a> <span>or </span><a href="https://github.com/dart-lang/site-www/issues/new?template=1_page_issue.yml&page-url=https://dart.dev/tools/pub/glossary/&page-source=https://github.com/dart-lang/site-www/tree/main/src/content/tools/pub/glossary.md" title="Report an issue with this page" target="_blank" rel="noopener">report an issue</a>.</p></div></article></main></div><footer id="page-footer"><div class="footer-section footer-main"><a href="/" class="brand" title="Dart"><img src="/assets/img/logo/logo-white-text.svg" alt="Dart" width="164"></a><div class="footer-social-links"><a href="https://medium.com/dartlang" target="_blank" rel="noopener" title="Dart's Medium publication"><svg><use href="/assets/img/social/medium.svg#medium"></use></svg> </a><a href="https://github.com/dart-lang" target="_blank" rel="noopener" title="Dart's GitHub organization"><svg><use href="/assets/img/social/github.svg#github"></use></svg> </a><a href="https://bsky.app/profile/dart.dev" target="_blank" rel="noopener" title="Dart's Bluesky profile"><svg><use href="/assets/img/social/bluesky.svg#bluesky"></use></svg> </a><a href="https://twitter.com/dart_lang" target="_blank" rel="noopener" title="Dart's X (Twitter) profile"><svg><use href="/assets/img/social/x.svg#x"></use></svg></a></div></div><div class="footer-section footer-tray"><div class="footer-licenses">Except as otherwise noted, this site is licensed under a <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</a>, and code samples are licensed under the <a href="https://opensource.org/licenses/BSD-3-Clause">3-Clause BSD License</a>.</div><div class="footer-utility-links"><ul><li><a href="/terms" title="Terms of use">Terms</a></li><li><a href="https://policies.google.com/privacy" target="_blank" rel="noopener" title="Privacy policy">Privacy</a></li><li><a href="/security" title="Security philosophy and practices">Security</a></li></ul></div></div></footer></div></body></html>