1################################################################################ 2## Comment 3 4# Speak your mind with the hash symbol. They go from the symbol to the end of 5# the line. 6 7 8################################################################################ 9## Table 10 11# Tables (also known as hash tables or dictionaries) are collections of 12# key/value pairs. They appear in square brackets on a line by themselves. 13 14[table] 15 16key = "value" # Yeah, you can do this. 17 18# Nested tables are denoted by table names with dots in them. Name your tables 19# whatever crap you please, just don't use #, ., [ or ]. 20 21[table.subtable] 22 23key = "another value" 24 25# You don't need to specify all the super-tables if you don't want to. TOML 26# knows how to do it for you. 27 28# [x] you 29# [x.y] don't 30# [x.y.z] need these 31[x.y.z.w] # for this to work 32 33 34################################################################################ 35## Inline Table 36 37# Inline tables provide a more compact syntax for expressing tables. They are 38# especially useful for grouped data that can otherwise quickly become verbose. 39# Inline tables are enclosed in curly braces `{` and `}`. No newlines are 40# allowed between the curly braces unless they are valid within a value. 41 42[table.inline] 43 44name = { first = "Tom", last = "Preston-Werner" } 45point = { x = 1, y = 2 } 46 47 48################################################################################ 49## String 50 51# There are four ways to express strings: basic, multi-line basic, literal, and 52# multi-line literal. All strings must contain only valid UTF-8 characters. 53 54[string.basic] 55 56basic = "I'm a string. \"You can quote me\". Name\tJos\u00E9\nLocation\tSF." 57 58[string.multiline] 59 60# The following strings are byte-for-byte equivalent: 61key1 = "One\nTwo" 62key2 = """One\nTwo""" 63key3 = """ 64One 65Two""" 66 67[string.multiline.continued] 68 69# The following strings are byte-for-byte equivalent: 70key1 = "The quick brown fox jumps over the lazy dog." 71 72key2 = """ 73The quick brown \ 74 75 76 fox jumps over \ 77 the lazy dog.""" 78 79key3 = """\ 80 The quick brown \ 81 fox jumps over \ 82 the lazy dog.\ 83 """ 84 85[string.literal] 86 87# What you see is what you get. 88winpath = 'C:\Users\nodejs\templates' 89winpath2 = '\\ServerX\admin$\system32\' 90quoted = 'Tom "Dubs" Preston-Werner' 91regex = '<\i\c*\s*>' 92 93 94[string.literal.multiline] 95 96regex2 = '''I [dw]on't need \d{2} apples''' 97lines = ''' 98The first newline is 99trimmed in raw strings. 100 All other whitespace 101 is preserved. 102''' 103 104 105################################################################################ 106## Integer 107 108# Integers are whole numbers. Positive numbers may be prefixed with a plus sign. 109# Negative numbers are prefixed with a minus sign. 110 111[integer] 112 113key1 = +99 114key2 = 42 115key3 = 0 116key4 = -17 117 118[integer.underscores] 119 120# For large numbers, you may use underscores to enhance readability. Each 121# underscore must be surrounded by at least one digit. 122key1 = 1_000 123key2 = 5_349_221 124key3 = 1_2_3_4_5 # valid but inadvisable 125 126 127################################################################################ 128## Float 129 130# A float consists of an integer part (which may be prefixed with a plus or 131# minus sign) followed by a fractional part and/or an exponent part. 132 133[float.fractional] 134 135key1 = +1.0 136key2 = 3.1415 137key3 = -0.01 138 139[float.exponent] 140 141key1 = 5e+22 142key2 = 1e6 143key3 = -2E-2 144 145[float.both] 146 147key = 6.626e-34 148 149[float.underscores] 150 151key1 = 9_224_617.445_991_228_313 152key2 = 1e1_00 153 154 155################################################################################ 156## Boolean 157 158# Booleans are just the tokens you're used to. Always lowercase. 159 160[boolean] 161 162True = true 163False = false 164 165 166################################################################################ 167## Datetime 168 169# Datetimes are RFC 3339 dates. 170 171[datetime] 172 173key1 = 1979-05-27T07:32:00Z 174key2 = 1979-05-27T00:32:00-07:00 175key3 = 1979-05-27T00:32:00.999999-07:00 176 177 178################################################################################ 179## Array 180 181# Arrays are square brackets with other primitives inside. Whitespace is 182# ignored. Elements are separated by commas. Data types may not be mixed. 183 184[array] 185 186key1 = [ 1, 2, 3 ] 187key2 = [ "red", "yellow", "green" ] 188key3 = [ [ 1, 2 ], [3, 4, 5] ] 189#key4 = [ [ 1, 2 ], ["a", "b", "c"] ] # this is ok 190 191# Arrays can also be multiline. So in addition to ignoring whitespace, arrays 192# also ignore newlines between the brackets. Terminating commas are ok before 193# the closing bracket. 194 195key5 = [ 196 1, 2, 3 197] 198key6 = [ 199 1, 200 2, # this is ok 201] 202 203 204################################################################################ 205## Array of Tables 206 207# These can be expressed by using a table name in double brackets. Each table 208# with the same double bracketed name will be an element in the array. The 209# tables are inserted in the order encountered. 210 211[[products]] 212 213name = "Hammer" 214sku = 738594937 215 216[[products]] 217 218[[products]] 219 220name = "Nail" 221sku = 284758393 222color = "gray" 223 224 225# You can create nested arrays of tables as well. 226 227[[fruit]] 228 name = "apple" 229 230 [fruit.physical] 231 color = "red" 232 shape = "round" 233 234 [[fruit.variety]] 235 name = "red delicious" 236 237 [[fruit.variety]] 238 name = "granny smith" 239 240[[fruit]] 241 name = "banana" 242 243 [[fruit.variety]] 244 name = "plantain" 245