diff --git a/aos/init.cc b/aos/init.cc
index 579ad33..b51dc1c 100644
--- a/aos/init.cc
+++ b/aos/init.cc
@@ -11,29 +11,61 @@
 #include <cstdlib>
 #include <cstring>
 
-#include "gflags/gflags.h"
-#include "glog/logging.h"
+#include "absl/debugging/failure_signal_handler.h"
+#include "absl/debugging/symbolize.h"
+#include "absl/flags/flag.h"
+#include "absl/flags/parse.h"
+#include "absl/log/check.h"
+#include "absl/log/flags.h"
+#include "absl/log/globals.h"
+#include "absl/log/initialize.h"
+#include "absl/log/log.h"
 
 #include "aos/realtime.h"
 #include "aos/uuid.h"
 
-DEFINE_bool(coredump, false, "If true, write core dumps on failure.");
+ABSL_FLAG(bool, coredump, false, "If true, write core dumps on failure.");
+ABSL_FLAG(bool, backtrace, true, "If true, print backtraces out on crashes.");
 
 namespace aos {
 namespace {
-bool initialized = false;
+std::atomic<bool> initialized{false};
 }  // namespace
 
 bool IsInitialized() { return initialized; }
 
 void InitGoogle(int *argc, char ***argv) {
   CHECK(!IsInitialized()) << "Only initialize once.";
-  FLAGS_logtostderr = true;
-  google::InitGoogleLogging((*argv)[0]);
-  gflags::ParseCommandLineFlags(argc, argv, true);
-  google::InstallFailureSignalHandler();
+  absl::SetStderrThreshold(absl::LogSeverityAtLeast::kInfo);
+  std::vector<char *> positional_arguments =
+      absl::ParseCommandLine(*argc, *argv);
 
-  if (FLAGS_coredump) {
+  {
+    const std::vector<absl::UnrecognizedFlag> unrecognized_flags;
+    absl::ReportUnrecognizedFlags(unrecognized_flags);
+    if (!unrecognized_flags.empty()) {
+      for (const absl::UnrecognizedFlag &flag : unrecognized_flags) {
+        LOG(ERROR) << "Unrecognized flag " << flag.flag_name;
+      }
+      LOG(FATAL) << "Found unrecognized flags, aborting";
+    }
+  }
+
+  CHECK_LE(positional_arguments.size(), static_cast<size_t>(*argc));
+  for (size_t i = 0; i < positional_arguments.size(); ++i) {
+    (*argv)[i] = positional_arguments[i];
+  }
+  *argc = positional_arguments.size();
+
+  absl::InitializeLog();
+
+  if (absl::GetFlag(FLAGS_backtrace)) {
+    absl::InitializeSymbolizer((*argv)[0]);
+    absl::FailureSignalHandlerOptions options;
+    absl::InstallFailureSignalHandler(options);
+  }
+
+  if (absl::GetFlag(FLAGS_coredump)) {
     WriteCoreDumps();
   }
 
