<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Porch Concepts on Porch Documentation</title><link>/v1.5/docs/2_concepts/</link><description>Recent content in Porch Concepts on Porch Documentation</description><generator>Hugo</generator><language>en-us</language><atom:link href="/v1.5/docs/2_concepts/index.xml" rel="self" type="application/rss+xml"/><item><title>Packages</title><link>/v1.5/docs/2_concepts/package/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/v1.5/docs/2_concepts/package/</guid><description>&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Important!&lt;/h4>

 A &amp;ldquo;Porch package&amp;rdquo; is a collection of &lt;strong>package revisions on the same kpt package&lt;/strong>. Porch does not have the concept of a
&amp;ldquo;Package&amp;rdquo; internally - whenever an API request is received on a package, Porch composes the response from the package revisions
associated with the kpt package. When users say they are creating, editing, or upgrading &amp;ldquo;a package&amp;rdquo; in Porch, they are
manipulating a &lt;strong>PackageRevision&lt;/strong> resource and its paired &lt;strong>PackageRevisionResources&lt;/strong> resource. These are Porch&amp;rsquo;s Kubernetes
API interpretations of kpt package metadata and contents stored in Git repositories.

&lt;/div>

&lt;h2 id="what-is-a-package-in-porch">What is a Package in Porch?&lt;/h2>&lt;p>In Porch, a &lt;strong>package&lt;/strong> is represented, not as files you directly manipulate, but through Kubernetes API resources presenting
different views of the package&amp;rsquo;s file contents. When you work with a package in Porch, you interact with revisions of the
package, and each such &lt;strong>package revision&lt;/strong> has a pair of resources: a &lt;strong>PackageRevision&lt;/strong> resource and a &lt;strong>PackageRevisionResources&lt;/strong>
resource:&lt;/p></description></item><item><title>Repositories</title><link>/v1.5/docs/2_concepts/repositories/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/v1.5/docs/2_concepts/repositories/</guid><description>&lt;h2 id="what-is-a-repository-in-porch">What is a Repository in Porch?&lt;/h2>&lt;p>A &lt;strong>Repository&lt;/strong> is a Kubernetes resource that connects Porch to a Git repository where kpt packages are stored. When you
register a repository with Porch, you&amp;rsquo;re creating a Repository resource that tells Porch:&lt;/p>
&lt;ul>
&lt;li>Where the storage backend is located (Git URL)
&lt;ul>
&lt;li>including a particular branch within the repository - the deployment branch&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>How to authenticate (via references to a Kubernetes Secret containing the credentials)&lt;/li>
&lt;li>Whether it&amp;rsquo;s a deployment repository (packages ready for deployment)&lt;/li>
&lt;li>How often to sync/refresh the package revision cache&lt;/li>
&lt;/ul>
&lt;h2 id="repository-types">Repository Types&lt;/h2>&lt;p>Porch supports two storage backends:&lt;/p></description></item><item><title>Package Revisions</title><link>/v1.5/docs/2_concepts/package-revisions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/v1.5/docs/2_concepts/package-revisions/</guid><description>&lt;h2 id="what-is-a-package-revision">What is a Package Revision?&lt;/h2>&lt;p>A &lt;strong>package revision&lt;/strong> is the actual working unit in Porch. While users may often refer to &amp;ldquo;working with a package&amp;rdquo;, they
are actually working with a specific revision of that package.&lt;/p>
&lt;p>Think of it like Git commits:&lt;/p>
&lt;ul>
&lt;li>A Git repository contains a project&lt;/li>
&lt;li>Each commit is a specific version of that project&lt;/li>
&lt;li>You work with commits, not the abstract &amp;ldquo;project&amp;rdquo;&lt;/li>
&lt;/ul>
&lt;p>Similarly in Porch:&lt;/p>
&lt;ul>
&lt;li>A Repository contains kpt packages&lt;/li>
&lt;li>Each package revision is a specific version of a kpt package&lt;/li>
&lt;li>You work with package revisions, not the abstract &amp;ldquo;package&amp;rdquo;&lt;/li>
&lt;/ul>
&lt;h2 id="published-package-revision-numbering">Published Package Revision Numbering&lt;/h2>&lt;p>Package revisions use simple integer sequence versioning (&lt;code>1&lt;/code>, &lt;code>2&lt;/code>, &lt;code>3&lt;/code>, etc.):&lt;/p></description></item><item><title>Workspace</title><link>/v1.5/docs/2_concepts/workspace/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/v1.5/docs/2_concepts/workspace/</guid><description>&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Important&lt;/h4>

 &lt;p>&lt;strong>Workspace is merely a unique ID for a package revision!&lt;/strong>&lt;/p>
&lt;p>The content of this page will shortly be updated to reflect this fact and moved into the PackageRevision page!&lt;/p>


&lt;/div>

&lt;h2 id="what-is-a-workspace">What is a Workspace?&lt;/h2>&lt;p>A &lt;strong>workspace&lt;/strong> is a named, isolated environment for working on a package revision in Porch. Each Draft or Proposed
package revision has a unique workspace name that identifies the specific set of changes being made to a package.&lt;/p></description></item><item><title>Package Revision Lifecycle</title><link>/v1.5/docs/2_concepts/package-revision-lifecycle/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/v1.5/docs/2_concepts/package-revision-lifecycle/</guid><description>&lt;h2 id="what-is-package-revision-lifecycle">What is Package Revision Lifecycle?&lt;/h2>&lt;p>The &lt;strong>lifecycle&lt;/strong> of a package revision refers to its current stage in Porch&amp;rsquo;s orchestration process. A package revision
moves through different stages from creation to publication, with approval gates between stages.&lt;/p>
&lt;h2 id="lifecycle-stages">Lifecycle Stages&lt;/h2>&lt;h3 id="draft">Draft&lt;/h3>&lt;p>A package revision in &lt;strong>Draft&lt;/strong> stage is work in progress. It is being actively edited and not ready for deployment. If
it is being cached by the 
&lt;a href="/v1.5/docs/5_architecture_and_components/package-cache/cr-cache/">CR cache&lt;/a>,
its contents are stored in a temporary branch in the Git repository (e.g., &lt;code>drafts/package-name/workspace&lt;/code>). If it is
being cached by the 
&lt;a href="/v1.5/docs/5_architecture_and_components/package-cache/db-cache/">DB cache&lt;/a>,
its contents are only stored in the database and do not appear in Git at all.&lt;/p></description></item><item><title>Upstream &amp; Downstream</title><link>/v1.5/docs/2_concepts/upstream-downstream/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/v1.5/docs/2_concepts/upstream-downstream/</guid><description>&lt;h2 id="what-are-upstream-and-downstream-packages">What are Upstream and Downstream Packages?&lt;/h2>&lt;p>&lt;strong>Upstream&lt;/strong> and &lt;strong>downstream&lt;/strong> describe source-to-derivation relationship between packages and package revisions in Porch.
This relationship is fundamental to package reuse, customization, upgrade control, and lifecycle management.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Upstream package&lt;/strong>: The source or template package that provides the base content&lt;/li>
&lt;li>&lt;strong>Downstream package&lt;/strong>: A derived package created by cloning or copying from an upstream package&lt;/li>
&lt;/ul>
&lt;p>This relationship enables:&lt;/p>
&lt;ul>
&lt;li>Package reuse across teams and environments&lt;/li>
&lt;li>Centralized maintenance of template packages&lt;/li>
&lt;li>Tracking of package lineage and updates&lt;/li>
&lt;li>Automated propagation of upstream changes to downstream packages&lt;/li>
&lt;/ul>
&lt;h2 id="how-the-relationship-works">How the Relationship Works&lt;/h2>&lt;p>When you create a downstream package revision from an upstream package revision, Porch establishes and tracks this relationship.
The downstream package revision maintains a record of its upstream source, including the exact version (Git commit) it was
derived from.&lt;/p></description></item><item><title>KRM Functions</title><link>/v1.5/docs/2_concepts/functions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/v1.5/docs/2_concepts/functions/</guid><description>&lt;h2 id="what-are-functions-in-porch">What are Functions in Porch?&lt;/h2>&lt;p>&lt;strong>Functions&lt;/strong> in Porch are 
&lt;a href="https://github.com/kubernetes-sigs/kustomize/blob/master/cmd/config/docs/api-conventions/functions-spec.md" target="_blank">KRM (Kubernetes Resource Model) functions&lt;/a> -
containerized programs that transform or validate Kubernetes resource manifests within a package&amp;rsquo;s files. Functions are
declared in a package&amp;rsquo;s Kptfile and executed by Porch when rendering the package.&lt;/p>
&lt;p>Functions enable:&lt;/p>
&lt;ul>
&lt;li>Automated resource generation and modification&lt;/li>
&lt;li>Policy enforcement and validation&lt;/li>
&lt;li>Configuration customization without manual editing&lt;/li>
&lt;li>Repeatable, auditable transformations&lt;/li>
&lt;/ul>
&lt;p>For details on how to declare and configure functions in the Kptfile pipeline, see the 
&lt;a href="https://kpt.dev/book/04-using-functions/" target="_blank">kpt functions documentation&lt;/a>.&lt;/p></description></item><item><title>Package Variants and Package Variant Sets</title><link>/v1.5/docs/2_concepts/package-variant/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/v1.5/docs/2_concepts/package-variant/</guid><description>&lt;h2 id="what-are-packagevariants">What are PackageVariants?&lt;/h2>&lt;p>A &lt;strong>PackageVariant&lt;/strong> is a Kubernetes custom resource that automates the creation and maintenance of downstream package
revisions based on an upstream package. It establishes a relationship between an upstream (source) package and one or
more downstream (target) packages, automatically keeping them synchronized.&lt;/p>
&lt;p>PackageVariants enable:&lt;/p>
&lt;ul>
&lt;li>Automatic cloning of package revisions from upstream to downstream repositories&lt;/li>
&lt;li>Continuous tracking of package revisions of the upstream package&lt;/li>
&lt;li>Automated creation of new downstream revisions when a new revision of the upstream is published&lt;/li>
&lt;li>Customization of downstream package revisions through injectors, functions, and package context&lt;/li>
&lt;/ul>
&lt;h2 id="how-packagevariants-work">How PackageVariants Work&lt;/h2>&lt;p>Porch&amp;rsquo;s PackageVariant controller watches for changes to:&lt;/p></description></item></channel></rss>