  We consider an important generalization of the Steiner tree problem, the
\emph{Steiner forest problem}, in the Euclidean plane: the input is a multiset
$X \subseteq \mathbb{R}^2$, partitioned into $k$ color classes $C_1, C_2,
\ldots, C_k \subseteq X$. The goal is to find a minimum-cost Euclidean graph
$G$ such that every color class $C_i$ is connected in $G$. We study this
Steiner forest problem in the streaming setting, where the stream consists of
insertions and deletions of points to $X$. Each input point $x\in X$ arrives
with its color $\textsf{color}(x) \in [k]$, and as usual for dynamic geometric
streams, the input points are restricted to the discrete grid $\{0, \ldots,
\Delta\}^2$.
  We design a single-pass streaming algorithm that uses $\mathrm{poly}(k \cdot
\log\Delta)$ space and time, and estimates the cost of an optimal Steiner
forest solution within ratio arbitrarily close to the famous Euclidean Steiner
ratio $\alpha_2$ (currently $1.1547 \le \alpha_2 \le 1.214$). This
approximation guarantee matches the state-of-the-art bound for streaming
Steiner tree, i.e., when $k=1$, and it is a major open question to improve the
ratio to $1 + \epsilon$ even for this special case. Our approach relies on a
novel combination of streaming techniques, like sampling and linear sketching,
with the classical Arora-style dynamic-programming framework for geometric
optimization problems, which usually requires large memory and has so far not
been applied in the streaming setting.
  We complement our streaming algorithm for the Steiner forest problem with
simple arguments showing that any finite approximation requires $\Omega(k)$
bits of space.
