Zerops for Pulumi
Deploy your application to Zerops using Python, Go, C#, Java, TypeScript or YAML. Keep application infrastructure alongside your code, preview changes, and deploy with pulumi up.
Start with zerops-app / WebApp: one component creates a project, an application service, an optional PostgreSQL database, a deployment and a public URL. Use zerops primitives when you need direct control over services, storage or networking. The primitive provider bridges the Zerops Terraform provider; you do not need Terraform installed.
Start in your language
Python · Go · C#/.NET · Java · TypeScript · YAML
Each starter deploys the same small Python web application. The language you use to describe infrastructure does not dictate your application's runtime. Only your chosen infrastructure language and the Pulumi CLI are needed locally; Zerops builds and runs the application.
For example, after choosing a state backend:
pulumi new https://github.com/zeropsio/pulumi-zerops/tree/v0.1.1/templates/zerops-python
pulumi config set --secret zerops:token
pulumi up
pulumi stack output url
The template also prompts for a secret Zerops token and an explicit appName. PostgreSQL is off initially; enable it with pulumi config set database true, then run pulumi up again. Review costs before deploying; resources run until you remove them. Run pulumi destroy when finished (this deletes application and database data).
Packages and compatibility
Both packages are version 0.1.1. The component SDK brings in the primitive SDK as a dependency.
| Language | zerops primitives |
zerops-app component |
|---|---|---|
| Python | PyPI pulumi-zerops; import pulumi_zerops |
PyPI pulumi-zerops-app; import pulumi_zerops_app |
| Go | module github.com/zeropsio/pulumi-zerops/sdk; import github.com/zeropsio/pulumi-zerops/sdk/go/zerops |
module github.com/zeropsio/pulumi-zerops/sdk-app; import github.com/zeropsio/pulumi-zerops/sdk-app/go/zeropsapp |
| C# | NuGet and namespace Zerops.Pulumi |
NuGet and namespace Zerops.Pulumi.App |
| Java | Maven io.zerops:pulumi; package io.zerops.zerops |
Maven io.zerops:pulumi-app; package io.zerops.zeropsapp |
| TypeScript / Node.js | npm @zerops/pulumi |
npm @zerops/pulumi-app |
| YAML | plugin zerops; e.g. zerops:index:Project |
plugin zerops-app; zerops-app:index:WebApp |
Go modules use release tags sdk/v0.1.1 and sdk-app/v0.1.1; use @v0.1.1 in go get, not the tag's directory prefix. The replace directives in components/go.mod and sdk-app/go.mod are for monorepo development. Go ignores dependency modules' replacements, so consumers never inherit them.
| Pulumi provider | Terraform provider | Terraform bridge | Pulumi CLI |
|---|---|---|---|
pulumi-zerops 0.1.1 |
terraform-provider-zerops v0.1.2 |
v3.142.0 | >= 3.x; tested with 3.273.0 |
Python requires >= 3.10. Go modules currently require Go >= 1.26.6. The .NET SDK targets net6.0 and works with .NET 8 and 10; templates target .NET 8. Java SDKs compile with JDK 21 and emit Java 11-compatible bytecode; examples and templates target Java 17. Node.js 22 LTS is the tested Node runtime.
What WebApp creates
A LIGHT project with an explicit name, a single-container runtime service, optional PostgreSQL, environment variables, a directory deployment, and public subdomain access after deployment. It does not allocate dedicated IPv4. The optional default database is postgresql:single@16, with a 2 GB minimum disk. This is a small, non-HA starting point, not a free tier or a production availability promise. For HA, explicitly set databaseType to postgresql:ha@16; availability and price differ. See Zerops pricing.
Database connections use server-side references: DATABASE_URL, DB_HOST, DB_USER, DB_PASSWORD, and DB_NAME reference database service values; DB_PORT is the literal 5432. The component never reads resolved credentials back. It exports connection variable names, not passwords. See the component reference.
Deployment and secrets
WebApp.sourceand primitiveServiceDeploy.sourceDirare directory paths, not Pulumi archives. Relative paths resolve from the Pulumi program directory.- The directory is uploaded as-is except every
.gitdirectory. Curateapp/: do not include secrets,.env,node_modules,.venv, or build caches..gitignoreis not an upload filter. - Source changes replace
ServiceDeploy, meaning a new deployment. Destroying only that resource does not roll back the app. Destroying its service/project cleans up the environment. - Secret configuration and secret resource values are encrypted in Pulumi state, not omitted from it. Protect state backups and your backend's encryption keys/passphrase. Do not export secrets as ordinary stack outputs.
- Zerops builds asynchronously. If deployment fails, open the service's build log in the Zerops GUI for the actual build error.
Primitive resource map
The schema contains 19 resources. The short YAML forms below correspond to canonical tokens such as zerops:index/project:Project.
| Resource | Short token |
|---|---|
| Integration token | zerops:index:IntegrationToken |
| Object storage | zerops:index:ObjectStorage |
| Project | zerops:index:Project |
| Dedicated IPv4 | zerops:index:ProjectDedicatedIpv4 |
| Project environment variable | zerops:index:ProjectEnv |
| Project import | zerops:index:ProjectImport |
| L7 balancer configuration | zerops:index:ProjectL7BalancerConfig |
| Prometheus configuration | zerops:index:ProjectPrometheusConfig |
| Remote logging | zerops:index:ProjectRemoteLogging |
| VPN peer | zerops:index:ProjectVpnPeer |
| Public HTTP routing | zerops:index:PublicHttpRouting |
| Public port routing | zerops:index:PublicPortRouting |
| Service | zerops:index:Service |
| Backup configuration | zerops:index:ServiceBackupConfig |
| Deployment | zerops:index:ServiceDeploy |
| Service environment variable | zerops:index:ServiceEnv |
| Git integration | zerops:index:ServiceGitIntegration |
| Restart | zerops:index:ServiceRestart |
| Subdomain access | zerops:index:ServiceSubdomainAccess |
There are 9 data functions, plus the bridge's provider-bound terraformConfig method (not a Zerops lookup).
| Lookup | Canonical function token |
|---|---|
| Locations | zerops:index/getLocations:getLocations |
| Organization | zerops:index/getOrganization:getOrganization |
| Project | zerops:index/getProject:getProject |
| Project export | zerops:index/getProjectExport:getProjectExport |
| Projects | zerops:index/getProjects:getProjects |
| Regions | zerops:index/getRegions:getRegions |
| Service | zerops:index/getService:getService |
| Service environment variables | zerops:index/getServiceEnvVars:getServiceEnvVars |
| Service types | zerops:index/getServiceTypes:getServiceTypes |
Provider configuration
| Pulumi key | Environment fallback | Default |
|---|---|---|
zerops:token (secret) |
ZEROPS_TOKEN |
Required |
zerops:endpoint |
ZEROPS_ENDPOINT |
Production Prague API |
zerops:organizationId |
ZEROPS_ORGANIZATION_ID |
Discovered for a single membership |
zerops:postgresqlMinDiskGb |
ZEROPS_POSTGRESQL_MIN_DISK_GB |
2 GB |
zerops:routingForceSync |
ZEROPS_ROUTING_FORCE_SYNC |
false |
| Environment only (no Pulumi key) | ZEROPS_CLICKHOUSE_MIN_RAM_GB |
0.375 GB |
| Environment only (no Pulumi key) | ZEROPS_ELASTICSEARCH_MIN_RAM_GB |
2 GB |
Managed-service floors are applied at preview and reject smaller configured values. RAM overrides must be finite positive numbers with at most three decimal places. Dual-mode managed types require an explicit :single@ or :ha@ mode. When upgrading existing shorthand state, set type to the qualified value already recorded in base to avoid replacement; choosing the other mode replaces the service.
More information
Metadata
Release files for pulumi-zerops 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| pulumi_zerops-0.1.1.tar.gz | 74.4 kB | Without provenance | Details for pulumi_zerops-0.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| pulumi_zerops-0.1.1-py3-none-any.whl | Python 3 | none | any | Details for pulumi_zerops-0.1.1-py3-none-any.whl |
Total release size: 182.5 kB
Release files / pulumi_zerops-0.1.1.tar.gz
| Download URL | pulumi_zerops-0.1.1.tar.gz |
|---|---|
| Size | 74.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0436086f44e4eebec6c40dcee55a11b0829b0aff52a3cf500a00b1ef1680e1f3
|
|
BLAKE2b-256 checksum How to use checksums |
cf640c014ddd82049e044e96f5b5b4ce22a41df6a473682d51de7d5b85f68d14
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / pulumi_zerops-0.1.1-py3-none-any.whl
| Download URL | pulumi_zerops-0.1.1-py3-none-any.whl |
|---|---|
| Size | 108.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a738f37a7e4efb8e1d116a8bf035454d10c97299c8270c3fd502359fc287e5c1
|
|
BLAKE2b-256 checksum How to use checksums |
0ec05cc013d156e8b4b71602e9de0bf5cf2d1fae22643c9636445021914c7878
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Security for pulumi-zerops 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.