Kerbalist

Kerbalist

Interplanetary window & ΔV calculator · KSP2 Redux Beta system
UT
T+0y,0d,00:00:00

Sync UT with a running KSP2

① Local bridge (recommended)
Run a small companion script (e.g. using the kRPC2 mod) that reads live UT from KSP2 and serves it on localhost. This page polls it every 2s. Works while flying — no manual saving needed.
② Watch save file
No mod required. Pick your KSP2 persistent save file — this page re-reads it every few seconds and syncs UT whenever the game autosaves. Chrome/Edge only.
Not connected — UT is manual / warp-driven.
Map
Controls
ORIGIN — Kerbin
DEST — Duna
Controls
Controls
DragRotate orbit
Shift+Drag / Mid-Click+DragPan view
ScrollZoom in / out
Double ClickCenter view
RReset view
KToggle controls
Click planetBody info
Right-clickContext menu (origin, dest, zoom)
Zoom—
Warp—
Tilt— Rot—
Changelog:
v3.7.0
Submit bug report
Current phase Required phase Transfer arc Departure ghost Arrival ghost Gravity assist
Zoom in on planet
Set as Origin
Set as Destination
Clear Origin
Clear Destination
Reset Zoom
Show Body Info

Kerbalist Changelog

Changelog

[3.7.0] - 2026-09-25

Added

  • Bug Report Feature: New 'Submit Bug Report' button in the bottom-left corner (next to the changelog version badge) opens a modal form for submitting bug reports directly to GitHub. Users can describe the bug, attach a screenshot (PNG/JPG/GIF, max 5MB), and the issue opens pre-filled on GitHub with all context included. No backend required — entirely client-side.
  • Screenshot Support in Bug Reports: File upload with both click-to-browse and drag-and-drop support. Screenshots are converted to base64 and embedded in the GitHub issue body as inline markdown images so developers see the bug context immediately.
  • HUD Layout Reorganization: Repositioned all on-map HUD elements to eliminate overlap with the sidebar and improve visual hierarchy:
    • Top-left: Origin/Destination dropdowns (new HUD panel, fully synced with sidebar)
    • Top-right: Keyboard shortcuts and warp controls
    • Middle-right: Camera HUD (zoom %, tilt, rotation, focus)
    • Bottom-right: Zoom controls (+/− buttons, reset), Map legend
    • All elements properly spaced and no longer hidden behind the sidebar

Changed

  • Sidebar Origin/Dest Dropdowns: Now fully synced with new top-left HUD dropdowns. Changes in either location update both in real time. Swap button (⇄) works identically in both places.
  • HUD Styling: Added orange color variable (--orange: #ff8c3c) and applied consistent styling across all new HUD elements to match existing design language.

Technical Details

  • Bug report form validates file type (must be image/*) and size (max 5MB) before upload
  • Screenshots converted to data URIs and embedded in GitHub issue markdown: ![filename](data:image/png;base64,...)
  • HUD positioning changed from sidebar-width-offset calculations to flush-edge positioning (right: 16px, left: 16px)
  • Origin/Dest HUD dropdowns synced via JavaScript event listeners

[3.6.6] - 2026-09-22

Fixed

  • Map View Off-Center (Not a Camera Bug): .map-wrap had position: fixed; inset: 0; — almost certainly a leftover from the v3.6.5 UI relocation work — which made it span the entire browser window instead of just the space left after the sidebar. The 3D scene itself was rendering correctly centered on its own camera target; what was visible was only the left portion of a full-window-wide canvas, with the sidebar painting over the rest, so the Sun and planets appeared shifted well right of the actual center of the visible map area. Restored .map-wrap to position: relative; flex: 1 1 auto; min-width: 0; so it's a normal flex child of .main again, sized to the space actually available. All other map overlays (.zoom-controls, .legend, #labelContainer, .map-hud) already used position: absolute and re-anchor correctly now that their positioned ancestor is sized properly again — no other changes were needed.

[3.6.5] - 2026-09-16

Added

  • Live Camera HUD: Added a subtle, semi-transparent real-time info HUD displaying camera position (X, Y, Z), zoom radius, focused celestial body, and orbital time warp level.
  • Orbital Ghost Planet Halos: Added faint ghost spheres (sized matching departure ghost spheres, radius 6.5) of matching planet color that fade out when zooming in close (97% zoom, threshold camR < 75) or when focusing near a body.

Changed

  • UI Button Scaling & Layout:
    • Placed "Set Time" and "Live Sync" buttons side-by-side on a single row across desktop and mobile layouts.
    • Relocated camera control buttons upward so they no longer overlap with the map legend.
    • Scaled top-left origin/destination chips, top-right shortcuts bubble, and camera HUD size by +25%.
    • Scaled map legend size by +15%.

[3.6.4] - 2026-09-15

Fixed

  • Sidebar Rendering Below the Map on Desktop: A stray extra closing <div> left over from an earlier edit (immediately after the version badge) was silently closing .bottom-left-bar, then cascading to prematurely close .map-wrap and .main one element too early. The net effect: the sidebar ended up as a sibling of .main instead of nested inside it, so it rendered full-width below the map instead of beside it on desktop widths. This was a pure HTML nesting bug, not a CSS/media-query issue — the responsive breakpoints themselves were never at fault.
  • Orbital Drift Root Cause Fix Restored: An orbital calibration fix from earlier work had gone missing from this branch and is restored here. The in-game calendar uses 425 days per year, not 426 as previously assumed — a one-day-per-year discrepancy that compounds with every year elapsed, which is why the long-standing "orbits drift after 1-2 years" issue was small at first and grew steadily worse over time. YEAR_DAYS corrected from 426 to 425, and m0Deg recalibrated for all six planets using direct in-game Mean Anomaly readings taken ~15 years apart, cross-validated to within 0.01° per planet. Orbital periods and orientDeg values were independently confirmed already correct (via Kepler's third law and self-consistent Argument-of-Periapsis/LAN readings) and did not need to change. New m0Deg values: Moho 124.90, Eve 314.44, Duna 348.60, Dres 110.74, Jool 334.08, Eeloo 158.80 (previously 108.64 / 165.54 / 350.99 / 116.10 / 339.25 / 163.48).

Known Issues

  • LAN Not Modeled Separately: The 3D orbit renderer combines Argument of Periapsis and Longitude of Ascending Node into a single orientDeg value and applies inclination as a simple tilt, which is exact only when LAN is 0. Real LAN values are nonzero for every planet, so there's a small residual (constant, not growing over time) out-of-plane position error, largest for higher-inclination bodies like Moho (7°) and Eeloo (6.15°), negligible for Jool (1.3°). A fully correct fix would track LAN separately with proper 3-axis rotation.
  • kRPC2 Dependency Mod Doesn't Work: The kRPC2 dependency mod on the KSP2 side does not work yet — the Python bridge (kerbalist_bridge.py) cannot connect to KSP2 because the required server-side mod is not functional.
  • Map Does Not Render on Mobile: The 3D map canvas fails to initialize or render on mobile browsers (both iOS Safari and Android Chrome). The sidebar controls and all non-map UI elements still work correctly.

[3.6.3] - 2026-09-15

Changed

  • Map Legend Visual Updates: Current phase and required phase indicators now use lines instead of dots to match their on-map representation. Required phase is a dashed line, transfer arc is a dashed green line, and the arrival ghost dot is joined by a green dot for the departure ghost.
  • Controls Documentation: Added right-click context menu to the in-app controls bubble and README Map Controls table.

[3.6.2] - 2026-09-15

Fixed

  • Right-Click Context Menu No Longer Appears on Drag: Right-clicking and immediately dragging the mouse no longer shows the context menu. The menu now only appears on a clean right-click release, matching standard OS behavior.

[3.6.1] - 2026-09-14

Fixed

  • Double-Click Body Info Sync: Double-clicking a planet or moon label on the map now updates the Body Info panel to show the selected body's data and switches to the Body Info tab. Previously the camera would zoom to the body but the info panel remained showing the previously selected body.

[3.6] - 2026-09-13

Added

  • Full Mobile Responsive Design: Kerbalist now works great on phones and tablets. On small screens, a Map / Controls toggle lets you view the 3D map or the sidebar controls — whichever you need. The map stays fully interactive with touch controls (1-finger rotate, 2-finger zoom & pan). Sidebar elements are touch-friendly with larger tap targets, compact layouts, and smooth scrolling.

[3.5.6] - 2026-09-13

Fixed

  • Moon Transfer Visualization Bug (Critical): Fixed a coordinate double-counting bug where transfers involving a moon rendered ghost arrival markers, dashed lines, transfer arcs, and return lines in incorrect positions—often roughly twice as far from the sun. Planet-to-planet transfers were unaffected.
  • Moon Camera Lock: Fixed moon tracking when double-clicking or using right-click "Zoom in" context menu action. Camera-follow and context-menu logic now check both planet and moon meshes.
  • Orbit Line Polygon Count Increased: Planet orbit lines raised from 1200 to 4000 segments and moon lines from 600 to 2000, preventing visible drift at extreme zoom.
  • Drast Rendering Fused With Dres: Moon orbit display radius now clamps to 1.3× its parent planet's physical radius, keeping Drast and similar moons clearly outside their parent.
  • Deeper Zoom Range: Lowered minimum camera distance from 0.02 to 0.012 world units, adding roughly 4–5 zoom-in steps.

Technical Details

  • Root cause: moonLocalPosition() returns a moon's full world-space position (parent position already added internally), but bodyWorldPositionAt() was adding the parent's position a second time on top of that result.
  • bodyWorldPositionAt() now calls moonLocalPosition() directly for moons without re-adding the parent offset.
  • This single fix corrects every visualization that depends on bodyWorldPositionAt() for a moon: ghost arrival marker, dashed arrival line, transfer arc, and return trip overlay lines.
  • updateMap()'s per-frame camera-follow check and the context menu's zoom-in handler now resolve the focused body via planetMeshes[focusedPlanet] || moonMeshes[focusedPlanet].
  • moonOrbitDisplayRadius() now returns Math.max(rawOrbitRadius, parentPhysicalRadius * 1.3), and the Dres ring's inner-radius calculation now reuses this same clamped function instead of its own separate clamp.

Known Issues

  • Orbital Drift After 1-2 Years: Planetary orbits begin to drift noticeably after approximately 1-2 in-game years from the reference UT.
  • kRPC2 Dependency Mod Doesn't Work: The kRPC2 dependency mod on the KSP2 side does not work yet — the Python bridge (kerbalist_bridge.py) cannot connect to KSP2 because the required server-side mod is not functional.

[3.5.5] - 2026-09-12

Fixed

  • Moon Transfer Visualization Bug (Critical): Fixed a coordinate double-counting bug where any transfer involving a moon as origin or destination rendered the ghost arrival marker, dashed arrival line, transfer arc, and return trip lines in completely wrong positions—often roughly twice as far from the sun as they should be. Planet-to-planet transfers were unaffected.
  • Moon Camera Lock: Double-clicking a moon or using the right-click "Zoom in" context menu action would set the camera focus target but never actually track it. The per-frame camera-follow logic and the context-menu zoom handler only looked up the target in the planet mesh dictionary, not the moon mesh dictionary. Both now check both, so locking onto a moon works the same as locking onto a planet.
  • Orbit Line Polygon Count Increased Further: Planets and moons could still visibly drift off their orbit lines at extreme zoom even after the previous segment-count increase. Planet orbit lines raised from 1200 to 4000 segments and moon orbit lines from 600 to 2000 segments for a smooth curve across the full zoom range.
  • Drast Rendering Fused With Dres: Drast's real semi-major axis in the KSP2 Redux moon data (43,400 m) is smaller than Dres's own physical radius, so Drast's sphere and label were rendering fused inside Dres. Moon orbit display radius is now clamped to stay outside 1.3× its parent planet's physical radius, so Drast (or any similarly affected moon) always renders clearly outside its parent.
  • Deeper Zoom Range: Lowered the minimum camera distance from 0.02 to 0.012 world units, allowing roughly 4-5 additional scroll-wheel zoom-in steps beyond the previous limit.

Technical Details

  • Root cause: moonLocalPosition() returns a moon's full world-space position (parent position already added internally), but bodyWorldPositionAt() was adding the parent's position a second time on top of that result.
  • bodyWorldPositionAt() now calls moonLocalPosition() directly for moons without re-adding the parent offset.
  • This single fix corrects every visualization that depends on bodyWorldPositionAt() for a moon: ghost arrival marker, dashed arrival line, transfer arc, and return trip overlay lines.
  • updateMap()'s per-frame camera-follow check and the context menu's zoom-in handler now resolve the focused body via planetMeshes[focusedPlanet] || moonMeshes[focusedPlanet].
  • moonOrbitDisplayRadius() now returns Math.max(rawOrbitRadius, parentPhysicalRadius * 1.3), and the Dres ring's inner-radius calculation now reuses this same clamped function instead of its own separate clamp.

Known Issues

  • Orbital Drift After 1-2 Years: Planetary orbits begin to drift noticeably after approximately 1-2 in-game years from the reference UT.
  • kRPC2 Dependency Mod Doesn't Work: The kRPC2 dependency mod on the KSP2 side does not work yet — the Python bridge (kerbalist_bridge.py) cannot connect to KSP2 because the required server-side mod is not functional.

[3.5.4] - 2026-09-12

Fixed

  • Camera Focus Lock Persistence: Double-clicking a body now locks the camera on it permanently until the user explicitly pans away (Shift+drag or middle-click+drag) or resets the view. Previously the focus was lost immediately after releasing the mouse button.
  • Instant Camera Centering: Camera now visually centers on a body immediately upon double-click without requiring mouse movement. Added continuous updateCamera() calls to the render loop to keep focused bodies centered as they move.
  • Camera Reset Behavior: Pressing R to reset view now properly clears the focused-planet lock, so the camera returns to full-system view and doesn't get pulled back to the last selected body.
  • Moon Label Visibility Threshold: Moon labels now appear 50% closer to the camera (threshold reduced from camR > 150 to camR > 75), making them visible at wider zoom ranges without requiring extreme zoom.
  • Orbit Line Smoothness at Zoom: Planet orbit lines increased from 220 to 1200 segments and moon orbit lines increased from 120 to 600 segments. Bodies now stay perfectly aligned with their orbits even at maximum zoom without visible polygon edges.
  • Camera Lock Release on Pan: When the user pans with Shift+drag or middle-click+drag, the camera focus lock is properly released after a brief grace period (200ms) to prevent accidental unlocking from double-click mouse settling.

Technical Details

  • Added lastDoubleClickTime tracking to prevent clearing focusedPlanet immediately after a double-click.
  • updateCamera() now called every frame in the render loop rather than only on mouse input, ensuring focused bodies stay centered.
  • Mousemove handler checks time since last double-click before clearing focus on pan detection, allowing ~200ms grace period.
  • Orbit line tessellation increased to maintain visual smoothness across the full zoom range (0.02 to 2400 world units).

Known Issues

  • Orbital Drift After 1-2 Years: Planetary orbits begin to drift noticeably after approximately 1-2 in-game years from the reference UT.

[3.5.0] - 2026-09-06

Added

  • Full Label Interactivity: Planet and moon names are now fully interactive and much larger (16px, bold). Click to set origin, double-click to lock camera, right-click for context menu. Works identically for planets and moons.
  • Middle-Click Panning: Pan the map with middle-click + drag (equivalent to Shift+drag). Adds an alternative to shift-dragging for camera panning.

Fixed

  • Body Selection System: Fixed broken setOrigin/setDestination functions. All body selection now works directly via the origin/destination select elements with proper change event firing.
  • Label Positioning: Removed CSS transitions that caused labels to lag while panning. Labels now snap instantly to their correct positions, only animating color/glow on hover.
  • Clickable Label Container: Fixed pointer-events blocking—label container is now pointer-events: none with individual labels at pointer-events: auto, so labels are clickable but canvas can still be panned.
  • World-Space Orbit Lines & Bodies: Restructured moon orbits and bodies to use true world-space positioning instead of being nested under planet meshes. Planets and moons now sit exactly on their orbit lines. Orbit lines properly track parent planet positions each frame.
  • Camera Tracking: Camera now properly locks to and follows focused bodies as they orbit, keeping them in view even as the system evolves.

Technical Details

  • Moon orbits and bodies removed from planet mesh hierarchy; both now added to scene root with world-space positioning.
  • moonLocalPosition() now returns full world coordinates including parent planet's position.
  • updateMap() positions moon orbit lines at parent planet's world location each frame.
  • focusedPlanet mechanism updated to track camera target continuously.

Known Issues

  • Orbital Drift After 1-2 Years: Planetary orbits begin to drift noticeably after approximately 1-2 in-game years from the reference UT.

[3.0 - 3.4 Consolidated] - 2026-09-06

Major Changes

Scaling & Coordinate System (v3.0)

  • Map Rewritten to Real KSP2 Proportions: Single unified physical scale (world units per meter) replaces all custom tuning. All distances—heliocentric and moon-relative—use the same linear scale. Deleted "inner system expansion" (32% Duna inflation) and per-planet moon-orbit tuning buckets.
  • Raw System View: Moons appear tightly clustered at full-system zoom (correct—that's what the real proportions look like). Zoom in to resolve them at accurate scale.

Camera & Zoom (v3.1 & v3.4)

  • Zoom-Based Scale Transition (LOD): Map fades between exaggerated overview (far) and true-to-scale physical view (near), exactly like KSP2. Smooth blend as camera approaches a planet.
  • Deeper Zoom Range: Camera min distance 30 → 0.02 units; near plane 0.5 → 0.0005. Logarithmic depth buffer for stable rendering across the huge range.
  • Camera Lock to Focused Body: Zoom into a planet or use context menu to lock camera. Camera stays locked to body's center as it orbits. Reset zoom clears lock.

Interactivity (v3.2 - v3.4)

  • Moon Label Visibility: Moon labels hidden at far zoom (they cluster on planet); fade in as you zoom close.
  • Right-Click Context Menu: Right-click planet/moon for menu with zoom, set origin/destination, clear, reset, show info options.
  • Click Helper Spheres: Invisible collision spheres (10× planet, 5× moon) make bodies much easier to select without zooming extremely close.

Orbital Data (v2.7 - v2.9)

  • Orbital Epoch Synchronization: All planet m0Deg values synchronized to KSP2 game state at reference UT (T+6y,59d,04:16:57). Perfect in-game alignment.
  • Corrected Orbital Mechanics (v2.8-v2.9): Fixed time base (21600s/day, not 86400), proper phase-angle interpretation relative to Kerbin, and full Kepler inversion accounting for eccentricity and argument of periapsis. All planets reproduce observed in-game phase angles exactly.
  • Jool Landing Removed: Jool is a gas giant; removed misleading landing Δv estimate.
  • Moon Data: All moon gravitational parameters (μ) added for accurate moon insertion/landing calculations.

Technical Summary

v3.0-3.4 represents a major rewrite to match KSP2's true system proportions and interactivity model. Core architecture now separates exaggerated overview (for usability at full-system zoom) from true-scale near-view (for accurate planning when zoomed in). All interactive elements (labels, right-click, camera focus) now work reliably on both planets and moons. Orbital epoch synchronization ensures Kerbalist and KSP2 are in sync for mission planning.

Known Issues

  • Orbital Drift After 1-2 Years: Planetary orbits begin to drift noticeably after approximately 1-2 in-game years from the reference UT.
  • Drast Inside Dres: Drast's semi-major axis (43,400 m) is smaller than Dres's own physical radius (138,000 m) in the current KSP2 Redux moon data, placing its orbit inside the planet itself—almost certainly a units slip (likely meant to be 43,400 km). Left unchanged since the moon data was intentionally kept as-is; the Dres ring rendering is clamped to stay visually outside Dres regardless.

[2.9] - 2026-09-06

Fixed

  • Orbital Epoch Sync Corrected Again (v2.8 fix still incomplete): The v2.8 recalculation fixed the time base and phase-angle interpretation but still assumed mean anomaly equals true anomaly and ignored each planet's argument of periapsis (orientDeg). This is only valid for near-circular orbits with zero orientation offset. Moho (e=0.2), Dres (e=0.145), and Eeloo (e=0.26) are all significantly eccentric, and every outer planet has a non-zero orientDeg, so the previous values were still wrong for these bodies.
  • Full Kepler Inversion: m0Deg is now derived using the same math the app itself uses to render positions (theta = trueAnomaly + orientDeg, with true anomaly related to mean anomaly through the eccentric anomaly via Kepler's equation). Verified numerically against the app's own stateAt() function - all six planets reproduce their observed in-game phase angles exactly.
  • Jool Landing Δv Removed: Jool is a gas giant with no solid surface - landing there is not a real maneuver. The reference "Landing @ Jool" line (previously an arbitrary, misleadingly small ~2,400 m/s estimate) has been removed rather than guessed at.

Technical Details

Verification: All six planets, when run through the app's own eccentric-orbit position formula, reproduce their observed KSP2 Target-panel phase angles to within 0.01°.

Known Issues

  • Orbital Drift After 1-2 Years: Planetary orbits begin to drift noticeably after approximately 1-2 in-game years from the reference UT.

[2.8] - 2026-09-06

Fixed

  • Orbital Epoch Sync Corrected (v2.7 fix was wrong): The v2.7 synchronization used two incorrect assumptions: it converted UT using 24-hour days instead of KSP2's actual 6-hour Kerbin day, and it treated observed "Phase angle" readings (which are relative to Kerbin) as if they were each planet's absolute heliocentric angle. Both errors have been corrected.
  • Recalculated m0Deg Values: All six planets recalculated using the correct 21,600s/day time base and proper phase-angle-relative-to-Kerbin interpretation, then verified against the in-game Target panel (Eeloo phase angle now matches -16.90° exactly at the reference UT).
  • Negative Landing Δv Bug: Fixed moon landing Δv reference estimate occasionally returning a negative value for small airless moons (e.g. Gilly), where low-orbit and surface velocities are nearly identical. Landing estimate now scales from low-orbit velocity directly instead of a velocity difference.

Technical Details

Verification: Computed phase angle (Eeloo relative to Kerbin) at the reference UT now equals -16.90°, matching the KSP2 Target panel reading exactly.

[2.7] - 2026-09-05

Added

  • Orbital Epoch Synchronization: Synchronized all planet orbital mean anomalies (m0Deg) to match actual KSP2 game state at reference time T+006y 059d 04:16:43 (225,951,403 seconds). Enables precise transfer window planning that matches in-game opportunities.

Changed

  • Planetary m0Deg Values: Updated all planet mean anomalies based on observed orbital positions from KSP2 Redux system:
  • Moho: 180° → 215.09°
  • Eve: 180° → 327.07°
  • Duna: 180° → 329.68°
  • Dres: 180° → 111.81°
  • Jool: 6° → 294.43°
  • Eeloo: 180° → 3.04°

Fixed

  • Orbital Position Mismatch: Fixed issue where Kerbalist orbital calculations didn't match KSP2 game state at the same UT. All planets now position correctly relative to KSP2.
  • Transfer Window Accuracy: Transfer window calculations now align with actual in-game opportunities due to corrected orbital epochs.

Technical Details

Synchronization Method:

  • Calculated mean motion for each planet: n = 2π / period
  • Applied Kepler equation inverse: m0 = θ_observed - (n × UT)
  • All values calibrated to KSP2 Redux system orbital data
  • Reference UT: T+006y 059d 04:16:43 (from user observation)

Result:

When Kerbalist is set to the reference UT, all planets appear at their actual in-game positions:

  • Moho: observed 120.30° ✓
  • Eve: observed -54.20° (327.07° normalized) ✓
  • Duna: observed -3.00° (329.68° normalized) ✓
  • Dres: observed -39.40° (111.81° corrected) ✓
  • Jool: observed -3.80° (294.43° normalized) ✓
  • Eeloo: observed -16.90° (3.04° normalized) ✓

Benefits

✓ Perfect KSP2 alignment: Planet positions match game state at reference UT

✓ Accurate mission planning: Transfer calculations correspond to real in-game windows

✓ Consistent tool-game experience: Plan in Kerbalist, execute in KSP2, arrive as predicted

✓ Simplified workflow: No more manual adjustment for orbital desynchronization

User Impact

  • Existing missions: May need adjustment if planned at different UT than v2.7 reference
  • Future missions: Can be precisely planned in Kerbalist and executed in KSP2
  • Accuracy: ±0.1° or better depending on orbital period

[2.6] - 2026-09-05

Added

  • KSP2 Moon Gravitational Parameters: Added actual KSP2 gravitational parameters (mu values) to all moon definitions in RAW_MOONS data. Ensures calculations use true KSP2 physics instead of derived values.
  • KSP2 Redux Dres Moon System: Confirmed Drast and Beyl remain as Dres moons with proper KSP2 Redux system gravitational parameters (Drast: 3.7392×10⁶ m³/s², Beyl: 4.8695448×10⁷ m³/s²).

Changed

  • Orbital Data Architecture: Switched from modified/scaled orbital data to using original unmodified KSP2 orbital parameters for all physics calculations. Map view scaling now applies only to Three.js visualization layer, not to calculation data.
  • Moon Insertion Calculation: Simplified to use actual orbital velocity formula with proper mu values: lowOrbitVelocity × 1.2 (velocity matching + circularization). Removed complex compensation factors.
  • Moon Landing Calculation: Changed to orbital velocity difference approach: (lowOrbitVelocity - surfaceVelocity) × 1.5. Uses actual moon gravitational parameters instead of escape velocity estimates.
  • getMoonMu() Function: Updated to prioritize pre-defined KSP2 mu values from RAW_MOONS data, falling back only when necessary.

Fixed

  • Small Moon Δv Budgets: Fixed catastrophically incorrect values for small moons (e.g., Kerbin → Gilly showed 26,750 m/s insertion). Root cause: missing moon mu values forced incorrect Kepler-law derivation. Now uses actual KSP2 gravitational parameters.
  • Moon Orbital Mechanics: All moon insertion and landing calculations now use correct orbital velocity formulas based on accurate gravitational parameters rather than compensation multipliers.
  • Physics-Visualization Separation: Cleanly separated orbital data (unchanged KSP2 values) from visualization scaling (Three.js camera/viewport). Calculations now use pure, unmodified KSP2 data.

Technical Details

Moon Gravitational Parameters (added to all moons):

  • Gilly: 2.4868349×10⁹ m³/s²
  • Mun: 6.5026800×10¹⁰ m³/s²
  • Minmus: 1.7658000×10⁹ m³/s²
  • Ike: 1.8568369×10¹⁰ m³/s²
  • Drast: 3.7392×10⁶ m³/s² (KSP2 Redux)
  • Beyl: 4.8695448×10⁷ m³/s² (KSP2 Redux)
  • Laythe: 1.962000×10¹² m³/s²
  • Vall: 2.2476×10¹⁰ m³/s²
  • Tylo: 2.8253×10¹² m³/s²
  • Bop: 1.221×10⁹ m³/s²
  • Pol: 7.21×10⁸ m³/s²

Architecture Improvements:

  • Original orbital semi-major axes, periods, radii, eccentricities: unchanged from KSP2
  • Physics calculations: use unmodified KSP2 data directly
  • Map view: Three.js scaling applied only to visualization (doesn't affect math)
  • Result: All calculations now match KSP2 game values without compensation factors

Backwards Compatibility

All changes are fully backwards compatible:

  • Existing features work unchanged
  • Map visual appearance and zoom level preserved
  • Only difference: moon Δv calculations now accurate instead of using compensation multipliers
  • No user action required

[2.5] - 2026-09-05

Added

  • Porkchop Plot User Guide: New informational card above the porkchop plot explaining what it shows, how to read axes/colors, how to identify good transfer windows, and step-by-step workflow for mission planning. Includes detailed instruction on clicking cells to inspect specific transfer opportunities.
  • Landing Δv Reference Estimates: Added "Landing @ [destination]" line item showing estimated powered descent cost for destination (planets and moons). Displayed as reference value only, depends on approach geometry.
  • getMoonMu() Helper Function: New utility function calculating moon gravitational parameters from orbital data, with fallback to known KSP2 moon values for accurate moon insertion and landing cost estimates.

Changed

  • Moon Insertion & Landing Display: Changed from auto-add-to-total approach to "reference values only" display. Moon insertion and landing Δv now shown as separate informational line items, not included in main transfer total. Updated all related UI notes to clarify this distinction.
  • Total Δv Definition: Redefined total Δv to show heliocentric transfer cost only (ejection + capture), making it clear what's needed for the interplanetary portion. Moon insertion and landing shown separately as rough estimates that vary with approach geometry.
  • Moon Insertion Formula: Simplified from 1.5 × sqrt(μ / r_orbit) to 0.3 × escape_velocity, preventing unrealistic values for small moons.
  • Landing Formula: Simplified to 0.4 × escape_velocity (moons) and 0.5 × escape_velocity (planets), providing more realistic estimates across gravity variations.
  • Porkchop Plot Display: Changed colors to show heliocentric transfer Δv only; moon insertion and landing no longer inflate the grid values. Updated note to clarify reference values are shown separately.
  • Return Trip Budgeting: Updated to use heliocentric transfer cost only, removing inflated moon insertion/landing costs from round-trip totals.
  • Big Number Label: Changed main total display from "m/s total" to "m/s interplanetary transfer" to clarify it's not the complete mission budget.

Fixed

  • Outrageous Moon Δv Budgets: Fixed bug where moon destinations showed unrealistic Δv (e.g., Kerbin → Bop showed 141,336 m/s). Now shows ~3,200 m/s to Bop with ~150 m/s insertion as reference.
  • Zero Moon Insertion Δv: Fixed moon insertion always showing 0 m/s by implementing proper gravitational parameter calculation via getMoonMu() helper.
  • Porkchop Plot Inflation: Fixed porkchop grid colors being inflated by landing costs, which obscured actual transfer window valleys and made visual comparison unreliable.
  • Return Budget Inflation: Fixed return-to-Kerbin budgets including moon insertion/landing costs from outbound journey, inflating realistic estimates.
  • Moon Insertion Reference Accuracy: Improved accuracy of moon insertion estimates by deriving from escape velocity rather than orbital velocity, better reflecting actual circularization costs.

Technical Details

  • Orbit Insertion Calculation: Now uses moonEscapeVelocity = sqrt(2 × μ_moon / moonRadius) with 0.3× factor for insertion, 0.4× for moon landing.
  • Planet Landing Calculation: Uses planetEscapeVelocity = sqrt(2 × μ_planet / planetRadius) with 0.5× factor for atmospheric/gravity losses.
  • Transfer Total Isolation: Separated heliocentric transfer total from local maneuver estimates in both calculation and display layers.
  • Validation Logic: Maintains moon-friendly validation from v2.4 while fixing resulting display issues.

[2.4] - 2026-08-28

Added

  • Moon Transfer Δv Budgeting: Fixed moon destination transfers showing identical Δv budget to parent planet by adding automatic moon orbit insertion cost calculation (~1.5x the moon's circular orbital velocity). Now correctly displays: ejection burn @ origin, capture burn @ parent planet, and moon orbit insertion @ destination with separate line items in total budget.
  • Moon Insertion Cost Display: Added dedicated line item "Moon orbit insertion @ [moon name]" showing estimated Δv cost for orbit insertion at destination moon.
  • Porkchop Plot Moon Support: Moon destinations now appear in porkchop plot generator with colors including moon insertion cost, labeled as "Total Δv (heliocentric + moon insertion)".
  • Return Trip Moon Budgeting: Round-trip return-to-Kerbin calculations now include outbound moon orbit insertion cost for accurate mission budgeting.

Technical Updates

  • Validation Logic: Modified transfer validation to allow same parent planet when destination is a moon (previously rejected such transfers).
  • Orbit Insertion Formula: Uses V_insertion = 1.5 × sqrt(μ_moon / r_orbit) where orbit altitude = max(20% of moon radius, 10km) to estimate capture and circularization burns.
  • UI Clarifications: Updated notes to distinguish heliocentric-only Δv from total budget including moon insertion costs.

[2.3] - 2026-08-27

Added

  • Return-to-Kerbin Δv Budgeting: Added mission time on target body controls to the Δv Budget card, with step buttons for -20, -10, -1, +1, +10, and +20 days.
  • Return Window Details: The Δv Budget card now estimates the next target-to-Kerbin transfer window after the mission stay, including return departure UT, Kerbin arrival UT, return ejection burn, Kerbin capture burn, return Δv, and round-trip Δv.
  • Return Trip Map Visualization: Added an optional checkbox to draw the return transfer arc on the 3D map with distinct colors, including return departure and Kerbin arrival ghost positions.

[2.2] - 2026-08-11

Added

  • Heliocentric Δv Total Display: Added a supplementary heliocentric total m/s readout in a smaller font beneath the main ejection/capture parking orbit Δv budget.
  • Ejection Angle Visual Schematic: Added a local planetary orbit diagram to the Ejection Angle card showing the parking orbit around the origin body, the prograde marker, and the precise burn position with thrust vector exhaust flames.

Changed

  • Card Layout & Workflow Reordering: Moved the Ejection Angle card directly below the Δv Budget card for better visual sequence during mission planning.
  • UI & Typography Scaling: Scaled all sidebar UI elements, fonts, controls, padding, and borders up by +30% and increased note text size by +20% for improved readability, automatically scaling SVG diagrams to match.
  • Dres Ring System & Drast Orbit Integration: Re-centered Dres's ring system directly along the orbit of Drast with multi-band ring texturing so Drast orbits embedded within the ring band.

[2.0] - 2026-08-10

Added

  • Dres Moon System Expansion: Added Drast and Beyl as selectable moons of Dres, including local 3D orbits, physical display data from the supplied KSP2 screenshots, labels, click selection, and transfer dropdown entries

Changed

  • Dres Ring Alignment: Narrowed the Dres ring band and aligned it with Dres's equatorial plane so it matches the in-game ring appearance more closely
  • Moon Velocity Display: Moon body info now derives local orbital speed from the parent planet's gravitational parameter instead of Kerbol's

[1.7.2] - 2026-08-09

Added

  • Gravity Assist Planning: New Assists tab automatically detects planets positioned for a viable flyby on the current route and estimates combined delta-v by solving two independent Lambert arcs (origin → assist planet, assist planet → destination), compared directly against the direct Hohmann transfer
  • Assist Route Visualization: Selecting an assist route draws both transfer legs in the 3D scene, dims the direct arc so the assist route reads as the active option, and drops a glowing marker at the flyby encounter point
  • Assist Route Labels: Flyby planet name and per-leg origin/assist/destination labels with flight-time annotations, rendered as screen-space labels that track the 3D scene as the camera moves
  • Assist Arrival Ghost: A second, violet-colored arrival ghost shows the destination's real position at the assist route's own arrival time, distinct from the direct transfer's amber ghost — multi-leg routes often arrive years apart from a direct transfer
  • Gravity Assist Legend Entry: Map legend now includes a violet swatch identifying gravity-assist-related elements

Fixed

  • Assist Leg Flight-Time Phasing: Gravity-assist leg durations were previously estimated with a naive semi-major-axis-only Hohmann-time formula that assumed exact 180-degree opposition between the flyby planet and the next body at arrival. When the flyby planet wasn't actually well-positioned for that assumption, this could force a near-parabolic trajectory (eccentricity ≈ 1) to satisfy the mismatched geometry, producing a sharply distorted, incorrect-looking arc. Leg durations are now refined by numerically searching for genuine opposition between the two bodies, with a small offset applied to avoid landing exactly on the Lambert solver's own singularity at 180 degrees

[1.7.0] - 2026-08-07

Changed

  • Hohmann Transfer Arc Correction: Fixed transfer arc drawing to use a real Lambert trajectory solution instead of an idealized 180-degree ellipse. The previous method could miss the arrival point for eccentric destinations; the new approach solves for the exact elliptical/hyperbolic orbit connecting departure and arrival points at the computed transfer time
  • Orbital display scaling adjusted so planet spheres and moon orbits maintain proper physical distance ratios

Fixed

  • Moon orbit rendering tightened to prevent inner-planet moon rings from overlapping neighboring planetary orbits while keeping outer moon systems legible

[1.6.1] - 2026-08-06

Added

  • Moon Destination Selection: Moons now appear in origin and destination dropdowns below their parent planets with dashed labels (e.g., - Mun) to distinguish them from planets
  • Clear Transfer Button: New button beside Plan Transfer to remove transfer arcs, phase lines, arrival ghosts, and reset the transfer panel

Changed

  • Moon Orbit Display Scaling: Tightened inner-planet moon orbit rendering for readability while preserving outer moon visibility

[1.6.0] - 2026-08-05

Added

  • Complete Moon System: All stock KSP/KSP2 moons (Gilly, Mun, Minmus, Ike, Laythe, Vall, Tylo, Bop, Pol) with 3D local orbits, real-time ephemeris propagation, raycast clicking, and physical data inspection
  • Double Click Centering: Double-click any planet or moon to snap camera focus directly to that celestial body

Changed

  • Expanded Visual Scale: Scaled down planet spheres and expanded moon orbit radii so moons clearly orbit outside planetary atmospheres
  • Subtle Camera Focal Marker: Added minimal dark grey 3D pivot dot tracking camera focus position in space

[1.5.0] - 2026-08-04

Added

  • Full 3D WebGL Solar System Map: Replaced 2D SVG map with Three.js WebGL scene supporting accurate planetary orbital inclinations
  • Free-Look Orbital Camera: Left drag rotates, Shift+drag or middle-click+drag pans, scroll zooms, R key or reset button returns to default view
  • Destination Arrival Ghost: Translucent ghost planet shows exact projected destination position at arrival time
  • 3D Trajectory Inclination Matching: Transfer arc interpolates inclination angles from departure to destination (e.g., 0 Kerbin 5 Dres)
  • UI & Controls HUD: On-screen keyboard/mouse controls overlay card and expanded UT sync input fields supporting 4-digit years

[1.0] - Initial Release

Added

  • Interactive Kerbol system visualization
  • Hohmann transfer calculations
  • Delta-V calculator
  • Phase angle calculator
  • Transfer arc visualization

Kerbol Calendar

Year
Vernal Equinox
1
2
3
4
5
6
7
: :

Report a Bug

1. What were you doing when the bug occurred?
2. What did you expect to happen?
3. What actually happened?
Option 1 Full app screenshot
Preview of the captured app view
Capturing full app view…
Option 2 Use your own image
Option 2 replaces Option 1 · PNG, JPG, GIF, WebP · max 5MB
Type the 5 characters shown above.
📋 Auto-included:
• App Version: v3.7.0
• Browser: Chrome
• Timestamp: --