You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 0b51cbc
Browse filesBrowse the repository at this point in the historyBrowse files
docs(self-hosting): fix errors found verifying the correction pass
A second round of verification checked every added and removed line against
source. It found errors the first pass introduced, which matter more than the
ones it fixed — a wrong new claim is worse than the stale one it replaced.
Corrections to the corrections:
- The GCS bucket table was inverted. Every GCS context falls back to
GCS_BUCKET_NAME; the rewrite claimed none did. The pre-existing text was
right and was replaced with a falsehood.
- S3 and Azure each have three fallback exceptions, not one: og-images and
workspace-logos fall back to the general bucket, and execution-files falls
back to a literal.
- The proxy table had four wrong rows. Azure OpenAI, Azure Anthropic and vLLM
are pinned only when the endpoint is user-supplied, so an operator-configured
endpoint does proxy. Azure Blob and GCS honor the proxy variables; S3 and
Bedrock do not. SES is the AWS SDK over HTTPS, not raw TCP. Adds the on-prem
hazard that matters most here: Ollama, LiteLLM and vLLM are dialed over the
default fetch, so NO_PROXY is required.
- The CloudWatch warning described a bill that cannot happen — every hosted-key
metric call site is gated on the deployment being Sim Cloud.
- networkPolicy.egressExceptCidrs: [] keeps the metadata defaults rather than
removing them, since Helm's `default` treats an empty list as unset. Verified
by rendering the chart. The security guidance said the opposite.
- The migrator retries far more than two error classes, so a database that is
simply down backs off rather than failing immediately.
- /api/v1/audit-logs authenticates with an API key, not a session, and the
Enterprise-plan requirement does not apply self-hosted — the exact deployment
the new paragraph addressed.
- The local upload path is /app/apps/sim/uploads: the standalone server chdirs
into its own directory.
- The update feed answers 200, not 302. KB_OPENAI_MODEL_NAME is optional.
OCR_PROVIDER inference is current behavior, not a legacy path.
Restores six things the cleanup dropped that existed nowhere else: version-skip
guidance, the workspace and last-member rejection rules, the gemma3:4b starter
model, kubectl top for OOMKill diagnosis, the grandfathered-workspace case, and
an explicit note that Compose telemetry is on by default.
Also resolves contradictions only visible across pages: the sandbox
prerequisites disagreed on three pages, and authentication.mdx kept a settings
path the enterprise pages had corrected.
The image inventory drops chartVersion. It made every chart-version bump fail a
check whose message says an image changed, and appVersion already pins the tags.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015BwsJTEQRzWJaY4BRCkPZt
Copy file name to clipboardExpand all lines: apps/docs/content/docs/platform/enterprise/access-control.mdx
+5-3Lines changed: 5 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -13,7 +13,7 @@ Access Control lets organization admins define permission groups that restrict w
13
13
14
14
## How it works
15
15
16
-
Access control is built around **permission groups**. Each group belongs to a specific organization and has a name, an optional description, a **workspace scope**, an optional **member** list, and a configuration that defines what its members can and cannot do. The organization's single **default group** is org-wide; every other group targets a **specific set of workspaces**. A non-default group with **no members** governs **all members** of its workspaces (including external members); adding members narrows it to only those people. Personal workspaces that do not belong to an organization have no permission groups.
16
+
Access control is built around **permission groups**. Each group belongs to a specific organization and has a name, an optional description, a **workspace scope**, an optional **member** list, and a configuration that defines what its members can and cannot do. The organization's single **default group** is org-wide; every other group targets a **specific set of workspaces**. A non-default group with **no members** governs **all members** of its workspaces (including external members); adding members narrows it to only those people. Personal or grandfathered workspaces that do not belong to an organization have no permission groups.
17
17
18
18
Sim resolves the governing group for a user in a workspace deterministically:
19
19
@@ -85,7 +85,7 @@ Expand an integration block to reach its **tool denylist**. Clearing individual
85
85
86
86
Controls the modules, actions, and credentials available to group members. Every row refuses at the API, not only in the UI — clearing a box revokes the access, it does not merely hide a tab.
<Imagesrc="/static/enterprise/access-control-platform.png"alt="Platform tab showing feature toggles grouped by category"width={900}height={566} />
89
89
90
90
**Modules**
91
91
@@ -182,6 +182,8 @@ A workspace-scoped group applies to **all members of its workspaces by default**
182
182
183
183
A user is governed by one group per workspace, so adding a user is rejected when it would conflict with another of their groups on a shared workspace (skipped rather than added in bulk). The default group ignores members entirely — it always governs everyone not covered by a workspace group.
184
184
185
+
A workspace also has at most one all-members group. Adding a workspace to a group, or removing a group's last member, is rejected when doing so would violate that — memberships and scopes are never silently moved.
186
+
185
187
Manage which workspaces a group governs from the **Workspaces** list on the same **General** tab. A non-default group is created targeting at least one workspace, but you can later remove all of them — a group with no workspaces simply governs nothing until you add one back.
186
188
187
189
External workspace members (people who have access to a workspace but belong to a different organization) can't be added as named members, but a workspace-scoped group with no members — and the organization default group — still governs them.
@@ -212,7 +214,7 @@ When a user opens Chat, their permission group is read before any block or tool
212
214
<FAQitems={[
213
215
{
214
216
question: "Who can create and manage permission groups?",
215
-
answer: "Any organization owner or admin on an Enterprise-entitled organization can create, edit, and delete permission groups. The organization must be on the Enterprise plan."
217
+
answer: "Any organization owner or admin on an Enterprise-entitled organization can create, edit, and delete permission groups. On Sim Cloud that means the organization must be on the Enterprise plan; self-hosted deployments use environment variables instead of the plan check."
216
218
},
217
219
{
218
220
question: "What happens to a workflow that was built before a block was restricted?",
Once enabled, audit logs are viewable in **Settings → Organization → Audit logs** and accessible via the API.
153
153
154
-
`GET /api/v1/audit-logs`requires a session and an organization on an Enterprise plan, so it is unreachable on a deployment that has no organization yet. The admin-key equivalent has neither requirement:
154
+
`GET /api/v1/audit-logs`authenticates with an `x-api-key` whose owner is an admin or owner of an organization, so it is unreachable on a deployment where nobody belongs to one yet. On Sim Cloud it additionally requires an active Enterprise subscription; self-hosted, `AUDIT_LOGS_ENABLED` takes that role. The admin-key equivalent needs neither an organization nor a plan:
155
155
156
156
```http
157
157
GET /api/v1/admin/audit-logs
158
158
x-admin-key: <admin-api-key>
159
159
```
160
160
161
-
It accepts the same filters as the organization endpoint plus `limit` (max 250) and `offset`, and returns entries across the whole deployment rather than one organization. `GET /api/v1/admin/audit-logs/<id>` returns a single entry. Set `ADMIN_API_KEY` to use it — see the [self-hosted enterprise guide](/platform/enterprise/self-hosted).
161
+
It accepts the same filters plus `actorEmail`, drops `includeDeparted`, and paginates with `limit` (max 250) and `offset` instead of the organization endpoint's `limit` (max 100) and`cursor`. It returns entries across the whole deployment rather than one organization. `GET /api/v1/admin/audit-logs/<id>` returns a single entry. Set `ADMIN_API_KEY` to use it — see the [self-hosted enterprise guide](/platform/enterprise/self-hosted).
Copy file name to clipboardExpand all lines: apps/docs/content/docs/platform/enterprise/custom-blocks.mdx
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -131,7 +131,7 @@ Open a block from **Settings → Organization → Custom blocks** to edit or del
131
131
},
132
132
{
133
133
question: "Can consumers see the workflow behind a block?",
134
-
answer: "No. A custom block only exposes the inputs it needs and the outputs you chose to share. The source workflow, its steps, and its intermediate values are never visible, and consumers don't need any access to it."
134
+
answer: "A custom block only exposes the inputs it needs and the outputs you chose to share, and consumers don't need any access to the source workflow. Its steps and intermediate values stay hidden unless you enable Trace runs in consumer logs, which surfaces them in the consumer's run trace."
135
135
},
136
136
{
137
137
question: "Can I change which workflow a block points to?",
Copy file name to clipboardExpand all lines: apps/docs/content/docs/platform/enterprise/data-drains.mdx
+4-3Lines changed: 4 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,6 +4,7 @@ description: Continuously export workflow logs, audit logs, and Chat data to you
4
4
---
5
5
6
6
import { FAQ } from'@/components/ui/faq'
7
+
import { Image } from'@/components/ui/image'
7
8
8
9
Data Drains let organization owners and admins on Enterprise plans continuously export Sim data to a destination they control — a customer-owned S3 bucket, Google Cloud Storage bucket, Azure Blob container, BigQuery table, Snowflake table, Datadog logs intake, or an HTTPS webhook. A drain runs on a schedule, picks up only new rows since its last successful run, and writes them to the destination. Viewing drain configuration and run history is restricted to owners and admins as well, since destinations expose internal bucket names, table identifiers, and webhook URLs.
9
10
@@ -15,9 +16,9 @@ Drains are independent of [Data Retention](/platform/enterprise/data-retention)
15
16
16
17
Go to **Settings → Organization → Data drains** in your workspace, then click **New drain**.
17
18
18
-

19
+
<Imagesrc="/static/enterprise/data-drains-list.png"alt="Data Drains settings page showing two configured drains — one exporting workflow logs to Amazon S3 daily, another exporting Chat conversations to an HTTPS webhook hourly"width={900}height={477} />
19
20
20
-

21
+
<Imagesrc="/static/enterprise/data-drains-new.png"alt="New data drain dialog with fields for name, source, cadence, destination, and S3 credentials"width={900}height={566} />
Each due drain is then fanned out as a `run-data-drain` background job, so the deployment also needs `TRIGGER_DEV_ENABLED` with a configured Trigger.dev project, or the local job backend. See [background jobs](/platform/self-hosting/background-jobs).
263
+
Each due drain is then fanned out as a `run-data-drain` background job, so the deployment also needs `TRIGGER_DEV_ENABLED` with a configured Trigger.dev project, or the default database-backed job queue, which both deployments use out of the box. See [background jobs](/platform/self-hosting/background-jobs).
Copy file name to clipboardExpand all lines: apps/docs/content/docs/platform/enterprise/data-retention.mdx
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -102,7 +102,7 @@ For each stage, choose the **entity types** to redact from the searchable grid.
102
102
-**United Kingdom** — NHS number, National Insurance number
103
103
-**Other regions** — Spanish (NIF, NIE), Italian (fiscal code, driver's licence, VAT code, passport, identity card), Polish (PESEL), Singaporean (NRIC/FIN, UEN), Australian (ABN, ACN, TFN, Medicare), Indian (PAN, Aadhaar, vehicle registration, voter ID, passport), and Finnish (personal identity code) identifiers
104
104
105
-
The **Block outputs** stage is restricted to regex- and checksum-based recognizers, so it can run in-flight over large payloads without a performance penalty. Types that need name-model detection — person name, location, date or time — are not offered for that stage.
105
+
The **Block outputs** stage is restricted to regex- and checksum-based recognizers, so it can run in-flight over large payloads without a performance penalty. Types that need name-model detection — person name, location, date or time, and nationality/religious/political group — are not offered for that stage.
106
106
107
107
Detection is language-aware: pick the **language** whose recognizers should apply. English, Spanish, Italian, Polish, and Finnish are supported, and the grid filters to the identifiers available for the selected language.
Each call fans the work out as background jobs, so the deployment also needs `TRIGGER_DEV_ENABLED` with a configured Trigger.dev project, or the local job backend.
208
+
Each call fans the work out as background jobs, so the deployment also needs `TRIGGER_DEV_ENABLED` with a configured Trigger.dev project, or the default database-backed job queue, which both deployments use out of the box.
209
209
210
210
### PII redaction
211
211
212
212
PII redaction runs against a standalone [Presidio](https://microsoft.github.io/presidio/) service. Deploy it (see `apps/pii`) and point Sim at it:
213
213
214
214
```bash
215
215
# The Presidio service exposing /analyze and /anonymize
Both features also fan work out as background jobs, so the deployment needs `TRIGGER_DEV_ENABLED` with a configured Trigger.dev project, or the local job backend. See [background jobs](/platform/self-hosting/background-jobs).
95
+
Both features also fan work out as background jobs, so the deployment needs `TRIGGER_DEV_ENABLED` with a configured Trigger.dev project, or the default database-backed job queue, which both deployments use out of the box. See [background jobs](/platform/self-hosting/background-jobs).
The organization-scoped `/api/v1/audit-logs` endpoint documented in the [audit logs guide](/platform/enterprise/audit-logs)requires a session and an organization on an Enterprise plan, so reach for the admin endpoints when neither exists yet.
236
+
The organization-scoped `/api/v1/audit-logs` endpoint documented in the [audit logs guide](/platform/enterprise/audit-logs)needs an API key whose owner is an admin or owner of an organization, so reach for the admin endpoints when no organization exists yet.
237
237
238
238
Deleting an organization requires echoing its slug, because the delete cascades to members, invitations, and permission groups, and detaches its workspaces:
Copy file name to clipboardExpand all lines: apps/docs/content/docs/platform/enterprise/verified-domains.mdx
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -73,4 +73,4 @@ NEXT_PUBLIC_SSO_ENABLED=true
73
73
74
74
`ENTERPRISE_ENABLED` turns both on together. See the [self-hosted enterprise guide](/platform/enterprise/self-hosted).
75
75
76
-
Once enabled, verify domains from **Settings → Organization → Single sign-on**, in the **Verified domains** section above the identity provider configuration. The older `/settings/domains` link still resolves — it redirects to the same page.
76
+
Once enabled, verify domains from **Settings → Organization → Single sign-on**, in the **Verified domains** section above the identity provider configuration. The older `/settings/domains` link still resolves to the same page.
Copy file name to clipboardExpand all lines: apps/docs/content/docs/platform/enterprise/whitelabeling.mdx
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -85,7 +85,7 @@ The organization settings have no favicon and no custom-CSS field. Set those ins
85
85
},
86
86
{
87
87
question: "Do members outside my organization see the custom branding?",
88
-
answer: "No. Custom branding is scoped to your organization. Members see your branding when signed in to your organization's workspace."
88
+
answer: "Organization white-labeling is scoped to your organization — members see it when signed in to your organization's workspace. Instance-wide branding is different: it needs no organization and applies to the whole deployment, including signed-out pages."
Copy file name to clipboardExpand all lines: apps/docs/content/docs/platform/self-hosting/authentication.mdx
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -75,7 +75,7 @@ SSO_ENABLED=true
75
75
NEXT_PUBLIC_SSO_ENABLED=true
76
76
```
77
77
78
-
Providers are then registered in the app under **Settings → Enterprise → Single Sign-On**. A provider can be scoped to an organization or registered without one. Most other enterprise features do read their settings from the organization that owns a workspace, so a deployment using them still needs an organization model — set `INSTANCE_ORG_NAME` to place every user in one shared organization, or provision organizations through the Admin API.
78
+
Providers are then registered in the app under **Settings → Organization → SSO**. A provider can be scoped to an organization or registered without one. Most other enterprise features do read their settings from the organization that owns a workspace, so a deployment using them still needs an organization model — set `INSTANCE_ORG_NAME` to place every user in one shared organization, or provision organizations through the Admin API.
79
79
80
80
See the [SSO guide](/platform/enterprise/sso) for identity-provider setup and the [self-hosted enterprise guide](/platform/enterprise/self-hosted) for the organization patterns.
Copy file name to clipboardExpand all lines: apps/docs/content/docs/platform/self-hosting/desktop.mdx
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -29,9 +29,9 @@ Both endpoints cache their GitHub lookups for **5 minutes**, and both respond th
29
29
30
30
| Status | Meaning |
31
31
|---|---|
32
-
|`302`| Success — redirect to the release asset |
32
+
|`302`| Success on `/download` — a redirect to the release asset. The update feed answers `200` with `text/yaml` instead|
33
33
|`404`| GitHub answered, but this channel has no release |
34
-
|`502`| GitHub was unreachable, or every candidate release lacked valid desktop artifacts |
34
+
|`502`| GitHub could not be read — unreachable, rate-limited, or every candidate release lacked valid desktop artifacts |
35
35
36
36
The Sim server needs outbound access to `api.github.com` and `github.com` for these to resolve. Unauthenticated GitHub API requests are capped at 60/hour per IP; set `GITHUB_TOKEN` on the Sim server to raise that to 5000/hour.
0 commit comments