{"id":258,"date":"2026-08-18T09:00:58","date_gmt":"2026-08-18T16:00:58","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/insidemsix\/?p=258"},"modified":"2026-08-10T00:44:56","modified_gmt":"2026-08-10T07:44:56","slug":"what-is-a-pfn","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/insidemsix\/what-is-a-pfn\/","title":{"rendered":"What&#8217;s a PFN?"},"content":{"rendered":"<h1>What&#8217;s a PFN?<\/h1>\n<p>MSIX introduced <a href=\"https:\/\/devblogs.microsoft.com\/insidemsix\/package-identity\/\">Package identity<\/a> in Windows 8. While the familiar package identity &#8220;5-tuple&#8221; was functional, it wasn&#8217;t especially convenient to pass through APIs or embed in resources such as files, registry keys, URLs, or XML documents.<\/p>\n<p>To address this, Windows defined an opaque string representation known as a <strong>Package Moniker<\/strong>. Windows called a related identifier derived from a package&#8217;s <em>Name<\/em> and <em>Publisher<\/em> the <strong>Package Family Moniker<\/strong>. These were commonly abbreviated as <strong>PM<\/strong> and <strong>PFM<\/strong>.<\/p>\n<p>As development progressed, Windows quite sensibly required new APIs to pass through API Design Review. The review team (then and now) consists of very senior developers from across Windows, pooling their collective experience to help ensure APIs are polished before they&#8217;re released into the wild.<\/p>\n<p>Eventually, the <a href=\"https:\/\/learn.microsoft.com\/uwp\/api\/windows.applicationmodel.package\">Package<\/a> API came before the review team.<\/p>\n<p>The review team spent quite a bit of time questioning the terms <em>Package Moniker<\/em> and <em>Package Family Moniker<\/em>, ultimately leading to one reviewer&#8217;s memorable suggestion:<\/p>\n<blockquote>\n<p>Moniker is too geeky. How about Name?<\/p>\n<\/blockquote>\n<p>&#8220;Too geeky.&#8221;<\/p>\n<p>In that room.<\/p>\n<p>The irony wasn&#8217;t lost on any of us.<\/p>\n<p>Someone suggested <code>PackageName<\/code> and <code>PackageFamilyName<\/code>. Unfortunately, <code>PackageName<\/code> conflicted with the existing <code>Name<\/code> field in a package identity. Someone then proposed <code>PackageFullName<\/code>, and the room happily agreed.<\/p>\n<p>In hindsight, we probably should have noticed the problem immediately.<\/p>\n<p>It wasn&#8217;t until later that we realized we&#8217;d created two terms with the same acronym: PFN.<\/p>\n<p>Since different features, subsystems, and teams often deal with one or the other, discussions about &#8220;PFN&#8221; became increasingly common. Inevitably, someone would interpret &#8220;PFN&#8221; to mean <em>the other thing<\/em>, and confusion would promptly ensue.<\/p>\n<p>This happened often enough that I began interrupting meetings to ask:<\/p>\n<blockquote>\n<p>I&#8217;m sorry. What&#8217;s a PFN?<\/p>\n<\/blockquote>\n<p>I&#8217;ve done this so many times that I&#8217;ve occasionally joked it should be tattooed across my forehead.<\/p>\n<p>Don&#8217;t abbreviate.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>What&#8217;s a PFN? MSIX introduced Package identity in Windows 8. While the familiar package identity &#8220;5-tuple&#8221; was functional, it wasn&#8217;t especially convenient to pass through APIs or embed in resources such as files, registry keys, URLs, or XML documents. To address this, Windows defined an opaque string representation known as a Package Moniker. Windows called [&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":[11,2,10],"class_list":["post-258","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-msix","tag-identity","tag-msix","tag-terminology"],"acf":[],"blog_post_summary":"<p>What&#8217;s a PFN? MSIX introduced Package identity in Windows 8. While the familiar package identity &#8220;5-tuple&#8221; was functional, it wasn&#8217;t especially convenient to pass through APIs or embed in resources such as files, registry keys, URLs, or XML documents. To address this, Windows defined an opaque string representation known as a Package Moniker. Windows called [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/insidemsix\/wp-json\/wp\/v2\/posts\/258","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=258"}],"version-history":[{"count":2,"href":"https:\/\/devblogs.microsoft.com\/insidemsix\/wp-json\/wp\/v2\/posts\/258\/revisions"}],"predecessor-version":[{"id":265,"href":"https:\/\/devblogs.microsoft.com\/insidemsix\/wp-json\/wp\/v2\/posts\/258\/revisions\/265"}],"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=258"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/insidemsix\/wp-json\/wp\/v2\/categories?post=258"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/insidemsix\/wp-json\/wp\/v2\/tags?post=258"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}