Sheltermouse Sailing Simulator © 2026 by Harold Wright is licensed under CC BY-NC-SA 4.0
Map imagery courtesy of the U.S. Geological Survey National Map.
courses.js content to your clipboard;
paste over js/courses.js and commit.
Shift+E toggles the editor.
| Simulation | |
| Space | Play / Pause |
| R | Reset |
| Rudder — Hold OFF | |
| ← → | Nudge rudder (springs back on release) |
| Rudder — Hold ON | |
| H | Toggle heading hold |
| ← → | Adjust course ±5° |
| Mainsheet | |
| ↑ | Ease out |
| ↓ | Sheet in |
| C | Toggle cleat |
| I | Sheet in (step) |
| O | Ease out (step) |
| Crew | |
| A | Toggle auto-hike |
| , | Hike port (manual) |
| . | Hike starboard (manual) |
| Boom | |
| [ | Push boom to port (hold key) |
| ] | Push boom to starboard (hold key) |
| View | |
| Scroll | Zoom |
| Drag | Pan (when paused) |
A moving boat creates its own headwind equal and opposite to its velocity. The wind the sail actually feels — the apparent wind — is the vector sum of the true wind and this self-generated headwind. Sailing upwind, apparent wind is stronger and angled further forward than true wind; sailing downwind, it is weaker and further aft. Every force in this simulator acts on the apparent wind, not the true wind.
A sail generates force the same way an aircraft wing does. Air flowing over the curved leeward face travels faster than air on the windward face, creating a pressure difference — lift — that acts perpendicular to the apparent wind. The angle of attack (the angle between the apparent wind and the sail chord, set by the mainsheet) determines how much lift is produced. Too flat and the sail barely fills; too deep and it stalls, producing drag with little useful drive.
When the bow points directly into the wind, apparent wind strikes both sides of the sail equally and lift collapses to zero. The boat loses drive and steerage — a predicament called in irons. Escape requires backing the sail (pushing the boom out) to create a rotational moment that swings the bow off the wind before the sail can fill on the correct side.
Sail lift acts mostly sideways relative to the hull. Without resistance, the boat would simply slide to leeward (make leeway) instead of going forward. The daggerboard — a vertical blade through the hull — provides the hydrodynamic lateral force that redirects this sideways push into forward motion. Raising the board eliminates that resistance entirely, allowing the boat to slip sideways; useful in very shallow water, but ruinous to upwind performance.
The same sail force that drives the boat forward also tries to tip it over — the heeling moment. The hull and crew weight resist this as a righting moment. On a dinghy like a Sunfish, the crew hiking out over the windward rail is the primary source of stability. As heel increases the righting moment eventually peaks, then decreases — beyond roughly 55° the boat capsizes. Auto-hike in this simulator proportionally hikes the crew out in response to current heel angle.
The rudder steers by deflecting water flowing past the hull, generating a sideways force at the stern. That force is proportional to the square of boat speed — at rest, the rudder has no effect at all. This is why heading hold is inactive at low speeds, and why a boat drifting in irons cannot steer its way out: without flow over the rudder there is simply no authority to turn.
The boat modeled here is a popular small sailboat with a single sail and a daggerboard. The simulation runs a semi-implicit Euler integrator at up to 120 steps per second, with separate equations of motion for surge (forward), sway (sideways), yaw (turning), and roll (heel).
By default, the wind blows from the west (toward the east) at 5 meters per second (9.7 knots). The sailboat points due north, with the sail set such that it will sail successfully when "Play" is pressed. We suggest you start by easing and tightening the mainsheet and experimenting with different headings using the 2D control pad. Keep track of what's happening using the "Wind Triangle," a standard way to visualize true wind, apparent wind, and boat velocity.
The Environment panel (⚙ button on the chart) controls the sailing environment. From sets the compass bearing the wind is blowing from — 270° means wind from the west, blowing eastward. Speed sets the true wind speed in m/s (knots shown alongside). These can be adjusted at any time, even while sailing. The weather vane in the upper-left of the helm panel always shows the current true wind direction.
The Gusts slider adds realistic variability to the wind. At zero, the wind is perfectly steady. As you increase it, random gusts periodically raise the wind speed (up to twice the base speed at maximum) and temporarily shift the direction by up to 90°. Both changes ease in and out gradually over about a second. The close-up inset shows "Gust!" in lavender when a gust is active. Real sailors call this sailing in puffy conditions — you must actively ease the sail as a gust hits to avoid capsizing, then trim back in as it passes.
The vertical axis of the 2D pad controls the mainsheet — drag down to sheet in (tighter, upwind trim), drag up to ease out (fuller, downwind trim). The Cleat Main button locks the sheet at its current position when you release the pad; this is the default. With the cleat off, releasing the pad eases the sheet fully — simulating the sailor letting go of the line. Use C to toggle the cleat, and I / O to sheet in or ease out in small steps.
The horizontal axis of the 2D pad steers the boat — drag right to turn starboard, drag left for port. Rudder authority depends on boat speed — at rest it does nothing. The Hold Course button engages an autopilot that maintains the current heading automatically, freeing your attention for sail trim. Hold disengages when you touch the pad, and re-engages at the new course when you release. Use H to toggle, and arrow keys to nudge the course ±5° while hold is active.
The Auto button in the hiking indicator enables automatic crew weight management. The simulator continuously moves the crew to the windward rail in proportion to the current heel angle, providing maximum righting moment without manual input. It is on by default. Turn it off to manage hiking manually — useful for learning how heel affects stability, or for deliberate weight placement in tight maneuvers.
The 2D control pad is the primary helm interface. Horizontal position controls the rudder; vertical position controls the mainsheet. Drag anywhere on the pad to adjust both simultaneously — a natural way to sail one-handed. The glowing dot shows the current rudder and sheet position; when heading hold is active, it tracks the autopilot's rudder output.
The daggerboard's draft determines how close to shore the boat can go before grounding. With the board fully down, the boat grounds roughly 4 meters from the water's edge; raised, it can get much closer. When grounded, heavy drag stops the boat almost immediately. Press Set to reorient the bow away from shore and reposition the boat at the edge of navigable water. After a capsize, click the button on the chart to right the boat.
Pause the simulation and pan the view to any spot on the shore. Press Set in the Launch Point section to place the boat at the camera center in shallow water, pointed away from shore with the sail already on the correct side. Use the ↺ / ↻ buttons to rotate the bow to a good angle relative to the wind — avoiding a direct head-to-wind launch. Raise the daggerboard if the water is very shallow, then press Play to begin sailing. Lower the daggerboard when you reach deeper water.
Wind triangle: when sailing nearly dead downwind, true wind and apparent wind are almost parallel and their arrows overlap. TW and AW are now offset laterally by a small amount so both remain readable. Arrow labels moved outside the triangle at all points of sail.
Portrait phone layout added: four-row stacked view (chart, wind triangle, close-up, pad & controls) with hamburger menu for Waterway, Wind, and Launch. Daggerboard and hiking indicators added to phone close-up. Townsends Inlet added as a second body of water. Lake water-color thresholds now auto-calibrated from the image on load. Copyright badge moved to helm panel lower-left with tap-to-reveal statement. Launch heading-hold bug fixed: boat now correctly holds the rotated heading when Play is pressed.
Inline contextual help added (? buttons on Wind Triangle, Close-Up, Rudder & Mainsheet, and Chart). Luffing! status label added to close-up. Boom push and boom-released notices added to close-up. Hiking indicator redrawn as a stern-view grey trapezoid. iPad aground-on-load bug fixed. Phone and narrow-screen message updated.
Complete UI redesign: viewport split 50/50 into Helm panel (wind triangle, compass, weather vane, close-up, indicators) and Chart panel (full lake map). Environmental controls moved to a modal overlay on the chart. Sidebar removed.
Landscape tablet and phone support: touch panning, pinch-to-zoom, collapsible sidebar sections, heel indicator moved into close-up inset, wind triangle and inset repositioned to top of canvas. Readout panel replaced by a tappable speed badge in all views. 2D control pad now shown by default. Boat tracking and launch bullseye correctly centered in the unobstructed canvas area at all zoom levels.
Close-up inset: rudder/tiller angle and daggerboard depth indicators added. Status labels (Gust!, Shallow, Aground) added to inset. Inset now visible at all zoom levels. Narrow-screen notice added.
Initial public release.
Please rotate your device to portrait for the mobile experience.
A landscape mobile layout is in development — check back soon.