<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>code-signing &#8211; Xojo Programming Blog</title>
	<atom:link href="https://blog.xojo.com/tag/code-signing-2/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.xojo.com</link>
	<description>Blog about the Xojo programming language and IDE</description>
	<lastBuildDate>Mon, 31 Aug 2026 13:26:40 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.7</generator>
	<item>
		<title>How to code-sign Windows apps, including an automation script</title>
		<link>https://blog.xojo.com/2026/08/26/how-to-code-sign-windows-apps-including-an-automation-script/</link>
		
		<dc:creator><![CDATA[Gabriel Ludosanu]]></dc:creator>
		<pubDate>Wed, 26 Aug 2026 16:03:14 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[azure-artifact]]></category>
		<category><![CDATA[code-signing]]></category>
		<guid isPermaLink="false">https://blog.xojo.com/?p=16459</guid>

					<description><![CDATA[You build a Windows app, zip it up, hand it to a user, and Windows may hit them with&#160;&#8220;Windows protected your PC&#8221;. A clean but&#8230;]]></description>
										<content:encoded><![CDATA[
<p>You build a Windows app, zip it up, hand it to a user, and Windows may hit them with&nbsp;<em>&#8220;Windows protected your PC&#8221;</em>. A clean but unsigned binary has no publisher identity or established SmartScreen reputation, so Windows has little reason to trust it.</p>



<p>This guide walks you through the complete process of signing EXE and DLL files on Windows with&nbsp;<strong>Azure Artifact Signing</strong>.</p>



<p>Here&#8217;s the shape of it, so you know what you&#8217;re signing up for:</p>



<ul class="wp-block-list">
<li><strong>One-time setup (Steps 1–9):</strong>&nbsp;Azure account, portal clicks, and identity validation. This is the slow part. Budget a day to a week for the identity check to clear.</li>



<li><strong>Every build (Step 10):</strong>&nbsp;one script that signs your exe and DLLs in seconds.</li>
</ul>



<p>If you&#8217;ve already done the setup, skip straight to&nbsp;Step 10.</p>



<h2 class="wp-block-heading" id="why-i-picked-azure-artifact-signing">Why I Picked Azure Artifact Signing</h2>



<ul class="wp-block-list">
<li><strong>$9.99/mo</strong>&nbsp;for up to 5,000 signatures (Basic tier), with no USB hardware token to manage.</li>



<li><strong>Fully managed.</strong>&nbsp;Microsoft rotates the certificates daily behind the scenes. You never see or store a private key.</li>



<li><strong>Identity-based publisher reputation.</strong>&nbsp;Public Trust signing ties the signature to your validated identity instead of a certificate you manage yourself. SmartScreen warnings can still appear for first-time or low-volume downloads; signing does not guarantee they will disappear immediately.</li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><strong>A note on names:</strong>&nbsp;this service was called &#8220;Azure Trusted Signing&#8221; until recently. Same thing, new name. If you see &#8220;Trusted Signing&#8221; in older docs or screenshots, it&#8217;s the same service.</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="prerequisites">Prerequisites</h2>



<ol class="wp-block-list">
<li>A Microsoft account (you get one when you sign up with Azure).</li>



<li>A&nbsp;<strong>paid Azure subscription.</strong>&nbsp;<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> This is the #1 early blocker: Artifact Signing&nbsp;<strong>does not work on free/trial/sponsored subscriptions.</strong>&nbsp;Upgrade to&nbsp;<strong>pay-as-you-go</strong>&nbsp;first (Cost Management + Billing → your subscription → upgrade) &#8211;&nbsp;<a href="https://azure.microsoft.com/en-us/products/artifact-signing" target="_blank" rel="noreferrer noopener">https://azure.microsoft.com/en-us/products/artifact-signing</a>.</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="step-1--register-the-resource-provider">Step 1 — Register the resource provider</h2>



<p>Quick orientation first: an Azure&nbsp;<strong>subscription</strong>&nbsp;is the billing container for everything you create. Azure charges your services to it, and it also defines where those resources live and who can access them. When you signed up, Azure created one for you automatically (often with a forgettable default name like &#8220;Azure subscription 1&#8221;).</p>



<p>A separate subscription is optional. If you want clean billing and access boundaries for signing, create or dedicate one; otherwise, use your existing paid subscription and keep the signing resources in a dedicated resource group.</p>



<p>Then:</p>



<ol class="wp-block-list">
<li>Portal →&nbsp;<strong>Subscriptions</strong>&nbsp;→ the subscription you chose.</li>



<li>Left menu →&nbsp;<strong>Settings → Resource providers</strong>.</li>



<li>Find&nbsp;<strong><code>Microsoft.CodeSigning</code></strong>&nbsp;→ click the&nbsp;<strong>…</strong>&nbsp;→&nbsp;<strong>Register</strong>. Wait for&nbsp;<strong>Registered</strong>.</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="step-2--create-the-artifact-signing-account">Step 2 — Create the Artifact Signing account</h2>



<p>Keep the signing resources together in the same subscription and a dedicated resource group.</p>



<ol class="wp-block-list">
<li>Portal search →&nbsp;<strong>Artifact Signing Accounts → Create</strong>.</li>



<li><strong>Subscription</strong>: the paid subscription you chose.&nbsp;<strong>Resource group</strong>: new, e.g.&nbsp;<code>rg-artifact-signing</code>.</li>



<li><strong>Account name</strong>: 3–24 alphanumeric, starts with a letter,&nbsp;<strong>globally unique</strong>&nbsp;(no consecutive hyphens). e.g.&nbsp;<code>xojoappsigning</code>.</li>



<li><strong>Region</strong>: pick one you&#8217;ll remember; it determines your signing endpoint.</li>



<li><strong>Pricing</strong>:&nbsp;<strong>Basic</strong>&nbsp;unless you&#8217;ll exceed 5,000 signs/month.</li>



<li>Create, then note the&nbsp;<strong>Account URI</strong>&nbsp;on the overview page. It follows the pattern&nbsp;<code>https://&lt;region-code&gt;.codesigning.azure.net/</code>.</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="step-3--assign-the-identity-verifier-role">Step 3 — Assign the Identity Verifier role</h2>



<p>You need this before the identity-validation button becomes clickable.</p>



<ol class="wp-block-list">
<li>From your Artifact Signing account, left menu →&nbsp;<strong>Access control (IAM)</strong>&nbsp;→&nbsp;<strong>Add role assignment</strong>.</li>



<li>Role:&nbsp;<strong>Artifact Signing Identity Verifier</strong>&nbsp;(use the search field) → assign to&nbsp;<strong>your own user account</strong>.</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="step-4--identity-validation-the-real-gate">Step 4 — Identity validation (the real gate)</h2>



<p>From your Artifact Signing account (the one you created in Step 2), go to the left menu →&nbsp;<strong>Objects → Identity validations</strong>&nbsp;→&nbsp;<strong>New Identity</strong>&nbsp;→&nbsp;<strong>Public</strong>.</p>



<p><strong>Public</strong>&nbsp;is what you want for normal app signing (it&#8217;s what SmartScreen cares about).</p>



<p>Fill in your legal business name, website, emails, business identifier (tax ID / DUNS), and address. Two gotchas that bite everyone:</p>



<ul class="wp-block-list">
<li>The&nbsp;<strong>secondary email must be on the same domain as the primary</strong>.</li>



<li><strong>Individual developers</strong>: the form pulls from your Azure&nbsp;<em>billing account</em>, and its name/address must exactly match your ID.</li>
</ul>



<p><strong>What happens next:</strong>&nbsp;status goes&nbsp;<code>In Progress</code>&nbsp;→&nbsp;<code>Action Required</code>&nbsp;(this is the point when you may have to wait a few hours to days&#8230; In my case, it took only an hour). You&#8217;ll be routed through a third-party verifier (<strong>AU10TIX</strong>). You upload a government ID and a selfie from your phone, then add the resulting&nbsp;<strong>Verified ID to Microsoft Authenticator</strong>&nbsp;and share it back (another hour or so).</p>



<p><strong>Timeline:</strong>&nbsp;officially 1–20 business days; in practice often hours to a few days. If it stalls, re-submit with a different identifier (tax ID instead of DUNS) and make sure your company name/address match your documents&nbsp;<em>exactly</em>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="step-5--create-the-certificate-profile">Step 5 — Create the certificate profile</h2>



<ol class="wp-block-list">
<li>From your Artifact Signing account, left menu →&nbsp;<strong>Objects → Certificate profiles</strong>&nbsp;→&nbsp;<strong>Create</strong>.</li>



<li>Type:&nbsp;<strong>Public Trust</strong>.</li>



<li>Name it (5–100 chars), then pick your completed identity validation under&nbsp;<strong>Verified CN and O</strong>.</li>



<li>Create. You never see or hold the certificate. It&#8217;s rotated daily behind the scenes. The public cert is embedded in every file you sign.</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="step-6--assign-the-certificate-profile-signer-role">Step 6 — Assign the Certificate Profile Signer role</h2>



<p>This is the role that lets you actually sign. Because we&#8217;re using the Azure CLI, it goes on&nbsp;<strong>your user</strong>. No app registration is needed (this is a separate/alternative process, but we&#8217;re not talking about that in this article).</p>



<ol class="wp-block-list">
<li>From your Artifact Signing account, left menu →&nbsp;<strong>Access control (IAM)</strong>&nbsp;→&nbsp;<strong>Add role assignment</strong>.</li>



<li>Role:&nbsp;<strong>Artifact Signing Certificate Profile Signer</strong>&nbsp;→ assign to&nbsp;<strong>your own user account</strong>.</li>
</ol>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Give role assignments a few minutes to propagate. If you try signing immediately and hit a 403, wait ~5 minutes and retry.</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="step-7--install-the-signing-tools">Step 7 — Install the signing tools</h2>



<p>First, the <strong>Azure CLI</strong>: <code>winget install Microsoft.AzureCLI</code></p>



<p><em>You’ll use it in Step 9 to authenticate with Azure.</em></p>



<p><strong>SignTool</strong>&nbsp;comes with the Windows SDK. Install it with: <code>winget install --id Microsoft.WindowsSDK --exact</code></p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" />&nbsp;Run this to find the newest x64&nbsp;signtool.exe:<br><code>Get-ChildItem "C:\Program Files (x86)\Windows Kits\10\bin" -Recurse -Filter signtool.exe | Where-Object { $_.FullName -match '\\x64\\signtool\.exe$' } | Sort-Object FullName -Descending | Select-Object -First 1 -ExpandProperty FullName</code></p>



<p><em>Note the path down.</em></p>



<p><strong>.NET 8 runtime</strong>&nbsp;(x64).</p>



<p><strong>Microsoft Visual C++ Redistributable</strong>.</p>



<p><strong>Artifact Signing Client Tools</strong>:<code>winget install -e --id Microsoft.Azure.ArtifactSigningClientTools</code><br>This installs&nbsp;<code>Azure.CodeSigning.Dlib.dll</code>&nbsp;(the plugin signtool uses to talk to Azure).</p>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" />&nbsp;Locate the actual dll path after install:<br><code>Get-ChildItem -Path "C:\Program Files","$env:LOCALAPPDATA" -Recurse -Filter Azure.CodeSigning.Dlib.dll -ErrorAction SilentlyContinue | Select-Object -First 1 -ExpandProperty FullName</code></p>



<p><em>Note the path down.</em></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>If&nbsp;<code>signtool</code>&nbsp;gives you &#8220;command not found&#8221;, that&#8217;s normal; it&#8217;s not on PATH. Use the full path, or add&nbsp;<code>...\10\&lt;version&gt;\x64</code>&nbsp;to your PATH.</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="step-8--create-the-metadata-file">Step 8 — Create the metadata file</h2>



<p>This is a small JSON with three values. Name it anything you like, e.g.&nbsp;<code>artifact-code-signing.json</code>:</p>



<pre class="wp-block-code"><code>{
	"Endpoint": "https://&lt;region-code&gt;.codesigning.azure.net",
	"CodeSigningAccountName": "xojoappsigning",
	"CertificateProfileName": "...."
}</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>This JSON file will be used a lot, so save it somewhere safe.</p>
</blockquote>



<ul class="wp-block-list">
<li><strong>Endpoint</strong>&nbsp;= your account URI (region-specific; must match where the account + profile live, or you get a 403).</li>



<li><strong>CodeSigningAccountName</strong>&nbsp;= the Artifact Signing account name from Step 2.</li>



<li><strong>CertificateProfileName</strong>&nbsp;= the certificate profile name you created in Step 5.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="step-9--authenticate-with-the-azure-cli">Step 9 — Authenticate with the Azure CLI</h2>



<pre class="wp-block-code"><code>az login</code></pre>



<p>This opens your browser; sign in with the Microsoft account tied to your Azure subscription. When signtool runs, the dlib picks up your logged-in Azure CLI session automatically.</p>



<p>If you have multiple Azure subscriptions, point the CLI at the right one, then confirm it took:</p>



<pre class="wp-block-code"><code>az account set --subscription "&lt;your subscription id&gt;"
az account show --query name -o tsv</code></pre>



<p>The second command should print your code-signing subscription&#8217;s name. If you also have multiple Microsoft tenants (a personal account&nbsp;<em>and</em>&nbsp;a work account, for example), log straight into the right one:</p>



<pre class="wp-block-code"><code>az login --tenant "&lt;tenant id&gt;"</code></pre>



<p>You may occasionally need to re-run&nbsp;<code>az login</code>&nbsp;after long idle periods.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="step-10--sign-your-xojo-app">Step 10 — Sign your Xojo app</h2>



<p>Just remember, you need to&nbsp;<strong>sign the compiled application after each new build</strong>.</p>



<h3 class="wp-block-heading" id="what-to-sign-and-skip">What to sign (and skip)</h3>



<p>Your Xojo Windows build folder looks roughly like this. Sign the binaries you build or distribute under your publisher identity; leave Xojo, Microsoft, and other vendor-signed dependencies alone.</p>



<pre class="wp-block-code"><code>Windows 64 bit/
└── YourApp/
    ├── YourApp.exe              ← sign
    ├── &lt;your own DLLs&gt;          ← sign
    ├── XojoGUIFramework64.dll   ← skip, Xojo provides signed DLLs
    ├── YourApp Libs/            ← skip, Xojo provides signed DLLs
    ├── msvcp140.dll, vcruntime*.dll …  ← skip (Microsoft runtime)
    └── YourApp.exe.WebView2/    ← skip (WebView2 cache)
</code></pre>



<h3 class="wp-block-heading" id="the-script">The script</h3>



<p>Save this as&nbsp;<code>sign.ps1</code>, next to the Xojo project, update the paths at the top, and run it from PowerShell:</p>



<pre class="wp-block-code"><code>$ErrorActionPreference = "Stop"

$Signtool    = "C:\...\signtool.exe"                            <em># path from Step 7</em>
$Dlib        = "C:\...\Azure.CodeSigning.Dlib.dll"              <em># path from Step 7</em>
$Metadata    = "C:\...\artifact-code-signing.json"              <em># from Step 8</em>
$BuildFolder = "F:\...\YourApp"                                 <em># folder containing YourApp.exe</em>

<em># Installer (Inno Setup) — optional. Set $EnableInno to $false to skip this part.</em>
$EnableInno  = $true
$InnoSetup   = "C:\Program Files (x86)\Inno Setup 6\ISCC.exe"
$IssScript   = "F:\...\YourAppSetup.iss"                        <em># your Inno Setup script</em>
$Installer   = "F:\...\YourAppSetup.exe"                        <em># output from the .iss</em>

<em># Sign binaries you build or distribute under your publisher identity.</em>
<em># Leave Xojo, Microsoft, and other vendor-signed dependencies alone.</em>
$FilesToSign = @(
    "$BuildFolder\YourApp.exe"
    "$BuildFolder\MyPlugin.dll"
    <em># add any other files you own here, one per line</em>
)

function Invoke-SigningCommand {
    param(&#91;string&#91;]]$Arguments)

    &amp; $Signtool @Arguments
    if ($LASTEXITCODE -ne 0) {
        throw "SignTool failed with exit code $LASTEXITCODE."
    }
}

foreach ($f in $FilesToSign) {
    Invoke-SigningCommand @(
        "sign", "/v", "/fd", "SHA256",
        "/tr", "http://timestamp.acs.microsoft.com", "/td", "SHA256",
        "/dlib", $Dlib, "/dmdf", $Metadata,
        $f
    )
}

if ($EnableInno) {
    <em># Build a fresh installer, then sign it.</em>
    &amp; $InnoSetup $IssScript
    if ($LASTEXITCODE -ne 0) {
        throw "Inno Setup failed with exit code $LASTEXITCODE."
    }

    Invoke-SigningCommand @(
        "sign", "/v", "/fd", "SHA256",
        "/tr", "http://timestamp.acs.microsoft.com", "/td", "SHA256",
        "/dlib", $Dlib, "/dmdf", $Metadata,
        $Installer
    )
}</code></pre>



<p>What the flags mean:</p>



<ul class="wp-block-list">
<li><code>/tr http://timestamp.acs.microsoft.com</code>: the timestamp server. The&nbsp;<code>http://</code>&nbsp;(not https) is intentional.</li>



<li><code>/fd SHA256</code>&nbsp;and&nbsp;<code>/td SHA256</code>: SHA-256 for the file and the timestamp.</li>



<li><code>/dlib</code>: the Azure plugin from Step 7.&nbsp;<code>/dmdf</code>: your metadata JSON from Step 8.</li>
</ul>



<h3 class="wp-block-heading" id="confirm-it-worked">Confirm it worked</h3>



<p>Two checks:</p>



<ol class="wp-block-list">
<li><strong>Signtool:</strong><code>$Signtool verify /v /pa "$BuildFolder\YourApp.exe" </code>You want to see&nbsp;<code>Successfully verified</code>.</li>



<li><strong>Or:</strong>&nbsp;right-click&nbsp;<code>YourApp.exe</code>&nbsp;→&nbsp;<strong>Properties → Digital Signatures</strong>&nbsp;→ your org name should be listed.</li>
</ol>



<h3 class="wp-block-heading" id="rules-of-thumb">Rules of thumb</h3>



<ul class="wp-block-list">
<li><strong>Sign after every build.</strong>&nbsp;Each new&nbsp;<code>.exe</code>&nbsp;is a fresh unsigned binary.</li>



<li><strong>Sign before you zip.</strong>&nbsp;Sign the files,&nbsp;<em>then</em>&nbsp;package them. Signing inside a zip does nothing.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="troubleshooting">Troubleshooting</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">Symptom</th><th class="has-text-align-left" data-align="left">Fix</th></tr></thead><tbody><tr><td><code>signtool: command not found</code></td><td>Use the full SDK path; it&#8217;s not on PATH</td></tr><tr><td><code>No certificates were found</code></td><td>dlib path wrong, or x86/x64 mismatch between signtool and dlib</td></tr><tr><td><code>403 Forbidden</code></td><td>Signer role on the wrong account, wrong account name in JSON, or endpoint/region mismatch</td></tr><tr><td><code>SignTool Error: An unexpected internal error</code></td><td>Update signtool to ≥ 10.0.22621.755; check .NET 8 + VC++ redist</td></tr><tr><td>Signing appeared to succeed, but no signature is visible</td><td>Run&nbsp;<code>signtool verify /v /pa &lt;file&gt;</code>; its exit code and&nbsp;<code>Successfully verified</code>&nbsp;output are authoritative. Explorer&#8217;s Digital Signatures tab is not available for every file type.</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="recap">Recap</h2>



<p><strong>One time (Steps 1–9):</strong>&nbsp;register the&nbsp;<code>Microsoft.CodeSigning</code>&nbsp;provider → create the account → assign the Identity Verifier role → complete identity validation (slow&#8217;ish) → create the certificate profile → assign the Signer role → install tools → write the metadata JSON →&nbsp;<code>az login</code>.</p>



<p><strong>Every build (Step 10):</strong>&nbsp;run&nbsp;<code>sign.ps1</code>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="the-bottom-line">The bottom line</h2>



<p>Azure Artifact Signing is a low-cost managed option for signing Windows apps, and Azure CLI authentication means local builds do not need a stored signing private key. The setup has some Azure bureaucracy, and identity validation is the slow part. After that, it is one script per build.</p>



<h4 class="wp-block-heading">Related discussion</h4>



<p>For an alternative approach that automates Xojo application signing and Inno Setup installer creation, see Jürg Otter’s Xojo Forum topic, <a href="https://forum.xojo.com/t/windows-code-signing-installer-creation-with-innosetup/84732" target="_blank" rel="noreferrer noopener">Windows Code Signing &amp; Installer Creation with Inno Setup</a>. The topic includes Jürg’s open-source code, which supports both Azure Artifact Signing and traditional <code>.pfx</code> certificates.</p>



<p><em>Gabriel is a digital marketing enthusiast who loves coding with Xojo to create cool software tools for any platform. He is always eager to learn and share new ideas!</em></p>



<ul class="wp-block-social-links has-normal-icon-size is-content-justification-center is-layout-flex wp-container-core-social-links-is-layout-16018d1d wp-block-social-links-is-layout-flex"><li class="wp-social-link wp-social-link-facebook  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.facebook.com/goxojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z"></path></svg><span class="wp-block-social-link-label screen-reader-text">Facebook</span></a></li>

<li class="wp-social-link wp-social-link-x  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://x.com/xojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M13.982 10.622 20.54 3h-1.554l-5.693 6.618L8.745 3H3.5l6.876 10.007L3.5 21h1.554l6.012-6.989L15.868 21h5.245l-7.131-10.378Zm-2.128 2.474-.697-.997-5.543-7.93H8l4.474 6.4.697.996 5.815 8.318h-2.387l-4.745-6.787Z" /></svg><span class="wp-block-social-link-label screen-reader-text">X</span></a></li>

<li class="wp-social-link wp-social-link-linkedin  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.linkedin.com/company/xojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z"></path></svg><span class="wp-block-social-link-label screen-reader-text">LinkedIn</span></a></li>

<li class="wp-social-link wp-social-link-github  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://github.com/topics/xojo" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12,2C6.477,2,2,6.477,2,12c0,4.419,2.865,8.166,6.839,9.489c0.5,0.09,0.682-0.218,0.682-0.484 c0-0.236-0.009-0.866-0.014-1.699c-2.782,0.602-3.369-1.34-3.369-1.34c-0.455-1.157-1.11-1.465-1.11-1.465 c-0.909-0.62,0.069-0.608,0.069-0.608c1.004,0.071,1.532,1.03,1.532,1.03c0.891,1.529,2.341,1.089,2.91,0.833 c0.091-0.647,0.349-1.086,0.635-1.337c-2.22-0.251-4.555-1.111-4.555-4.943c0-1.091,0.39-1.984,1.03-2.682 C6.546,8.54,6.202,7.524,6.746,6.148c0,0,0.84-0.269,2.75,1.025C10.295,6.95,11.15,6.84,12,6.836 c0.85,0.004,1.705,0.114,2.504,0.336c1.909-1.294,2.748-1.025,2.748-1.025c0.546,1.376,0.202,2.394,0.1,2.646 c0.64,0.699,1.026,1.591,1.026,2.682c0,3.841-2.337,4.687-4.565,4.935c0.359,0.307,0.679,0.917,0.679,1.852 c0,1.335-0.012,2.415-0.012,2.741c0,0.269,0.18,0.579,0.688,0.481C19.138,20.161,22,16.416,22,12C22,6.477,17.523,2,12,2z"></path></svg><span class="wp-block-social-link-label screen-reader-text">GitHub</span></a></li>

<li class="wp-social-link wp-social-link-youtube  wp-block-social-link"><a rel="noopener nofollow" target="_blank" href="https://www.youtube.com/c/XojoInc" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z"></path></svg><span class="wp-block-social-link-label screen-reader-text">YouTube</span></a></li></ul>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
