- Share your setup across your org, launch background agents in alpha, and prepare for team-wide provider provisioning.
+ Workers are disabled by default. Add one hosted OpenWork worker for $50/month, then launch it from your dashboard.
{billingSummary?.featureGateEnabled
? billingSummary.hasActivePlan
- ? "Your account has an active OpenWork Cloud plan."
- : "Your account needs billing before the next launch."
+ ? "Your account has active worker billing."
+ : "Workers stay disabled until you purchase one for $50/month."
: "Billing gates are disabled in this environment."}
No workers yet
-
Create your first worker to unlock connection details and runtime controls.
+
Purchase your first worker to unlock connection details and runtime controls.
{billingSummary?.featureGateEnabled && !billingSummary.hasActivePlan
- ? "Billing required before the next launch."
+ ? "Purchase required before the next launch."
: `${ownedWorkerCount} worker${ownedWorkerCount === 1 ? "" : "s"} in your account.`}
diff --git a/ee/apps/den-web/app/(den)/_providers/den-flow-provider.tsx b/ee/apps/den-web/app/(den)/_providers/den-flow-provider.tsx
index 6f444030..9ca62a29 100644
--- a/ee/apps/den-web/app/(den)/_providers/den-flow-provider.tsx
+++ b/ee/apps/den-web/app/(den)/_providers/den-flow-provider.tsx
@@ -1299,7 +1299,7 @@ export function DenFlowProvider({ children }: { children: ReactNode }) {
setLaunchBusy(true);
setLaunchError(null);
setCheckoutUrl(null);
- setLaunchStatus(options.source === "signup_auto" ? "Creating your first worker..." : "Checking subscription and launch eligibility...");
+ setLaunchStatus(options.source === "signup_auto" ? "Creating your first worker..." : "Checking worker billing and launch eligibility...");
appendEvent("info", "Launch requested", resolvedLaunchName);
try {
diff --git a/ee/apps/den-web/app/(den)/o/[orgSlug]/dashboard/_components/billing-dashboard-screen.tsx b/ee/apps/den-web/app/(den)/o/[orgSlug]/dashboard/_components/billing-dashboard-screen.tsx
index 8f773862..6df307d1 100644
--- a/ee/apps/den-web/app/(den)/o/[orgSlug]/dashboard/_components/billing-dashboard-screen.tsx
+++ b/ee/apps/den-web/app/(den)/o/[orgSlug]/dashboard/_components/billing-dashboard-screen.tsx
@@ -144,7 +144,7 @@ export function BillingDashboardScreen() {
rel="noreferrer"
className="rounded-full bg-gray-900 px-5 py-2.5 text-[14px] font-medium text-white transition-colors hover:bg-gray-800"
>
- Start free trial
+ Purchase worker
) : null}
diff --git a/ee/apps/landing/README.md b/ee/apps/landing/README.md
index 323a3cc0..f57dc807 100644
--- a/ee/apps/landing/README.md
+++ b/ee/apps/landing/README.md
@@ -11,6 +11,7 @@
- `NEXT_PUBLIC_CAL_URL` - enterprise booking link
- `NEXT_PUBLIC_DEN_CHECKOUT_URL` - Polar checkout URL for the Den preorder CTA
+- `NEXT_PUBLIC_WINDOWS_CHECKOUT_URL` - Polar checkout URL for the Windows support plan CTA
- `LOOPS_API_KEY` - Loops API key for feedback/contact submissions
- `LOOPS_TRANSACTIONAL_ID_APP_FEEDBACK` - Loops transactional template ID for app feedback emails
- `LOOPS_INTERNAL_FEEDBACK_EMAIL` - optional override for the internal feedback recipient (defaults to `team@openworklabs.com`)
diff --git a/ee/apps/landing/app/download/page.tsx b/ee/apps/landing/app/download/page.tsx
index c1ec01f1..dad9d3db 100644
--- a/ee/apps/landing/app/download/page.tsx
+++ b/ee/apps/landing/app/download/page.tsx
@@ -5,13 +5,16 @@ import { getGithubData } from "../../lib/github";
export const metadata = {
title: "OpenWork - Download",
description:
- "Download OpenWork desktop for macOS, Windows, and Linux. Includes AUR install instructions and direct package downloads.",
+ "Download OpenWork desktop for macOS and Linux, or purchase Windows support for binary access and updates.",
};
export default async function Download() {
const github = await getGithubData();
const releaseLabel = github.releaseTag || "latest";
const releaseUrl = github.releaseUrl;
+ const windowsCheckoutUrl =
+ process.env.NEXT_PUBLIC_WINDOWS_CHECKOUT_URL || "/pricing#windows-support";
+ const windowsCheckoutExternal = /^https?:\/\//.test(windowsCheckoutUrl);
return (
diff --git a/ee/apps/landing/app/enterprise/page.tsx b/ee/apps/landing/app/enterprise/page.tsx
index dedc911f..47163f41 100644
--- a/ee/apps/landing/app/enterprise/page.tsx
+++ b/ee/apps/landing/app/enterprise/page.tsx
@@ -3,7 +3,7 @@ import { getGithubData } from "../../lib/github";
export const metadata = {
title: "OpenWork — Enterprise",
- description: "Secure hosting for safe, permissioned AI employees."
+ description: "Enterprise OpenWork licensing with deployment support, rollout help, and included Windows support."
};
export default async function Enterprise() {
diff --git a/ee/apps/landing/app/page.tsx b/ee/apps/landing/app/page.tsx
index f4e95ac0..00061240 100644
--- a/ee/apps/landing/app/page.tsx
+++ b/ee/apps/landing/app/page.tsx
@@ -5,6 +5,8 @@ import { headers } from "next/headers";
export default async function Home() {
const github = await getGithubData();
const cal = process.env.NEXT_PUBLIC_CAL_URL || "/enterprise#book";
+ const windowsCheckoutUrl =
+ process.env.NEXT_PUBLIC_WINDOWS_CHECKOUT_URL || "/download#windows-support";
const userAgent = headers().get("user-agent")?.toLowerCase() || "";
const isMobileVisitor = /android|iphone|ipad|ipod|mobile/.test(userAgent);
@@ -13,6 +15,7 @@ export default async function Home() {
stars={github.stars}
downloadHref={github.downloads.macos}
callHref={cal}
+ windowsCheckoutUrl={windowsCheckoutUrl}
isMobileVisitor={isMobileVisitor}
/>
);
diff --git a/ee/apps/landing/app/pricing/page.tsx b/ee/apps/landing/app/pricing/page.tsx
new file mode 100644
index 00000000..cb5deb07
--- /dev/null
+++ b/ee/apps/landing/app/pricing/page.tsx
@@ -0,0 +1,53 @@
+import { LandingBackground } from "../../components/landing-background";
+import { PricingGrid } from "../../components/pricing-grid";
+import { SiteFooter } from "../../components/site-footer";
+import { SiteNav } from "../../components/site-nav";
+import { getGithubData } from "../../lib/github";
+
+export const metadata = {
+ title: "OpenWork — Pricing",
+ description:
+ "Free solo desktop usage, annual Windows support, monthly cloud workers, and enterprise licensing."
+};
+
+export default async function PricingPage() {
+ const github = await getGithubData();
+ const callUrl = process.env.NEXT_PUBLIC_CAL_URL || "/enterprise#book";
+ const windowsCheckoutUrl =
+ process.env.NEXT_PUBLIC_WINDOWS_CHECKOUT_URL || "/download#windows-support";
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ OpenWork pricing
+
+
+ Pricing that keeps desktop free and makes paid access explicit.
+
+
+ Start solo for free. Purchase Windows support when you need it. Add hosted workers when you want cloud runtime. Talk to us for enterprise licensing.
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/ee/apps/landing/components/landing-enterprise.tsx b/ee/apps/landing/components/landing-enterprise.tsx
index b98201d8..516cbd1b 100644
--- a/ee/apps/landing/components/landing-enterprise.tsx
+++ b/ee/apps/landing/components/landing-enterprise.tsx
@@ -71,7 +71,8 @@ export function LandingEnterprise(props: Props) {
Run agentic workflows through your existing gateway, with
approved tools, clear permissions, and a rollout path your
non-technical teams can actually use, whether you self-host in
- your own infrastructure or deploy with OpenWork.
+ your own infrastructure or deploy with OpenWork. Enterprise
+ licensing includes Windows support.
@@ -185,7 +186,8 @@ export function LandingEnterprise(props: Props) {
Deploy inside your own environment or work with us on a
managed rollout, with your gateway, MCP servers, skills, and
- internal data sources connected.
+ internal data sources connected. Windows support is included in
+ enterprise licensing.
diff --git a/ee/apps/landing/components/landing-home.tsx b/ee/apps/landing/components/landing-home.tsx
index 2f99b43b..f44b90a3 100644
--- a/ee/apps/landing/components/landing-home.tsx
+++ b/ee/apps/landing/components/landing-home.tsx
@@ -11,6 +11,7 @@ import {
landingDemoFlows,
landingDemoFlowTimes
} from "./landing-demo-flows";
+import { PricingGrid } from "./pricing-grid";
import { LandingSharePackageCard } from "./landing-share-package-card";
import { SiteFooter } from "./site-footer";
import { SiteNav } from "./site-nav";
@@ -20,6 +21,7 @@ type Props = {
stars: string;
downloadHref: string;
callHref: string;
+ windowsCheckoutUrl: string;
isMobileVisitor: boolean;
};
@@ -70,8 +72,6 @@ export function LandingHome(props: Props) {
[activeDemoId]
);
- const downloadLinkProps = externalLinkProps(props.downloadHref);
- const callLinkProps = externalLinkProps(props.callHref);
const primaryCtaHref = props.isMobileVisitor
? "https://app.openworklabs.com"
: "/download";
@@ -108,6 +108,14 @@ export function LandingHome(props: Props) {
own keys, and share your setups seamlessly with your team.
+
+ Solo free forever
+ •
+ Windows support $99/year
+ •
+ Workers $50/month
+
@@ -247,8 +254,8 @@ export function LandingHome(props: Props) {
Local AI worker
- Start free on desktop with no signup, then automate email, Slack,
- and the work you do every day.
+ Start free on desktop forever with macOS and Linux downloads,
+ then automate email, Slack, and the work you do every day.
Learn more
@@ -262,8 +269,8 @@ export function LandingHome(props: Props) {
Hosted sandboxed workers
- Share your setup with your team and run your local setup in the
- cloud.
+ Workers are disabled by default. Purchase one for $50/month when
+ you need hosted runtime.
Learn more
@@ -277,8 +284,8 @@ export function LandingHome(props: Props) {
Safe workflow sharing
- Deploy on your infrastructure. Full audit trails, admin controls,
- and data that never leaves your network.
+ Deploy on your infrastructure. Enterprise licensing includes
+ Windows support plus rollout guidance.
Learn more
@@ -286,6 +293,14 @@ export function LandingHome(props: Props) {