# Overview

**sfp** is a purpose-built CLI used predominantly in a modular Salesforce project. sfp works in conjunction with the **sfp server** to provide centralized environment management, credential storage, workflow orchestration, and team collaboration.

<figure><img src="/files/KNYxz5wkl8jruFOjOJWR" alt=""><figcaption><p>How sfp works</p></figcaption></figure>

\
A project utilizing **sfp** implements the following concepts.

### <mark style="color:blue;">Domains</mark>

In an sfp-powered Salesforce project, "Domains" represent distinct business capabilities. A project can encompass multiple domains, and each domain may include various sub-domains. Domains are not explicitly declared within **sfp** but are conceptually organized through "[**Release Configs**](/flxbl/sfp/development/defining-a-domain/release-config.md)"

### [**Packages**](/flxbl/sfp/concepts/packages.md)

A package (synonymous with modules) is a container that groups related metadata together. A package would contain components such as objects, fields, apex, flows and more, allowing these elements to be easily installed, upgraded and managed as a single unit. A package is defined as a directory in your project repository and is defined by an entry in sfdx-project.json

### [**Artifacts**](/flxbl/sfp/concepts/artifacts.md)

An artifact represents a versioned snapshot of a package at a specific point in time. It includes the source code from the package directory (as specified in `sfdx-project.json`), along with metadata about the version, change logs, and other relevant details. Artifacts are the deployable units in the sfp framework, ensuring consistency and traceability across the development lifecycle.\
\
When sfp is integrated into a Salesforce project, it centralizes around the following key essential process

### [**Building a domain**](/flxbl/sfp/building-artifacts/overview.md)

Building' refers to the creation of an artifact from a package. Utilizing the `build` command, sfp facilitates the generation of artifacts for each package in your repository. This process encapsulates the package's source code and metadata into a versioned artifact ready for installation.

### [**Publishing a domain**](/flxbl/sfp/publishing-and-fetching-artifacts/publish-artifact.md)

Publishing a domain involves the process of publishing the artifacts generated by the build command into an artifact repository. This is the storage area where the artifacts are fetched for releases, rollback, etc.

### [**Releasing a domain**](/flxbl/sfp/releasing-artifacts/overview.md)

Releasing a domain involves the process of promoting, installing a collection of artifacts to a higher org such as production, generating an associated changelog for the domain. This process is driven by the release command along with a [release definition](/flxbl/sfp/releasing-artifacts/release-definitions.md).

\\


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.flxbl.io/flxbl/sfp/concepts/overview.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
