TOML: A config file format for humans
TOML: Tom's Obvious Minimal Language

  
    
        
          
            
              
              
              
            
          
          
            
            
              [Tom's Obvious Minimal Language]
            
          
        
        
          A config file format for humans.
        
        
          TOML aims to be a minimal configuration file format that's easy to read due to obvious
          semantics. TOML is designed to map unambiguously to a hash table. TOML should be easy to
          parse into data structures in a wide variety of languages.
        
      

    
      # This is a TOML document

title = "TOML Example"

[owner]
name = "Tom Preston-Werner"
dob = 1979-05-27T07:32:00-08:00

[database]
enabled = true
ports = [ 8000, 8001, 8002 ]
data = [ ["delta", "phi"], [3.14] ]
temp_targets = { cpu = 79.5, case = 72.0 }

[servers]

[servers.alpha]
ip = "10.0.0.1"
role = "frontend"

[servers.beta]
ip = "10.0.0.2"
role = "backend"
    
  

  
    
      
        
          
          TOML prioritizes humans
        

        
          TOML aims to be a minimal configuration file format that:
          
            
              is easy to read due to obvious semantics
            
            
              maps unambiguously to a hash table
            
            
              is easy to parse into data structures in a wide variety
              of languages
            
          
        
      

      
        
          
          TOML has useful native types
        
        
          
            
              
                
              
              Key/Value Pairs
            
            
              
                
              
              Arrays
            
            
              
                
              
              Tables
            
            
              
                
              
              Inline tables
            
            
              
                
              
              Arrays of tables
            
            
              
                
              
              Integers & Floats
            
            
              
                
              
              Booleans
            
            
              
                
              
              Dates & Times, with optional offsets
            
          
        
      

      
        
          
          TOML is widely supported
        
        
          
            TOML already has implementations in most of the most popular programming languages in use
            today: C, C#, C++, Clojure, Dart, Elixir, Erlang, Go, Haskell, Java, JavaScript, Lua,
            Objective-C, Perl, PHP, Python, Ruby, Rust, Scala, Swift, …
            and plenty more.
          
        
      
    
  

  
    
      
        A Quick Tour of TOML
      
    

    
      
        
          
            Comments
            TOML thinks all config files should support comments.
          

          # This is a TOML comment

# This is a multiline
# TOML comment
        

        
          
            Powerful Strings
            
              There are four ways to express strings: basic, multi-line basic, literal, and
              multi-line literal. Basic strings are surrounded by
              quotation marks:
            
          

          str1 = "I'm a string."
str2 = "You can \"quote\" me."
str3 = "Name\tJos\u00E9\nLoc\tSF."

          
            Multi-line basic strings are
            surrounded by three quotation marks on each side and allow newlines. Include a line
            ending backslash to automatically trim whitespace preceeding any non-whitespace
            characters:
          

          str1 = """
Roses are red
Violets are blue"""

str2 = """\
  The quick brown \
  fox jumps over \
  the lazy dog.\
  """

          
            str2 becomes
            "The quick brown fox jumps over the lazy dog."
            (a single sentence with no line breaks).
          

          
            Literal strings are surrounded by single quotes. No
            escaping is performed so what you see is what you get:
          

          path = 'C:\Users\nodejs\templates'
path2 = '\\User\admin$\system32'
quoted = 'Tom "Dubs" Preston-Werner'
regex = '<\i\c*\s*>'

          
            Since there is no escaping, there is no way to write a single quote inside a literal
            string enclosed by single quotes. That's where
            multi-line literal strings come in:
          
          re = '''I [dw]on't need \d{2} apples'''
lines = '''
The first newline is
trimmed in raw strings.
All other whitespace
is preserved.
'''
        
      

      
        
          
            Numbers
            
              Integers, floats, infinity, and even NaN are all supported. You can use scientific
              notation and even thousands separators.
            
          

          # integers
int1 = +99
int2 = 42
int3 = 0
int4 = -17

# hexadecimal with prefix `0x`
hex1 = 0xDEADBEEF
hex2 = 0xdeadbeef
hex3 = 0xdead_beef

# octal with prefix `0o`
oct1 = 0o01234567
oct2 = 0o755

# binary with prefix `0b`
bin1 = 0b11010110

# fractional
float1 = +1.0
float2 = 3.1415
float3 = -0.01

# exponent
float4 = 5e+22
float5 = 1e06
float6 = -2E-2

# both
float7 = 6.626e-34

# separators
float8 = 224_617.445_991_228

# infinity
infinite1 = inf # positive infinity
infinite2 = +inf # positive infinity
infinite3 = -inf # negative infinity

# not a number
not1 = nan
not2 = +nan
not3 = -nan 
        

        
          
            Dates and Times
            
              TOML features support for dates, times, and datetimes with and without offsets.
            
          

          # offset datetime
odt1 = 1979-05-27T07:32:00Z
odt2 = 1979-05-27T00:32:00-07:00
odt3 = 1979-05-27T00:32:00.999999-07:00

# local datetime
ldt1 = 1979-05-27T07:32:00
ldt2 = 1979-05-27T00:32:00.999999

# local date
ld1 = 1979-05-27

# local time
lt1 = 07:32:00
lt2 = 00:32:00.999999
        
      
    
  

  
    
      More Spec
      
        TOML supports even more native types and syntax, read all about it:
      
      
    

    
      Start coding
      
        TOML is already implemented in over 40 programming languages:
      
      
    
  
