From aba8582c5595d543906df9fefc2345f2139c9476 Mon Sep 17 00:00:00 2001 From: Yosh Date: Thu, 27 Aug 2026 20:37:13 +0200 Subject: [PATCH 1/6] hyperlight 0.17.0 release notes Signed-off-by: Yosh --- package-lock.json | 8 -- src/content/docs/blog/hyperlight-0.17.0.mdx | 102 ++++++++++++++++++++ 2 files changed, 102 insertions(+), 8 deletions(-) create mode 100644 src/content/docs/blog/hyperlight-0.17.0.mdx diff --git a/package-lock.json b/package-lock.json index 9614900..d4a99c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -120,7 +120,6 @@ "resolved": "https://registry.npmjs.org/@astrojs/starlight/-/starlight-0.37.6.tgz", "integrity": "sha512-wQrKwH431q+8FsLBnNQeG+R36TMtEGxTQ2AuiVpcx9APcazvL3n7wVW8mMmYyxX0POjTnxlcWPkdMGR3Yj1L+w==", "license": "MIT", - "peer": true, "dependencies": { "@astrojs/markdown-remark": "^6.3.1", "@astrojs/mdx": "^4.2.3", @@ -1842,7 +1841,6 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2003,7 +2001,6 @@ "resolved": "https://registry.npmjs.org/astro/-/astro-5.17.1.tgz", "integrity": "sha512-oD3tlxTaVWGq/Wfbqk6gxzVRz98xa/rYlpe+gU2jXJMSD01k6sEDL01ZlT8mVSYB/rMgnvIOfiQQ3BbLdN237A==", "license": "MIT", - "peer": true, "dependencies": { "@astrojs/compiler": "^2.13.0", "@astrojs/internal-helpers": "0.7.5", @@ -3692,7 +3689,6 @@ "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", "license": "MIT", - "peer": true, "bin": { "marked": "bin/marked.js" }, @@ -5081,7 +5077,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -5547,7 +5542,6 @@ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.1.tgz", "integrity": "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==", "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -6342,7 +6336,6 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", @@ -6541,7 +6534,6 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/src/content/docs/blog/hyperlight-0.17.0.mdx b/src/content/docs/blog/hyperlight-0.17.0.mdx new file mode 100644 index 0000000..c5d993d --- /dev/null +++ b/src/content/docs/blog/hyperlight-0.17.0.mdx @@ -0,0 +1,102 @@ +--- +title: "Announcing Hyperlight 0.17.0" +date: 2026-08-27 +--- + +_Hyperlight is a lightweight Virtual Machine Manager (VMM) designed to be +embedded directly in applications. It enables safe execution of untrusted code +with low latency and minimal overhead._ + +Hyperlight 0.17.0 has been released! This release introduces macOS support for +Hyperlight, a new `SandboxBuilder` API, better component bindgen, and security +improvements. + +## macOS support for Hyperlight + +Hyperlight now runs on Apple Silicon using Apple’s Hypervisor.framework API. +This makes macOS the third major platform for Hyperlight, following Linux and +Windows. All Apple aarch64 CPUs are supported (Apple M1 and later). + +Hyperlight support for macOS is however currently more limited than for other +platforms. The backend uses a single guest address space, making it less +efficient than other platforms. We chose to do this because of hardware +constraints in the M1 and M2 CPU families, and faster approaches would have +prevented us from supporting these CPUs. + +We believe that for the time being this is the right approach for Apple +hardware, as it’s mostly used for testing and local development. However we do +plan to eventually optimize performance for the M3 and later family of CPUs, +which should be able to achieve performance similar to our other supported +platforms. + +## `SandboxBuilder` API + +Constructing sandboxes is now more ergonomic thanks to the `SandboxBuilder` API. +Setting up a sandbox used to require mutating a `SandboxConfiguration`, using +that to construct an `UninitializedSandbox`, and then calling the `evolve` +method to obtain a final `MultiUseSandbox`: + +```rust +let mut config = SandboxConfiguration::default(); +config.set_heap_size(256 * 1024); + +let guest = GuestBinary::FilePath(guest_path); +let mut sandbox = UninitializedSandbox::new(guest, Some(config))?; +sandbox.register("Add", |a: i32, b: i32| a + b)?; +let sandbox: MultiUseSandbox = sandbox.evolve()?; + +assert_eq!(sandbox.call("Add", (7, 8)?, 15)); +``` + +With the new builder API, all these steps are now part of a single chaining API, +which is more ergonomic to use: + +```rust +let mut sandbox = SandboxBuilder::from_file(guest_path) + .heap_size(256 * 1024) + .host_function("Add", |a: i32, b: i32| Ok(a + b)) + .build()?; + +assert_eq!(sandbox.call("Add", (7, 8)?, 15)); +``` + +## Improvements to the component bindgen macro + +The `hyperlight_component_macro` crate generates the glue between the Hyperlight +guest and the host. In this release we've made some updates to that system, most +notably that macros can now directly operate `.wit` files. + +Doing this is as easy as pointing the `host_bindgen!` macro directly to a `.wit` +file, which will then be parsed and expanded to a typed interface for the host: + +```rust +// A single WIT file +hyperlight_component_macro::host_bindgen!(wit: "wit/world.wit"); +``` + +Finally: bindgen now makes it so guest calls on the host-side return `Result`. +This makes it possible gracefully handle cases where something went wrong when +calling in to the guest, where previously the host would panic. + +## MSR Guest state no longer leaks between restore calls + +Model-Specific Register state used to be able to persist in guests between calls +to `MultiUseSandbox::restore`. After almost a year of work, we have finally +fixed this problem and guest MSR state now no longer leaks between restores. + +Guest MSR state is now part the snapshot state instead, which can be declared +up-front when constructing a sandbox. You can do this either +by using `SandboxConfiguration::guest_msrs`, or with the newer +`SandboxBuilder::guest_msrs` API. + +```rust +let mut sandbox = SandboxBuilder::from_file(guest_path) + .guest_msrs(&[0x174, 0x175, 0x176])? // ← SYSENTER CS, ESP, EIP + .build()?; +``` + +Read more about this in our docs: [MSR state across restore](https://github.com/hyperlight-dev/hyperlight/blob/944bb16ba855e9f723fab5e883f76d4ed73b5e33/docs/msr.md). + +## Other Changes + +Check out everything that changed in [Hyperlight](https://github.com/hyperlight-dev/hyperlight/releases/tag/v0.17.0). From c247c2e4b5ea017f97ce1de74c2815e2e5e2c837 Mon Sep 17 00:00:00 2001 From: Yosh Date: Fri, 28 Aug 2026 20:10:26 +0200 Subject: [PATCH 2/6] Update hyperlight-0.17.0.mdx Signed-off-by: Yosh --- src/content/docs/blog/hyperlight-0.17.0.mdx | 31 ++++++++++----------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/src/content/docs/blog/hyperlight-0.17.0.mdx b/src/content/docs/blog/hyperlight-0.17.0.mdx index c5d993d..2b0638b 100644 --- a/src/content/docs/blog/hyperlight-0.17.0.mdx +++ b/src/content/docs/blog/hyperlight-0.17.0.mdx @@ -18,16 +18,16 @@ This makes macOS the third major platform for Hyperlight, following Linux and Windows. All Apple aarch64 CPUs are supported (Apple M1 and later). Hyperlight support for macOS is however currently more limited than for other -platforms. The backend uses a single guest address space, making it less -efficient than other platforms. We chose to do this because of hardware -constraints in the M1 and M2 CPU families, and faster approaches would have -prevented us from supporting these CPUs. +platforms. On macOS we map multible sandboxes to a single VM in the host +process, swapping them out as needed. This means losing out on parallelism and +in turn worse performance than our other targets. But on the up side this does +mean we can support all Apple Silicon CPUs including M1 and M2. -We believe that for the time being this is the right approach for Apple -hardware, as it’s mostly used for testing and local development. However we do -plan to eventually optimize performance for the M3 and later family of CPUs, -which should be able to achieve performance similar to our other supported -platforms. +We do plan to eventually optimize performance for the M3 and later family of +CPUs, which should be able to achieve performance similar to our other supported +platforms. But as a starting point we figured we should prioritize compatibility +over performance, since macOS is usually used more for development than for +deployment. ## `SandboxBuilder` API @@ -64,20 +64,19 @@ assert_eq!(sandbox.call("Add", (7, 8)?, 15)); The `hyperlight_component_macro` crate generates the glue between the Hyperlight guest and the host. In this release we've made some updates to that system, most -notably that macros can now directly operate `.wit` files. +notably: bindgen now makes it so guest calls on the host-side return `Result`. +This makes it possible gracefully handle cases where something went wrong when +calling in to the guest, where previously the host would panic. -Doing this is as easy as pointing the `host_bindgen!` macro directly to a `.wit` -file, which will then be parsed and expanded to a typed interface for the host: +Hyperlight macros can now also directly operate on WIT IDL files. Doing this is as +easy as pointing the `host_bindgen!` macro directly to a `.wit` file, which will +then be parsed and expanded to a typed interface for the host: ```rust // A single WIT file hyperlight_component_macro::host_bindgen!(wit: "wit/world.wit"); ``` -Finally: bindgen now makes it so guest calls on the host-side return `Result`. -This makes it possible gracefully handle cases where something went wrong when -calling in to the guest, where previously the host would panic. - ## MSR Guest state no longer leaks between restore calls Model-Specific Register state used to be able to persist in guests between calls From 7f9905e6e4fc88dc805e44b19da9ae691a2b3a82 Mon Sep 17 00:00:00 2001 From: Yosh Date: Fri, 28 Aug 2026 20:16:47 +0200 Subject: [PATCH 3/6] Update hyperlight-0.17.0.mdx Signed-off-by: Yosh --- src/content/docs/blog/hyperlight-0.17.0.mdx | 57 +++++++++++---------- 1 file changed, 29 insertions(+), 28 deletions(-) diff --git a/src/content/docs/blog/hyperlight-0.17.0.mdx b/src/content/docs/blog/hyperlight-0.17.0.mdx index 2b0638b..cd91bfa 100644 --- a/src/content/docs/blog/hyperlight-0.17.0.mdx +++ b/src/content/docs/blog/hyperlight-0.17.0.mdx @@ -15,13 +15,13 @@ improvements. Hyperlight now runs on Apple Silicon using Apple’s Hypervisor.framework API. This makes macOS the third major platform for Hyperlight, following Linux and -Windows. All Apple aarch64 CPUs are supported (Apple M1 and later). +Windows. All Apple Silicon CPU families are supported (M1 and later). -Hyperlight support for macOS is however currently more limited than for other -platforms. On macOS we map multible sandboxes to a single VM in the host -process, swapping them out as needed. This means losing out on parallelism and -in turn worse performance than our other targets. But on the up side this does -mean we can support all Apple Silicon CPUs including M1 and M2. +macOS support is however currently more limited than on our other platforms. On +macOS we map multiple sandboxes to a single VM in the host process, swapping +them out as needed. This means losing out on parallelism, and in turn results in +worse performance than on our other targets. But on the upside it does mean we +can support all Apple Silicon, including the M1 and M2 families of CPUs. We do plan to eventually optimize performance for the M3 and later family of CPUs, which should be able to achieve performance similar to our other supported @@ -37,55 +37,56 @@ that to construct an `UninitializedSandbox`, and then calling the `evolve` method to obtain a final `MultiUseSandbox`: ```rust -let mut config = SandboxConfiguration::default(); -config.set_heap_size(256 * 1024); +let mut config = SandboxConfiguration::default(); +config.set_heap_size(256 * 1024); let guest = GuestBinary::FilePath(guest_path); -let mut sandbox = UninitializedSandbox::new(guest, Some(config))?; -sandbox.register("Add", |a: i32, b: i32| a + b)?; +let mut sandbox = UninitializedSandbox::new(guest, Some(config))?; +sandbox.register("Add", |a: i32, b: i32| a + b)?; let sandbox: MultiUseSandbox = sandbox.evolve()?; -assert_eq!(sandbox.call("Add", (7, 8)?, 15)); +assert_eq!(sandbox.call("Add", (7, 8))?, 15); ``` With the new builder API, all these steps are now part of a single chaining API, which is more ergonomic to use: ```rust -let mut sandbox = SandboxBuilder::from_file(guest_path) +let mut sandbox = SandboxBuilder::from_file(guest_path) .heap_size(256 * 1024) .host_function("Add", |a: i32, b: i32| Ok(a + b)) - .build()?; + .build()?; -assert_eq!(sandbox.call("Add", (7, 8)?, 15)); +assert_eq!(sandbox.call("Add", (7, 8))?, 15); ``` ## Improvements to the component bindgen macro The `hyperlight_component_macro` crate generates the glue between the Hyperlight guest and the host. In this release we've made some updates to that system, most -notably: bindgen now makes it so guest calls on the host-side return `Result`. -This makes it possible gracefully handle cases where something went wrong when -calling in to the guest, where previously the host would panic. +notably: guest calls on the host side now return a `Result`. This makes it +possible to gracefully handle cases where something went wrong while calling +into the guest, where previously the host would panic. -Hyperlight macros can now also directly operate on WIT IDL files. Doing this is as -easy as pointing the `host_bindgen!` macro directly to a `.wit` file, which will -then be parsed and expanded to a typed interface for the host: +Hyperlight macros can now also operate directly on WIT IDL files. Doing this is +as easy as pointing the `host_bindgen!` macro at a `.wit` file, which will then +be parsed and expanded into a typed interface for the host: ```rust // A single WIT file hyperlight_component_macro::host_bindgen!(wit: "wit/world.wit"); ``` -## MSR Guest state no longer leaks between restore calls +## Guest MSR state no longer leaks between restore calls -Model-Specific Register state used to be able to persist in guests between calls -to `MultiUseSandbox::restore`. After almost a year of work, we have finally -fixed this problem and guest MSR state now no longer leaks between restores. +Model-Specific Register (MSR) state used to be able to persist in guests between +calls to `MultiUseSandbox::restore`. After almost a year of work, we have +finally fixed this problem, and guest MSR state no longer leaks between +restores. -Guest MSR state is now part the snapshot state instead, which can be declared -up-front when constructing a sandbox. You can do this either -by using `SandboxConfiguration::guest_msrs`, or with the newer +Guest MSR state is now part of the snapshot state instead, which can be declared +up-front when constructing a sandbox. You can do this either by using +`SandboxConfiguration::guest_msrs`, or with the newer `SandboxBuilder::guest_msrs` API. ```rust @@ -96,6 +97,6 @@ let mut sandbox = SandboxBuilder::from_file(guest_path) Read more about this in our docs: [MSR state across restore](https://github.com/hyperlight-dev/hyperlight/blob/944bb16ba855e9f723fab5e883f76d4ed73b5e33/docs/msr.md). -## Other Changes +## Other changes Check out everything that changed in [Hyperlight](https://github.com/hyperlight-dev/hyperlight/releases/tag/v0.17.0). From 126eb1962b6d7e56a96cf5f2f57bcec8f0e10e31 Mon Sep 17 00:00:00 2001 From: Yosh Date: Fri, 28 Aug 2026 20:20:01 +0200 Subject: [PATCH 4/6] Update hyperlight-0.17.0.mdx Signed-off-by: Yosh --- src/content/docs/blog/hyperlight-0.17.0.mdx | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/content/docs/blog/hyperlight-0.17.0.mdx b/src/content/docs/blog/hyperlight-0.17.0.mdx index cd91bfa..25c868c 100644 --- a/src/content/docs/blog/hyperlight-0.17.0.mdx +++ b/src/content/docs/blog/hyperlight-0.17.0.mdx @@ -21,13 +21,12 @@ macOS support is however currently more limited than on our other platforms. On macOS we map multiple sandboxes to a single VM in the host process, swapping them out as needed. This means losing out on parallelism, and in turn results in worse performance than on our other targets. But on the upside it does mean we -can support all Apple Silicon, including the M1 and M2 families of CPUs. +can support even the oldest Apple Silicon CPUs (M1 + M2). -We do plan to eventually optimize performance for the M3 and later family of +We do plan to eventually optimize performance for the M3 and later families of CPUs, which should be able to achieve performance similar to our other supported platforms. But as a starting point we figured we should prioritize compatibility -over performance, since macOS is usually used more for development than for -deployment. +over performance, since macOS is used more for development than for deployment. ## `SandboxBuilder` API @@ -43,13 +42,12 @@ config.set_heap_size(256 * 1024); let guest = GuestBinary::FilePath(guest_path); let mut sandbox = UninitializedSandbox::new(guest, Some(config))?; sandbox.register("Add", |a: i32, b: i32| a + b)?; -let sandbox: MultiUseSandbox = sandbox.evolve()?; +let mut sandbox: MultiUseSandbox = sandbox.evolve()?; assert_eq!(sandbox.call("Add", (7, 8))?, 15); ``` -With the new builder API, all these steps are now part of a single chaining API, -which is more ergonomic to use: +With the new builder API, all these steps collapse into a single chained call: ```rust let mut sandbox = SandboxBuilder::from_file(guest_path) From bc01595039a6119e0a18893e5357053786fb81d1 Mon Sep 17 00:00:00 2001 From: Yosh Date: Fri, 28 Aug 2026 20:58:14 +0200 Subject: [PATCH 5/6] Update hyperlight-0.17.0.mdx Signed-off-by: Yosh --- src/content/docs/blog/hyperlight-0.17.0.mdx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/content/docs/blog/hyperlight-0.17.0.mdx b/src/content/docs/blog/hyperlight-0.17.0.mdx index 25c868c..02d9588 100644 --- a/src/content/docs/blog/hyperlight-0.17.0.mdx +++ b/src/content/docs/blog/hyperlight-0.17.0.mdx @@ -23,9 +23,9 @@ them out as needed. This means losing out on parallelism, and in turn results in worse performance than on our other targets. But on the upside it does mean we can support even the oldest Apple Silicon CPUs (M1 + M2). -We do plan to eventually optimize performance for the M3 and later families of -CPUs, which should be able to achieve performance similar to our other supported -platforms. But as a starting point we figured we should prioritize compatibility +We do plan to eventually optimize performance for Apple M3 and later, which +should be able to achieve performance similar to our other supported platforms. +But as a starting point we figured we should prioritize compatibility over performance, since macOS is used more for development than for deployment. ## `SandboxBuilder` API @@ -47,7 +47,7 @@ let mut sandbox: MultiUseSandbox = sandbox.evolve()?; assert_eq!(sandbox.call("Add", (7, 8))?, 15); ``` -With the new builder API, all these steps collapse into a single chained call: +With the new builder API, all these steps become a single chained call: ```rust let mut sandbox = SandboxBuilder::from_file(guest_path) From 92075857b6dc91079ef109e18390897539628b0b Mon Sep 17 00:00:00 2001 From: Yosh Date: Fri, 28 Aug 2026 20:58:31 +0200 Subject: [PATCH 6/6] Update hyperlight-0.17.0.mdx Signed-off-by: Yosh --- src/content/docs/blog/hyperlight-0.17.0.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/blog/hyperlight-0.17.0.mdx b/src/content/docs/blog/hyperlight-0.17.0.mdx index 02d9588..893b2d8 100644 --- a/src/content/docs/blog/hyperlight-0.17.0.mdx +++ b/src/content/docs/blog/hyperlight-0.17.0.mdx @@ -1,6 +1,6 @@ --- title: "Announcing Hyperlight 0.17.0" -date: 2026-08-27 +date: 2026-08-31 --- _Hyperlight is a lightweight Virtual Machine Manager (VMM) designed to be