---
import Layout from '~/layouts/PageLayout.astro';
import Note from '~/components/widgets/Note.astro';
import Prices from '~/components/widgets/Pricing.astro';
import FAQs from '~/components/widgets/FAQs.astro';
import Steps from '~/components/widgets/Steps.astro';
import CallToAction from '~/components/widgets/CallToAction.astro';

const metadata = {
  title: 'RustDesk Pricing - Self-Hosted Remote Desktop Server Plans',
  description: 'Choose the right RustDesk self-hosting plan for your organization. Free open-source plan available. Pro plans with advanced features for enterprise use.',
  keywords: 'rustdesk pricing, self-hosted remote desktop pricing, remote desktop server cost, open source remote access pricing, enterprise remote desktop plans',
  author: 'RustDesk Team',
};
---

<script>
  import Swal from 'sweetalert2';
  import 'sweetalert2/dist/sweetalert2.min.css';
  window['gotoBuy'] = function (redirectUrl) {
    Swal.fire({
      title: 'Please Confirm',
      html: `<p style="text-align:left">Do you want to proceed to the purchase page? <br><br>Please note that what you are purchasing is <b style="font-size: 2em">NOT</b> a <span style="text-decoration:line-through">SaaS(Software as a Service)</span> subscription. <br><br>Instead, it is a license for a <b style="font-size: 2em">self-hosting</b> solution, which requires you to deploy it on your own server (cloud server, e.g. AWS EC2, Azure VM, Vultr VPS etc, or your on-premise server). <br><br>Please <b style="font-size: 2em">don't</b> buy if you don't know what is self-hosting`,
      icon: 'question',
      showCancelButton: true,
      confirmButtonText: 'Yes',
      cancelButtonText: 'No',
    }).then((result) => {
      if (result.isConfirmed) {
        Swal.fire({
          title: 'Please Confirm',
          html: `Please note that we <span class="text-3xl font-bold">don't</span> offer <span class="text-3xl font-bold">refunds</span>. We strongly recommend <span class="underline font-bold">testing our free self-hosting plan</span> before considering the purchase of our Pro plan. Are you still interested in proceeding?`,
          showCancelButton: true,
          confirmButtonText: 'Yes',
          cancelButtonText: 'No',
        }).then((result) => {
          if (result.isConfirmed) {
            try {
              const url = new URL(redirectUrl);
              const pageParams = new URLSearchParams(window.location.search);
              pageParams.forEach((value, key) => {
                if (!url.searchParams.has(key)) url.searchParams.append(key, value);
              });
              window.open(url.toString(), '_blank');
            } catch (e) {
              // Fallback if URL API fails for any reason
              const qs = window.location.search ? (redirectUrl.includes('?') ? '&' : '?') + window.location.search.slice(1) : '';
              window.open(redirectUrl + qs, '_blank');
            }
          }
        });
      }
    });
  };
</script>

<Layout metadata={metadata} i18n>
  <Note
    title="Note"
    subtitle='This pricing is for <span class="text-xl text-blue-500">self-hosting</span> solution, it is <span class="text-3xl font-extrabold">NOT</span> a <span class="line-through text-xl text-blue-500">SaaS</span> subscription.'
  />

  <Prices
    title='Pricing of our <span class="text-5xl text-blue-500">self-hosting</span> solutions'
    subtitle="Only pay for what you need"
    prices={[
      {
        title: 'Free',
        subtitle: 'Free self-hosting plan',
        price: '0 <span class="text-sm">/month</span>',
        period: 'Open source and free',
        items: [
          {
            description: 'Online status',
          },
          {
            description: 'Community support',
          },
        ],
        callToAction: {
          target: '_blank',
          text: 'Get started',
          href: 'https://rustdesk.com/docs/en/self-host/rustdesk-server-oss/',
        },
      },
      {
        title: 'Individual',
        subtitle: 'Individual self-hosting <span class="font-bold">Pro</span> plan',
        price: '9.90 <span class="text-sm">/month</span>',
        period: 'billed annually',
        items: [
          {
            description:
              '<a class="underline" target="_blank" href="https://github.com/rustdesk/rustdesk/wiki/FAQ#login-users">1 login user <span class="inline-flex items-center justify-center w-4 h-4 text-xs font-bold text-white bg-red-500 rounded-full hover:bg-red-600 cursor-help ml-1" title="Click for more information">?</span></a>',
          },
          {
            description:
              '<a class="underline" target="_blank" href="https://github.com/rustdesk/rustdesk/wiki/FAQ#managed-devices">20 managed devices <span class="inline-flex items-center justify-center w-4 h-4 text-xs font-bold text-white bg-red-500 rounded-full hover:bg-red-600 cursor-help ml-1" title="Click for more information">?</span></a>',
          },
          {
            description:
              '<a class="underline text-red-500 font-bold" target="_blank" href="https://github.com/rustdesk/rustdesk/wiki/FAQ#concurrent-connections">Unlimited concurrent connections</a>',
          },
          {
            description:
              '<a class="underline" target="_blank" href="https://rustdesk.com/docs/en/self-host/rustdesk-server-pro/2fa/">2FA</a>',
          },
          {
            description:
              '<a class="underline" target="_blank" href="https://rustdesk.com/docs/en/self-host/rustdesk-server-pro/console/">Web console</a>',
          },
          {
            description: 'Address book',
          },
          {
            description: 'Audit log',
          },
          {
            description: 'Change ID',
          },
          {
            description:
              '<a class="underline" target="_blank" href="https://rustdesk.com/docs/en/self-host/rustdesk-server-pro/permissions/">Access control</a>',
          },
          {
            description:
              '<a class="underline" target="_blank" href="https://rustdesk.com/docs/en/self-host/rustdesk-server-pro/strategy/">Centralized settings</a>',
          },
          {
            description:
              '<a class="underline" target="_blank" href="https://rustdesk.com/docs/en/self-host/rustdesk-server-pro/relay/">Distributed relay servers</a>',
          },
        ],
        callToAction: {
          text: 'Buy now',
          onclick: 'gotoBuy("https://rustdesk.com/api/lic/stripe/checkout?type=Individual")',
          variant: 'primary',
        },
      },
      {
        title: 'Basic',
        subtitle: 'Basic self-hosting <span class="font-bold">Pro</span> plan',
        price: '19.90 <span class="text-sm">/month</span>',
        period: 'billed annually',
        items: [
          {
            description: '<span class="font-bold text-red-500">Everything in the individual plan</span>',
            icon: 'tabler:checks',
          },
          {
            description:
              '<a class="underline" target="_blank" href="https://github.com/rustdesk/rustdesk/wiki/FAQ#login-users">10 login users</a>',
          },
          {
            description:
              '<a class="underline" target="_blank" href="https://github.com/rustdesk/rustdesk/wiki/FAQ#managed-devices">100 managed devices</a>',
          },
          {
            description:
              '<a class="underline" target="_blank" href="https://rustdesk.com/docs/en/self-host/rustdesk-server-pro/oidc/">OIDC (SSO)</a>',
          },
          {
            description:
              '<a class="underline" target="_blank" href="https://rustdesk.com/docs/en/self-host/rustdesk-server-pro/ldap/">LDAP integration</a>',
          },
          {
            description:
              '<a class="underline" target="_blank" href="https://rustdesk.com/docs/en/self-host/rustdesk-server-pro/permissions/#cross-group-settings">Cross group access</a>',
          },
          {
            description:
              '<a class="underline text-blue-500 font-bold" target="_blank" href="https://rustdesk.com/docs/en/self-host/client-configuration/#1-custom-client-generator-pro-only">Custom client generator</a>',
          },
          {
            description:
              '<a class="underline" target="_blank" href="https://github.com/rustdesk/rustdesk/wiki/FAQ#how-to-make-rustdesk-work-properly-in-restricted-network-with-80443-only">WebSocket</a>',
          },
        ],
        callToAction: {
          text: 'Buy now',
          onclick: 'gotoBuy("https://rustdesk.com/api/lic/stripe/checkout?type=Basic")',
        },
        hasRibbon: true,
        ribbonTitle: 'popular',
      },
      {
        title: 'Customized',
        subtitle: 'Customized <span class="font-bold">Pro</span> plan',
        price: '<span id="cprice">19.90</span> <span class="text-sm">/month</span>',
        period: 'billed annually',
        items: [
          {
            description: '<span class="font-bold text-red-500">Everything in the basic plan</span>',
            icon: 'tabler:checks',
          },
          {
            description: '$1 for each additional user',
          },
          {
            description: '$0.1 for each additional device',
          },
        ],
        content: `
<form class="flex flex-col space-y-3 mx-3 min-w-[200px]">
  <label for="users" class="text-left font-bold">Number of Login Users:</label>
  <input class="bg-white text-black rounded-md border border-gray-300 py-1 px-2 w-24 h-10" type="number" id="users" name="users" value="10" min="10" max="500" step="10">
  <input type="range" id="usersSlider" class="slider" name="usersRange" value="10" min="10" max="500" step="10">
  <label for="devices" class="text-left font-bold">Number of Managed Devices:</label>
  <input class="bg-white text-black rounded-md border border-gray-300 py-1 px-2 w-24 h-10" type="number" id="devices" name="devices" value="100" min="100" max="5000" step="100">
  <input type="range" id="devicesSlider" class="slider" name="devicesRange" value="100" min="100" max="5000" step="100">
</form>
<br>
`,
        callToAction: {
          text: 'Buy now',
          onclick: 'submit()',
          variant: 'primary',
        },
      },
    ]}
  />

  <Prices
    prices={[
      {
        title: 'Customized V2',
        subtitle: 'Customized <span class="font-bold">Pro</span> plan with limited concurrent connections',
        price: '<span id="cprice2">19.90</span> <span class="text-sm">/month</span>',
        period: 'billed annually',
        items: [
          {
            description: `<span class="font-bold">Everything in the basic self-hosting plan <span class="underline font-normal">but with limited concurrent connections, excessive managed devices won't be disabled</span></span>`,
            icon: 'tabler:checks',
          },
          {
            description: 'Unlimited concurrent sessions (in tabs or separate windows) per concurrent connection',
          },
          {
            description: '$1 for each additional user',
          },
          {
            description: '$0.1 for each additional device',
          },
          {
            description: '$20 for each additional concurrent connection',
          },
        ],
        id: 'custom2',
        content: `
<form class="flex flex-col space-y-3 mx-3">
  <label for="users2" class="text-left font-bold">Number of Login Users:</label>
  <input class="bg-white text-black rounded-md border border-gray-300 py-1 px-2 w-24 h-10" type="number" id="users2" name="users2" value="10" min="10" max="500" step="10">
  <input type="range" id="usersSlider2" class="slider" name="usersRange2" value="10" min="10" max="500" step="10">
  <label for="devices2" class="text-left font-bold">Number of Managed Devices:</label>
  <input class="bg-white text-black rounded-md border border-gray-300 py-1 px-2 w-24 h-10" type="number" id="devices2" name="devices2" value="100" min="100" max="5000" step="100">
  <input type="range" id="devicesSlider2" class="slider" name="devicesRange2" value="100" min="100" max="5000" step="100">
  <label for="conns" class="text-left font-bold">Number of Concurrent Connections:</label>
  <input class="bg-white text-black rounded-md border border-gray-300 py-1 px-2 w-24 h-10" type="number" id="conns" name="conns" value="1" min="1" max="50" step="1">
  <input type="range" id="connsSlider" class="slider" name="connsRange" value="1" min="1" max="50" step="1">
</form>
<br>
`,
        callToAction: {
          text: 'Buy now',
          onclick: 'submit2()',
          variant: 'primary',
        },
      },
    ]}
  />

  <CallToAction
    actions={[
      {
        text: 'sales@rustdesk.com',
        href: 'mailto:sales@rustdesk.com',
        target: '_blank',
        icon: 'tabler:mail',
      },
    ]}
  >
    <Fragment slot="title">Contact us for larger plans & inquiries</Fragment>
  </CallToAction>

  <Steps
    title="A guided journey from plans to production"
    tagline="simplified process"
    isReversed={true}
    items={[
      {
        title: 'Install RustDesk Server Pro',
        icon: 'tabler:number-1',
        description:
          '<code>bash <(wget -qO- https://get.docker.com)<br>wget rustdesk.com/pro.yml -O compose.yml<br>docker compose up -d</code>',
      },
      {
        title: 'Explore plans and select a plan',
        icon: 'tabler:number-2',
      },
      {
        title: 'Enter email and payment details',
        icon: 'tabler:number-3',
      },
      {
        title: 'Get the license key via the email you entered',
        icon: 'tabler:number-4',
      },
      {
        title: 'Enter the license key in the web console of RustDesk Server Pro',
        icon: 'tabler:number-5',
      },
      {
        title: 'Ready!',
        icon: 'tabler:check',
        description:
          'For detailed instructions, please refer to our <a class="underline" target="_blank" href="https://rustdesk.com/docs/en/self-host/rustdesk-server-pro/license/">documentation</a>.',
      },
    ]}
    image={{
      src: '~/assets/images/steps.jpg',
      alt: 'Steps image',
    }}
  />

  <FAQs
    title="Pricing FAQs"
    subtitle="Choosing the right plan is important, and we're here to answer your questions. If you have queries about our pricing options, you're in the right place."
    columns={1}
    items={[
      {
        title: 'Do the plans come with customer support?',
        description:
          'Absolutely, all paid plans include access to our dedicated customer support to assist you with any queries or concerns.',
      },
      {
        title: 'Is there a trial license?',
        description: 'Please <a class="underline" href="mailto:sales@rustdesk.com">contact us</a>',
      },
      {
        title: 'How to upgrade my plan?',
        description:
          'Certainly! You can easily <a class="underline" target="_blank" href="https://rustdesk.com/docs/en/self-host/rustdesk-server-pro/license/#renewupgrade-license">upgrade your plan</a>, at any time, to find the one that best suits your evolving requirements.',
      },
      {
        title: 'What payment methods do you accept?',
        description:
          'We accept major credit cards and online payment methods to ensure a convenient and secure transaction process. If you want to pay via bank transfer, please <a class="underline" href="mailto:sales@rustdesk.com">contact us</a>; you will be charged extra bank process fee, and we will send you the license key once we receive the offline payment in the bank; it takes 3~5 working days.',
      },
      {
        title: 'Are there any hidden fees beyond the displayed cost?',
        description:
          'No, the cost covers all the features and  listed under each plan. There are no hidden fees or extra charges.',
      },
      {
        title: 'Do you have monthly payment?',
        description:
          'No, we only offer annual payment plans. We do not auto-renew; you will receive an email to remind you to renew your license 14 days before the expiration date.',
      },
      {
        title: 'Do you have discount for non-profit or education organization?',
        description: 'No, we do not have it yet. You are encouraged to use the free plan.',
      },
      {
        title: "What's your terms?",
        description:
          'Please check this <a class="underline" target="_blank" href="https://github.com/rustdesk/rustdesk-server-pro/blob/main/terms">terms</a>',
      },
      {
        title:
          'What about casual support cases? We have some devices that need to be supported occasionally without unattended access.',
        description:
          'We provide this <a class="underline" target="_blank" href="https://github.com/rustdesk/rustdesk-server-pro/discussions/182#discussioncomment-10083053">solution</a>',
      },
    ]}
  />
</Layout>
