# Package Managers

---

## Overview

Upload, download, and manage all your packages through Fly. All your dependencies are cached and managed through Fly, providing faster downloads and unified dependency management.

**Three ways to upload and download artifacts with Fly:**

- **Locally with your Fly App** - Toggle your package manager to active, and you're ready to go. No tokens, no configuration files.

- **Release with CI** - Add the Fly action to your GitHub Actions workflow. Your CI automatically uploads and downloads from Fly.

- **Authentication with Tokens** - Generate a token and configure your package manager. For Kubernetes, external systems, or environments without the Fly App.

---

## Supported Package Managers

| **Package Type** | **Supported Clients** | **JFrog Fly Registry** |
|------------------|----------------------|------------------------|
| **[Docker](docker/)** | Docker, Docker Buildx, Podman | `<your-fly-subdomain>.jfrog.io/docker` |
| **[Helm](helm/)** | Helm CLI | `<your-fly-subdomain>.jfrog.io/helmoci` |
| **[npm](npm/)** | npm, pnpm | `<your-fly-subdomain>.jfrog.io/artifactory/api/npm/npm` |
| **[PyPI](pypi/)** | pip, Pipenv, Poetry, Twine | `<your-fly-subdomain>.jfrog.io/artifactory/api/pypi/pypi/simple` |
| **[Go](go/)** | Go | `<your-fly-subdomain>.jfrog.io/artifactory/api/go/go` |
| **[.NET](dotnet/)** | dotnet CLI, NuGet CLI | `<your-fly-subdomain>.jfrog.io/artifactory/api/nuget/nuget` |
| **[Maven](maven/)** | Maven | `<your-fly-subdomain>.jfrog.io/artifactory/maven` |
| **[Gradle](gradle/)** | Gradle | `<your-fly-subdomain>.jfrog.io/artifactory/maven` |
| **[Generic](generic/)** | Fly Client, cURL | `<your-fly-subdomain>.jfrog.io/artifactory/api/generic` |

---

## Public Registry Proxying

JFrog Fly proxies public registries, providing:
- **Speed** - Cached public dependencies download faster
- **Reliability** - Available even if public registry is down (for cached dependencies)  
- **Unified Access** - Single registry for both your private packages and public dependencies

When you request a package, JFrog Fly checks your private artifacts first, then fetches from the public registry if needed and caches it for future use.

### Proxied Public Registries

| **Package Type** | **Supported Clients** | **Public Registry** |
|------------------|----------------------|---------------------|
| **Docker** | Docker, Docker Buildx, Podman | https://registry-1.docker.io (DockerHub) |
| **Helm** | Helm CLI | https://registry-1.docker.io (DockerHub) |
| **npm** | npm, pnpm | https://registry.npmjs.org |
| **PyPI** | pip, Pipenv, Poetry, Twine | https://files.pythonhosted.org (PyPI) |
| **Go** | Go | https://proxy.golang.org |
| **.NET** | dotnet CLI, NuGet CLI | https://www.nuget.org |
| **Maven** | Maven | https://repo1.maven.org/maven2 (Maven Central) |
| **Gradle** | Gradle | https://repo1.maven.org/maven2 (Maven Central) |

---

## Next Steps

- [Artifacts →](../fly-platform/artifacts/) - Browse and manage all your packages in Fly
- [From Code to Production →](../developer-workflow/) - Publish packages, automate releases, and deploy
- [Tokens →](../fly-platform/tokens/) - Manual authentication for external systems
