1<!DOCTYPE html><html lang="en"> <head><!-- Global site tag (gtag.js) - Google Analytics -->
vendor: 63 bytes, line 1
1<script async src="https://www.googletagmanager.com/gtag/js?id=
1UA-117341333-1
vendor: 11 bytes, line 1
1"></script>
1<!-- Basic Page Needs 2 ââââââââââââââââââââââââââââââââââââââââââââââââââ --><meta charset="utf-8"><title>Ultralight - Universal, Pure-GPU HTML Renderer</title><meta name="description" content=""><meta name="author" content=""><meta name="generator" content="Astro v4.16.18"><meta name="theme-color" content="#000000"><!-- Mobile Specific Metas 3 ââââââââââââââââââââââââââââââââââââââââââââââââââ --><meta name="viewport" content="width=device-width, initial-scale=1"><!-- FONT 4 ââââââââââââââââââââââââââââââââââââââââââââââââââ --><!--<link href="https://fonts.googleapis.com/css?family=Rubik:300,300i,400,400i&display=swap" rel="stylesheet">--><!-- CSS 5 ââââââââââââââââââââââââââââââââââââââââââââââââââ --><link rel="stylesheet" href="/css/normalize.css"><link rel="stylesheet" href="/css/skeleton.css"><link rel="stylesheet" href="/css/webfonts.css"><link rel="stylesheet" href="/css/global.css"><link rel="stylesheet" href="https://kit.fontawesome.com/66075ab9ad.css" crossorigin="anonymous"><!-- Favicon 6 ââââââââââââââââââââââââââââââââââââââââââââââââââ --><link rel="icon" type="image/png" href="/favicon-48x48.png" sizes="48x48"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="shortcut icon" href="/favicon.ico"><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><meta name="apple-mobile-web-app-title" content="Ultralight"><link rel="manifest" href="/site.webmanifest"><style>body{background:radial-gradient(circle at center 280px,#33246f,transparent 900px),#0a0b1c!important}main{margin-top:0!important}@keyframes fade-in-move-down{0%{opacity:0;-webkit-transform:translateY(-3rem);transform:translateY(-3rem)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes fade-in-move-down{0%{opacity:0;-webkit-transform:translateY(-3rem);transform:translateY(-3rem)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}div.container.landing{-webkit-animation:fade-in-move-down 1s;animation:fade-in-move-down 1s} 7.auth-nav[data-astro-cid-5blmo7yk]{margin-left:auto;padding-left:2em}.auth-buttons[data-astro-cid-5blmo7yk]{display:flex;gap:1rem;align-items:center}@media (max-width: 899px){.auth-nav[data-astro-cid-5blmo7yk]{padding-left:0;width:100%}.auth-buttons[data-astro-cid-5blmo7yk]{padding-top:1em;justify-content:flex-end}} 8</style>
8<script type="module" src="/_astro/hoisted.B2bGx_dJ.js"></script>
8</head> <body class=""> <!-- Primary Page Layout 9 ââââââââââââââââââââââââââââââââââââââââââââââââââ --> <div class="container top-nav" data-astro-cid-5blmo7yk> <div id="mobile-logo" data-astro-cid-5blmo7yk> <a href="/" data-astro-cid-5blmo7yk> <img src="/media/ul_logo_wordmark_sm.png" data-astro-cid-5blmo7yk> </a> </div> <div class="row top-nav" data-astro-cid-5blmo7yk> <div id="mobile-menu" data-astro-cid-5blmo7yk> <a href="javascript:void(0);" class="icon" data-astro-cid-5blmo7yk> <input type="checkbox" class="openSidebarMenu" id="openSidebarMenu" onclick="toggleMenu()" data-astro-cid-5blmo7yk> <label for="openSidebarMenu" class="sidebarIconToggle" data-astro-cid-5blmo7yk> <div class="spinner diagonal part-1" data-astro-cid-5blmo7yk></div> <div class="spinner horizontal" data-astro-cid-5blmo7yk></div> <div class="spinner diagonal part-2" data-astro-cid-5blmo7yk></div> </label> </a> </div> <nav id="navbar" data-astro-cid-5blmo7yk> <ul class="navbar-list" data-astro-cid-5blmo7yk> <li class="navbar-item" data-astro-cid-5blmo7yk> <a class="navbar-link" id="home" href="/" data-astro-cid-5blmo7yk> <img src="/media/ul_logo_wordmark_sm.png" data-astro-cid-5blmo7yk> <span data-astro-cid-5blmo7yk>Home</span> </a> </li> <li class="navbar-item dropdown closed" data-astro-cid-5blmo7yk> <a class="navbar-link" href="#company" data-astro-cid-5blmo7yk> 10Develop 11<svg width="16" height="16" viewBox="0 0 16 16" fill="#FFFFFFAA" data-astro-cid-5blmo7yk> <path d="M4.53 5.47a.75.75 0 0 0-1.06 1.06l4 4a.75.75 0 0 0 1.054.007l4-3.903a.75.75 0 0 0-1.048-1.073l-3.47 3.385L4.53 5.47Z" data-astro-cid-5blmo7yk></path> </svg> </a> <ul class="menu" data-astro-cid-5blmo7yk> <li data-astro-cid-5blmo7yk> <a href="/download" data-astro-cid-5blmo7yk> <i class="fas fa-download" data-astro-cid-5blmo7yk></i> 12Download SDK 13</a> </li> <li data-astro-cid-5blmo7yk> <a href="https://docs.ultralig.ht/" data-astro-cid-5blmo7yk> <i class="fas fa-book" data-astro-cid-5blmo7yk></i> 14Documentation 15</a> </li> <li data-astro-cid-5blmo7yk> <a href="/api/cpp/1_4_0/index.html" data-astro-cid-5blmo7yk> <i class="fas fa-code" data-astro-cid-5blmo7yk></i> 16API Reference 17</a> </li> </ul> </li> <li class="navbar-item dropdown closed" data-astro-cid-5blmo7yk> <a class="navbar-link" href="#company" data-astro-cid-5blmo7yk> 18Support 19<svg width="16" height="16" viewBox="0 0 16 16" fill="#FFFFFFAA" data-astro-cid-5blmo7yk> <path d="M4.53 5.47a.75.75 0 0 0-1.06 1.06l4 4a.75.75 0 0 0 1.054.007l4-3.903a.75.75 0 0 0-1.048-1.073l-3.47 3.385L4.53 5.47Z" data-astro-cid-5blmo7yk></path> </svg> </a> <ul class="menu" data-astro-cid-5blmo7yk> <li data-astro-cid-5blmo7yk> <a href="https://chat.ultralig.ht" data-astro-cid-5blmo7yk> <i class="fab fa-discord" data-astro-cid-5blmo7yk></i> 20Discord Chat 21</a> </li> <li data-astro-cid-5blmo7yk> <a href="https://github.com/ultralight-ux/ultralight/issues" data-astro-cid-5blmo7yk> <i class="fas fa-bug" data-astro-cid-5blmo7yk></i> 22Issue Tracker 23</a> </li> <li data-astro-cid-5blmo7yk> <a href="/contact-support" data-astro-cid-5blmo7yk> <i class="fas fa-question" data-astro-cid-5blmo7yk></i> 24Contact Support 25</a> </li> <li data-astro-cid-5blmo7yk> <a href="https://ultralight.typeform.com/contact-sales" target="_blank" rel="noopener" data-astro-cid-5blmo7yk> <i class="fas fa-envelope" data-astro-cid-5blmo7yk></i> 26Contact Sales 27</a> </li> </ul> </li> <li class="navbar-item" data-astro-cid-5blmo7yk> <a class="navbar-link" href="/blog" data-astro-cid-5blmo7yk>Blog</a> </li> <li class="navbar-item" data-astro-cid-5blmo7yk> <a class="navbar-link" href="/pricing" data-astro-cid-5blmo7yk>Pricing</a> </li> <!-- Auth Navigation --> <style>astro-island,astro-slot,astro-static-slot{display:contents}</style>
27<script>(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).load=e;window.dispatchEvent(new Event("astro:load"));})();;(()=>{var A=Object.defineProperty;var g=(i,o,a)=>o in i?A(i,o,{enumerable:!0,configurable:!0,writable:!0,value:a}):i[o]=a;var d=(i,o,a)=>g(i,typeof o!="symbol"?o+"":o,a);{let i={0:t=>m(t),1:t=>a(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(a(t)),5:t=>new Set(a(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t),11:t=>1/0*t},o=t=>{let[l,e]=t;return l in i?i[l](e):void 0},a=t=>t.map(o),m=t=>typeof t!="object"||t===null?t:Object.fromEntries(Object.entries(t).map(([l,e])=>[l,o(e)]));class y extends HTMLElement{constructor(){super(...arguments);d(this,"Component");d(this,"hydrator");d(this,"hydrate",async()=>{var b;if(!this.hydrator||!this.isConnected)return;let e=(b=this.parentElement)==null?void 0:b.closest("astro-island[ssr]");if(e){e.addEventListener("astro:hydrate",this.hydrate,{once:!0});return}let c=this.querySelectorAll("astro-slot"),n={},h=this.querySelectorAll("template[data-astro-template]");for(let r of h){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("data-astro-template")||"default"]=r.innerHTML,r.remove())}for(let r of c){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("name")||"default"]=r.innerHTML)}let p;try{p=this.hasAttribute("props")?m(JSON.parse(this.getAttribute("props"))):{}}catch(r){let s=this.getAttribute("component-url")||"<unknown>",v=this.getAttribute("component-export");throw v&&(s+=` (export ${v})`),console.error(`[hydrate] Error parsing props for component ${s}`,this.getAttribute("props"),r),r}let u;await this.hydrator(this)(this.Component,p,n,{client:this.getAttribute("client")}),this.removeAttribute("ssr"),this.dispatchEvent(new CustomEvent("astro:hydrate"))});d(this,"unmount",()=>{this.isConnected||this.dispatchEvent(new CustomEvent("astro:unmount"))})}disconnectedCallback(){document.removeEventListener("astro:after-swap",this.unmount),document.addEventListener("astro:after-swap",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute("await-children")||document.readyState==="interactive"||document.readyState==="complete")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener("DOMContentLoaded",e),c.disconnect(),this.childrenConnectedCallback()},c=new MutationObserver(()=>{var n;((n=this.lastChild)==null?void 0:n.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue==="astro:end"&&(this.lastChild.remove(),e())});c.observe(this,{childList:!0}),document.addEventListener("DOMContentLoaded",e)}}async childrenConnectedCallback(){let e=this.getAttribute("before-hydration-url");e&&await import(e),this.start()}async start(){let e=JSON.parse(this.getAttribute("opts")),c=this.getAttribute("client");if(Astro[c]===void 0){window.addEventListener(`astro:${c}`,()=>this.start(),{once:!0});return}try{await Astro[c](async()=>{let n=this.getAttribute("renderer-url"),[h,{default:p}]=await Promise.all([import(this.getAttribute("component-url")),n?import(n):()=>()=>{}]),u=this.getAttribute("component-export")||"default";if(!u.includes("."))this.Component=h[u];else{this.Component=h;for(let f of u.split("."))this.Component=this.Component[f]}return this.hydrator=p,this.hydrate},e,this)}catch(n){console.error(`[astro-island] Error hydrating ${this.getAttribute("component-url")}`,n)}}attributeChangedCallback(){this.hydrate()}}d(y,"observedAttributes",["props"]),customElements.get("astro-island")||customElements.define("astro-island",y)}})();</script>
27<astro-island uid="1vli7B" prefix="r0" component-url="/_astro/NavAuth.BvDSZpXy.js" component-export="default" renderer-url="/_astro/client.DRsCJ7vl.js" props="{"user":[0,null],"data-astro-cid-5blmo7yk":[0,true]}" ssr="" client="load" opts="{"name":"NavAuth","value":true}" await-children=""><li class="navbar-item"><a class="navbar-link button" href="/login">Log In</a></li><!--astro:end--></astro-island> </ul> </nav> </div> </div>
27<script> 28 const toggleVisibility = (e) => e.classList.toggle("show"); 29 30 function toggleMenu() { 31 var navbar = document.getElementById("navbar"); 32 toggleVisibility(navbar); 33 } 34 35 const maxMobileWidth = 899; 36 let isMobileLayout = false; 37 38 // (Desktop layout) we cache the opened dropdown so we can close it on mouse exit 39 let openedDropdown = null; 40 41 function closeOpenedDesktopDropdown() { 42 if (openedDropdown) { 43 toggleVisibility(openedDropdown); 44 openedDropdown = null; 45 } 46 } 47 48 function closeOpenedMobileDropdowns() { 49 document 50 .querySelectorAll("#navbar .dropdown") 51 .forEach(function (element) { 52 element.classList.remove("show"); 53 }); 54 } 55 56 const handleDesktopMouseOver = (e) => { 57 if (isMobileLayout) return; 58 59 // Walk up the nodes until we find a dropdown container 60 let node = e.target; 61 while (node) { 62 if (node.classList && node.classList.contains("dropdown")) { 63 break; 64 } 65 node = node.parentNode; 66 } 67 68 if (node) { 69 // The hovered node is a dropdown, handle it 70 if (!openedDropdown) { 71 openedDropdown = node; 72 toggleVisibility(openedDropdown); 73 } else if (node != openedDropdown) { 74 toggleVisibility(openedDropdown); 75 openedDropdown = node; 76 toggleVisibility(openedDropdown); 77 } 78 } else if (openedDropdown) { 79 // The hovered node is something else, close any open dropdowns 80 closeOpenedDesktopDropdown(); 81 } 82 }; 83 84 document.addEventListener("mousemove", handleDesktopMouseOver); 85 86 document 87 .querySelectorAll("#navbar .dropdown > a") 88 .forEach(function (element) { 89 element.addEventListener("click", function (e) { 90 if (!isMobileLayout) return; 91 92 e.preventDefault(); // Prevents default action 93 // Walk up the nodes until we find a dropdown container 94 let node = e.target; 95 while (node) { 96 if (node.classList && node.classList.contains("dropdown")) { 97 break; 98 } 99 node = node.parentNode; 100 } 101 102 if (node) { 103 toggleVisibility(node); 104 } 105 }); 106 }); 107 108 function checkWidth() { 109 const isBlogLayout = document.body.classList.contains("blog"); 110 const isWidthWithinThreshold = isBlogLayout || window.innerWidth <= maxMobileWidth; 111 if (isMobileLayout != isWidthWithinThreshold) { 112 isMobileLayout = isWidthWithinThreshold; 113 // Close any desktop dropdowns when we enter mobile layout and vice-versa 114 if (isMobileLayout) closeOpenedDesktopDropdown(); 115 else closeOpenedMobileDropdowns(); 116 } 117 } 118 119 // Check the width on initial load 120 checkWidth(); 121 122 // Add event listener for resizing 123 window.addEventListener("resize", checkWidth); 124</script>
124 <main> <div class="container landing"> <div class="row hero"> <section class="header"> <div class="logo"><img src="/media/ul_logo.webp"></div> <h1>Ultralight</h1> <h2>Universal, Pure-GPU HTML Renderer 125</h2> <a class="button button-primary" href="/download">Download SDK <svg width="16" height="16" viewBox="0 0 16 16" fill="white"><path d="M5.46967 11.4697C5.17678 11.7626 5.17678 12.2374 5.46967 12.5303C5.76256 12.8232 6.23744 12.8232 6.53033 12.5303L10.5303 8.53033C10.8207 8.23999 10.8236 7.77014 10.5368 7.47624L6.63419 3.47624C6.34492 3.17976 5.87009 3.17391 5.57361 3.46318C5.27713 3.75244 5.27128 4.22728 5.56054 4.52376L8.94583 7.99351L5.46967 11.4697Z"></path></svg></a> <a class="button" href="https://docs.ultralig.ht">Read the Docs <svg width="16" height="16" viewBox="0 0 16 16" fill="white"><path d="M5.46967 11.4697C5.17678 11.7626 5.17678 12.2374 5.46967 12.5303C5.76256 12.8232 6.23744 12.8232 6.53033 12.5303L10.5303 8.53033C10.8207 8.23999 10.8236 7.77014 10.5368 7.47624L6.63419 3.47624C6.34492 3.17976 5.87009 3.17391 5.57361 3.46318C5.27713 3.75244 5.27128 4.22728 5.56054 4.52376L8.94583 7.99351L5.46967 11.4697Z"></path></svg></a> </section> </div> <div class="row feature"> <div class="one-half column"> <a id="about"></a> <h2>HTML + Games = <i class="fa-sharp fa-solid fa-heart"></i></h2> <p>Ultralight is a <b>GPU-accelerated toolkit</b> to embed <b>modern HTML</b> in <b>games</b> and <b>native apps</b>.</p> <p>Available for <b>C</b> and <b>C++</b> on Windows, macOS, Linux, Xbox, PlayStation, ARM64 devices, and more.</p> <p>Developed in collaboration with <b>leading game studios</b>, built GPU-first on a new, lightweight fork of WebKit.</p> </div> <div class="one-half column"> <div id="htmlGraphic" style=""> <img class="u-max-full-width" src="/media/html_pixel_graphic.webp" style=""> </div> </div> </div> </div> <div class="wrap-light-left"> <div class="container"> <div class="row feature ultra-fast"> <div class="one-half column"> <h2>Ultra-Fast. <i class="fa-sharp fa-solid fa-bolt"></i></h2> <p>Built <b>GPU-first</b> but can run on the <b>CPU</b> too!</p> <p>Choose from two powerful, parallel renderers:</p> <ul> <li><b>GPU</b>: Render directly on the GPU for maximum performance. Designed to integrate deeply with your existing rendering pipeline. </li> <li><b>CPU</b>: Render parallel on the CPU for incredibly easy integration in any environment.</li> </ul> </div> <div class="one-half column"> <div id="rendererDiagram"> <img class="u-max-full-width" src="/media/renderer-diagram.webp"> </div> </div> </div> </div> </div> <div class="wrap-light-left"> <div class="container"> <div class="row feature ultra-light"> <div class="one-half column"> <h2>Ultra-Light. <i class="fa-sharp fa-solid fa-feather-pointed"></i></h2> <p> 126Designed for the tightest resource budgets— Ultralight's baseline memory usage is nearly 10x lighter than Chromium. 127</p> <p>Go further by customizing low-level platform and allocator behavior, gain insights about runtime resource usage, and more.</p> </div> <div class="one-half column"> <div id="memoryUsage"> <img class="u-max-full-width" src="/media/base-memory-usage.webp"> </div> </div> </div> </div> </div> <div class="wrap-light-left"> <div class="container"> <div class="row feature ultra-portable"> <div class="one-half column"> <h2>Ultra-Portable. <i class="fa-solid fa-globe"></i></h2> <p>Built to run everywhere you run— optimized for desktop, game consoles, TVs, and embedded systems.</p> <p>Currently available for Windows, macOS, Linux, PlayStation, Xbox, ARM64 devices, and more.</p> </div> <div class="one-half column"> <div id="platform-grid"> <div class="platform"> <i class="icon windows"></i> </div> <div class="platform"> <i class="icon macos"></i> </div> <div class="platform"> <i class="icon linux"></i> </div> <div class="platform"> <i class="icon xbox"></i> </div> <div class="platform"> <i class="icon playstation"></i> </div> <div class="platform"> <i class="icon arm"></i> </div> </div> </div> </div> </div> </div> <div class="games-wrap"> <div class="container"> <div class="row games"> <div class="one-third column"><h1 class="icon"><i class="fa-sharp fa-thin fa-gamepad-modern"></i></h1></div> <div class="two-thirds column"> <h2>For Game Developers</h2> <p>Developed in collaboration with leading AAA game studios, Ultralight is tested and proven in even the most demanding environments.</p> <p>Designed to integrate deeply with existing game engines and take full advantage of GPU acceleration on all platforms.</p> <a class="button" href="https://docs.ultralig.ht/docs/integrating-with-games">
127Game Integration Guide <svg width="16" height="16" viewBox="0 0 16 16" fill="white"><path d="M5.46967 11.4697C5.17678 11.7626 5.17678 12.2374 5.46967 12.5303C5.76256 12.8232 6.23744 12.8232 6.53033 12.5303L10.5303 8.53033C10.8207 8.23999 10.8236 7.77014 10.5368 7.47624L6.63419 3.47624C6.34492 3.17976 5.87009 3.17391 5.57361 3.46318C5.27713 3.75244 5.27128 4.22728 5.56054 4.52376L8.94583 7.99351L5.46967 11.4697Z"></path></svg></a> </div> </div> <div class="row games features"> <div class="one-third column"> </div> <div class="column"> <h3>Key Features:</h3> <dl> <div> <dt>Deep GPU Integration</dt> <dd>Use our GPUDriver API to render accelerated content directly within your existing renderer. Implementations available for Direct3D, Metal, and OpenGL.</dd> </div> <div> <dt>Transparent Rendering</dt> <dd>Take advantage of fully-transparent rendering to composite rich, antialiased web-content on top of existing in-game content.</dd> </div> <div> <dt>Custom Image Compositing</dt> <dd>Use our ImageSource API to display in-game textures, external image assets, or other custom content directly in styled web-page elements.</dd> </div> <div> <dt>Secure Asset Control</dt> <dd>Use our FileSystem API to load local file assets directly from your own pipeline. Lock down web requests by blocking URLs or by using your own CA certificate store.</dd> </div> </dl> </div> </div> </div> </div> <div class="desktop-wrap"> <div class="container"> <div class="row desktop"> <div class="one-third column"><h1 class="icon"><i class="fa-thin fa-sharp fa-browser"></i></h1></div> <div class="two-thirds column"> <h2>For Native App Developers</h2> <p>Built for the ever-evolving needs of native app developers– Ultralight delivers lightweight, WebKit-based rendering to all desktop OSs (mobile coming soon!).</p> <p>Integrate web-content seamlessly with your existing application structure or leverage our AppCore framework to do all the heavy lifting for you.</p> <a class="button" href="https://docs.ultralig.ht/docs/writing-your-first-app">Native App Guide <svg width="16" height="16" viewBox="0 0 16 16" fill="white"><path d="M5.46967 11.4697C5.17678 11.7626 5.17678 12.2374 5.46967 12.5303C5.76256 12.8232 6.23744 12.8232 6.53033 12.5303L10.5303 8.53033C10.8207 8.23999 10.8236 7.77014 10.5368 7.47624L6.63419 3.47624C6.34492 3.17976 5.87009 3.17391 5.57361 3.46318C5.27713 3.75244 5.27128 4.22728 5.56054 4.52376L8.94583 7.99351L5.46967 11.4697Z"></path></svg></a> </div> </div> <div class="row desktop features"> <div class="one-third column"> </div> <div class="column"> <h3>Key Features:</h3> <dl> <div> <dt>Consistency Across Platforms</dt> <dd>Take the guesswork out of delivering apps across different platforms. Link to a specific version of Ultralight so your app runs consistently across environments.</dd> </div> <div> <dt>Automatic Window Management</dt> <dd>Use our AppCore API to automatically manage window creation, input, focus management, and GPU rendering on all major desktop platforms.</dd> </div> <div> <dt>JavaScript â Native Code Integration</dt> <dd>Ultralight is built on a new fork of JavaScriptCore. Deeply integrate JavaScript with native code— call native functions directly from JavaScript and vice-versa. </dd> </div> <div> <dt>Embed Assets In-Binary</dt> <dd>Use our FileSystem API and asset bundler to embed web assets directly within your application binary for added performance and security.</dd> </div> </dl> </div> </div> </div> </div> <div class="highlight-wrap"> <div class="container"> <div class="row customers"> <h2>Trusted by industry leaders.</h2> <div class="row logos"> <img src="/media/logo-square-enix.png" height="100"> <img src="/media/logo-take-two.png" height="100"> <img src="/media/logo-ubisoft.png" height="100"> <img src="/media/logo-tencent.png" height="100"> <img src="/media/logo-sony.png" height="100"> <img src="/media/logo-lockheed.png" height="100"> <img src="/media/logo-ncsoft.png" height="100"> </div> </div> </div> </div> <div class="highlight-wrap"> <div class="container"> <div class="row faq"> <div class="column"> <a id="faq"></a> <h4>Frequently Asked Questions <i class="fa fa-question-circle-o" aria-hidden="true"></i></h4> <div class="wrap-collabsible"> <input id="faq0" class="toggle" type="checkbox"> <label for="faq0" class="lbl-toggle"> 128Who is behind Ultralight? 129</label> <div class="collapsible-content"> <div class="content-inner"> <p> 130We are the same team behind Awesomium (c. 2008), the first HTML engine for games and desktop apps (used by EA, Square Enix, QuickBooks, and many more). 131</p> <p> 132In 2015, we made the bold decision to move off Chromium and rewrite the library with a focus on performance, portability, and ease-of-use. The result is Ultralight. 133</p> <p> 134We launched a private beta in 2018 and have been working with leading game studios and tech companies to refine the technology ever since. 135</p> </div> </div> </div> <div class="wrap-collabsible"> <input id="faq1" class="toggle" type="checkbox"> <label for="faq1" class="lbl-toggle"> 136What platforms does Ultralight support?
137</label> <div class="collapsible-content"> <div class="content-inner"> <p> 138Ultralight currently supports the following platforms: 139</p> <ul> <li>Windows (x64)</li> <li>macOS (x64 / arm64)</li> <li>Linux (x64 / arm64)</li> <li>Xbox</li> <li>PlayStation 4</li> <li>PlayStation 5</li> </ul> </div> </div> </div> <div class="wrap-collabsible"> <input id="faq2" class="toggle" type="checkbox"> <label for="faq2" class="lbl-toggle"> 140What HTML/JS/CSS features does Ultralight support? 141</label> <div class="collapsible-content"> <div class="content-inner"> <p> 142Ultralight is a custom fork of WebKit / Safari and supports most modern web features with the exception of WebGL, WebRTC, and HTML5 Video/Audio (currently experimental). 143</p> <p>There are a few other things missing which you can track <a href="https://github.com/ultralight-ux/Ultralight/issues/178">here</a>. 144</p> <p>We recommend trying out the Browser (Sample #8) in the SDK to get an idea of what Ultralight is capable 145 of today.</p> </div> </div> </div> <div class="wrap-collabsible"> <input id="faq3" class="toggle" type="checkbox"> <label for="faq3" class="lbl-toggle"> 146Can I use it with React/Vue.js/Angular/etc ? 147</label> <div class="collapsible-content"> <div class="content-inner"> <p> 148Yep! Ultralight uses the same JavaScript engine as WebKit/Safari. 149</p> </div> </div> </div> <div class="wrap-collabsible"> <input id="faq4" class="toggle" type="checkbox"> <label for="faq4" class="lbl-toggle"> 150Can I use it with my game engine? 151</label> <div class="collapsible-content"> <div class="content-inner"> <p>If your engine supports dynamic textures, you can use it with Ultralight.</p> <p>Our CPU renderer can render to an offscreen bitmap for upload to a texture (see 152<a href="https://github.com/ultralight-ux/Samples/tree/master/Sample%207%20-%20OpenGL%20Integration"> 153Sample 7 - OpenGL Integration</a>) or— if you need extra performance— 154 the engine can 155 render directly to the GPU 156 using low-level driver commands. 157</p> <p> 158See our <a href="https://docs.ultralig.ht/docs/integrating-with-games">game integration 159 guide</a> for 160 more info. 161</p> </div> </div> </div> <div class="wrap-collabsible"> <input id="faq5" class="toggle" type="checkbox"> <label for="faq5" class="lbl-toggle"> 162Can I use it from C#/.NET/Python/Rust/Go/etc.? 163</label> <div class="collapsible-content"> <div class="content-inner"> <p> 164We maintain official API for <a href="https://docs.ultralig.ht/docs/using-the-cpp-api">C++</a> and 165<a href="https://docs.ultralig.ht/docs/using-the-c-api">C</a>. 166</p> <p>Several awesome members of our community maintain <a href="https://docs.ultralig.ht/docs/language-bindings"> 167bindings for C#, Java, Rust, and Go</a> on top of our portable C API. 168</p> </div> </div> </div> <div class="wrap-collabsible"> <input id="faq6" class="toggle" type="checkbox"> <label for="faq6" class="lbl-toggle"> 169Where can I find the source code? 170</label> <div class="collapsible-content"> <div class="content-inner"> <p> 171A portion of our WebCore source-code is available under LGPL on <a href="https://github.com/ultralight-ux/">GitHub here</a>. 172</p> <p>Our full source code is proprietary but can be obtained with <a href="/pricing">purchase of a commercial license</a>. 173</p> </div> </div> </div> </div> </div> </div> </div> <div class="highlight-wrap"> <div class="container"> <div class="row cta"> <section class="header"> <h2>Try Ultralight Today 174</h2> <p>Get the SDK and explore its capabilities today.</p> <a class="button " href="/download">Download SDK <svg width="16" height="16" viewBox="0 0 16 16" fill="white"><path d="M5.46967 11.4697C5.17678 11.7626 5.17678 12.2374 5.46967 12.5303C5.76256 12.8232 6.23744 12.8232 6.53033 12.5303L10.5303 8.53033C10.8207 8.23999 10.8236 7.77014 10.5368 7.47624L6.63419 3.47624C6.34492 3.17976 5.87009 3.17391 5.57361 3.46318C5.27713 3.75244 5.27128 4.22728 5.56054 4.52376L8.94583 7.99351L5.46967 11.4697Z"></path></svg></a> <a class="button" href="https://docs.ultralig.ht">Read the Docs <svg width="16" height="16" viewBox="0 0 16 16" fill="white"><path d="M5.46967 11.4697C5.17678 11.7626 5.17678 12.2374 5.46967 12.5303C5.76256 12.8232 6.23744 12.8232 6.53033 12.5303L10.5303 8.53033C10.8207 8.23999 10.8236 7.77014 10.5368 7.47624L6.63419 3.47624C6.34492 3.17976 5.87009 3.17391 5.57361 3.46318C5.27713 3.75244 5.27128 4.22728 5.56054 4.52376L8.94583 7.99351L5.46967 11.4697Z"></path></svg></a> </section> </div> </div> </div> </main> <div class="container footer"> <div class="row"> <div class="footer-content"> <div class="branding"> <a id="footer-logo" href="/"> <img src="/media/ul_logo_wordmark_sm.png"> </a> <div class="tagline"> <p>Universal, Pure-GPU HTML Renderer</p> <p>© 2026 Ultralight, Inc.</p> </div> <div style="margin-top: 16px; font-size: 12px; padding-right: 20px; max-width: 220px; text-align: left;"> <div></div> <div style="margin-top: 8px; margin-bottom: 8px;"></div> </div> </div> <div class="flex-container"> <div class="column spacer"></div> <div class="column"> <div class="title">Product</div> <div style="margin: 0px -8px;"> <a href="/blog">Blog</a> <a href="/pricing">Pricing</a> <a href="/download">Download SDK</a> <a href="https://docs.ultralig.ht">Documentation</a> <a href="/api/cpp/1_4_0/index.html">API Reference</a> </div> </div> <div class="column"> <div class="title">Help & Support</div> <div style="margin: 0px -8px;"> <!--<a href="https://forum.ultralig.ht">Forum</a> --> <a href="https://chat.ultralig.ht">Discord Chat</a> <a href="https://github.com/ultralight-ux/ultralight/issues">Issue Tracker</a> <a href="/contact-support">Contact Support</a> <a href="https://ultralight.typeform.com/contact-sales" target="_blank" rel="noopener">Contact Sales</a> </div> </div> <div class="column"> <div class="title">Social Links</div> <div style="margin: 0px -8px;"> <a href="https://x.com/ultralight_ux">Follow on X</a> <a href="http://eepurl.com/dslR21">Mailing List</a> </div> </div> <div class="column"> <div class="title">Legal</div> <div style="margin: 0px -8px;"> <a href="/terms">Terms of Service</a> <a href="/privacy">Privacy Policy</a> </div> </div> </div> </div> </div> </div> <!-- End Document 175 ââââââââââââââââââââââââââââââââââââââââââââââââââ --> </body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.