-
Notifications
You must be signed in to change notification settings - Fork 56
JWT tokens account as operators #1385
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -358,7 +358,7 @@ You can adjust your subscription anytime via the [Customer Portal](#customer-por | |||||
|
|
||||||
| ### Seats | ||||||
|
|
||||||
| A Seat is a user who is active on the platform. A regular user counts as one Seat, while an [operator](../../core_concepts/16_roles_and_permissions/index.mdx#operator) (who can only execute scripts, flows, and apps) counts as half a Seat. We only count active users, i.e. users who have logged in to the platform in the last 30 days according to the audit logs. Seats are counted across all instances (dev, prod) but Windmill only counts once the same user. | ||||||
| A Seat is a user who is active on the platform. A regular user counts as one Seat, while an [operator](../../core_concepts/16_roles_and_permissions/index.mdx#operator) (who can only execute scripts, flows, and apps) counts as half a Seat. Each [external JWT token](../../advanced/16_external_auth_with_jwt/index.mdx) used in the last 30 days is also billed as half a Seat (same as an operator) — for seat counting, you can mix operators and external JWT tokens freely (e.g. 1 operator + 1 external JWT token = 1 Seat). We only count active users, i.e. users who have logged in to the platform in the last 30 days according to the audit logs. Seats are counted across all instances (dev, prod) but Windmill only counts once the same user. | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. P2 — em dash.
Suggested change
|
||||||
|
|
||||||
| ### Telemetry and usage tracking | ||||||
|
|
||||||
|
|
||||||
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -8,7 +8,7 @@ const faqs = [ | |||||
| { | ||||||
| id: 'pricing-explained', | ||||||
| question: "What is the logic behind Windmill's pricing?", | ||||||
| textAnswer: "Windmill's pricing is based on compute units (2 worker-gb-month each) and user seats. Operators count as half a seat. Billing uses minute granularity for auto-scaling. This ensures pricing scales linearly with your usage and team size.", | ||||||
| textAnswer: "Windmill's pricing is based on compute units (2 worker-gb-month each) and user seats. Operators and external JWT tokens count as half a seat each. Billing uses minute granularity for auto-scaling. This ensures pricing scales linearly with your usage and team size.", | ||||||
| answer: ( | ||||||
| <span> | ||||||
| Windmill's pricing is designed to align with the value we deliver to our customers. Our pricing model reflects the core value of Windmill, which is primarily related to the amount of compute resources used, and the number of users accessing the platform. We've structured our pricing to scale with your usage, ensuring you're paying for the actual value you derive from our platform. | ||||||
|
|
@@ -25,7 +25,12 @@ const faqs = [ | |||||
| className="text-blue-600 hover:text-blue-800 dark:text-blue-500 dark:hover:text-blue-600" | ||||||
| > | ||||||
| operator | ||||||
| </Link>{' '}(who can only execute scripts, flows, and apps) counts as half a seat. This allows for flexible team structures and cost-effective scaling of your user base. We only count active users, i.e. users who have logged in to the platform in the last 30 days according to the audit logs. | ||||||
| </Link>{' '}(who can only execute scripts, flows, and apps) counts as half a seat. Each <Link | ||||||
| to="/docs/advanced/external_auth_with_jwt" | ||||||
| className="text-blue-600 hover:text-blue-800 dark:text-blue-500 dark:hover:text-blue-600" | ||||||
| > | ||||||
| external JWT token | ||||||
| </Link>{' '}in use is also billed as half a seat. This allows for flexible team structures and cost-effective scaling of your user base. We only count active users, i.e. users who have logged in to the platform in the last 30 days according to the audit logs. | ||||||
| <br /><br /> | ||||||
| Our billing is meant to be fair and transparent: we only count the actual memory allocated to your workers in your production instance, with minute granularity if you use auto-scaling. This approach ensures that you're only charged for the resources actively contributing to your production environment. If you scale your workers up and down, the compute units will be accounted with minute granularity. For instance, you can run 10 workers with 2GB each for half a month at the same price as 5 workers with 2GB each for the full month. | ||||||
| <br /><br /> | ||||||
|
|
@@ -50,8 +55,8 @@ const faqs = [ | |||||
| }, | ||||||
| { | ||||||
| id: 'operator', | ||||||
| question: 'What is an operator?', | ||||||
| textAnswer: 'An operator is a user who can only execute scripts, flows and apps, but not create or edit them. Operators count as half a seat. 1 developer seat or 2 operator seats count as 1 seat for billing.', | ||||||
| question: 'What is an operator? How are external JWT tokens billed?', | ||||||
| textAnswer: 'An operator is a user who can only execute scripts, flows and apps, but not create or edit them. Operators count as half a seat. External JWT tokens (used for external auth) are also billed as half a seat each. 1 developer seat or 2 operator/JWT seats count as 1 seat for billing.', | ||||||
| answer: ( | ||||||
| <span> | ||||||
| An{' '} | ||||||
|
|
@@ -68,7 +73,17 @@ const faqs = [ | |||||
| Operators are 1/2 price of developers (or 1/2 seats) as long as they are operators in all workspaces they are members of. Operators are not set as the instance-level. | ||||||
| <br /> | ||||||
| <br /> | ||||||
| On the billing side, 1 developer seat or 2 operators seats count as 1 seat, there is no need to differentiate between developers and operators when purchasing the license. | ||||||
| Each{' '} | ||||||
| <Link | ||||||
| to="/docs/advanced/external_auth_with_jwt" | ||||||
| className="text-blue-600 hover:text-blue-800 dark:text-blue-500 dark:hover:text-blue-600" | ||||||
| > | ||||||
| external JWT token | ||||||
| </Link>{' '} | ||||||
| in use is billed the same way as an operator (1/2 seat). For seat counting, you can mix operators and external JWT tokens freely — for example, 1 operator + 1 external JWT token = 1 seat. | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. P2 — em dash.
Suggested change
|
||||||
| <br /> | ||||||
| <br /> | ||||||
| On the billing side, 1 developer seat or 2 operator/ext JWT seats count as 1 seat, there is no need to differentiate between developers, operators and external JWT tokens when purchasing the license. | ||||||
| </span> | ||||||
| ) | ||||||
| }, | ||||||
|
|
@@ -260,7 +275,12 @@ const faqs = [ | |||||
| Seats reported to Windmill are the number of users (1 developer, or 2 operators) who are | ||||||
| active (from logging in to running or deploying a script) on the platform in the last 30 | ||||||
| days, according to the audit logs. User count is across all instances (dev, prod) but | ||||||
| Windmill only counts once the same user. | ||||||
| Windmill only counts once the same user. Each <Link | ||||||
| to="/docs/advanced/external_auth_with_jwt" | ||||||
| className="text-blue-600 hover:text-blue-800 dark:text-blue-500 dark:hover:text-blue-600" | ||||||
| > | ||||||
| external JWT token | ||||||
| </Link>{' '}used in the last 30 days also counts as half a seat (same as an operator). | ||||||
| <br /> | ||||||
| <br /> | ||||||
| The number of compute units considered is the number of production compute units, not of development | ||||||
|
|
||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
P2 — redundant clause. The first half of the sentence already establishes the half-seat math via "1 developer seat or 2 operator/external JWT token seats count as 1 seat". The added trailing clause "and each external JWT token in use also counts as half a seat (same as an operator)" then restates the same fact, which makes the sentence harder to parse. Consider dropping the trailing clause: