diff --git a/shared-bindings/_environ/__init__.c b/shared-bindings/_environ/__init__.c
index 81d778f3ed..a35181b754 100644
--- a/shared-bindings/_environ/__init__.c
+++ b/shared-bindings/_environ/__init__.c
@@ -35,47 +35,55 @@
#include "py/runtime.h"
#include "shared-bindings/_environ/__init__.h"
-//| """Functions to manage environment variables from a .env file.
+//| """Functions to manage environment variables from a settings.toml file.
//|
-//| A subset of the CPython `_environ library `_. It does
-//| not support variables or double quotes.
+//| This library can read a subset of `toml files `_.
//|
-//| Keys and values may be put in single quotes.
-//| ``\`` and ``'`` are escaped by ``\`` in single quotes. Newlines can occur in quotes for multiline values.
-//| Comments start with ``#`` and apply for the rest of the line.
-//| A ``#`` immediately following an ``=`` is part of the value, not the start of a comment,
-//| and a ``#`` embedded in a value without whitespace will be part of that value.
-//| This corresponds to how assignments and comments work in most Unix shells.
+//| It is recommended to not use this module directly. Instead, retrieve string
+//| values using `os.getenv`.
//|
+//| Due to technical limitations it probably also accepts some files that are
+//| not valid TOML files; bugs of this nature are subject to change (i.e., be
+//| fixed) without the usual deprecation period for incompatible changes.
+//|
+//| Details of the format understood by this module:
+//| * the content is required to be in UTF-8 encoding
+//| * the supported data types are string and integer
+//| * only integers and basic strings are supported
+//| * only integers supported by strtol are supported (no 0o, no 0b, no
+//| underscores 1_000, 011 is 9, not 11)
+//| * In quoted strings, all standard eescape codes, including ``\\uxxxx``
+//| and ``\\Uxxxxxxxx``, are supported
+//| * only bare keys are supported
+//| * duplicate keys are not diagnosed.
+//| * comments are supported
+//| * only values from the "root table" can be retrieved (parsing ends when it
+//| encounters a line starting with [)
+//| * due to technical limitations, the content of multi-line
+//| strings can erroneously be parsed as a value.
//|
//| File format example:
//|
//| .. code-block::
//|
-//| key=value
-//| key2 = value2
-//| 'key3' = 'value with spaces'
+//| str_key="Hello world" # with trailing comment
+//| int_key = 7
+//| unicode_key="👨"
+//| unicode_key2="\\U0001f468" # same as above
+//| escape_codes="supported, including \\r\\n\\"\\\\"
//| # comment
-//| key4 = value3 # comment 2
-//| 'key5'=value4
-//| key=value5 # overrides the first one
-//| multiline = 'hello
-//| world
-//| how are you?'
-//| # The #'s below will be included in the value. They do not start a comment.
-//| key6=#value
-//| key7=abc#def
+//| [subtable]
+//| subvalue="cannot retrieve this using _environ or getenv"
//|
//| """
//|
//| import typing
//|
-//| def get_key(_environ_path: str, key_to_get: str) -> Optional[str]:
-//| """Get the value for the given key from the given .env file. If the key occurs multiple
-//| times in the file, then the last value will be returned.
+//| def get_key(_environ_path: str, key_to_get: str) -> Union[str, int, None]:
+//| """Get the value for the given key from the given .env file.
//|
-//| Returns None if the key isn't found or doesn't have a value."""
+//| Returns None if the key isn't found"""
//| ...
//|
STATIC mp_obj_t __environ_get_key(mp_obj_t path_in, mp_obj_t key_to_get_in) {