NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #5205 most downloaded on PyPI
Organize and query arbitrary Python objects as a tree — with clones, diffing, and graph export built in.
Last release 1 months ago
15 Aug 2026
Release timing varies
gaps range from 8 days to 1.5 years
Nearly every release is documented
notes for 16 of 16 stable releases
Nothing withdrawn
no release was ever pulled
5 years old
19 releases · first in 2021
One column per quarter.
feature/map by @mar10 in https://github.com/mar10/nutree/pull/23
Tree(..., check_dag=True) by @mar10 in https://github.com/mar10/nutree/pull/20Full Changelog: https://github.com/mar10/nutree/compare/v1.1.0...v1.2.0
BREAKING:
TypeError instead of ValueError when
parameters are missing or have the wrong type.MapperCallbackType to DotMapperCallbackTypeDEPRECATE: Tree.find() is deprecated, use Tree.find_first() instead."
DEPRECATE: Calling method {name}() by adding () to the attribute name via __getattr__ is deprecated.
This allowed calling simple methods from within repr=TEMPLATE parameter
e.g. repr="{node.path()}". Use repr=CALLBACK instead.
tree.copy() and tree.deepcopy() inherit the name by default (no longer 'Copy of ...')
tree[x] now also accepts Node instances.
x in tree now uses the same lookup logic as tree[x].
reversed(tree) now raises a TypError, since it didn't make sense.
Add method tree.sorted() returns a sorted copy.
Add tree.deepcopy(), so now we support copy.copy(tree) and copy.deepcopy(tree).
len(node) returns number of direct children.
However nodes are always truthy, even if they don't have children.
Add method node.parent_iterator().
Add option Tree(..., check_dag=True) to enforce/relax DAG compliance (default: true).
Add method tree.map(fn)
Support Python 3.14, 3.15
Use uv
Released 1.1.0 Changelog, Commit details.
Released 1.1.0
TypedTree.iter_by_type(). Use iterator(..., kind)instead.TypedTree.iterator(..., kind=ANY_KIND),
TypedNode.iterator(..., kind=ANY_KIND),
and TypedTree.count_descendants(leaves_only=False, kind=ANY_KIND)Released 1.0.0 Changelog, Commit details.
Released 1.0.0
Released 0.11.1 Changelog, Commit details.
Released 0.11.1
t0.diff(t1, ...) adds nodes from t1 when possible, so the new status is
used for modified nodes.t0.diff(t1, ...) marks both, source and target nodes, as modified if
applicable.Released 0.11.0 Changelog, Commit details.
Released 0.11.0
tree.diff(..., compare=True).DictWrapper supports comparision with ==.Released 0.10.0 Changelog, Commit details.
Released 0.10.0
kind parameter is now mandatory for add() and related methods.
kind=None is still allowed to use the default (inherit or 'child').shadow_attrs argument to forward_attrs.GenericNodeData to DictWrapper and remove support for attribut access.node.up() allows method chaining when adding nodes.tree = Tree[Animals]()
to create a type-aware container.Released 0.9.0 Changelog, Commit details.
Released 0.9.0
Tree.build_random_tree() (experimental).GenericNodeData as wrapper for dict data.Released 0.8.0 Changelog, Commit details.
Released 0.8.0
Tree.save() accepts a compression argument that will enable compression.
Tree.load() can detect if the input file has a compression header and will
decompress transparently.LEVEL_ORDER, LEVEL_ORDER_RTL, ZIGZAG, ZIGZAG_RTL.'lines32c', 'round43c', ...Released 0.7.1 Changelog, Commit details.
Released 0.7.1
key_map and value_map.tree.print(..., file=IO) argument.default_connector_style to DEFAULT_CONNECTOR_STYLEReleased 0.6.0 Changelog, Commit details.
Released 0.6.0
Tree(..., shadow_attrs=True).tree.load(PATH) / tree.save(PATH) use UTF-8 encoding.Tree.system_root as alias for Tree._root.Tree.get_toplevel_nodes() as alias for tree.children.Released 0.5.1 Changelog, Commit details.
Released 0.5.1
tree.to_dict() to tree.to_dict_list().tree.load() / tree.save() storage format.tree.load() / tree.save() accept path in addition to file objects.Released 0.5.0 Changelog, Commit details.
Released 0.5.0
tree.load() / tree.save() signature, and storage format.Released 0.4.0 Changelog, Commit details.
Released 0.4.0
node.move() -> node.move_to()tree.copy_to() and node.copy_to()tree.children propertyReleased 0.3.0 Changelog, Commit details.
Released 0.3.0
Released 0.2.0 Commit details.
Released 0.2.0 Commit details.
Released 0.1.0 Commit details.
Released 0.1.0 Commit details.
Released 0.0.1-a6 Commit details.
Released 0.0.1-a6 Commit details.
Released 0.0.1-a4 Commit details.
Released 0.0.1-a4 Commit details.
Released 0.0.1-a2 Commit details.
Released 0.0.1-a2 Commit details.
Your coding agent can read these notes before it upgrades. Set up the MCP server →