{"id":92,"date":"2026-05-19T09:00:30","date_gmt":"2026-05-19T16:00:30","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/insidemsix\/?p=92"},"modified":"2026-05-19T08:14:53","modified_gmt":"2026-05-19T15:14:53","slug":"package-identity","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/insidemsix\/package-identity\/","title":{"rendered":"Package Identity"},"content":{"rendered":"<p>An MSIX <a href=\"https:\/\/learn.microsoft.com\/windows\/apps\/desktop\/modernize\/package-identity-overview\">package identity<\/a> is composed of a five-part tuple that uniquely identifies a package. It consists of the following attributes:<\/p>\n<ul>\n<li><strong>Name<\/strong><\/li>\n<li><strong>Version<\/strong><\/li>\n<li><strong>Architecture<\/strong><\/li>\n<li><strong>Resource Id<\/strong><\/li>\n<li><strong>Publisher<\/strong><\/li>\n<\/ul>\n<p>Together, these fields form the canonical identity of a package. Programmatically, this identity can be represented using APIs such as <a href=\"https:\/\/learn.microsoft.com\/uwp\/api\/windows.applicationmodel.packageid\">Windows.ApplicationModel.PackageId<\/a> or the <a href=\"https:\/\/learn.microsoft.com\/windows\/win32\/api\/appmodel\/ns-appmodel-package_id\">PACKAGE_ID<\/a> structure.<\/p>\n<h2>Why <em>Package Full Name<\/em>?<\/h2>\n<p>Working directly with the individual identity fields is often inconvenient. To simplify common scenarios, Windows defines an opaque string representation that encapsulates the entire five-part identity: the <a href=\"https:\/\/learn.microsoft.com\/windows\/apps\/desktop\/modernize\/package-identity-overview#package-full-name\">Package Full Name<\/a>.<\/p>\n<p>This canonical form provides a convenient way to serialize and pass package identity across system boundaries &#8211; such as APIs, file systems, access control lists (ACLs), policy configurations, and other components &#8211; without requiring callers to parse or manipulate individual fields.<\/p>\n<h2>Why <em>PublisherId<\/em>?<\/h2>\n<p>The <strong>Publisher<\/strong> field is an X.509 subject distinguished name. While precise, it can be quite large (up to 8 KB) and may contain characters (such as spaces, backslashes, and ampersands) that are cumbersome in paths, identifiers, or protocol payloads.<\/p>\n<p>To address this, Windows derives a compact shorthand known as the <em>PublisherId<\/em>.<\/p>\n<p>A PublisherId:<\/p>\n<ul>\n<li>Is computed as a hash of the Publisher string<\/li>\n<li>Is always 13 characters in length<\/li>\n<li>Is encoded using the <a href=\"http:\/\/en.wikipedia.org\/wiki\/Base32#Crockford.27s_Base32\">Crockford variant of Base32<\/a><\/li>\n<\/ul>\n<p>The result is a short, fixed-width, ASCII alphanumeric identifier suitable for use in contexts where the full X.509 subject name would be impractical.<\/p>\n<h2>Why <em>Package Family Name<\/em>?<\/h2>\n<p>In some scenarios, the full package identity is overly specific.<\/p>\n<p>For example, if application configuration were tracked per-package, updating a package from version <code>1.0.0.0<\/code> to <code>1.0.0.1<\/code> would produce a new identity &#8211; and therefore a completely separate configuration state.<\/p>\n<p>In such cases, a version-independent<sup>1<\/sup> identifier is preferable.<\/p>\n<p>The <a href=\"https:\/\/learn.microsoft.com\/windows\/apps\/desktop\/modernize\/package-identity-overview#package-family-name\">Package Family Name<\/a> provides this abstraction by identifying a package in a manner that is independent of:<\/p>\n<ul>\n<li>Version<\/li>\n<li>Architecture<\/li>\n<li>ResourceId<\/li>\n<\/ul>\n<p>Common uses include tracking security assignments and persistent configuration at the <strong>Package Family<\/strong> level rather than per individual package instance.<\/p>\n<hr \/>\n<p><sup>1<\/sup> More precisely: independent of version, architecture, and resource id.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>An MSIX package identity is composed of a five-part tuple that uniquely identifies a package. It consists of the following attributes: Name Version Architecture Resource Id Publisher Together, these fields form the canonical identity of a package. Programmatically, this identity can be represented using APIs such as Windows.ApplicationModel.PackageId or the PACKAGE_ID structure. Why Package Full [&hellip;]<\/p>\n","protected":false},"author":911,"featured_media":81,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[8,11,2,10],"class_list":["post-92","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-msix","tag-architecture","tag-identity","tag-msix","tag-terminology"],"acf":[],"blog_post_summary":"<p>An MSIX package identity is composed of a five-part tuple that uniquely identifies a package. It consists of the following attributes: Name Version Architecture Resource Id Publisher Together, these fields form the canonical identity of a package. Programmatically, this identity can be represented using APIs such as Windows.ApplicationModel.PackageId or the PACKAGE_ID structure. Why Package Full [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/insidemsix\/wp-json\/wp\/v2\/posts\/92","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/insidemsix\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/insidemsix\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/insidemsix\/wp-json\/wp\/v2\/users\/911"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/insidemsix\/wp-json\/wp\/v2\/comments?post=92"}],"version-history":[{"count":1,"href":"https:\/\/devblogs.microsoft.com\/insidemsix\/wp-json\/wp\/v2\/posts\/92\/revisions"}],"predecessor-version":[{"id":104,"href":"https:\/\/devblogs.microsoft.com\/insidemsix\/wp-json\/wp\/v2\/posts\/92\/revisions\/104"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/insidemsix\/wp-json\/wp\/v2\/media\/81"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/insidemsix\/wp-json\/wp\/v2\/media?parent=92"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/insidemsix\/wp-json\/wp\/v2\/categories?post=92"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/insidemsix\/wp-json\/wp\/v2\/tags?post=92"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}