- The `table.lookup()` method now has an optional second argument which can be used to populate columns only the first time the record is created, see [Working with lookup tables](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-lookup-tables). ([339](https://github.com/simonw/sqlite-utils/issues/339))
- `sqlite-utils memory` now has a `--flatten` option for [flattening nested JSON objects](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-inserting-data-flatten) into separate columns, consistent with `sqlite-utils insert`. ([332](https://github.com/simonw/sqlite-utils/issues/332))
- `table.create_index(..., find_unique_name=True)` parameter, which finds an available name for the created index even if the default name has already been taken. This means that `index-foreign-keys` will work even if one of the indexes it tries to create clashes with an existing index name. ([335](https://github.com/simonw/sqlite-utils/issues/335))
- Added `py.typed` to the module, so [mypy](http://mypy-lang.org/) should now correctly pick up the type annotations. Thanks, Andreas Longo. ([#331](https://github.com/simonw/sqlite-utils/issues/331))
- Now depends on `python-dateutil` instead of depending on `dateutils`. Thanks, Denys Pavlov. ([324](https://github.com/simonw/sqlite-utils/issues/324))
- `table.create()` (see [Explicitly creating a table](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-explicit-create)) now handles `dict`, `list` and `tuple` types, mapping them to `TEXT` columns in SQLite so that they can be stored encoded as JSON. ([338](https://github.com/simonw/sqlite-utils/issues/338))
- Inserted data with square braces in the column names (for example a CSV file containing a `item[price]`) column now have the braces converted to underscores: `item_price_`. Previously such columns would be rejected with an error. ([329](https://github.com/simonw/sqlite-utils/issues/329))
- Now also tested against Python 3.10. ([330](https://github.com/simonw/sqlite-utils/pull/330))