Forest is a domain-specific language for describing filestores.

A filestore is a structured collection of data files housed in a conventional hierarchical file system. Many applications use filestores as a poor-man’s database, and the correct execution of these applications requires that the collection of files, directories, and symbolic links stored on disk satisfy a variety of precise invariants. Moreover, all of these structures must have acceptable ownership, permission, and timestamp attributes. Unfortunately, current programming languages do not provide adequate support for documenting assumptions about filestores, detecting errors, or safely loading from and storing to them.

Forest specifications describe the structure, attributes, and invariants of filestores using types. Given a specification, the compiler generates loading and storing functions that make it easy to connect data on disk to an isomorphic representation in memory that can be manipulated as if it were any other data structure. It also generates metadata that describes the degree to which the structures on the disk conform to the specification, making error detection easy. In this way, Forest extends the rigorous discipline of typed programming languages, and many of their benefits, to the untyped world of file systems.



  • J. DiLorenzo, R. Zhang, E. Menzies, K. Fisher, and N. Foster. Incremental Forest: A DSL for efficiently managing filestores. In Proceedings of the 2016 ACM SIGPLAN International Conference on Object-Oriented Programming, Systems, Languages, and Applications, (OOPSLA) 2016, pages 252–271, 2016.
  • J. DiLorenzo, K. Mancini, K. Fisher, and N. Foster. TxForest: A DSL for concurrent file- stores. In A. W. Lin, editor, Programming Languages and Systems, pages 332–354, Cham, 2019. Springer International Publishing.
  • Kathleen Fisher, Nate Foster, David Walker, and Kenny Zhu. Forest: A Language and Toolkit for Programming with Filestores. In ACM SIGPLAN International Conference on Functional Programming (ICFP), Tokyo, Japan, pages 292-306, September 2011. [ conference version ]

Source Code