# Pkgst — An accelerated package proxy by Elide

Same packages. A better route.

An accelerated package proxy for the tools you already use. Immutable files, cached close to your builds. Public packages. Standard protocols. No account required.

[Documentation at elide.help](https://elide.help) · [Elide](https://elide.dev) · [Agent instructions](https://pkg.st/llms.txt)

## Keep your tools. Change the endpoint.

Choose your ecosystem. These examples use public packages and leave your existing workflow in place.

### JavaScript & TypeScript

Endpoint: `npm.pkg.st`

#### npm

```sh
npm install react --registry=https://npm.pkg.st --no-audit
```

#### pnpm

```sh
pnpm add react --registry=https://npm.pkg.st
```

#### Yarn 2+

```sh
YARN_NPM_REGISTRY_SERVER=https://npm.pkg.st yarn add react
```

Use your own package name. npm audit requests are not proxied; the npm example disables audit for this install.

### Python

Endpoint: `pypi.pkg.st`

#### pip

```sh
python -m pip install --index-url https://pypi.pkg.st/simple/ requests
```

#### uv

```sh
uv add --default-index https://pypi.pkg.st/simple/ requests
```

Use pip in an active virtual environment, or run uv in your project. Both use the standard Python package index protocol.

### Java & Kotlin

Endpoint: `maven.pkg.st`

#### Maven · settings.xml

```xml
<mirrors>
  <mirror>
    <id>pkgst</id>
    <mirrorOf>central</mirrorOf>
    <url>https://maven.pkg.st</url>
  </mirror>
</mirrors>
```

Merge this mirror into ~/.m2/settings.xml; keep your existing private repositories.

#### Gradle · build.gradle.kts

```kotlin
repositories {
    maven { url = uri("https://maven.pkg.st") }
}
```

Use this repository in place of mavenCentral(). Gradle Plugin Portal requests have a separate endpoint at gradle.pkg.st.

### Go

Endpoint: `go.pkg.st`

#### Go · existing module

```sh
GOPROXY=https://go.pkg.st go mod download
```

Run from a project with a go.mod. Go keeps its normal checksum verification. Keep GOPRIVATE configured for private modules.

### Rust

Endpoint: `crates.pkg.st`

#### Cargo · .cargo/config.toml

```toml
[source.crates-io]
replace-with = "pkgst"

[source.pkgst]
registry = "sparse+https://crates.pkg.st/"
```

Merge into your project’s Cargo config, then run cargo build. The trailing slash is required for the sparse index.

### Browser & module CDNs

Endpoint: `esm.pkg.st`

#### esm.sh · ES modules

```js
import React from "https://esm.pkg.st/react@19.0.0?target=es2022";
```

#### UNPKG · pinned file

```sh
https://unpkg.pkg.st/lodash@4.17.21/lodash.min.js
```

#### jsDelivr · pinned file

```sh
https://jsdelivr.pkg.st/npm/lodash@4.17.21/lodash.min.js
```

Pin the version and file for immutable delivery. Import esm.sh URLs in a module; use file URLs wherever you would use the upstream CDN.

Already using a private registry? Keep it configured separately. Pkgst serves public upstream packages and does not forward your credentials to those registries.

## Fetch once. Build on it.

- **Files stay put.** Pinned artifacts are retained by content hash. A cached package keeps its bytes, even if the upstream later changes.
- **Metadata stays fresh.** Version lists, tags and mutable selectors use short cache lifetimes. Your client keeps making its own dependency decisions.
- **Your client stays yours.** Use standard package protocols, ETags and byte ranges. Elide can opt into additional digest hints and already-held artifact reuse.

## Discover it. Wire it in.

Readable instructions and versioned contracts, available without JavaScript. Start with [llms.txt](https://pkg.st/llms.txt), then use the interface that fits your tool.

- [OpenAPI 3.1](https://pkg.st/openapi.json): endpoints, schemas and authentication.
- [Buf contracts](https://buf.build/elide/pkgst): published Protocol Buffer messages and Connect JSON service definitions.
- [API catalog](https://pkg.st/.well-known/api-catalog)
- [Protobuf source](https://pkg.st/schemas/pkgst/v1/pkgst.proto)
- [API reference](https://pkg.st/docs/api.md)

### One request. Multiple ecosystems.

Resolve exact versions or the registry’s latest recommendation for npm, PyPI and Maven. Batch results keep their input order, with an error for each item that cannot resolve.

Public lookups need no token. Existing Elide tokens can unlock authorized limits and private preferences.

```sh
curl https://api.pkg.st/v1/resolve:batch \
  -H 'Content-Type: application/json' \
  --data '{"requests":[
    {"platform":"npm","name":"react","version":"19.0.0"},
    {"platform":"pypi","name":"requests","version":"latest"}
  ]}'
```

## Go further at elide.help

Explore Elide, package workflows and integration guides at [elide.help](https://elide.help).

© 2026 Elide. [Privacy](https://elide.dev/legal/privacy).
