A Newick tree parser
npm install newick
A lightweight and TypeScript-friendly library to parse, manipulate, and serialize trees in the Newick format. Includes an OOP interface for clean and composable workflows.
- Parse and serialize Newick trees
- Traverse and map with callbacks
- Normalize branch lengths
- Compare and clone trees
- Type-safe API (written in TypeScript)
---
``bash`
npm install newick
Or via yarn:
`bash`
yarn add newick
`ts
import { Newick } from 'newick';
const input = '(A:0.1,B:0.2)Root;';
const tree = new Newick(input);
console.log(tree.getRoot()); // "Root"
tree.map(node => {
node.name = node.name?.toUpperCase();
return node;
});
console.log(tree.serialize()); // "(A:0.1,B:0.2)ROOT"
console.log(tree.toString()); // Same as serialize
`
#### ๐ณ Newick class
`ts`
new Newick(data: string | NewickNode)Newick
Creates a new instance from a Newick string or a tree object.
`ts`
getRoot(): string | nullnull
Returns the name of the root node, or if not present.
`ts`
dfs(callback?: (node: NewickNode) => NewickNode): Recordcallback
Performs a depth-first traversal of the tree.
- (optional): applied to each node.
- Returns a map of node names to branch lengths.
`ts`
map(callback: (node: NewickNode) => NewickNode): void
Applies a callback to each node in-place, mutating the tree.
`ts`
normalize(): NewickNode
Normalizes all branch lengths so they sum to 1. Returns the normalized tree.
`ts`
serialize(): string
Serializes the tree to a valid Newick-format string without a trailing semicolon.
`ts`
toString(): stringserialize()
Alias for .
`ts`
clone(): Newick
Creates a deep clone of the current tree.
`ts`
equal(anotherTree: Newick): booleantrue
Returns if another Newick instance is structurally equal (case-insensitive).
`ts`
parse(input: string): NewickNodeNewickNode
Parses a Newick string into a tree object.
bash
npm test
``