diff --git a/src/content/formats/generic-repository.mdx b/src/content/formats/generic-repository.mdx
new file mode 100644
index 00000000..7c66e192
--- /dev/null
+++ b/src/content/formats/generic-repository.mdx
@@ -0,0 +1,227 @@
+import { Tag, Note, BlockImage, Video } from '@/components';
+
+import genericUpstream from './images/generic/generic-upstream.png';
+import upstreamIndex from './images/generic/generic-upstream-index.png';
+
+# Generic Repository
+
+
+The Generic format and upstreams are in Early Access. [Contact us](https://cloudsmith.com/company/contact-us) to enable it for your organization
+
+
+Cloudsmith provides public & private repositories for Generic files
+
+Cloudsmith supports Generic files, a flexible format for managing any file or binary that relies on specific file paths rather than semantic versioning.
+
+
+Generic upstreams work with simple HTML-based sources. The upstream must consist of simple, unstyled HTML pages with no JavaScript. Each page should contain only links to package files or subdirectories. Examples include Gradle distributions, Apache releases, and Node distributions.
+
+
+
+The examples in this document are generic. Cloudsmith provides contextual setup instructions within each repository, complete with copy and paste snippets (with your namespace/repo pre-configured).
+
+
+In the following examples:
+
+| Identifier | Description |
+| :------------ | :---------------------------------------------------------------------------------------- |
+| OWNER | Your Cloudsmith account name or organization name (namespace) |
+| REPOSITORY | Your Cloudsmith Repository name (also called "slug") |
+| TOKEN | Your Cloudsmith Entitlement Token (see [Entitlements](/software-distribution/entitlement-tokens) for more details) |
+| USERNAME | Your Cloudsmith username |
+| PASSWORD | Your Cloudsmith password |
+| API-KEY | Your Cloudsmith API Key |
+| PATH_TO_FILE | The local path to the file you want to upload (e.g., `~/downloads/file.tar.gz`) |
+| FILEPATH | The repository path where the file will be stored (e.g., `path/to/file.tar.gz`) |
+| UPSTREAM_PREFIX | Optional upstream prefix (e.g., `node_distributions/`) for files cached from upstreams |
+
+## Why Generic Format?
+
+The Generic format is designed for artifacts that rely on specific file paths rather than semantic versions. Key benefits include:
+
+- **Path-Based Identification**: Uses the filepath as the unique identifier, enabling exact replication of upstream directory structures
+- **Upstream Proxying and Caching**: Proxy and cache files from simple HTML-based upstream sources
+- **Supply Chain Management**: Bring custom scripts, installers, and binaries into your managed supply chain
+- **Consistent URLs**: Internal URLs remain consistent with upstream sources
+
+### Generic vs Raw Format
+
+The Generic format is optimized for path-based file distribution and upstream proxying. It does not support:
+- Package versioning (semantic versions)
+- End User License Agreements (EULA)
+
+If you need semantic versioning or EULA support for your packages, use the [Raw format](/formats/raw-repository) instead. The Raw format provides traditional package management features including version tracking and license acceptance workflows.
+
+## Upload a File
+
+### Upload via the Cloudsmith CLI
+
+For full details of how to install and setup the Cloudsmith CLI, see [Command Line Interface](/developer-tools/cli)
+
+The command to upload via the Cloudsmith CLI is:
+
+```shell
+cloudsmith push generic OWNER/REPOSITORY PATH_TO_FILE --filepath FILEPATH
+```
+
+Example:
+
+```shell
+cloudsmith push generic your-account/your-repo ~/downloads/file.tar.gz --filepath distributions/latest/file.tar.gz
+```
+
+
+The `--filepath` parameter specifies where the file will be stored in the repository structure. This path becomes the unique identifier for the package and determines its download URL.
+
+
+### Upload via Cloudsmith web app
+
+Please see [upload a package](/artifact-management/package-upload) for details of how to upload via the Cloudsmith web app.
+
+## Download a Package
+
+### Download via Cloudsmith web app
+
+#### Public Repositories
+
+When logged into Cloudsmith via a Web Browser, use the Download button located within the traffic light button dropdown on the package details page to download a generic package.
+
+#### Private Repositories
+
+For downloading from a private repository via the Cloudsmith web app, use the Use Package button to download a generic package using the default Entitlement Token for the repository. Use the dropdown arrow within the pop-up window to select a different authentication method.
+
+### Download via Command Line
+
+To download a Generic package, fetch uploaded files using a well-crafted URL. The package URL format is based on the filepath used when uploading.
+
+#### Public Repositories
+
+```text
+https://generic.cloudsmith.io/public/OWNER/REPOSITORY/FILEPATH
+```
+
+For files cached from an upstream with a prefix:
+
+```text
+https://generic.cloudsmith.io/public/OWNER/REPOSITORY/UPSTREAM_PREFIX/FILEPATH
+```
+
+Example `curl` commands to download a generic package from a public repository:
+
+```shell
+curl -sLf -O 'https://generic.cloudsmith.io/public/OWNER/REPOSITORY/path/to/file.tar.gz'
+```
+
+With upstream prefix:
+
+```shell
+curl -sLf -O 'https://generic.cloudsmith.io/public/OWNER/REPOSITORY/node_distributions/latest/node-v4.9.1.tar.gz'
+```
+
+#### Private Repositories
+
+
+Private Cloudsmith repositories require authentication. You can choose between Entitlement Token Authentication or HTTP Basic Authentication. The setup method will differ depending on what authentication type you choose to use.
+
+
+
+Entitlement Tokens, User Credentials, and API-Keys should be treated as secrets. You should ensure that you do not commit them in configurations files along with source code, or expose them in any logs.
+
+
+Using Entitlement Token authentication:
+
+```shell
+curl -sLf -O 'https://generic.cloudsmith.io/TOKEN/OWNER/REPOSITORY/FILEPATH'
+```
+
+With upstream prefix:
+
+```shell
+curl -sLf -O 'https://generic.cloudsmith.io/TOKEN/OWNER/REPOSITORY/UPSTREAM_PREFIX/FILEPATH'
+```
+
+Using HTTP Basic authentication:
+
+```shell
+curl -sLf -u "USERNAME:PASSWORD" -O 'https://generic.cloudsmith.io/basic/OWNER/REPOSITORY/FILEPATH'
+```
+
+With upstream prefix:
+
+```shell
+curl -sLf -u "USERNAME:PASSWORD" -O 'https://generic.cloudsmith.io/basic/OWNER/REPOSITORY/UPSTREAM_PREFIX/FILEPATH'
+```
+
+## HTML Indexes
+
+Cloudsmith supports serving Apache-style HTML formatted indexes of generic package files in the repository.
+
+
+HTML index generation is disabled by default. Enable it in [Repository Settings](/repositories/repository-settings) under the Generic section.
+
+
+When HTML index is disabled, the repository only supports direct file downloads. Requests for specific files will still proxy and cache from configured upstreams (if the file exists on the upstream) or serve cached files from the repository.
+
+When HTML index is enabled, requests to directory paths (without specifying a file) will return an HTML view showing the index of available files and subdirectories.
+
+
+When enabled, the HTML index is available at:
+
+#### Public Repositories
+
+```
+https://generic.cloudsmith.io/public/OWNER/REPOSITORY/
+```
+
+#### Private Repositories
+
+```shell Entitlement Token Auth
+https://generic.cloudsmith.io/TOKEN/OWNER/REPOSITORY/
+```
+```shell HTTP Basic Auth
+https://generic.cloudsmith.io/basic/OWNER/REPOSITORY/
+```
+
+
+To view the HTML index in a browser for private repositories, use `TOKEN` as the username and your entitlement token as the password when prompted for authentication.
+
+
+
+
+## Upstream Proxying / Caching
+
+Supported
+
+The Generic format supports upstream proxying and caching for simple HTML-based sources and select non-HTML sources including Hashicorp Releases. When a file is requested, Cloudsmith checks for a local copy. If missing, it fetches the file from the upstream, caches it as a first-class local package, and serves it.
+
+Supported upstreams must consist of simple, unstyled HTML pages with no JavaScript, where each page contains only links to package files or subdirectories. Examples include Gradle distributions, Apache releases, and Node distributions.
+
+
+Support for enterprise repository managers like Artifactory and Sonatype Nexus requires additional configuration. [Contact support](/support) to set up these upstream sources.
+
+
+### Configure an Upstream
+
+To configure an upstream for your Generic repository, browse to your repository overview page and click the **Upstreams** tab. Then, click **+ Add Upstream Proxy** and choose the **Generic** format upstream.
+
+In the upstream creation menu, define a name for your upstream and enter the upstream URL. Optionally specify an **Upstream Prefix** to prevent file collisions when using multiple upstreams. The prefix becomes part of the file's permanent path in the repository, ensuring files from different upstreams never collide even with identical filenames.
+
+
+
+Please see our [Upstream Proxying](/repositories/upstreams#create-a-generic-upstream) documentation for further instructions on configuring upstreams.
+
+### Upstream Priority
+
+Upstream priority behaves differently for Generic repositories due to the nature of upstream prefixes. All upstreams within a prefix are given a priority of 1. Changing the priority setting does not impact package blending, as each upstream is uniquely namespaced within its own prefix.
+
+Local packages (directly uploaded to the repository) always take precedence over upstream packages. When viewing the HTML index, cached packages display with a different icon than packages that will be proxied on demand.
+
+## Key Signing Support
+
+GPG
+
+Please see [Package Signing](/supply-chain-security/signing-keys) for information about key support by package format.
+
+## Troubleshooting
+
+Please see the [Troubleshooting](/troubleshooting) page for further help and information.
diff --git a/src/content/formats/images/generic/generic-upstream-index.png b/src/content/formats/images/generic/generic-upstream-index.png
new file mode 100644
index 00000000..e187b171
Binary files /dev/null and b/src/content/formats/images/generic/generic-upstream-index.png differ
diff --git a/src/content/formats/images/generic/generic-upstream.png b/src/content/formats/images/generic/generic-upstream.png
new file mode 100644
index 00000000..cffafc2b
Binary files /dev/null and b/src/content/formats/images/generic/generic-upstream.png differ
diff --git a/src/content/menu.json b/src/content/menu.json
index 86d66d67..a6f1e99a 100644
--- a/src/content/menu.json
+++ b/src/content/menu.json
@@ -74,6 +74,10 @@
"title": "Docker",
"path": "/formats/docker-registry"
},
+ {
+ "title": "Generic",
+ "path": "/formats/generic-repository"
+ },
{
"title": "Go",
"path": "/formats/go-registry"
@@ -381,7 +385,7 @@
{
"title": "API Key Policy",
"path": "/policy-management/api-key-policy"
- },
+ },
{
"title": "License Policy",
"path": "/policy-management/license-policy"
@@ -395,11 +399,11 @@
{
"title": "Enterprise Policy Manager",
"path": "/supply-chain-security/epm",
- "children":[
+ "children":[
{
"title": "Getting Started",
"path": "/supply-chain-security/epm/getting-started"
- },
+ },
{
"title": "Rego Recipes",
"path": "/supply-chain-security/epm/rego"
@@ -413,11 +417,11 @@
{
"title": "Malware Detection",
"path": "/supply-chain-security/malware-detection",
- "children":[
+ "children":[
{
"title": "Malware Scanning",
"path": "/supply-chain-security/malware-detection/malware-scanning"
- },
+ },
{
"title": "Malicious Packages",
"path": "/supply-chain-security/malware-detection/malicious-packages"
@@ -621,7 +625,7 @@
{
"title": "Renovate",
"path": "/integrations/integrating-with-renovate"
- },
+ },
{
"title": "Semaphore CI",
"path": "/integrations/integrating-with-semaphore-ci"
@@ -637,11 +641,11 @@
{
"title": "TeamCity",
"path": "/integrations/integrating-with-teamcity"
- },
+ },
{
"title": "Theia IDE",
"path": "/developer-tools/vscode"
- },
+ },
{
"title": "Travis CI",
"path": "/integrations/integrating-with-travis-ci"
diff --git a/src/content/repositories/upstreams/images/generic.png b/src/content/repositories/upstreams/images/generic.png
new file mode 100644
index 00000000..cffafc2b
Binary files /dev/null and b/src/content/repositories/upstreams/images/generic.png differ
diff --git a/src/content/repositories/upstreams/index.mdx b/src/content/repositories/upstreams/index.mdx
index 3457616c..9add6107 100644
--- a/src/content/repositories/upstreams/index.mdx
+++ b/src/content/repositories/upstreams/index.mdx
@@ -11,6 +11,7 @@ import cran from './images/cran.png'
import dart from './images/dart.png'
import debian from './images/debian.png'
import docker from './images/docker.png'
+import generic from './images/generic.png'
import go from './images/go.png'
import hex from './images/hex.png'
import helm from './images/helm.png'
@@ -24,7 +25,7 @@ import swift from './images/swift.png'
# Upstream Proxying and Caching
-Upstream proxying and caching allows you to upload and use the packages you own, while Cloudsmith fetches and caches other packages (such as dependencies).
+Upstream proxying and caching allows you to upload and use the packages you own, while Cloudsmith fetches and caches other packages (such as dependencies).
This enables you to use Cloudsmith as a first-class cache and a central source of truth for packages, to protect you from outages of external services (which is especially important when running behind your firewall).
@@ -50,7 +51,7 @@ We strive to ensure that at least _just-in-time_ indexing is available for each
### Priority
-When defining upstreams for a repository, a _priority_ can be specified. The priority of an upstream is used to determine the order in which upstream requests are resolved. Cloudsmith evaluates upstreams by the order of `1..n`.
+When defining upstreams for a repository, a _priority_ can be specified. The priority of an upstream is used to determine the order in which upstream requests are resolved. Cloudsmith evaluates upstreams by the order of `1..n`.
A good approach when determining what priority to apply to upstreams is to ensure that the lowest value is specified for the upstream which is most likely to contain upstream packages you request and that there are no multiple upstreams with the same priority value. This helps to improve performance in the event that an upstream source does not support any of our indexing mechanisms.
@@ -65,6 +66,7 @@ A good approach when determining what priority to apply to upstreams is to ensur
|[Dart](/formats/dart-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/dart/create) |
|[Debian](/formats/debian-repository) | ✅ | ✅ | ✅ |Ahead-of-Time
| [API](/api/repos/upstream/deb/create) |
|[Docker](/formats/docker-registry) | ✅ | ✅ | ✅ |Just-in-Time
| [API](/api/repos/upstream/docker/create) |
+|[Generic](/formats/generic-repository) | ✅ | ✅ | ✅ |Just-in-Time
| [API](/api/repos/upstream/generic/create) |
|[Golang ](/formats/go-registry) | ✅ | ✅ | ✅ |Ahead-of-Time
| [API](/api/repos/upstream/go/create) |
|[Gradle ](/formats/gradle-repository) | ✅ | ✅ | ✅ |Just-in-Time
| [API](/api/repos/upstream/maven/create) |
|[Helm](/formats/helm-chart-repository) | ✅ | ✅ | ✅ |Ahead-of-Time
| [API](/api/repos/upstream/helm/create) |
@@ -104,7 +106,7 @@ You can create upstreams without leaving your terminal. For example, you can cre
"upstream_url": "http://archive.ubuntu.com/ubuntu",
"mode": "Cache and Proxy",
"distro_versions": ["debian/trixie"],
- "component": "main",
+ "component": "main",
"auth_mode": "None",
"priority": 1
}
@@ -117,7 +119,7 @@ cloudsmith upstream deb create WORKSPACE/REPOSITORY ./upstream_config.json
```
This command will return the details about your new configured upstream. Please, refer to the [Config Reference](#supported-formats) column in the supported formats table to review fields available for each of the supported formats.
-
+
### Using the manual configuration
Click the "+ Add Upstream Proxy" button, and then select the format you want to create an upstream for:
@@ -152,7 +154,7 @@ Click the "+ Add Upstream Proxy" button, and then select the format you want to
| Cache and Proxy | Proxy the initial request for an asset through to the upstream source and then store (cache) resolved assets in this repository for future requests. |
| Verify SSL Certificates | If enabled, SSL certificates are verified when requests are made to this upstream. We recommended leaving this enabled for all public sources to help mitigate Man-In-The-Middle (MITM) attacks. |
| Authentication (optional) | Optional credentials that can be provided if the upstream is not publicly accessible |
-| Headers (optional) | Optional Key-Value headers that can be passed to upstreams with each request.
+| Headers (optional) | Optional Key-Value headers that can be passed to upstreams with each request.
#### Create a NPM Upstream
@@ -233,7 +235,7 @@ Click the "+ Add Upstream Proxy" button, and then select the format you want to
| Cache and Proxy | Proxy the initial request for an asset through to the upstream source and then store (cache) resolved assets in this repository for future requests. |
| Verify SSL Certificates | If enabled, SSL certificates are verified when requests are made to this upstream. We recommended leaving this enabled for all public sources to help mitigate Man-In-The-Middle (MITM) attacks. |
| Authentication (optional) | Optional credentials that can be provided if the upstream is not publicly accessible |
-| Headers (optional) | Optional Key-Value headers that can be passed to upstreams with each request.
+| Headers (optional) | Optional Key-Value headers that can be passed to upstreams with each request.
#### Create a CRAN Upstream
@@ -299,6 +301,26 @@ Click the "+ Add Upstream Proxy" button, and then select the format you want to
|Authentication (optional)|Optional credentials that can be provided if the upstream is not publicly accessible.
**Note**: Docker Hub requires that requests to their service via an upstream proxy be authenticated. As such, when you configure an upstream to Docker Hub, you will be required to provide credentials for authentication.|
|Headers (optional)|Optional Key-Value headers that can be passed to upstreams with each request.|
+#### Create a Generic Upstream
+
+
+
+| Form Field | Description |
+| :------------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Name | A descriptive name for this upstream source. A shortened version of this name will be used for tagging cached packages retrieved from this upstream. |
+| Priority | The weighting of the Upstream source. Upstream sources are selected for resolving requests by sequential order (1..n), followed by creation date. |
+| Upstream URL | The URL for this upstream source. This must be a fully qualified URL including any path elements required to reach the root of the repository. |
+| Upstream Prefix (optional)| Optional path prefix to prevent file collisions when using multiple upstreams. All files from this upstream will be grouped under this path (e.g., `node_distributions/`). |
+| Proxy Only | Proxy requests through to upstream sources in order to match assets that are not present in this repository. |
+| Cache and Proxy | Proxy the initial request for an asset through to the upstream source and then store (cache) resolved assets in this repository for future requests. |
+| Verify SSL Certificates | If enabled, SSL certificates are verified when requests are made to this upstream. We recommended leaving this enabled for all public sources to help mitigate Man-In-The-Middle (MITM) attacks. |
+| Authentication (optional) | Optional credentials that can be provided if the upstream is not publicly accessible. |
+| Headers (optional) | Optional Key-Value headers that can be passed to upstreams with each request. |
+
+
+Generic upstreams work with simple HTML-based sources. The upstream must consist of simple, unstyled HTML pages with no JavaScript. Each page should contain only links to package files or subdirectories. Examples include Gradle distributions, Apache releases, and Node distributions.
+
+
#### Create a Go Upstream
@@ -312,7 +334,7 @@ Click the "+ Add Upstream Proxy" button, and then select the format you want to
| Cache and Proxy | Proxy the initial request for an asset through to the upstream source and then store (cache) resolved assets in this repository for future requests. |
| Verify SSL Certificates | If enabled, SSL certificates are verified when requests are made to this upstream. We recommended leaving this enabled for all public sources to help mitigate Man-In-The-Middle (MITM) attacks. |
| Authentication (optional) | Optional credentials that can be provided if the upstream is not publicly accessible |
-| Headers (optional) | Optional Key-Value headers that can be passed to upstreams with each request.
+| Headers (optional) | Optional Key-Value headers that can be passed to upstreams with each request.
#### Create a Helm Upstream
@@ -327,7 +349,7 @@ Click the "+ Add Upstream Proxy" button, and then select the format you want to
| Cache and Proxy | Proxy the initial request for an asset through to the upstream source and then store (cache) resolved assets in this repository for future requests. |
| Verify SSL Certificates | If enabled, SSL certificates are verified when requests are made to this upstream. We recommended leaving this enabled for all public sources to help mitigate Man-In-The-Middle (MITM) attacks. |
| Authentication (optional) | Optional credentials that can be provided if the upstream is not publicly accessible |
-| Headers (optional) | Optional Key-Value headers that can be passed to upstreams with each request.
+| Headers (optional) | Optional Key-Value headers that can be passed to upstreams with each request.
#### Create a Hex Upstream
@@ -403,6 +425,6 @@ Click the "+ Add Upstream Proxy" button, and then select the format you want to
## Edit an Upstream Proxy
Once you have a list of configured Upstreams, use the action buttons in the right to Delete, Edit, or Disable/Enable an Upstream.
-Click the blue "Edit Upstream" button to edit an upstream source:
+Click the blue "Edit Upstream" button to edit an upstream source:
-
\ No newline at end of file
+
diff --git a/src/content/supply-chain-security/signing-keys.mdx b/src/content/supply-chain-security/signing-keys.mdx
index c230d658..1434096d 100644
--- a/src/content/supply-chain-security/signing-keys.mdx
+++ b/src/content/supply-chain-security/signing-keys.mdx
@@ -2,7 +2,7 @@ import { Tag, Note } from '@/components';
# Package signing
-Cloudsmith uses GPG or RSA signatures (where applicable) in addition to package checksums to detect tampering.
+Cloudsmith uses GPG or RSA signatures (where applicable) in addition to package checksums to detect tampering.
We calculate a signature for every file that is uploaded, but only some of the package formats make it available or use it. Only some of the formats also offer metadata signing.
@@ -21,6 +21,7 @@ For increased trust, you can also provide your own [GPG key](/repositories/repos
|[Dart](/formats/dart-repository)||Not Supported by Format|
|[Debian](/formats/debian-repository)| GPG |Index|
|[Docker](/formats/docker-registry)| RSA | Index |
+|[Generic](/formats/generic-repository)| Not Supported by Format ||
|[Go](/formats/go-registry)|||
|[Gradle](/formats/gradle-repository)| GPG | Index Package |
|[Helm Charts](/formats/helm-chart-repository)| GPG ||
@@ -50,12 +51,12 @@ See [Docker Images: Signing and Verifying SBOMd with Cosign](/artifact-managemen
Cloudsmith does not log to Rekor when generating signatures on image upload. When verifying these using `cosign verify` pass `--private-infrastructure=true` to prevent cosign querying the Rekor log.
-As Docker images within Cloudsmith are predominantly private, when a cosign signature is automatically generated on image upload, Cloudsmith does not add any data to the Rekor log. The Rekor log contains a record of image names and corresponding public keys, and is used to enable software maintainers to record signed metadata, and for verifiers to monitor and query the log for an appropriate identity.
-When using `cosign verify` to verify cosign signatures generated by Cloudsmith, pass `--private-infrastructure=true` to ensure cosign does not query the Rekor log.
+As Docker images within Cloudsmith are predominantly private, when a cosign signature is automatically generated on image upload, Cloudsmith does not add any data to the Rekor log. The Rekor log contains a record of image names and corresponding public keys, and is used to enable software maintainers to record signed metadata, and for verifiers to monitor and query the log for an appropriate identity.
+When using `cosign verify` to verify cosign signatures generated by Cloudsmith, pass `--private-infrastructure=true` to ensure cosign does not query the Rekor log.
If this parameter is not passed, the following warning will be displayed:
```
-WARNING: "docker.cloudsmith.io///alpine:
-appears to be a private repository, please confirm
+WARNING: "docker.cloudsmith.io///alpine:
+appears to be a private repository, please confirm
uploading to the transparency log at "https://rekor.sigstore.dev"
```
Please note customers who create their own signatures using the `cosign sign` command, will be asked if they wish to upload a transparency log to Rekor.
diff --git a/src/icons/icon-registry.tsx b/src/icons/icon-registry.tsx
index cfe4bdb8..7d47b97d 100644
--- a/src/icons/icon-registry.tsx
+++ b/src/icons/icon-registry.tsx
@@ -37,6 +37,7 @@ import { FormatDartIcon } from './svgs/format/Dart';
import { FormatDebIcon } from './svgs/format/Deb';
import { FormatDebianIcon } from './svgs/format/Debian';
import { FormatDockerIcon } from './svgs/format/Docker';
+import { FormatGenericIcon } from './svgs/format/Generic';
import { FormatGoIcon } from './svgs/format/Go';
import { FormatGradleIcon } from './svgs/format/Gradle';
import { FormatHuggingFaceIcon } from './svgs/format/HuggingFace';
@@ -150,6 +151,7 @@ export const iconRegistry = createIconRegistry({
'format/deb': FormatDebIcon,
'format/debian': FormatDebianIcon,
'format/docker': FormatDockerIcon,
+ 'format/generic': FormatGenericIcon,
'format/go': FormatGoIcon,
'format/gradle': FormatGradleIcon,
'format/huggingface': FormatHuggingFaceIcon,
diff --git a/src/icons/svgs/format/Generic.tsx b/src/icons/svgs/format/Generic.tsx
new file mode 100644
index 00000000..24789e67
--- /dev/null
+++ b/src/icons/svgs/format/Generic.tsx
@@ -0,0 +1,34 @@
+import { createIcon, SpecificIconProps } from '../../util/create-icon';
+
+export const FormatGenericIcon = createIcon(
+ 'format/generic',
+ ({ width = 24, height = 24, ...props }) => ({
+ ...props,
+ width,
+ height,
+ viewBox: '0 0 24 24',
+ fill: 'none',
+ children: (
+ <>
+
+
+
+ >
+ ),
+ }),
+);
diff --git a/src/snippets/packageFormatGroupSnippet.mdx b/src/snippets/packageFormatGroupSnippet.mdx
index 39986946..a197468e 100644
--- a/src/snippets/packageFormatGroupSnippet.mdx
+++ b/src/snippets/packageFormatGroupSnippet.mdx
@@ -107,6 +107,15 @@ Cloudsmith supports the following package formats:
+
+
+
+