diff --git a/android/virtualizationservice/aidl/Android.bp b/android/virtualizationservice/aidl/Android.bp
index c1bff5e..bca4512 100644
--- a/android/virtualizationservice/aidl/Android.bp
+++ b/android/virtualizationservice/aidl/Android.bp
@@ -31,7 +31,6 @@
             apex_available: [
                 "com.android.virt",
                 "com.android.compos",
-                "com.android.microfuchsia",
             ],
         },
     },
@@ -151,7 +150,6 @@
             apex_available: [
                 "com.android.virt",
                 "com.android.compos",
-                "com.android.microfuchsia",
             ],
         },
     },
diff --git a/libs/libvmclient/Android.bp b/libs/libvmclient/Android.bp
index 9fdeaf8..96fe667 100644
--- a/libs/libvmclient/Android.bp
+++ b/libs/libvmclient/Android.bp
@@ -21,7 +21,6 @@
     ],
     apex_available: [
         "com.android.compos",
-        "com.android.microfuchsia",
         "com.android.virt",
     ],
 }
diff --git a/microfuchsia/README.md b/microfuchsia/README.md
deleted file mode 100644
index 82de725..0000000
--- a/microfuchsia/README.md
+++ /dev/null
@@ -1,30 +0,0 @@
-# Microfuchsia
-
-Microfuchsia is an experimental solution for running trusted applications on
-pkvm using the Android Virtualization Framework (AVF).
-
-# How to use
-
-Add the `com.android.microfuchsia` apex to your product.
-
-```
-PRODUCT_PACKAGES += com.android.microfuchsia
-```
-
-Define and add a `com.android.microfuchsia.images` apex to hold the images.
-
-```
-PRODUCT_PACKAGES += com.android.microfuchsia.images
-```
-
-This apex must have a prebuilt `fuchsia.zbi` in `/etc/fuchsia.zbi` and a boot
-shim in `/etc/linux-arm64-boot-shim.bin`.
-
-# Using the console
-
-This command will open the console for the first VM running in AVF, and can be
-used to connect to the microfuchsia console.
-
-```
-adb shell -t /apex/com.android.virt/bin/vm console
-```
diff --git a/microfuchsia/apex/Android.bp b/microfuchsia/apex/Android.bp
deleted file mode 100644
index eddda9f..0000000
--- a/microfuchsia/apex/Android.bp
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright (C) 2024 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package {
-    default_applicable_licenses: ["Android-Apache-2.0"],
-}
-
-apex {
-    name: "com.android.microfuchsia",
-    manifest: "manifest.json",
-    key: "com.android.microfuchsia.key",
-
-    // Allows us to specify a file_contexts in our own repository.
-    system_ext_specific: true,
-    file_contexts: "com.android.microfuchsia-file_contexts",
-
-    updatable: false,
-    future_updatable: false,
-    platform_apis: true,
-
-    binaries: [
-        // A daemon that starts on bootup that launches microfuchsia in AVF.
-        "microfuchsiad",
-    ],
-
-    prebuilts: [
-        // An init script to launch the microfuchsiad daemon on bootup which
-        // launches the microfuchsia VM in AVF.
-        "com.android.microfuchsia.init.rc",
-    ],
-}
-
-apex_key {
-    name: "com.android.microfuchsia.key",
-    public_key: "com.android.microfuchsia.avbpubkey",
-    private_key: "com.android.microfuchsia.pem",
-}
-
-prebuilt_etc {
-    name: "com.android.microfuchsia.init.rc",
-    src: "microfuchsia.rc",
-    filename: "init.rc",
-    installable: false,
-}
diff --git a/microfuchsia/apex/com.android.microfuchsia-file_contexts b/microfuchsia/apex/com.android.microfuchsia-file_contexts
deleted file mode 100644
index 13d7286..0000000
--- a/microfuchsia/apex/com.android.microfuchsia-file_contexts
+++ /dev/null
@@ -1,2 +0,0 @@
-(/.*)?                   u:object_r:system_file:s0
-/bin/microfuchsiad       u:object_r:microfuchsiad_exec:s0
diff --git a/microfuchsia/apex/com.android.microfuchsia.avbpubkey b/microfuchsia/apex/com.android.microfuchsia.avbpubkey
deleted file mode 100644
index 10d4b88..0000000
--- a/microfuchsia/apex/com.android.microfuchsia.avbpubkey
+++ /dev/null
Binary files differ
diff --git a/microfuchsia/apex/com.android.microfuchsia.pem b/microfuchsia/apex/com.android.microfuchsia.pem
deleted file mode 100644
index 541fa80..0000000
--- a/microfuchsia/apex/com.android.microfuchsia.pem
+++ /dev/null
@@ -1,52 +0,0 @@
------BEGIN PRIVATE KEY-----
-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
-wa28hvmts5NyMy819GfPGqdRa14=
------END PRIVATE KEY-----
diff --git a/microfuchsia/apex/manifest.json b/microfuchsia/apex/manifest.json
deleted file mode 100644
index b7ea23b..0000000
--- a/microfuchsia/apex/manifest.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
-  "name": "com.android.microfuchsia",
-  "version": 1
-}
diff --git a/microfuchsia/apex/microfuchsia.rc b/microfuchsia/apex/microfuchsia.rc
deleted file mode 100644
index 2b19ed3..0000000
--- a/microfuchsia/apex/microfuchsia.rc
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (C) 2024 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-service microfuchsiad /apex/com.android.microfuchsia/bin/microfuchsiad
-    class main
-    user root
-    group system
-    # We need SYS_NICE in order to allow the crosvm child process to use it.
-    # (b/322197421). composd itself never uses it (and isn't allowed to by
-    # SELinux).
-    capabilities SYS_NICE
diff --git a/microfuchsia/microfuchsiad/Android.bp b/microfuchsia/microfuchsiad/Android.bp
deleted file mode 100644
index ddf360d..0000000
--- a/microfuchsia/microfuchsiad/Android.bp
+++ /dev/null
@@ -1,25 +0,0 @@
-package {
-    default_applicable_licenses: ["Android-Apache-2.0"],
-}
-
-// A daemon that launches microfuchsia in AVF.
-rust_binary {
-    name: "microfuchsiad",
-    srcs: ["src/main.rs"],
-    edition: "2021",
-    prefer_rlib: true,
-    defaults: ["avf_build_flags_rust"],
-    rustlibs: [
-        "android.system.microfuchsiad-rust",
-        "android.system.virtualizationservice-rust",
-        "libandroid_logger",
-        "libanyhow",
-        "libbinder_rs",
-        "liblog_rust",
-        "liblibc",
-        "libvmclient",
-    ],
-    apex_available: [
-        "com.android.microfuchsia",
-    ],
-}
diff --git a/microfuchsia/microfuchsiad/aidl/Android.bp b/microfuchsia/microfuchsiad/aidl/Android.bp
deleted file mode 100644
index 02bb7c6..0000000
--- a/microfuchsia/microfuchsiad/aidl/Android.bp
+++ /dev/null
@@ -1,24 +0,0 @@
-package {
-    default_applicable_licenses: ["Android-Apache-2.0"],
-}
-
-aidl_interface {
-    name: "android.system.microfuchsiad",
-    srcs: ["android/system/microfuchsiad/*.aidl"],
-    // TODO: Make this stable when the APEX becomes updatable.
-    unstable: true,
-    backend: {
-        java: {
-            enabled: false,
-        },
-        ndk: {
-            enabled: false,
-        },
-        rust: {
-            enabled: true,
-            apex_available: [
-                "com.android.microfuchsia",
-            ],
-        },
-    },
-}
diff --git a/microfuchsia/microfuchsiad/aidl/android/system/microfuchsiad/IMicrofuchsiaService.aidl b/microfuchsia/microfuchsiad/aidl/android/system/microfuchsiad/IMicrofuchsiaService.aidl
deleted file mode 100644
index a04ae2b..0000000
--- a/microfuchsia/microfuchsiad/aidl/android/system/microfuchsiad/IMicrofuchsiaService.aidl
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.system.microfuchsiad;
-
-// This service exists as a placeholder in case we want to communicate with the
-// daemon in the future.
-interface IMicrofuchsiaService {
-}
diff --git a/microfuchsia/microfuchsiad/src/instance_manager.rs b/microfuchsia/microfuchsiad/src/instance_manager.rs
deleted file mode 100644
index 5082e50..0000000
--- a/microfuchsia/microfuchsiad/src/instance_manager.rs
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-//! Manages running instances of the Microfuchsia VM.
-//! At most one instance should be running at a time.
-
-use crate::instance_starter::{InstanceStarter, MicrofuchsiaInstance};
-use android_system_virtualizationservice::aidl::android::system::virtualizationservice;
-use anyhow::{bail, Result};
-use binder::Strong;
-use virtualizationservice::IVirtualizationService::IVirtualizationService;
-
-pub struct InstanceManager {
-    service: Strong<dyn IVirtualizationService>,
-    started: bool,
-}
-
-impl InstanceManager {
-    pub fn new(service: Strong<dyn IVirtualizationService>) -> Self {
-        Self { service, started: false }
-    }
-
-    pub fn start_instance(&mut self) -> Result<MicrofuchsiaInstance> {
-        if self.started {
-            bail!("Cannot start multiple microfuchsia instances");
-        }
-
-        let instance_starter = InstanceStarter::new("Microfuchsia", 0);
-        let instance = instance_starter.start_new_instance(&*self.service);
-
-        if instance.is_ok() {
-            self.started = true;
-        }
-        instance
-    }
-}
diff --git a/microfuchsia/microfuchsiad/src/instance_starter.rs b/microfuchsia/microfuchsiad/src/instance_starter.rs
deleted file mode 100644
index d7acf8e..0000000
--- a/microfuchsia/microfuchsiad/src/instance_starter.rs
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-//! Responsible for starting an instance of the Microfuchsia VM.
-
-use android_system_virtualizationservice::aidl::android::system::virtualizationservice::{
-    CpuTopology::CpuTopology, IVirtualizationService::IVirtualizationService,
-    VirtualMachineConfig::VirtualMachineConfig, VirtualMachineRawConfig::VirtualMachineRawConfig,
-};
-use anyhow::{ensure, Context, Result};
-use binder::{LazyServiceGuard, ParcelFileDescriptor};
-use log::info;
-use std::ffi::CStr;
-use std::fs::File;
-use std::os::fd::FromRawFd;
-use vmclient::VmInstance;
-
-pub struct MicrofuchsiaInstance {
-    _vm_instance: VmInstance,
-    _lazy_service_guard: LazyServiceGuard,
-    _pty: Pty,
-}
-
-pub struct InstanceStarter {
-    instance_name: String,
-    instance_id: u8,
-}
-
-impl InstanceStarter {
-    pub fn new(instance_name: &str, instance_id: u8) -> Self {
-        Self { instance_name: instance_name.to_owned(), instance_id }
-    }
-
-    pub fn start_new_instance(
-        &self,
-        virtualization_service: &dyn IVirtualizationService,
-    ) -> Result<MicrofuchsiaInstance> {
-        info!("Creating {} instance", self.instance_name);
-
-        // Always use instance id 0, because we will only ever have one instance.
-        let mut instance_id = [0u8; 64];
-        instance_id[0] = self.instance_id;
-
-        // Open the kernel and initrd files from the microfuchsia.images apex.
-        let kernel_fd =
-            File::open("/apex/com.android.microfuchsia.images/etc/linux-arm64-boot-shim.bin")
-                .context("Failed to open the boot-shim")?;
-        let initrd_fd = File::open("/apex/com.android.microfuchsia.images/etc/fuchsia.zbi")
-            .context("Failed to open the fuchsia ZBI")?;
-        let kernel = Some(ParcelFileDescriptor::new(kernel_fd));
-        let initrd = Some(ParcelFileDescriptor::new(initrd_fd));
-
-        // Prepare a pty for console input/output.
-        let pty = openpty()?;
-        let console_in = Some(pty.leader.try_clone().context("cloning pty")?);
-        let console_out = Some(pty.leader.try_clone().context("cloning pty")?);
-
-        let config = VirtualMachineConfig::RawConfig(VirtualMachineRawConfig {
-            name: "Microfuchsia".into(),
-            instanceId: instance_id,
-            kernel,
-            initrd,
-            params: None,
-            bootloader: None,
-            disks: vec![],
-            protectedVm: false,
-            memoryMib: 256,
-            cpuTopology: CpuTopology::ONE_CPU,
-            platformVersion: "1.0.0".into(),
-            // Fuchsia uses serial for console by default.
-            consoleInputDevice: Some("ttyS0".into()),
-            ..Default::default()
-        });
-        let vm_instance = VmInstance::create(
-            virtualization_service,
-            &config,
-            console_out,
-            console_in,
-            /* log= */ None,
-            None,
-        )
-        .context("Failed to create VM")?;
-        vm_instance
-            .vm
-            .setHostConsoleName(&pty.follower_name)
-            .context("Setting host console name")?;
-        vm_instance.start().context("Starting VM")?;
-
-        Ok(MicrofuchsiaInstance {
-            _vm_instance: vm_instance,
-            _lazy_service_guard: Default::default(),
-            _pty: pty,
-        })
-    }
-}
-
-struct Pty {
-    leader: File,
-    follower_name: String,
-}
-
-/// Opens a pseudoterminal (pty), configures it to be a raw terminal, and returns the file pair.
-fn openpty() -> Result<Pty> {
-    // Create a pty pair.
-    let mut leader: libc::c_int = -1;
-    let mut _follower: libc::c_int = -1;
-    let mut follower_name = vec![0u8; 32];
-
-    // SAFETY: calling openpty with valid+initialized variables is safe.
-    // The two null pointers are valid inputs for openpty.
-    unsafe {
-        ensure!(
-            libc::openpty(
-                &mut leader,
-                &mut _follower,
-                follower_name.as_mut_ptr(),
-                std::ptr::null_mut(),
-                std::ptr::null_mut(),
-            ) == 0,
-            "failed to openpty"
-        );
-    }
-
-    // SAFETY: calling these libc functions with valid+initialized variables is safe.
-    unsafe {
-        // Fetch the termios attributes.
-        let mut attr = libc::termios {
-            c_iflag: 0,
-            c_oflag: 0,
-            c_cflag: 0,
-            c_lflag: 0,
-            c_line: 0,
-            c_cc: [0u8; 19],
-        };
-        ensure!(libc::tcgetattr(leader, &mut attr) == 0, "failed to get termios attributes");
-
-        // Force it to be a raw pty and re-set it.
-        libc::cfmakeraw(&mut attr);
-        ensure!(
-            libc::tcsetattr(leader, libc::TCSANOW, &attr) == 0,
-            "failed to set termios attributes"
-        );
-    }
-
-    // Construct the return value.
-    // SAFETY: The file descriptors are valid because openpty returned without error (above).
-    let leader = unsafe { File::from_raw_fd(leader) };
-    let follower_name = CStr::from_bytes_until_nul(&follower_name)
-        .context("pty filename missing NUL")?
-        .to_str()
-        .context("pty filename invalid utf8")?
-        .to_string();
-    Ok(Pty { leader, follower_name })
-}
diff --git a/microfuchsia/microfuchsiad/src/main.rs b/microfuchsia/microfuchsiad/src/main.rs
deleted file mode 100644
index ec290cc..0000000
--- a/microfuchsia/microfuchsiad/src/main.rs
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-//! A daemon that can be launched on bootup that runs microfuchsia in AVF.
-//! An on-demand binder service is also prepared in case we want to communicate with the daemon in
-//! the future.
-
-mod instance_manager;
-mod instance_starter;
-mod service;
-
-use crate::instance_manager::InstanceManager;
-use anyhow::{Context, Result};
-use binder::{register_lazy_service, ProcessState};
-use log::{error, info};
-
-#[allow(clippy::eq_op)]
-fn try_main() -> Result<()> {
-    let debuggable = env!("TARGET_BUILD_VARIANT") != "user";
-    let log_level = if debuggable { log::LevelFilter::Debug } else { log::LevelFilter::Info };
-    android_logger::init_once(
-        android_logger::Config::default().with_tag("microfuchsiad").with_max_level(log_level),
-    );
-
-    ProcessState::start_thread_pool();
-
-    let virtmgr =
-        vmclient::VirtualizationService::new().context("Failed to spawn VirtualizationService")?;
-    let virtualization_service =
-        virtmgr.connect().context("Failed to connect to VirtualizationService")?;
-
-    let instance_manager = InstanceManager::new(virtualization_service);
-    let service = service::new_binder(instance_manager);
-    register_lazy_service("android.system.microfuchsiad", service.as_binder())
-        .context("Registering microfuchsiad service")?;
-
-    info!("Registered services, joining threadpool");
-    ProcessState::join_thread_pool();
-
-    info!("Exiting");
-    Ok(())
-}
-
-fn main() {
-    if let Err(e) = try_main() {
-        error!("{:?}", e);
-        std::process::exit(1)
-    }
-}
diff --git a/microfuchsia/microfuchsiad/src/service.rs b/microfuchsia/microfuchsiad/src/service.rs
deleted file mode 100644
index a2112b1..0000000
--- a/microfuchsia/microfuchsiad/src/service.rs
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-//! Implementation of IMicrofuchsiaService that runs microfuchsia in AVF when
-//! created.
-
-use crate::instance_manager::InstanceManager;
-use crate::instance_starter::MicrofuchsiaInstance;
-use android_system_microfuchsiad::aidl::android::system::microfuchsiad::IMicrofuchsiaService::{
-    BnMicrofuchsiaService, IMicrofuchsiaService,
-};
-use anyhow::Context;
-use binder::{self, BinderFeatures, Interface, Strong};
-
-#[allow(unused)]
-pub struct MicrofuchsiaService {
-    instance_manager: InstanceManager,
-    microfuchsia: MicrofuchsiaInstance,
-}
-
-pub fn new_binder(mut instance_manager: InstanceManager) -> Strong<dyn IMicrofuchsiaService> {
-    let microfuchsia = instance_manager.start_instance().context("Starting Microfuchsia").unwrap();
-    let service = MicrofuchsiaService { instance_manager, microfuchsia };
-    BnMicrofuchsiaService::new_binder(service, BinderFeatures::default())
-}
-
-impl Interface for MicrofuchsiaService {}
-
-impl IMicrofuchsiaService for MicrofuchsiaService {}
