diff --git a/framework/delibs/deutil/CMakeLists.txt b/framework/delibs/deutil/CMakeLists.txt
index d9b74fb..4577c44 100644
--- a/framework/delibs/deutil/CMakeLists.txt
+++ b/framework/delibs/deutil/CMakeLists.txt
@@ -21,7 +21,7 @@
 
 if (DE_OS_IS_FUCHSIA)
 	set(DEUTIL_SRCS ${DEUTIL_SRCS} deFuchsiaProcess.cc)
-	set(DEUTIL_LIBS ${DEUTIL_LIBS} launchpad magenta)
+	set(DEUTIL_LIBS ${DEUTIL_LIBS} launchpad zircon)
 else ()
 	set(DEUTIL_SRCS ${DEUTIL_SRCS} deProcess.c)
 endif ()
diff --git a/framework/delibs/deutil/deFuchsiaProcess.cc b/framework/delibs/deutil/deFuchsiaProcess.cc
index adb5e13..b80c3bd 100644
--- a/framework/delibs/deutil/deFuchsiaProcess.cc
+++ b/framework/delibs/deutil/deFuchsiaProcess.cc
@@ -5,13 +5,13 @@
 #include <assert.h>
 #include <launchpad/launchpad.h>
 #include <launchpad/vmo.h>
-#include <magenta/process.h>
-#include <magenta/processargs.h>
-#include <magenta/syscalls.h>
-#include <magenta/syscalls/object.h>
+#include <zircon/process.h>
+#include <zircon/processargs.h>
+#include <zircon/syscalls.h>
+#include <zircon/syscalls/object.h>
 #include <memory>
-#include <mxio/io.h>
-#include <mxio/util.h>
+#include <fdio/io.h>
+#include <fdio/util.h>
 #include <string>
 #include <unistd.h>
 
@@ -30,27 +30,27 @@
 public:
     static std::unique_ptr<DeProcess> Create()
     {
-      mx_handle_t job_copy = MX_HANDLE_INVALID;
-      mx_handle_duplicate(mx_job_default(), MX_RIGHT_SAME_RIGHTS, &job_copy);
+      zx_handle_t job_copy = ZX_HANDLE_INVALID;
+      zx_handle_duplicate(zx_job_default(), ZX_RIGHT_SAME_RIGHTS, &job_copy);
 
       launchpad_t *lp;
-      mx_status_t status = launchpad_create(job_copy, "DeProcess", &lp);
-      if (status != MX_OK)
+      zx_status_t status = launchpad_create(job_copy, "DeProcess", &lp);
+      if (status != ZX_OK)
         return std::unique_ptr<DeProcess>();
 
       return std::unique_ptr<DeProcess>(new DeProcess(lp));
     }
 
     DeProcess(launchpad_t* lp)
-        : lp_(lp), proc_(MX_HANDLE_INVALID), fstdin_(nullptr), fstdout_(nullptr), fstderr_(nullptr)
+        : lp_(lp), proc_(ZX_HANDLE_INVALID), fstdin_(nullptr), fstdout_(nullptr), fstderr_(nullptr)
     {
     }
 
     ~DeProcess()
     {
         launchpad_destroy(lp_);
-        if (proc_ != MX_HANDLE_INVALID)
-            mx_handle_close(proc_);
+        if (proc_ != ZX_HANDLE_INVALID)
+            zx_handle_close(proc_);
         closeStdIn();
         closeStdOut();
         closeStdErr();
@@ -60,24 +60,24 @@
 
     bool start()
     {
-        mx_status_t status;
+        zx_status_t status;
         status = launchpad_add_pipe(launchpad(), &remote_stdin_fd_, STDIN_FILENO);
-        assert(status == MX_OK);
+        assert(status == ZX_OK);
 
         int stdout_fd;
         status = launchpad_add_pipe(launchpad(), &stdout_fd, STDOUT_FILENO);
-        assert(status == MX_OK);
+        assert(status == ZX_OK);
 
         int stderr_fd;
         status = launchpad_add_pipe(launchpad(), &stderr_fd, STDERR_FILENO);
-        assert(status == MX_OK);
+        assert(status == ZX_OK);
 
         fstdin_ = deFile_createFromHandle(remote_stdin_fd_);
         fstdout_ = deFile_createFromHandle(stdout_fd);
         fstderr_ = deFile_createFromHandle(stderr_fd);
 
         proc_ = launchpad_start(lp_);
-        if (proc_ == MX_HANDLE_INVALID)
+        if (proc_ == ZX_HANDLE_INVALID)
             return false;
 
         return true;
@@ -85,9 +85,9 @@
 
     bool IsRunning()
     {
-        mx_signals_t pending = 0;
-        mx_status_t status = mx_object_wait_one(proc_, MX_TASK_TERMINATED, 0, &pending);
-        if (pending & MX_TASK_TERMINATED)
+        zx_signals_t pending = 0;
+        zx_status_t status = zx_object_wait_one(proc_, ZX_TASK_TERMINATED, 0, &pending);
+        if (pending & ZX_TASK_TERMINATED)
             return false;
         assert(status == ERR_TIMED_OUT);
         return true;
@@ -95,16 +95,16 @@
 
     bool Wait()
     {
-        mx_status_t status = mx_object_wait_one(proc_, MX_TASK_TERMINATED, MX_TIME_INFINITE, NULL);
-        return status == MX_OK;
+        zx_status_t status = zx_object_wait_one(proc_, ZX_TASK_TERMINATED, ZX_TIME_INFINITE, NULL);
+        return status == ZX_OK;
     }
 
     int GetExitCode()
     {
-        mx_info_process_t info;
-        mx_status_t status =
-            mx_object_get_info(proc_, MX_INFO_PROCESS, &info, sizeof(info), NULL, NULL);
-        assert(status == MX_OK);
+        zx_info_process_t info;
+        zx_status_t status =
+            zx_object_get_info(proc_, ZX_INFO_PROCESS, &info, sizeof(info), NULL, NULL);
+        assert(status == ZX_OK);
         return info.return_code;
     }
 
@@ -140,7 +140,7 @@
 
 private:
     launchpad_t* lp_;
-    mx_handle_t proc_;
+    zx_handle_t proc_;
     int remote_stdin_fd_;
     deFile* fstdin_;
     deFile* fstdout_;
@@ -166,32 +166,32 @@
 
     deCommandLine* cmdLine = deCommandLine_parse(commandLine);
 
-    mx_status_t status;
+    zx_status_t status;
     status = launchpad_set_args(process->launchpad(), cmdLine->numArgs - 1,
                                 (const char *const *)&cmdLine->args[1]);
-    if (status != MX_OK)
+    if (status != ZX_OK)
       fprintf(stderr, "launcpad_set_args failed: %d\n", status);
-    assert(status == MX_OK);
+    assert(status == ZX_OK);
 
-    mx_handle_t vfs_root;
+    zx_handle_t vfs_root;
     uint32_t vfs_root_type;
 
-    status = mxio_clone_root(&vfs_root, &vfs_root_type);
+    status = fdio_clone_root(&vfs_root, &vfs_root_type);
     if (status <= 0) { // positive values apparently are ok
-      fprintf(stderr, "mxio_clone_root failed: %d\n", status);
+      fprintf(stderr, "fdio_clone_root failed: %d\n", status);
       assert(false);
     }
 
     status =
         launchpad_add_handle(process->launchpad(), vfs_root, vfs_root_type);
-    if (status != MX_OK)
+    if (status != ZX_OK)
       fprintf(stderr, "launchpad_add_handle failed: %d\n", status);
-    assert(status == MX_OK);
+    assert(status == ZX_OK);
 
     status = launchpad_load_from_file(process->launchpad(), cmdLine->args[0]);
-    if (status != MX_OK)
+    if (status != ZX_OK)
       fprintf(stderr, "launchpad_load_from_file failed: %d\n", status);
-    assert(status == MX_OK);
+    assert(status == ZX_OK);
 
     if (!process->start())
         return false;
diff --git a/targets/fuchsia/fuchsia.cmake b/targets/fuchsia/fuchsia.cmake
index 0ffc18b..6b387f0 100644
--- a/targets/fuchsia/fuchsia.cmake
+++ b/targets/fuchsia/fuchsia.cmake
@@ -7,4 +7,4 @@
 set(DEQP_SUPPORT_OPENGL	OFF)
 set(DEQP_SUPPORT_EGL	OFF)
 
-set(DEQP_PLATFORM_LIBRARIES mxio)
+set(DEQP_PLATFORM_LIBRARIES fdio)
