Build Status Coverage Status


A generic file system abstraction for Dart.

Like dart:io, package:file supplies a rich Dart-idiomatic API for accessing a file system.

Unlike dart:io, package:file:

  • Can be used to implement custom file systems.
  • Comes with an in-memory implementation out-of-the-box, making it super-easy to test code that works with the file system.
  • Allows using multiple file systems simultaneously. A file system is a first-class object. Instantiate however many you want and use them all.


Implement your own custom file system:

import 'package:file/file.dart';

class FooBarFileSystem implements FileSystem { ... }

Use the in-memory file system:

import 'package:file/memory.dart';

var fs = new MemoryFileSystem();

Use the local file system (requires dart:io access):

import 'package:file/local.dart';

var fs = const LocalFileSystem();



A file system implementation that provides a view onto another file system, taking a path in the underlying file system, and making that the apparent root of the new file system. This is similar in concept to a chroot operation on Linux operating systems. Such a modified file system cannot name (and therefore normally cannot access) files outside the designated directory tree.


Core interfaces containing the abstract FileSystem interface definition and all associated types used by FileSystem.


A local file system implementation. This relies on the use of dart:io and is thus not suitable for use in the browser.


An implementation of FileSystem that exists entirely in memory with an internal representation loosely based on the Filesystem Hierarchy Standard. MemoryFileSystem is suitable for mocking and tests, as well as for caching or staging before writing or reading to a live system.