How Nextcloud workflows with Windmill replace the packaged Flow app
Document processes that must run when files change in Nextcloud, such as intake review, classification or notifying a records team, need an event-driven design that the packaged Flow app once covered. That app is deprecated, so new designs should not be built on it. The supported path is the webhook listeners app sending events to a stand-alone Windmill instance, authenticated with OAuth workspace connections and narrowed by event filters. Before you fix the design, confirm the exact versions of the webhook listeners app and the Nextcloud release it supports against the current app store listing, and confirm the Windmill version and its webhook and OAuth documentation. Both move on their own release cycles, so this page cannot fix the version pairing for you.
The design splits work across three components with separate owners. Nextcloud emits events and holds the file data. The webhook listeners app decides which events leave the server and where they are sent. Windmill receives the payloads, runs the scripts or flows and calls back into Nextcloud through its documented APIs. Decide where the Windmill instance runs, who administers it and whether it sits in the same network zone as the Nextcloud application server. Running Windmill on separate hosts means a failing workflow or a Windmill outage does not affect file sync for users. Also decide which dedicated Nextcloud service account the workflows act as, because every file change a workflow makes will be attributed to that account in audit logs.
OAuth workspace connections are the main access control between the two systems. Each Windmill workspace should hold its own connection to Nextcloud, so a workflow for one department cannot use credentials granted for another. Confirm the scopes the connection requests, whether the service account can see only the folders the workflow needs, and how group membership changes affect what it can read. Event filters narrow what reaches Windmill in the first place, for example by folder path, file type or event kind. Check which filter fields the app version you select actually exposes, and whether it signs or otherwise authenticates each webhook delivery. Treat filters as a reduction in noise, not as the only check: validate every payload inside the workflow as well.
Start the migration with an inventory of every existing Flow rule. Record each trigger, condition and action, and mark rules that depend on features the replacement does not reproduce. Rebuild each rule as a Windmill flow, then test it against a staging Nextcloud instance that uses the same app and server versions as production. Confirm how the webhook app handles retries and redelivery, and make sure each workflow can run twice on the same file without creating duplicates. Nextcloud does not allow skipping major releases and requires one major version at a time, with a backup before each upgrade and third-party apps disabled until confirmed compatible. Add the webhook listeners app and the Windmill connections to every upgrade test, so a Nextcloud upgrade does not silently stop a document process.
What you need before connecting Nextcloud to Windmill
Settle these six items before the first webhook fires, because the Nextcloud version sets the database, PHP and app compatibility, and the Windmill side depends on reachable endpoints and certificates that both systems trust. Confirm each item with your Nextcloud administrators and platform team before the build starts.
Nextcloud major version for the build
Pick the major version the team will run during the build and confirm it against the release schedule. Nextcloud 35 (Hub 26 Summer) was released on 16 September 2026 with end of life in September 2027, Nextcloud 34 is supported until June 2027, and Nextcloud 33 until February 2027. Nextcloud does not allow skipping major releases, so an older server must move one major version at a time with a backup before each step. Confirm which version production will run at go-live, and build against that version.
Database, PHP and web server
The Nextcloud 35 system requirements recommend MariaDB 11.8 or PostgreSQL 18. MariaDB 10.11 to 12.3, PostgreSQL 14 to 18 and MySQL 8.4 or 9.7 are supported, and PHP 8.5 is recommended with PHP 8.3 and 8.4 supported. Serve the application with Apache 2.4 or nginx with php-fpm. Oracle Database is only available with an enterprise subscription, so confirm your database licensing before you choose it.
Webhook listeners app version
The webhook listeners app receives Nextcloud events and forwards them to Windmill, so its version must match the Nextcloud major version you chose. Check the app's listing in the Nextcloud app store against your server version before installing, and record the exact version you test. Disable third-party apps until each one is confirmed compatible with the upgrade target, because an incompatible app can block an upgrade.
Windmill instance and network path
Deploy a stand-alone Windmill instance, since the packaged Flow app is deprecated, and decide where it runs. Nextcloud must reach the Windmill webhook endpoint, and Windmill must reach Nextcloud for OAuth workspace connections and file API calls. Confirm DNS names, firewall rules, outbound proxy settings and allowed hosts in both directions before testing.
TLS certificates for both endpoints
Both the Nextcloud host and the Windmill endpoint need certificates that clients trust, including certificates issued by any internal certificate authority. Confirm that the full chain is served, that hostnames match the URLs configured in each system, and that every certificate has a named renewal owner. Test trust from the Nextcloud server itself, since outbound calls can fail in ways that are hard to see from a browser.
Dedicated Nextcloud service account
Create a dedicated Nextcloud account for the automation and keep personal logins out of the workflows. Grant it only the group membership and folder access the workflows need, and confirm how its credentials are stored and rotated. Record the account name in the build plan so that access reviews and offboarding cover it.
How file events reach Windmill through webhooks
The event path has three hops, and each one is a place where you can filter, fail or leak data. A user action in Nextcloud, such as uploading a file, creating a share or moving a file into a folder, is picked up by the webhook listeners app. That app matches the action against the webhook rules an administrator has configured and posts a JSON payload to a Windmill endpoint. Windmill then runs the script or flow attached to that endpoint. If the flow needs to change anything in Nextcloud, such as writing a tag, adding a comment or moving a file, it calls back into Nextcloud's APIs using a workspace connection that holds its own credentials. Nothing in this chain runs inside Nextcloud's request cycle beyond the listener, so a slow or failed Windmill run does not block the user who triggered the event.
Where filtering happens. Filters can sit in three places: the webhook listeners app, the Windmill endpoint or the first step of the script. Filter as close to the source as the app allows. A rule in the listener that drops events for unrelated folders or file types means fewer payloads leave Nextcloud, fewer runs are billed or queued in Windmill, and less file metadata is sent to a system outside the Nextcloud server's trust boundary. Filters in Windmill are still useful as a second check, but they should not be the only control, because by then the payload has already left the source. Document which filter lives where, so an engineer changing one does not assume the other is absent.
Confirm the event types first. The set of events a webhook can subscribe to depends on the installed version of the webhook listeners app and on which Nextcloud apps emit events in your environment. Do not design the workflow from a list in documentation or a blog post. On a staging instance running the same Nextcloud and app versions as production, list the event types the app exposes in its admin interface or API, trigger each action you need, and record the payload fields that arrive. Check that the file path, owner, actor and folder identifiers you rely on are present in every payload you plan to use, because a missing field usually surfaces only as a failed run weeks later.
The return path needs its own controls. When Windmill calls back into Nextcloud, the workspace connection acts with the permissions of the account behind it. Create a dedicated service account, grant it access only to the folders the workflow touches, and make sure the connection can be rotated or revoked without editing every flow. Also plan for loops: a flow that writes a file can trigger another webhook event, so the listener rules and the script must agree on how to recognize and skip events the workflow itself caused.
Decisions to make before building. Decide which events justify a workflow at all, which filters belong in the listener, how the endpoint is authenticated, and which account the return path uses. Then test with one event type and one folder before expanding. Keep a short written record of the event types, payload fields and filters for each workflow, because the next Nextcloud or app upgrade is the most likely time for an event name or payload field to change.
Nextcloud workflows with Windmill: configuration sequence
This sequence takes a Nextcloud instance from a verified baseline to production document triggers that send events to a stand-alone Windmill instance. Each step closes with a check, so a failed check stops the build before live user activity reaches the workflow.
Confirm versions and compatibility
The platform owner records the running Nextcloud version, the PHP and database versions, and the planned versions of the webhook listeners app and Windmill. Check each combination against the Nextcloud system requirements and the release schedule, and confirm with the Windmill project that its release supports your Nextcloud major version. Nextcloud upgrades must move one major version at a time, so if the instance is behind, finish the upgrade path before continuing. Done when the version record is signed off and every component sits on a supported combination.
Back up and disable unverified apps
Take a full backup of the database, the data directory and the configuration, then confirm the backup restores into a separate non-production host. Disable third-party apps that are not confirmed compatible with the target version for the length of the change, and record their names and order so they can be re-enabled cleanly. The platform owner approves the backup before any change is made. Check: the test restore completes and the app list matches the recorded state.
Install the webhook listeners app
An administrator installs the webhook listeners app from the Nextcloud app store or your approved app source, using the release that matches your server version. Review the app's requested permissions and its source before enabling it. Once enabled, open its administration settings to confirm the listener configuration page loads. Check: the app shows as enabled in the admin apps list and the Nextcloud log records no errors during activation.
Create a dedicated automation account
Create a separate Nextcloud user for automation with no administrator rights. Add the account only to the groups that hold the folders the workflows must read or write, and do not reuse a personal or shared human account. Store the password in your secrets manager, and confirm with your security policy how service accounts are handled for multi-factor authentication. Check: signing in as the account shows access to the intended folders and no others.
Register the OAuth client for Windmill
In the Nextcloud security settings, register an OAuth client for Windmill with the redirect URI that Windmill provides for your workspace. Confirm the exact URI in the current Windmill documentation before entering it. Record the client identifier and secret in your secrets store, and limit the token to the permissions the workflows need. Check: a token request from the connection setup returns a token for the automation account only, and that token cannot read files outside the approved folders.
Configure the Windmill workspace connection
In the Windmill workspace for this environment, create the Nextcloud connection using the OAuth client and the automation account. Store the client secret in Windmill's secret handling so it stays out of scripts and version control. Keep separate workspaces for test and production so their connections and secrets stay apart. Check: the connection test succeeds and a read-only listing of the test folder returns the expected files.
Define event filters and deploy a test workflow
Set event filters so only the folder paths and event types the workflow needs send payloads to Windmill. Deploy one test workflow that logs each payload and performs no document changes. Check: upload one test file into a filtered folder and confirm Windmill receives exactly one payload with the expected file path and user. Then upload a file into an unfiltered folder and confirm no payload arrives. Do not continue until both results match the design.
Enable production triggers after testing
Once the test workflow passes, enable production triggers for the approved folders one at a time, keeping the test workflow in place for regression checks. Store the trigger and filter configuration in version control and name an owner for the webhook endpoint and the automation account. Check: one production upload produces one payload, the workflow output matches the design, and the initial logs show no failed or repeated deliveries.
Mapping Nextcloud events, identities and permissions to Windmill
This table maps each Nextcloud event the workflow listens for to the Windmill trigger input it produces, the filter that limits it, and the identity and approving owner behind it. Read each row as one agreed mapping that needs sign-off before it changes. The main takeaway is that the OAuth connection can only see what its Nextcloud user or group can see, so the filter and the identity must be reviewed together.
| Nextcloud event type | Windmill trigger input and fields | Filter rule | Identity and approving owner |
|---|---|---|---|
| File created or uploaded | Event payload with file ID, path, owner and timestamp. Confirm field names in a sample payload. | Folder prefix and file extension set on the trigger | Service user for the workflow. Approved by the workflow owner. |
| File updated or overwritten | Event payload with file ID, path, version marker and editing user. Confirm whether version data is included. | Folder prefix only, to avoid re-triggering on the workflow's own writes | Same service user. Approved by the workflow owner and the records lead. |
| File moved or renamed | Old and new paths where the listener provides both. Confirm whether the old path is sent. | Folder prefix on both source and destination | Same service user. Approved by the workflow owner. |
| File deleted | File ID and last known path. Content is usually unavailable after deletion, so confirm before relying on it. | Folder prefix, with a separate trigger that does not read file content | Restricted service user. Approved by the security owner and the records lead. |
| Share created or changed | Share ID, recipient, permission level and file ID. Confirm which share types the listener reports. | Share type and permission level, so only external shares start the workflow | Administrator-scoped service user. Approved by the security owner. |
| Trigger configuration change | Changes to the webhook listener or workflow mapping, recorded as a Windmill job input for review. | Limited to the admin group that maintains the integration | Named Nextcloud admin account. Approved by the platform owner before deployment. |
Moving existing Flow app automations to Windmill
Start by inventorying every automation that runs on the packaged Flow app, because the migration can only be scoped once you know what exists. For each flow, record the trigger (for example, a file being created or tagged in a given folder), each condition that filters it, and each action it performs, such as moving a file, applying a tag, sending a notification or calling an external service. Note the owner, the Nextcloud group or user account the flow runs under, and the folders or groups it touches. Export the flow definitions where your installed version allows it, and keep a copy of the configuration in your change records before you change anything. Once the inventory is complete, decide which flows can be rebuilt as Windmill scripts and which should be retired or redesigned. A flow that only reacts to a file event and writes back metadata is usually a good candidate, because the webhook listener can deliver the event and a script can perform the same write through the Nextcloud API. Flows that depend on logic the Flow app handled implicitly, such as retries, ordering or per-user permissions, need a written equivalent before they move. Mark any flow whose behavior your users rely on but nobody can explain, since those need review with the owner before rebuilding. Each decision should be recorded against the inventory line so auditors and operators can trace what replaced what. Use a parallel run to prove the replacement before the old automation is switched off. Build the Windmill version, point it at a test folder or a test group, and let both the old flow and the new script process the same sample documents. Compare the outputs, including file names, tags, moved locations, notifications and audit log entries. Keep the old automation disabled only after the new one produces matching results on test data across the cases you recorded, including the edge cases such as renamed files, duplicate events and documents that fail a condition. Disabling the old flow should be a separate, signed-off change, not a side effect of the rebuild. Confirm with the Nextcloud documentation what the deprecation of the Flow app means for your installed version and timeline. Check whether the app remains available, receives security fixes, or will be removed in a specific release, and whether it is compatible with the Nextcloud version you plan to run during and after the migration. Ask your Nextcloud support provider or DeployOpen to confirm the schedule against your upgrade plan, because a deprecation date that falls before your next upgrade changes the order of work. Plan for the old flows to keep running until the parallel run succeeds, and document any fallback if the Flow app stops working earlier than expected.
Securing the OAuth connection, webhook endpoint and filters
A workflow that reacts to Nextcloud events can read and change documents, so every link between Nextcloud, the webhook listener and Windmill is a place where access can be over-granted. The cards below cover the controls that keep that automation narrow, auditable and current across Nextcloud upgrades.
Least-privilege scopes for the automation account
Create a dedicated Nextcloud account for the automation rather than reusing a personal or administrator login. Grant it access only to the folders and groups the workflows touch, and request only the OAuth scopes the chosen workflow steps need. Write down which scope each workflow step depends on, so a reviewer can see why each permission exists and remove the ones that no longer have a purpose.
Storing OAuth client credentials in Windmill
The OAuth client ID and secret that link Windmill to Nextcloud should live in Windmill's secret or variable store, encrypted at rest, and never in flow code, Git repositories or chat threads. Confirm who in your team can read secrets in the Windmill workspace, and plan a rotation procedure that updates the Nextcloud client and the Windmill resource together so that workflows do not fail silently during the change.
Restricting the webhook endpoint to the Nextcloud server
The endpoint that receives Nextcloud events should accept requests only from the Nextcloud server's address, enforced at the firewall, reverse proxy or ingress layer rather than only in workflow code. Test this with a request from a different host and confirm it is refused. If Nextcloud sits behind a load balancer or egress gateway, allow the address that Nextcloud actually presents, and verify that address after any network change.
Verifying the request source and signature
Check in the webhook listener and Windmill flow whether the Nextcloud app version you run supports signed payloads or a shared secret on incoming requests. If it does, enable it, store the secret the same way as the OAuth credentials, and reject any request whose signature does not match before the workflow runs. If it does not, treat the network restriction as the main control and say so in the design record.
Avoiding workflows that run with administrator rights
Workflows that act on user files should run as the automation account or the owning user, never as a Nextcloud administrator. Administrator access bypasses sharing and group boundaries, so a single faulty filter could expose or delete content across the whole instance. Review each workflow for any step that needs elevated rights, and if one does, split that step into a separate, narrowly scoped flow with its own approval.
Logging automation actions
Record every action the automation takes on a document, including the triggering event, the filter that matched, the account used and the result. Keep these logs in your central logging platform, retain them for the period your policy requires, and make sure they can be searched by workflow name and user. Without this record, you cannot show which document a workflow changed or explain an unexpected share.
Reviewing filters and connections after upgrades
Put filters, OAuth connections and webhook registrations on a review list that runs after every Nextcloud upgrade and after every Windmill upgrade. Confirm that event names, payload fields and the listener app version still match what each filter expects, and that the automation account still holds only the scopes it needs. Because Nextcloud requires one major version at a time and recommends disabling third-party apps until they are confirmed compatible, schedule this review as part of each upgrade change, not as an occasional audit.
How to test document workflows before users depend on them
Test every document workflow in a staging Nextcloud instance that matches production in server version, installed apps, webhook listener configuration and OAuth workspace connection before any user relies on it. Build the plan from the events the workflow listens for. For each event type you use (upload, rename, move, share and delete) and each event filter you configured, run a known action and record three things: the exact payload Nextcloud sends, the run result Windmill reports, and the resulting state in Nextcloud. Compare payloads against the field list you documented, not against memory. A filter can match the right path and still deliver a field shape your script does not expect, so confirm the payload format against the webhook listeners version installed in staging.
Use a dedicated test folder populated with files whose names, contents and sizes you know in advance. Include a small text file, a file with spaces and non-ASCII characters in its name, a nested subfolder, and a large file close to the size your users actually handle. Write down the expected outcome for each step before you run it. Then test repeated events: resend the same event, or replay a captured payload, and confirm the workflow does not create duplicate documents, tags or notifications. Idempotency should come from the workflow design, such as checking a stored file identifier or processed marker before acting, so verify that the design does what the script claims. For large files, watch whether the event fires before the upload completes and whether Windmill times out or retries. For callback failure, stop the Windmill endpoint or make it return errors, then confirm that the failure is logged and that retried or queued work ends in a known state.
Agree on the rollback step before go-live. The safest stop is to disable the trigger or webhook registration for the affected filter, not to delete the workflow in Windmill. Disabling keeps the script, its version history and the OAuth workspace connection available for review and re-enablement. Write a short runbook that names who may disable a trigger, where the switch lives in Nextcloud and Windmill, and how to confirm that no new events are arriving afterward. Check that disabling one trigger does not revoke the OAuth connection that other flows depend on. Rehearse the rollback once in staging so the steps are proven before anyone needs them under pressure.
Finish with a written sign-off. Record test cases, payload samples, run results and the rollback rehearsal, and keep them with the workflow definition. Retest after every change to Nextcloud, the webhook listeners app or Windmill, because Nextcloud upgrades move one major version at a time and require third-party apps to be confirmed compatible first. If any workflow still depends on the deprecated packaged Flow app, plan its migration and test it under the same criteria. Ask your team to confirm which owner signs off on each workflow and how often the test set is rerun.
Common Windmill and Nextcloud webhook failures and fixes
This table lists seven symptoms seen when Nextcloud events drive Windmill scripts, with the likely cause, the first check and the fix for each. Work through the checks in order, because several symptoms share a cause in the listener configuration or the OAuth connection. Confirm every setting against the Nextcloud, webhook listener and Windmill versions you have installed, since app behavior changes between releases.
| Failure | Likely cause | First check | Fix |
|---|---|---|---|
| No events arriving | Listener disabled, wrong Windmill endpoint URL, or outbound traffic from Nextcloud blocked | Send a test event and read the listener's delivery log in Nextcloud | Correct the endpoint, enable the listener and open the network path. Confirm listener options in your app version. |
| Events arriving for the wrong folders | Event filter path matches a similar folder name or uses an outdated folder ID | Compare the filter paths with the folder IDs in a failing event payload | Tighten filters to exact paths or IDs and retest with one folder. Confirm the filter syntax in your listener version. |
| OAuth token refresh failing | Connection revoked, client secret changed, or the account lost access to the folder | Check the Windmill workspace connection status and the Nextcloud account's active sessions | Reauthorize the workspace connection and store the new secret. Confirm OAuth app settings for your Nextcloud release. |
| Callback returns permission errors | Service account lacks share or file permission, or the workflow writes as a different user | Run the same file request as the service account and check its access in Nextcloud | Grant the service account access to the required folders only. Confirm the permission model in your Nextcloud version. |
| Duplicate runs after retries | Listener retries after a slow or failed response, and the Windmill script is not idempotent | Search Windmill run history for repeated event IDs | Record processed event IDs, skip repeats and return a success response quickly. Confirm retry behavior in your listener version. |
| Workflows break after a Nextcloud upgrade | Upgrade changed app APIs, the listener or a dependency, or a third-party app was disabled | Review upgrade notes, app versions and Windmill errors logged since the upgrade | Upgrade one major version at a time, test in staging and pin app versions until each is confirmed compatible. |
| Flow app workflows stop running | The packaged Flow app is deprecated and its triggers are no longer the supported path | List which workflows still depend on the Flow app triggers | Move triggers to the webhook listener and stand-alone Windmill. Confirm deprecation status in your Nextcloud version. |
Nextcloud workflows with Windmill: questions buyers ask before hiring help
What drives the cost of a Nextcloud and Windmill workflow build?
Cost follows the amount of work in the build, and five inputs drive most of it: the number of Nextcloud event types you listen to, the number of workflows, the identity model, the testing scope and the upgrade cadence. Each event type needs a payload contract, a filter and test cases. Each workflow adds logic, error handling and an owner who approves its behavior. The identity model matters because a service account connected through OAuth workspace connections is simpler to build and review than a set of per-user connections. Testing scope decides whether you verify only successful runs or also failures, retries and duplicate deliveries. Upgrade cadence decides how often that test set runs again. Ask for a quote that itemizes these five inputs, separates one-time build work from recurring support, and lists what is excluded.
How long does a Nextcloud and Windmill webhook project usually take?
The duration depends on scope, and no single timeline applies to every project. A small set of event types and workflows, with one identity model and a staging instance ready at the start, moves faster than a build with many event types, several identity sources and a large test matrix. The biggest schedule risks are usually on the client side: waiting for a staging instance, admin access or an approved service account, and waiting for workflow owners to confirm expected behavior. DeployOpen works to a fixed scope agreed in writing before work starts, so the timeline should appear in that document together with the dependencies it assumes from your team. Ask which dates depend on your inputs and what happens to the schedule if those inputs arrive late.
What must our internal team provide before a Nextcloud Windmill build starts?
Four things are needed before work begins. First, a staging instance: a Nextcloud copy that matches production in version and installed apps, with the webhook listeners app available for testing. Second, a Nextcloud administrator who can install and configure the app, register the OAuth client and approve the event scope. Third, a dedicated service account with only the permissions the workflows need, so that actions are attributable and access is limited. Fourth, workflow owners: the people who define what each workflow should do, supply sample documents and sign off on test results. Also confirm who hosts the stand-alone Windmill instance and who maintains it after go-live, because that decision affects both the build plan and the support scope.
Can a capable internal team build Nextcloud workflows with Windmill alone?
Yes, a capable team can build these workflows alone if it has the right skills and capacity. The skills needed are Nextcloud administration, including app installation and upgrades, Windmill scripting and deployment, OAuth configuration, webhook security such as verifying the sender and handling retries, and automated testing. Teams often manage the first workflow without difficulty. The gaps tend to appear in the second and third workflows, during review, in the test matrix and in upgrade regression testing. Nextcloud publishes a new major version every four months and supports each for one year, according to its maintenance and release schedule, so the team must plan for repeated testing. Compare your team's skills and available hours against these areas before deciding.
How do event filters stop Nextcloud webhooks from triggering unwanted workflows?
Event filters limit which Nextcloud events reach Windmill, based on event type and conditions such as the path, the user or the app involved. This reduces noise, keeps runs focused and limits the work each event creates. Filters also prevent loops. A workflow that writes a file creates a new event, which can start the same workflow again. Guard against this with conditions that ignore changes made by the service account, and make each run idempotent so that a duplicate delivery does not repeat an action. Test both cases on staging, including duplicate and out-of-order deliveries. Confirm which filter fields your version of the webhook listeners app supports before you design the workflows around them.
What breaks after a Nextcloud upgrade that touches webhook workflows?
The most common breaks come from version changes that the upgrade path requires. Nextcloud does not allow skipping major releases, so each upgrade moves one major version at a time, and you must back up before every upgrade. Third-party apps should be disabled until they are confirmed compatible, which includes the webhook listeners app. Payload fields can change between versions, and Windmill scripts that parse them can fail silently or stop running. OAuth connections should be checked after the upgrade, because a failed token refresh stops every workflow that uses it. Run the regression set on staging for each step, check that the webhook listeners app supports the target version, and confirm the failed-run alerts reach an owner before the production upgrade starts.
What ongoing work remains after a Nextcloud Windmill workflow goes live?
Several tasks recur after go-live. Someone must review failed runs and alerts, rotate the service account credentials and OAuth secrets on the schedule your policy sets, and update filters and scripts when workflows change or payload formats shift. Each Nextcloud major release needs an upgrade pass, a backup check and a regression run on staging. Workflow owners need a process for requesting changes, and documentation must stay current for the people who inherit the system. Some work is one-time, such as the initial build, handover and documentation, while the rest recurs with each change and release. Ask any partner to state which tasks are included in the build and which fall under ongoing support. DeployOpen offers ongoing support, upgrades and continuous testing as retainers.
How DeployOpen works on this
DeployOpen plans and builds Nextcloud workflows with Windmill and webhooks inside infrastructure you control. Each engagement starts from a written, fixed scope covering which Nextcloud events trigger which document processes. The build covers the webhook listeners app, a stand-alone Windmill instance and OAuth workspace connections, and it ends with documented handover and optional retainer support.
How we scope
- The written scope names each Nextcloud event that starts a workflow and the document process it triggers.
- Event filters, user or group limits and the accounts each workflow may touch are agreed before the build starts.
- Engagements are fixed-scope, with deliverables and timelines agreed in writing before work begins, and quoted from that scope.
How we build
- The webhook listeners app is configured on the Nextcloud server with only the event sources the scope approves.
- A stand-alone Windmill instance is deployed in your infrastructure to run the workflow scripts and receive events.
- OAuth workspace connections are set up so Windmill calls Nextcloud APIs with scoped, revocable credentials.
How we hand over
- Each workflow is tested against a non-production Nextcloud instance, including events the filters should reject.
- Documentation covers the event map, credential ownership, Windmill configuration and how to disable a workflow safely.
- Your team receives a walkthrough of the running setup, with the written handover agreed in the scope.
How we support
- Ongoing support, upgrades and continuous testing are available as a retainer for the finished workflow setup.
- Nextcloud upgrades follow the one-major-version rule, with backups before each step and the webhook listeners app confirmed compatible first.
- Windmill and Nextcloud versions are tracked against published release schedules so your team can plan changes.

