NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Go modules
Last release 1 months ago
18 Aug 2026
Release timing varies
gaps range from 2 weeks to 6 months
Most releases are documented
notes for 10 of 16 stable releases
Nothing withdrawn
no release was ever pulled
14 years old
316 releases · first in 2013
Nothing published for this version
Nothing published for this version
Nothing published for this version
One column per quarter.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
This release fixes the omitempty struct tag on an uncomparable type panicking.
This release fixes the omitempty struct tag on an uncomparable type panicking.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
This release adds a few additional features:
This release adds a few additional features:
Support encoding and decoding json.Number, making interoperability with JSON when using json.Encoder.UseNumber() easier.
Support time.Duration string format; an integer will be interpreted as nanoseconds (like before), but a string like "5h" will be parsed. On encoding the string format is used.
The omitempty struct tag now also works for structs with all zero values, for example an empty time.Time. A struct is considered "empty" when all fields (exported and private) are the zero value.
Allow using interface{} (or any) as the map key when decoding.
And some fixes:
Fix encoding.TextUnmarshaler not working for map values.
Make encoding.TextUnmarshaler and toml.Unmarshaler work if MarshalText() or MarshalTOML() have a pointer receiver.
Error out on nil returns from MarshalTOML/MarshalText; before they would get encoded as invalid TOML (keyname =).
Fix a panic where it would try to encode array = [{}, 0] as:
[[array]]
[[array]]
Which isn't valid as 0 isn't a table.
Some better error reporting for some errors.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Skip fields with toml:"-" even when they're unsupported types. Previously something like this would fail to encode due to func being an unsupported ty
Just a few bugfixes:
Skip fields with toml:"-" even when they're unsupported types. Previously something like this would fail to encode due to func being an unsupported type:
struct {
Str string `toml:"str"
Func func() `toml:"-"`
}
Multiline strings can't end with \. This is valid:
# Valid
key = """ foo \
"""
# Invalid
key = """ foo \ """
Don't quote values in TOMLMarshaler. Previously they would always include quoting (e.g. "value"), while the entire point of this interface is to bypass that.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
This release adds much more detailed errors, support for the toml.Marshaler interface, and several fixes.
This release adds much more detailed errors, support for the toml.Marshaler interface, and several fixes.
There is no special meaning in the jump to v1.0; the 0.x releases were always treated as if they're 1.x with regards to compatibility; the versioning scheme for this library predates the release of modules.
Error reporting is much improved; the reported position of errors should now always be correct and the library can print more detailed errors (#299, #332)
Decode always return a toml.ParseError, which has three methods:
Error() behaves as before and shows a single concise line with the error.
ErrorWithPosition() shows the same error, but also shows the line the error occurred at, similar to e.g. clang or the Rust compiler.
ErrorWithUsage() is the same as ErrorWithPosition(), but may also show a longer usage guidance message. This isn't always present (in which case it behaves identical to ErrorWithPosition()), but it should be present for most common mistakes and sources of confusion.
Which error the correct one to use is depends on your application and preferences; in general I would recommend using at least ErrorWithPosition() for user-facing errors, as it's much more helpful for users of any skill level. If your users are likely to be non-technical then ErrorWithUsage() is probably a good idea; I did my best to avoid technical jargon such as "newline" and phrase things in a way that's understandable by most people not intimately familiar with these sort of things.
Additionally, the TOML key that fialed should now always be reported in all errors.
Add toml.Marshaler interface. This can be used if you want full control over how something is marshalled as TOML, similar to json.Marshaler etc. This takes precedence over encoding.TextMarshaler. (#327)
Allow TOML integers to be decoded to a Go float (#325)
Previously int = 42 could only be decoded to an int* type; now this can also be decoded in a float type as long as it can be represented without loss of data.
Key.String() is now quoted when needed (#333)
Fix decoding of nested structs on 32bit platforms (#314)
Empty slices are now always []T{} rather than nil, which was the behaviour in v0.3.1 and before. While they are identical for most purposes, encoding/json encodes them different ([] vs. null), making it an (accidentally) incompatible change (#339)
Your coding agent can read these notes before it upgrades. Set up the MCP server →