# Addons

Managed databases, a key-value store and object storage you attach with one nesly command. Connection details arrive as environment variables.

An addon is a backing service the platform runs for one of your projects. You attach it once; nesly injects the connection details as environment variables, and the next deploy picks them up. You never get a public address — your application reaches the service on the private network.

Attach with `nesly addon add <type>`, list with `nesly addon ls`, remove with `nesly addon rm <type> --yes`.

## What you can attach

-   ### PostgreSQL (postgres)
    
    Your own database and login on the shared cluster. Injects DATABASE\_URL. Framework names (Laravel DB\_\*, .NET ConnectionStrings\_\_Default) are derived from it.
    
-   ### MySQL (mysql)
    
    Your own database and login on the shared Percona cluster. Injects DATABASE\_URL. InnoDB only — a MyISAM dump from shared hosting needs converting first.
    
-   ### SQL Server (mssql)
    
    Your own database and login (Express edition, 10 GB per database). Injects DATABASE\_URL and ConnectionStrings\_\_Default so a .NET app reads it with GetConnectionString("Default") and no configuration code.
    
-   ### Valkey (valkey)
    
    A Redis-compatible key-value store. Injects REDIS\_URL and VALKEY\_URL (same value). You get your own login and a key prefix; other projects cannot read your keys, and nobody can flush the shared server.
    
-   ### Object storage (bucket)
    
    An S3-compatible bucket on the platform. Injects AWS\_ACCESS\_KEY\_ID, AWS\_SECRET\_ACCESS\_KEY, AWS\_ENDPOINT\_URL, AWS\_BUCKET (and BUCKET), and sets Laravel's FILESYSTEM\_DISK to s3 so uploads leave the ephemeral container. Your login can only reach your own bucket — not another project's, and not the platform's.
    
-   ### OpenID Connect (oidc)
    
    A client on the platform identity provider. Injects OIDC\_ISSUER\_URL, OIDC\_CLIENT\_ID and OIDC\_CLIENT\_SECRET.
    

## Key prefixes on Valkey

Write keys under your project id, for example `prj_…:session:…`. The platform refuses keys outside that prefix and refuses dangerous server commands such as FLUSHALL. When the shared server is full, writes return an error instead of silently deleting another project's data.

Nightly copies and restore: see [backups & commands](/docs/backups/). Full command list: [nesly CLI](/docs/cli/).

---
Canonical: https://nesly.net/docs/addons/
Every docs page has this markdown twin: replace the trailing slash with .md
