Project

Spiral

A small, visual tool for designing continuous-thrust orbit transfers — the slow, many-looped spirals that electric propulsion actually flies, where a clean two-burn arc is a fiction and the honest trajectory is a different animal.


What it is

Set two circular orbits, an optional plane change, and a thruster — its thrust, its efficiency, the mass it’s pushing — and Spiral shows you what the transfer costs and what it looks like: the delta-v, the months it takes, the propellant burned, and the actual path the spacecraft flies. It runs entirely in the browser, with nothing to install and nothing to keep alive.

Impulsive maneuvers — the two-burn Hohmann transfer, Lambert targeting, porkchop plots — are tooled to death. The interesting, under-served corner is continuous thrust: the low-thrust electric propulsion that flies Dawn, SMART-1, and most modern comsats, spiraling between orbits over hundreds or thousands of revolutions. It behaves nothing like a clean arc, and I wanted to make that legible.


The honest version of the physics

The first version cheated, politely. It used Edelbaum’s classic low-thrust equation — elegant, closed-form, and resting on the quiet assumption that the orbit stays circular the whole way. That’s only true in the limit of vanishingly small thrust spread over many revolutions. Continuous prograde thrust does not keep an orbit circular in general: it pumps up the far side, eccentricity grows, and the arrival is not circular at all.

So I rebuilt it around a real numerical propagator. It integrates the actual equations of motion step by step, with a guidance law — a Lyapunov / Q-law controller — that steers the osculating orbit toward the target: raise the altitude, null the eccentricity, turn the plane. That controller is what guarantees a circular orbit at the start and at the end. Everything in between is whatever the real motion is, eccentric and all.

A quiet payoff: the thrust heading falls out of the guidance rather than being assumed. Prograde to climb, canted out of the plane for a plane change — and the cant is largest up high, where turning the plane is cheap. It’s the “where do I actually point” answer the closed form hides.


What it shows you

Drawn over a to-scale Earth: a sensible transfer spirals out and settles into a circular orbit, in green, its coils visibly a little eccentric rather than perfect circles. Push the thrust too high and it turns red — the eccentricity runs away, the orbit overshoots and escapes, and the tool says so plainly. That failure isn’t a flaw; it’s the physics, and it’s the most useful thing the tool teaches.

Press play and the spacecraft flies the route. A marker traces the spiral in real time while the orbital elements — radius, semi-major axis, eccentricity, inclination — tick along beside it, and an arrow shows the thrust heading, the direction the vehicle is actually pointing, swinging as the guidance works. Scrub to any moment and read the state. Watching the eccentricity climb and then get nulled back toward zero is the whole story of a low-thrust transfer in a single gesture.

The lessons come for free. A real electric LEO-to-GEO transfer isn’t a two-burn hop — it’s about seventeen hundred revolutions over months, a dense spiral filling the whole region. A clean, few-loop circular arrival is a fiction; circularizing is inherently a slow, many-revolution affair. And plane changes are expensive, more so the faster you’re moving, which is exactly why you do them high and slow.

And there’s a switch for the real planet. Flip on J2 — the perturbation from Earth’s equatorial bulge — and the orbit plane begins to precess, its line of nodes walking steadily around over the hundreds of revolutions, exactly the effect that dominates real low-orbit mission design. It’s off by default, so you can watch the ideal two-body spiral first and then turn on what the actual, oblate Earth does to it.


Does it match reality?

Yes — and it’s checked automatically, on every build, against the numbers mission designers actually use. In the low-thrust limit the propagator has to reproduce Edelbaum’s equations, which are themselves calibrated to flown electric-propulsion missions.

Validation

Low-thrust LEO→GEO comes out at 4.77 km/s against the textbook 4.59; add a 28.5° plane change and it’s 6.13 against Edelbaum’s 5.90 — both within about four percent of optimal, the expected accuracy for a real-time feedback law. The transfers land in the right regime, too: roughly seventeen hundred revolutions over months, matching real all-electric orbit raising, with interplanetary transfers in the right delta-v range, Dawn-class. All of it runs as tests that fail the build if the physics drifts.


Under the hood

It’s deliberately small and self-contained. TypeScript, integrated with a fourth-order Runge–Kutta scheme stepped by angle so it stays stable through fast periapsis passages; the guidance is a Q-law that measures each orbital element against the fastest rate it could be changed, which is what keeps the steering near-optimal. The drawn path is sampled adaptively, so it stays smooth whether the transfer is a dozen revolutions or two thousand. Earth is drawn from real coastline data and held to scale with the orbits. A couple dozen tests, the validation among them.

No backend

The whole simulation runs in your browser — there’s no server doing the math, which means it costs nothing to run and there’s nothing to maintain. You can export the full trajectory, too — position, velocity, and orbital elements over time — as a CSV.


Try it

It’s live and free at spiral.erikevenson.net. It’s a tool for building intuition, not a flight planner — circle-to-circle, constant thrust, two-body by default, with an optional J2 oblateness term — but the numbers are honest and the trajectory is real.