/fstoml

Lightweight TOML based F# project file

Primary LanguageF#MIT LicenseMIT

fstoml Gitter

FsToml is new, lighweight project file for F#.

Warning! FsToml is experimental project, not recommended to use in production environment

Example

Name            = 'FantasticApp'
OutputType      = 'Exe'
FrameworkVersion = '4.5'

Files = [
    { Compile = "src/file.fs" },
    { Compile = "src/file2.fs", Link = "src/uselessLink.fs" },
    { Compile = "src/file3.fs", Sig = "src/file3.fsi" },
    { None    = "src/script.fsx", Private = true },
]

References = [
    { Reference = "System" },
    { Reference = "FSharp.Core" },
    { Project   = "Deppy.fstoml" },
    { Reference   = "lib/Fable.Core.dll", Private = true },
    { Package   = "Nett" }
]

DebugSymbols = true
DebugType = 'full'
Optimize = false
NoWarn = [52, 40]
OtherFlags = [ '--warnon:1182' ]

[ net ]
   DebugSymbols = false

[ net.Release ]
    Constants = [ 'RELEASE', 'FABLE' ]
    DebugType = 'pdbonly'
    Optimize = true

[ net."4_5".Release.x86 ]
    OutputPath = "bin/Release/x86"

[ net."4_5".Release.x64 ]
    OutputPath = "bin/Release/x64"

Why?

  • Sane syntax
  • Removing all moving parts of normal MsBuild files that makes it imposible to parse without using MsBuild (conditional statements, variable assigments, functions calls inside of project file)
  • Declarative way of defining conditional parts of project
  • Deeper integration with Paket
  • Better set of CLI tooling for project managment [which will make editor integration much easier]

How does it work

fstoml is abstraction layer on top of MsBuild providing more declarative, high level way of defining projects. Under the hood it's translated to normal MsBuild XML .props file and imported by MsBuild whenever it's called. That makes fstoml 100% compatiable with all existing tooling, such as dotnet CLI and different editors.

Contributing and copyright

The project is hosted on GitHub where you can report issues, fork the project and submit pull requests.

The library is available under MIT license, which allows modification and redistribution for both commercial and non-commercial purposes.

Maintainer(s)