Unofficial community-maintained Pulumi provider for managing Webflow sites, redirects, and robots.txt. Not affiliated with Pulumi Corporation or Webflow, Inc.
Project description
Webflow Pulumi Provider
⚠️ Unofficial Community Provider
This is an unofficial, community-maintained Pulumi provider for Webflow. It is not affiliated with, endorsed by, or supported by Pulumi Corporation or Webflow, Inc. This project is an independent effort to bring infrastructure-as-code capabilities to Webflow using Pulumi.
- Not an official product - Created and maintained by the community
- No warranties - Provided "as-is" under the MIT License
- Community support only - Issues and questions via GitHub
Manage your Webflow sites and resources as code using Pulumi
The Webflow Pulumi Provider lets you programmatically manage Webflow resources using the same Pulumi infrastructure-as-code approach you use for cloud resources. Manage sites, pages, collections, redirects, webhooks, assets, and more. Deploy, preview, and destroy Webflow infrastructure alongside your other cloud deployments.
What You Can Do
- Deploy Webflow resources as code - Define sites, pages, collections, redirects, webhooks, assets, and more in TypeScript, Python, Go, C#, or Java
- Preview before deploying - Use
pulumi previewto see exactly what will change - Manage multiple environments - Create separate stacks for dev, staging, and production
- Version control your infrastructure - Track all changes in Git
- Integrate with CI/CD - Automate deployments in your GitHub Actions, GitLab CI, or other pipelines
Table of Contents
- Prerequisites
- Installation
- Quick Start - Start here
- Authentication
- Verification
- Get Help
- Version Control & Audit Trail
- Multi-Language Examples
- Next Steps
- Contributing
Prerequisites
Before you begin, make sure you have:
1. Pulumi CLI
- Download and install from pulumi.com/docs/install
- Verify installation:
pulumi version(requires v3.0 or later)
2. Programming Language Runtime (choose at least one)
- TypeScript: Node.js 18.x or later
- Python: Python 3.9 or later
- Go: Go 1.21 or later
- C#: .NET 6.0 or later
- Java: Java 11 or later
3. Webflow Account
- A Webflow account with API access enabled
- Access to at least one Webflow site (where you'll deploy your first resource)
4. Webflow API Token
- Your Webflow API token (see Authentication section below)
Installation
The Webflow provider installs automatically when you first run pulumi up. For manual installation:
# Automatic installation (recommended - happens on first pulumi up/preview)
# Just run the Quick Start below, and the provider will install automatically
# OR manual installation if you prefer
pulumi plugin install resource webflow
# Verify installation
pulumi plugin ls | grep webflow
Quick Start
Deploy Your First Webflow Resource in Under 20 Minutes
This quick start walks you through deploying a robots.txt resource to your Webflow site using TypeScript. The entire process takes about 5 minutes once prerequisites are met.
Step 1: Create a New Pulumi Project (2 minutes)
# Create a new directory for your Pulumi project
mkdir my-webflow-project
cd my-webflow-project
# Initialize a new Pulumi project
pulumi new --template typescript
# When prompted:
# - Enter a project name: my-webflow-project
# - Enter a stack name: dev
# - Enter a passphrase (or leave empty for no encryption): <press enter>
This creates:
Pulumi.yaml- Project configurationPulumi.dev.yaml- Stack-specific settingsindex.ts- Your infrastructure codepackage.json- Node.js dependencies
Step 2: Configure Webflow Authentication (3 minutes)
# Get your Webflow API token (see Authentication section below if you don't have one)
# Set your token in Pulumi config (encrypted in Pulumi.dev.yaml)
pulumi config set webflow:apiToken --secret
# When prompted, paste your Webflow API token and press Enter
What's happening: Your token is encrypted and stored locally in Pulumi.dev.yaml (which is in .gitignore). It's never stored in plain text.
Step 3: Write Your First Resource (5 minutes)
Replace the contents of index.ts with:
import * as pulumi from "@pulumi/pulumi";
import * as webflow from "@jdetmar/pulumi-webflow";
// Get config values
const config = new pulumi.Config();
const siteId = config.requireSecret("siteId"); // We'll set this next
// Deploy a robots.txt resource
const robotsTxt = new webflow.RobotsTxt("my-robots", {
siteId: siteId,
content: `User-agent: *
Allow: /
User-agent: Googlebot
Allow: /
`, // Standard robots.txt allowing all crawlers
});
// Export the site ID for reference
export const deployedSiteId = siteId;
Step 4: Configure Your Site ID (2 minutes)
# Find your Webflow site ID (24-character hex string) from Webflow Designer
# You can find it in: Project Settings > API & Webhooks > Site ID
# Set it in your Pulumi config
pulumi config set siteId --secret
# When prompted, paste your 24-character site ID and press Enter
Need help finding your site ID?
- In Webflow Designer, go to Project Settings (bottom of sidebar)
- Click API & Webhooks
- Your Site ID is displayed as a 24-character hex string (e.g.,
5f0c8c9e1c9d440000e8d8c3)
Step 5: Preview Your Deployment (2 minutes)
# Install dependencies
npm install
# Preview the changes Pulumi will make
pulumi preview
Expected output:
Previewing update (dev):
Type Name Plan Info
+ webflow:RobotsTxt my-robots create
Resources:
+ 1 to create
Do you want to perform this update?
> yes
no
details
Step 6: Deploy! (2 minutes)
# Deploy to your Webflow site
pulumi up
When prompted, select yes to confirm the deployment.
Expected output:
Type Name Plan Status
+ webflow:RobotsTxt my-robots create created
Outputs:
deployedSiteId: "5f0c8c9e1c9d440000e8d8c3"
Resources:
+ 1 created
Duration: 3s
Step 7: Verify in Webflow (2 minutes)
- Open Webflow Designer
- Go to Project Settings → SEO → robots.txt
- You should see the robots.txt content you deployed!
Step 8: Clean Up (Optional)
# Remove the resource from Webflow
pulumi destroy
# When prompted, select 'yes' to confirm
Congratulations! You've successfully deployed your first Webflow resource using Pulumi! 🎉
Authentication
Getting Your Webflow API Token
- Log in to Webflow
- Go to Account Settings (bottom left of screen)
- Click API Tokens in the left sidebar
- Click Create New Token
- Name it something descriptive (e.g., "Pulumi Provider")
- Grant the following permissions:
- Sites: Read & Write
- Redirects: Read & Write (if using Redirect resources)
- Robots.txt: Read & Write (if using RobotsTxt resources)
- Click Create Token
- Copy the token immediately - Webflow won't show it again
Setting Up Your Token in Pulumi
# Option 1: Pulumi config (recommended - encrypted in Pulumi.dev.yaml)
pulumi config set webflow:apiToken --secret
# Option 2: Environment variable
export WEBFLOW_API_TOKEN="your-token-here"
# Option 3: Code (NOT RECOMMENDED for production - security risk)
# Don't do this in production code!
Security Best Practices
- ✅ DO use Pulumi config with
--secretflag (encrypts locally) - ✅ DO use environment variables in CI/CD pipelines
- ✅ DO keep tokens in
.envfiles (never commit to Git) - ❌ DON'T commit tokens to Git
- ❌ DON'T hardcode tokens in your Pulumi program
- ❌ DON'T share tokens via email or chat
- 🔐 Rotate tokens regularly - Create new tokens and retire old ones monthly
CI/CD Configuration
For GitHub Actions or other CI/CD:
# .github/workflows/deploy.yml
env:
WEBFLOW_API_TOKEN: ${{ secrets.WEBFLOW_API_TOKEN }}
PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: pulumi/actions@v6
with:
command: up
Verification
Confirm Your Installation
# Check Pulumi is installed
pulumi version
# Check the Webflow provider is available
pulumi plugin ls | grep webflow
# Should output something like:
# resource webflow 1.0.0-alpha.0+dev
Verify Authentication Works
# Inside a Pulumi project directory:
pulumi preview
# If authentication fails, you'll see an error like:
# Error: Unauthorized - Check your Webflow API token
After Deployment
-
In Webflow Designer:
- Check that your resource appears in the appropriate settings (robots.txt, redirects, etc.)
- Verify the configuration matches what you deployed
-
Via Pulumi:
pulumi stack output deployedSiteId # Should output your 24-character site ID
-
Via Command Line:
# View your stack's resources pulumi stack select dev pulumi stack # View detailed resource information pulumi stack export | jq .
Get Help
- Troubleshooting Guide - Comprehensive error reference and solutions
- FAQ - Answers to common questions
- Examples - Working code for all resources
- GitHub Issues - Report bugs
- GitHub Discussions - Ask questions
Version Control & Audit Trail
Track all infrastructure changes in Git for compliance and auditability. Features include automatic audit trails, code review via pull requests, and SOC 2/HIPAA/GDPR-ready reporting.
See the Version Control Guide for Git workflows, commit conventions, and audit report generation.
Multi-Language Examples
The Quick Start uses TypeScript. Complete examples for all languages are in examples/quickstart/:
- TypeScript | Python | Go
Each includes setup instructions, complete code, and a README.
Next Steps
Once you've completed the Quick Start:
1. Explore More Resources
- Deploy multiple resource types (Redirects, Sites, etc.)
- Use the examples/ directory for real-world patterns
- Check docs/ for comprehensive reference documentation
2. Multi-Environment Setup
- Create separate stacks for dev, staging, and production
- Use different site IDs for each environment
- See: examples/stack-config/
3. Advanced Patterns
- Multi-site management: examples/multi-site/
- CI/CD integration: examples/ci-cd/
- Logging and troubleshooting: examples/troubleshooting-logs/
4. Learn Pulumi Concepts
5. Connect with the Community
Contributing
We welcome contributions! Please see CONTRIBUTING.md for guidelines.
Ways to Contribute
- Report bugs - Found an issue? Create a GitHub issue
- Submit improvements - Have an idea? Create a discussion
- Contribute code - Fork the repo, make changes, and submit a pull request
- Improve documentation - Help us document features and patterns
License
This project is licensed under the MIT License - see LICENSE file for details.
Troubleshooting Quick Reference
| Problem | Solution |
|---|---|
| Plugin not found | pulumi plugin install resource webflow |
| Invalid token | Check Webflow Account Settings → API Tokens |
| Invalid site ID | Verify in Webflow Designer → Project Settings → API & Webhooks |
| Deployment times out | Check internet connection, try again |
| Token format error | Ensure you're using the full API token (not just a prefix) |
| Site not found | Verify site ID matches the site where you want to deploy |
| Need detailed logs | Enable debug logging: PULUMI_LOG_LEVEL=debug pulumi up - See Logging Guide |
For more troubleshooting help and detailed logging documentation:
- Logging and Debugging Guide - Comprehensive guide to structured logging features
- Troubleshooting Guide - Common issues and detailed solutions
- Changelog - Release history and notable changes
Ready to get started? Jump to Quick Start above! 🚀
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pulumi_webflow-0.10.1.tar.gz.
File metadata
- Download URL: pulumi_webflow-0.10.1.tar.gz
- Upload date:
- Size: 42.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
290741dd1931ad91afcad452f6f96bcd171e889cf6bdeb91706029f32c4deb94
|
|
| MD5 |
7b18353dd121bbc1991294b9d207b3f1
|
|
| BLAKE2b-256 |
e835f62802973ebe52ed619775c4cc6f3116047afa0236a357756c10429ab73b
|
Provenance
The following attestation bundles were made for pulumi_webflow-0.10.1.tar.gz:
Publisher:
release.yml on JDetmar/pulumi-webflow
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pulumi_webflow-0.10.1.tar.gz -
Subject digest:
290741dd1931ad91afcad452f6f96bcd171e889cf6bdeb91706029f32c4deb94 - Sigstore transparency entry: 1130386487
- Sigstore integration time:
-
Permalink:
JDetmar/pulumi-webflow@d1b92534b5ca8c57b742f9165fcab26f692795f0 -
Branch / Tag:
refs/tags/v0.10.1 - Owner: https://github.com/JDetmar
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d1b92534b5ca8c57b742f9165fcab26f692795f0 -
Trigger Event:
push
-
Statement type:
File details
Details for the file pulumi_webflow-0.10.1-py3-none-any.whl.
File metadata
- Download URL: pulumi_webflow-0.10.1-py3-none-any.whl
- Upload date:
- Size: 64.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bb6e9d76aabef8db047d3bb2d74110e2e4ed14503b188c0ccb37a784df5b6427
|
|
| MD5 |
90409cb767afe36fc5b0180d9f505764
|
|
| BLAKE2b-256 |
258de1dad1f7335c908a4ad932cf6d5e5ec58b4f0b899625f732650a19a56ab7
|
Provenance
The following attestation bundles were made for pulumi_webflow-0.10.1-py3-none-any.whl:
Publisher:
release.yml on JDetmar/pulumi-webflow
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pulumi_webflow-0.10.1-py3-none-any.whl -
Subject digest:
bb6e9d76aabef8db047d3bb2d74110e2e4ed14503b188c0ccb37a784df5b6427 - Sigstore transparency entry: 1130386531
- Sigstore integration time:
-
Permalink:
JDetmar/pulumi-webflow@d1b92534b5ca8c57b742f9165fcab26f692795f0 -
Branch / Tag:
refs/tags/v0.10.1 - Owner: https://github.com/JDetmar
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d1b92534b5ca8c57b742f9165fcab26f692795f0 -
Trigger Event:
push
-
Statement type: