A Dart package that supports a subset of dart:io in all platforms, including the browser (where it normally doesn't work).

Typically you just import "package:universal_io/io.dart" (instead of "dart:io"):

  • In the Dart VM and Flutter, the library exports dart:io.
  • In browser: the library exports its own, compatible classes.

Licensed under the MIT License. Much of the source code was adopted from the original 'dart:io' in Dart SDK, which was licensed under a BSD-style license. See LICENSE for all licenses.



  • Platform information
    • Information such as operating system, locale, and stdin/stdout. You can override the behavior.
  • HTTP client
    • In browser, the connection to the server is established only after you have committed request body by calling HttpClientRequest method close().
  • File access
    • In browsers, access to all directories and files is denied. You can override the behavior.
  • Sockets

Getting started

Add dependency

In pubspec.yaml:

  universal_io: ^0.1.0

Override behavior

import 'dart:async';

import 'package:universal_io/io.dart';
import 'package:universal_io/io_driver.dart';

void main() async {
  // Set IO driver
  IODriver.zoneLocal.defaultValue = new MyDriver();

  // Do something
  final socket = await Socket.connect("", 80);

class MyDriver extends IODriver {
  Future<Socket> connectSocket(host, int port,
      {sourceAddress, Duration timeout}) {
    print("Attempting to connect to '$host:$port'");
    return super.connectSocket(host, port);

Use Chrome OS driver

import 'package:universal_io/io.dart';
import 'package:universal_io/io_driver.dart';
import 'package:universal_io_for_chrome_os/io_driver_chrome_os.dart';

void main() async {
  // Use Chrome OS driver for IO
  IODriver.zoneLocal.defaultValue = new ChromeIODriver();
  // ...