Skip to the content

Uchusen Rockets宇宙船

Rockets drawn from sourced sizes: line drawings and painted 3D views you drop into a page, take apart and turn round, and a typed model that checks whether a rocket really goes together.

Uchusen is the Japanese word 宇宙船 for spaceship. About the name

Contents

Changelog

[Unreleased]

  • Click a body to fly there (MODULES-485): on Compare, a planet, moon, dwarf planet or belt mark moves the camera onto that body. The address keeps the place.

  • The propellant booms turn with the rings (MODULES-450): Hanabusa's two booms, and the hub drums and cross-beams, turn on the rings' bearing. The industrial hub turns with the industrial wheel. The keel and the axial lift stay still.

  • Kyotori's mast slides out (MODULES-450): on the flared wings the outer lattice slides 22 m out of the inner mast and back. The blankets keep turning. The full wings stay the extended drawing.

  • Sky groups (MODULES-485): on Compare, planets, moons, dwarf planets, belts and craft marks can each be turned off. Marks keep the largest and the nearest, so they do not pile up. The choice stays in the address.

  • The research hall, from inside (MODULES-433): terraces of benches and blue lamps around an open atrium, under the glass. The living ring stays a street with a canal and trees.

  • The research ring is laboratories (MODULES-433): benches with a blue lamp bar over each one step up both walls round an open atrium. It is no longer a second copy of the living town, so it has no canal and no houses.

  • Sky wash inside the glass (MODULES-433): the living ring and the garden ring carry a pale shell just inside the glass, so the hall is lit by sky.

  • The travelling clock (MODULES-400): one sentence under the two clocks says the clock on board runs slower. When the rounded times match, it adds that the difference is smaller than the times above.

  • Mass ratio on this trip (MODULES-400): a ship that burns all the way says whether the tanks hold it. A chemical rocket aimed past the solar system says it cannot, and names the 8,750 m/s parking-orbit burn. No fuel load is invented.

  • A distant drone keeps one of three poses (MODULES-487): folded arms tuck back under the saucer and do not hang, reaching arms stick out past the lens, and planted legs stand clear. It stays rigid. The nearest six still ease between the eight poses.

  • A pose eases into the next (MODULES-487): a near drone blends to its next pose over 0.3 to 0.8 seconds. Reduced motion cuts straight to the pose.

  • The nearest drones wear their pose (MODULES-487): up to six drones nearest the camera are drawn from the posed model. Fly, approach, grip, carry, place, weld, inspect and park each set the arm, the gripper and the legs. A boss points further than a manager.

  • A hangar ship leaves (MODULES-450): the outer ship in Miyamoto and Ariake's hangars slides 24 m out through the bay door and comes back. The booster on the inner cradle stays.

  • A 1 g choice (MODULES-400): a fleet ship still flies at its design acceleration, or at 1 g. The page says how much longer the ship's own acceleration takes. 1.61 million g is not a way to fly.

  • Ship picker targets (MODULES-474): the pills and the search are 44px, and the title is a label.

  • No braking (MODULES-398): on a ship that can burn the whole way, the trip line becomes a log line from one light second out past Andromeda, with ship time and Earth time. Turning it off brings the trip line back, including the flip.

  • The poster names a first flight (MODULES-423): each rocket's label carries the year it first flew, or a short note when it has not.

  • Tree contact patches (MODULES-433): each tree sits on a soft dark patch, so the crown reads as standing on the ground.

  • Garden racks (MODULES-433): the garden ring's middle tread carries trays of seedlings, a feed pipe and a grow-lamp bar.

  • The fleet walk counts the frame already on screen, so twelve frames fit in ninety seconds.

  • Background planets fill the frame (MODULES-502) when the camera pulls back. A pinch on a stage zooms the view and leaves the page still (MODULES-513).

  • On a desk the line-up names wrap (MODULES-505), so every name is whole. Planets and moons come from wakusei-planets 0.17.1 (MODULES-455). Visiting craft sit on cradles and ports (MODULES-494).

  • Fleet record polish (MODULES-409): one section chip is pressed at a time, and the cutaway is a switch above the view controls. The painted look stays on.

  • Drones inspect a finished ship (MODULES-516): the ship sits still and from one drone to a hundred fly around it, pause with a light on the hull, then move on. Play, pause and speed are on the page, and the choices stay in the address.

  • A named bay builds the ship you choose (MODULES-515): the yard's own bays, the ship in the address, and the build starts at the beginning. Building anywhere else is not this page.

  • Yard drones move on the picture (MODULES-514): while a bay is building, a drone flies around the part it is working, the light leaves that drone's lens, and a pause holds the drone and the light together. The test reads the drone on the screen.

  • Mission pods rise off the collar (MODULES-450): Miyamoto and Ariake's pod lifts 12 m off the dorsal collar and settles back. The isolator stays.

  • Keel lift cars ride the tube (MODULES-450): Hanabusa's cars, one at each wheel and one at the docking node, ride 15 m toward the tail and back.

  • Airlock hatches swing open (MODULES-450): Kyotori's four hatches open outward on their top hinges and shut again.

  • Kyotori's bay doors swing shut (MODULES-450): the two payload-bay doors, drawn open, swing shut on their hinges and back.

  • Hangar doors ride their tracks (MODULES-450): Miyamoto and Ariake's door leaves slide 16 m up and back, one after the next. A slide moves a tagged part along its axis and does not turn it.

  • The fleet walk waits for a settled frame: the memory count waits until the objects stop moving, and a turn waits until a frame has been drawn.

  • The fleet line-up is a layout of the compare page (MODULES-505): Compare to scale opens the upright line-up on compare.html (one baseline, true scale, the metre bar). fleet-compare.html opens that layout.

  • Painted is the look a page opens on (MODULES-498): every demo page with a rocket starts on the painted look. A line drawing is a choice. The package's own default, when a page names no look, stays the line drawing, because that is the drawing the unsuffixed files are.

  • Craft line fixes (MODULES-474): on a phone the count and Add a craft get their own line so the craft line has the full width; the page bar marks only the open page; Fit frames a row of craft whole, with the ground under their feet.

  • The craft line on a phone (MODULES-474): the count and Add a craft sit on their own line, so the scrolling line is the width of the phone and two chips show. Only the open page is marked in the page bar. A row of craft is framed with the ground under their feet, so none is cut off at the bottom of the stage.

  • Compare any number of craft (MODULES-474, MODULES-482, MODULES-486): the craft line holds up to what the device can draw, each chip with its painted thumbnail, the x on the picture and a confirm in the page colours; on a desk the line wraps so every name is whole, on a phone it scrolls with faded edges; craft too small to see get a marker ring with their name.

  • One ship picker (MODULES-474, MODULES-482, MODULES-486): the compare page's choices are three columns, kinds and makers, then a searchable picture grid, then the chosen craft's facts. Each craft is a toggle. The line shows the same painted thumbnail as the browser, with the name, and the close mark and the magnifier sit on the picture. On a desk the line wraps so every craft can be read. On a phone it is one row that scrolls, and the edges fade. One list at the top right gives each craft's full name and size, and adds "off screen" only when that craft is outside the frame. An x asks in a popover before it removes anything, in the page's own colours, with Remove and Cancel side by side, and nothing chosen leaves an empty stage. A device can show up to eight. A craft drawn under about 12 px gets a gold ring with its name and size. On a phone one craft is on the stage and the rest stay in the line.

  • One chip and one look row (MODULES-506): every page draws its choice buttons with the same chip, and Line drawing, Thick lines and Painted read the same on the Rockets page, Compare, the builder and the Embed page.

  • One page bar and an Embed page (MODULES-506, MODULES-507): every page, the builder included, has the same top bar with the current page marked; Embed opens a page with the bar, a live picture, the rocket, look and view choices kept in the address, and the code to copy; embed.html stays the bare frame and, opened on its own, links back with Open in Uchusen Rockets.

  • The journey, fixed (MODULES-497): the planets are painted (the Chikyu Earth and the wakusei bodies), the destination starts small and fills the frame only on arrival, the body left behind sits behind the craft, the date, phase and speed sit on dark panels that read over any planet, the craft stays whole and clear of them, and a trip that cannot start says why with a Leave from the Earth button.

  • Changing ship eases to its size (MODULES-504): picking a ship of another size keeps the old scale at the switch and then eases to Fit, so going from Kyotori (447 m) to Kaminari (1,815 m) zooms out to show the much larger ship, and the reverse zooms in; reduced motion jumps.

  • Shorter fleet jets (MODULES-479): a quad's glow reaches about four nozzle lengths, with a bright core at the bell and a faint edge that fades into black.

  • The yard is painted (MODULES-499): truss chords are white painted members with darker metal joints and braces, the walkway is blanket, and the frames catch a sky reflection with panel breaks and bolt rows, from ISS truss and Canadarm2 photographs.

  • The yard's build moves (MODULES-501): while the build player plays on the yard page the drones fly and weld in real time at every speed, and 'Watch a flight' fits the flight under way into about 30 seconds.

  • The Figma-style mouse (kazoku-ui 0.18.0): the wheel moves the view and Shift and the wheel moves it sideways; Ctrl, Command or Alt with the wheel, or a pinch, zooms; Space and a drag, or the middle button, moves it; Shift and a drag, or a two-finger twist, rolls.

[0.14.0] - 2026-11-06

Building in place with a working crew, the shipyard and its own page, the compare page's camera, orbit and deep zoom out to the Moon, the journey's date, planets in view, new views and arrival card, ship lights, three-axis turning, docked craft and module swaps, and Kyotori turning without jumps.

  • Romaryū's docked ships are whole (MODULES-496): the Miyamoto and Ariake berthed on Romaryū are drawn as those ships are on their own, not as bare hulls; a click on the stage no longer leaves a focus outline (the keyboard focus ring still shows).
  • Compare camera and deep zoom (MODULES-483, MODULES-484): camera choices Free, Keep all in view, Follow one craft and Follow with the planet, with smooth moves; orbit round the craft, which stay centred while the Earth turns below; an arrow at the frame edge for any craft out of view, which brings it back when clicked; Edges: Wrap or Open space, Wrap only with the free camera. The Earth is a globe at true size with the craft 400 km up and the Moon at its true place, and the zoom runs from about 100 m out past the whole Earth to the Moon, with distance marks; a craft too small to see becomes a name marker.
  • The yard page (MODULES-480): the multi-bay shipyard on its own demo page over the painted Earth: the whole yard, each bay with its ship at true size (Kaminari in the Hall, Miyamoto on the Spine, Hanabusa in the Dock), the lounge, the visitor port, the latch and the free spine, Day and Night with the yard's lamps, and the build player building the chosen bay's ship in place. The yard's name is a placeholder until it is named.
  • No more jumps when large ships turn (MODULES-481): a fleet ship small on screen (under about 220 px) leaves out its pipes, blankets, lamp housings and shadow, and brings them back above 260 px with a short fade; the engine glow stays. On the compare page Kyotori with Starship and the Shuttle went from 1,472 draws and a 218 ms hitch to 429 draws and an 18 ms worst frame.
  • Journey summary on arrival (MODULES-399): the arrival card names the departure and arrival with their dates and UTC times, and adds the peak Lorentz factor and the mass ratio beside the route, distances, the two clocks, top speed, peak g, fuel, payload and signal delay; it fits whole on a desk and a phone.
  • Building in place (MODULES-461, MODULES-463, MODULES-465, MODULES-467): builder mode's drones work as a busy crew in ranks (a boss, managers, builders and grunts, told apart by size), all the way round the ship. Large sections are built where they stand, a ring grows as an open arc segment by segment from the spokes, and the shop hands out only drone-sized parts, so nothing large appears in one frame. A ring holds still while it is built. Once its shell closes the build bar says Sealed, then Filling with air while the oxygen and nitrogen tanks are brought in, then Pressurised; decks, furnishings and the plants follow, and the ring spins up last.
  • Lighter lamps (MODULES-449): a ship's lamps are drawn as a few point clouds (one per job and colour) with one shared glow, in place of a material per lamp, so a fleet of lit ships costs less to draw; the lamps look the same.
  • The stage keeps its size on load (MODULES-477): the 3D stage takes its full size before any script or model loads, so the page no longer jumps from a thin strip to full height on reload.
  • The shipyard (MODULES-446, MODULES-447): a model of a large multi-bay yard: a big bay with an enclosed frame, an open spine bay and a gantry bay, one ship under way in each, a second spine that can unlatch and fly free, a visitor elevator across the bays with viewing booths and observation lounges, visitor docking ports, a parking field for drones and small craft, and lamps at the joints. Rendered by scripts; not yet on a demo page.
  • Click a part to swap it (MODULES-416): a short click on a fleet ship's part opens the row of modules that fit that mount (Miyamoto's pod: relay, relief, survey). A drag still turns the view or throws a craft.
  • Swap a module (MODULES-415): a fleet ship's mounts take other modules that mate with them, starting with the mission pod, and the choice stays in the address. The build row names the assembly flight. On Romaryū, two Miyamoto ride berthed on the carrier shaft, and a Dragon comes in along a lit approach to a docking collar on a closed tunnel from the shaft.
  • The date in the journey (MODULES-475): every journey view shows the flight's date and time at the top left, moving with the playback, with the day of the trip under it (Day 85 of 265).
  • Docked craft (MODULES-438): a ship with docking ports has a Docked craft tab in the panel, where each port takes a craft or None, and the choice stays in the address.
  • Ship lights (MODULES-449): the SPX ships carry real lights: red and green running lights, white strobes, lit windows and a lit registry plate, drawn as soft points of light. A Lights choice in the panel's Lights tab picks Off, Running only or All; daylight is the default.
  • Three axes (MODULES-468): the camera follows the view controls' roll, so Angle, Tilt and Roll all move the rocket. The family's view controls are 0.17.0, which offers the three axes and a tumble. The journey's playback speeds are the family's speed buttons.
  • True-scale ghost (MODULES-460): the fading outline also clears on a two-second timer, so a frame loop that does not come back still ends the cycle. The WebKit skip on that test is gone.
  • Hanabusa's bible (MODULES-402): the opening crew figure matches the record, 1,200, and the page states the endurance and the limits the journey already uses.
  • The fleet bibles (MODULES-402): Kaminari's first-design page says so, and points at the Quiver's record. Emiake, Romaryū and the Quiver take their length and mass from that record. Kyotori's sheet says which rows the record does not give. Miyamoto's title carries the reading みやもと.
  • A thrown craft drifts (MODULES-469): letting go of a craft on the compare page sends it at a quarter of the drag, and never so fast that it would cross the view in under a minute.
  • Turn speed (MODULES-470): a background body turns once in about ten minutes, on its own day, and a Turn choice (still, slow, faster, real time) is kept in the address. Reduced motion keeps it still.

[0.13.0] - 2026-11-05

Three new SPX ships (Kaminari as the Quiver, Emiake, Romaryū), Hanabusa, the repair drone and builder mode on every large ship, planet and moon backgrounds seen from orbit, a floating compare page, the fleet record and the three-ship comparison, the Moon as a journey start and the journey views.

  • Three ships at one scale (MODULES-406): the explorer, the command ship and the heavy transport stand side by side, upright, at one scale taken from their own models. Front, side, three-quarter and below turn that row, and the choice stays in the address. The drawing uses the width of its frame, and the frame is as tall as the first screen. The table under it is each ship's length from its own record (the same figure as the size note: Kaminari is 1,818 m), then beam and stowed height from the model, then dry mass, full mass, crew, cargo, main drive and peak speed from the record. A row the record does not carry says it is not given. Any listed SPX ship can take one of the three places, and the choice stays in the address. Each name sits under its own ship. No new hull is drawn.
  • The fleet record (MODULES-409): a page of the SPX ships already in the package, then one ship's sections, then that section's modules, chosen in one row each and kept in the address, with the ship's profile from the record it already has. On a desk the view sits beside the choices. Choosing a module isolates that section, frames the module from its own side and marks it. A ship that has a cutaway opens it from the sections row, and that chip is the only one pressed. The view ends above its controls. The measures under the view say they are the whole ship, and a chosen section adds its own. No new hull is drawn.
  • Builder mode draws the repair drone (src/element/swarm.ts): the construction swarm uses the SPX repair drone instead of boxes. The coarse model stands in for every drone and the fine model for the few nearest the camera. A part being fitted rides in the beam from the stack to its slot, and only once the part it stands on is finished. The beam is a soft blue-violet cone, narrow at the lens and only as wide as the part, with two faint rings, a few motes and a pool of light where it lands, so the hull stays visible through it. The weld is a small hot glow and many tiny sparks, white-yellow at the tip and orange as they leave, each with a short streak. Each drone carries a lamp that reads as a point of light with a small halo from far off. A drone is drawn larger than life on a long ship, about a fiftieth of the ship's length, so it reads at the distance the ship is seen from.
  • A background planet is not cut off by the canvas (MODULES-502): Saturn's disc and both ring tips sit inside the stage, and zooming the craft does not turn the planet into a band. The body's own clock still turns it.
  • A chosen moon pulls the view out to that moon (MODULES-455): the camera eases out to the moon's distance, and each moon sits on the bearing the package gives for this instant, at least 16 pixels across. Choosing every moon opens the view to the farthest one.
  • A body behind the rocket is seen from low orbit (MODULES-455): the horizon sits across the middle, as the Earth's picture does, and the body turns with the clock. A chosen moon is its own body in the sky, at least 16 pixels across, and the planet stays in that view. Saturn is tipped so its rings cross the sky. Venus's Painted choice uses the package's cloud surface, because the painted map is a radar picture.
  • Orbit distance (MODULES-457): a row of distances above the background body, from low orbit out to a moon's distance. The horizon opens into the whole disc as the camera climbs, the move is smooth, and the choice stays in the address (orbit=10000km). The craft stays the size it is. A moon comes into view when the distance reaches it.
  • The SPX repair drone (fleet-drone, docs/fleet/drones.md): a small work drone, about a metre across, a layered white saucer with a red rim stripe, a big round camera lens that is the tractor-beam emitter (DRONE.emitter), two thruster pods, two antennas, a cyan ring light and two jointed arms of four segments, a five-claw gripper on one and a welding tool on the other (DRONE.weldTip). Its painted look is built from NASA's Cluster II, High Energy Transient Explorer, Curiosity, InSight and Grease Gun models with this package's own detail: one draw, 119,733 triangles near and 2,224 far, with a glow picture that lights in the Lit look. scripts/make-drone.ts makes the models.
  • The compare page floats (MODULES-458): craft float with no plinth (a Ground choice puts it back); drag a craft to throw it and it drifts on, coming back from the opposite edge; the names sit at the top right with a Hide switch kept in the address; the specification panel no longer covers the picture; the background uses the planet and moon picker.
  • Builder mode on every large ship (MODULES-448): Ariake, Kaminari, Emiake, Romaryū and Hanabusa play their build with the drone swarm, as Miyamoto does.
  • The build player (MODULES-462, MODULES-466): the family's speed buttons with 1× as real time (one story second a second, the clock shown to the second), up to 86400× (a story day a second) and 100000×; Repeat and Back to the start, kept in the address (build-speed, repeat).
  • The choices fit one screen (MODULES-464): the demo's options sit in one row of tabs (Look, Background, Motion, The build, Lights), one group at a time, kept in the address (panel); maker, rocket and variant stay above.
  • True scale holds (MODULES-434): the true-scale view keeps its scale bar (the longest mark that fits) and leaves a fading outline of the previous craft; a redraw no longer turns it off, and a Fit no longer writes over a Kaminari size.
  • Beside it, chosen (MODULES-431): the single view can stand Saturn V, SLS or the ISS beside the craft, as well as Starship (beside=).
  • Fix, Engines Lit beside (MODULES-451): with Beside it, the beside craft's engines burn too (Super Heavy's 33 beside Saturn V); the ship on the booster stays dark.
  • Fix, a new craft opens at Fit (MODULES-452): changing craft, variant or view clears the old zoom and pan, and Fit keeps the craft clear of the information panel.
  • Fix, a drag turns when zoomed (MODULES-454): a plain drag turns the craft at every zoom; Move, a second finger, Shift or the middle or right button pans.
  • Tests (MODULES-432, MODULES-459, MODULES-460): the build-time tests run one file at a time after the rest; the browser suite runs as five parallel jobs on CI, each with a time limit; out-of-date tests were brought up to the changes above.
  • Journey mode: the Moon as a start (MODULES-401): trips from lunar orbit to the Earth (a three-day return to the atmosphere; Saturn V rated from Apollo's trans-Earth injection, flown by the command and service module; Orion noted as returning by another path) and to Mars; a lunar start reads 'Since departure'.
  • Journey views (MODULES-397): Side, Front, Rear, Cockpit and Map in one row; Cockpit shifts the stars with speed and grows the destination; a painted side view in one WebGL context, loaded on first use and freed on leave.
  • Compare page labels (MODULES-436): each craft is named at its own foot inside the picture; a craft that flies in space stands on a plinth marked 'shown on the ground for scale'.
  • Hanabusa polish: the bow shield is a three-plate Whipple stack held from behind, the docking ports carry IDSS-style rings with latches, approach lights, targets and umbilical panels, and the parked Starship shows its steel flank.
  • Fix: Kaminari's name carries no kana reading, like the other ships; the reading is on her sheet and in her bible.
  • ISV 花房 Hanabusa, SPX-013 (MODULES-403): the SPX fleet's wheel ship, an explorer, planned first flight 2461. A 589 m keel and a 22 m bow shield, 611 m overall, of large real modules (a drive of nineteen magnetic-nozzle thrusters and no bell, a reactor, eight propellant tanks, farm and habitat drums, a four-port docking hub, and a laboratory, survey pod, solarium, navigation deck and dome at the bow), two rotating propellant booms and three glazed rings that step up in size from the bow (garden 48 m, research 62 m, living 76 m radius, on one bearing at 3.43 rpm: 0.63, 0.82 and 1.00 g; the alternative of a bearing each is in the bible), each a hall under a glass roof (a canal, tree rows and terraces of homes in the living ring, hydroponic terraces under LED grow-lamps in the garden ring) with glazed spoke lifts, and a closed industrial wheel of 112 m radius set apart. Three variants (the rings stepping up from the bow, the other order, a flat section view of the living ring in the line look), two insets of six parts, two thruster cards, the bible (docs/fleet/ship-01.md), eight catalogue sheets (scripts/ship-01-sheets.ts) and test/ship-01.test.ts. About 53,000 pieces, built in the visitor's browser (the first picture at the coarse level, about 270 ms for everything here), no prebuilt model file, "Download 3D model" on request.
  • The wide comparison page (MODULES-429): compare.html puts two or three craft chosen from the picker in one 3D view at their true sizes on one ground, with the Earth behind them, one set of view controls (the tip follows the first craft's limit) and the choices in rows: the craft, then its maker, rocket and variant, the look and the background. What is chosen is kept in the address (rocket, variant, with=rocket:variant,...), a table gives each craft's length and maker, and on a phone one craft is shown. Any craft on the main page has a "Compare with another craft" button (the header has no new link: it already fills a 1440 px line). beside on <uchusen-rocket> now also takes a list of up to two craft (beside="saturn-v:saturn-v,iss:iss"), and build(description, { beside: [...], named: true }) takes the same; besideCraft, craftName and BESIDE_MOST are new. Every craft in such a picture is named with its length.
  • Fix, the comparison drawing (MODULES-429): the numbers on the height ruler are at least 24 pixels apart at any scale (they piled on each other with the fleet in), each label wraps inside its own cell so neighbours never collide, the ruler's unit and last number are no longer cut off at the right edge, and a narrow frame shrinks the room between the craft along with the craft. On a phone the frame scrolls the drawing sideways by itself when it is wider, and the page never does.
  • Fix, the viewer's panel is compact (MODULES-429): its tabs are one row that scrolls sideways, its buttons are smaller and its body is shorter, and a ship with a panel gives its picture a little less of the window (data-panel on the element), so a hosted runner's wider font keeps the stage inside the window (1010 px at 1440 by 900, the limit unchanged), tested with a wide font forced.
  • Picker cleanup (MODULES-429): the kit's sample modules are not offered as craft to compare; every part chip of the fleet ships and Apollo-Soyuz has a name (the Drive collar, the Port aft hangar, Kaminari's habitat decks and the rest were shown as raw ids); a fleet ship's panel says Length, Beam and Height (stowed) instead of Whole height and Diameter; and the SPX fleet's figures say "SPX" with no "read" date, as an own design is not read from outside.
  • Three ships, and the first Kaminari hull kept (MODULES-428): the Quiver is the public ISV 加美鳴 Kaminari, SPX-207 (fleet-kaminari); the keel is ISV 笑明 Emiake, SPX-109 (fleet-emiake), whose outer two radiator sails swing down and out (fleet-emiake-deployed); the carrier is ISV 羅馬龍 Romaryū, SPX-118 (fleet-romaryu), with two of ISV Miyamoto and two of ISV Ariake docked on the shaft, each the package's own model. Each berths a Starship stack, two Starship tankers and a Dragon outside the hull, using the package's own craft. The first hull stays, opened by address as fleet-02-original and not listed. docs/fleet/kaminari-concepts.md.
  • A size for the three ships: scale="60" to "100" on <uchusen-rocket>, build(description, { scale }) and the demo's "Ship size" slider (?kscale=); every length, part and label is that share of the full size, and Fit follows it, with Starship beside it when asked.

[0.12.0] - 2026-11-05

Tilt up to 90 degrees for craft in space, and journey mode fixes.

  • Tilt up to 90 degrees for craft in space (MODULES-430): each variant has view.tiltMax, 90 for the SPX fleet, the ISS, Hubble, Dragon, Gemini, Mercury, the lunar module and Apollo-Soyuz, and 45 for rockets and sites on the ground (it stopped at about 20 before). The demo gives it to the view controls' tilt-max, so the slider, the drag and ?tilt= follow the craft chosen, and a tip beyond the new limit is brought back to it when a rocket is chosen. The camera stays held at 87 degrees, so there is no flip, and Fit still frames the whole craft. Tests: test/tilt-max.test.ts, e2e/tilt-max.demo.ts.
  • Journey mode fixes: after separation the side view shows the payload itself (Orion for SLS, Cargo Dragon for Falcon Heavy) instead of the fairing dropped in ascent; a payload with no braking engine of its own flies past its target (verdict "Flyby only", no braking burn, fuel n/a with the reason) instead of braking at an assumed 0.2 g; Japanese lists in the numbers panel use 「、」.
  • Test only: the fleet walk and the GPU counts in the freeze tests wait for each ship to draw before they read, so a slow runner no longer reads a count from before the new ship is in.

[0.11.0] - 2026-11-04

Journey mode (Earth to the Moon and the planets) and real craft for scale beside the SPX fleet.

  • Journey mode, slice 1b: after each burn the side view shows only what is left, drawn from the rockets' own parts at the whole rocket's scale (Saturn V: S-IVB with the Apollo spacecraft, then the command and service module; SLS: upper stage with Orion, then Orion; Falcon Heavy: upper stage with its payload, then the payload in its fairing). build().svg() takes only (the slots left, closed up) and frame (the bounds to fit to). Falcon Heavy and SLS are drawn from the front so all their cores show. The Fuel row is the propellant used or n/a with a reason; the payload has its own row, "Payload to <target>".
  • Journey mode, first slice (MODULES-394, parts 395 to 399 and 401): journey.html in the demo and the @johnmorrisdotca/uchusen-rockets/journey entry. Choose a start (the planets), an end (the Moon or a planet) and a craft (Saturn V, Space Launch System, Falcon Heavy, ISV Kaminari SPX-207), then fly it: a countdown with an engine preheat bar and an ignition ring, a side view with the craft's own line drawing, a map, a route bar, the numbers, the flip and the braking burn, and a summary. A rocket flies a Hohmann transfer on a launch window found from the planets' real positions (wakusei-planets); a fleet ship flies a relativistic flip and burn. Every craft figure names its source or is marked as an estimate; a craft that cannot go says why in one line. No WebGL: one 2D canvas, SVG and the line drawing, a frame only while a trip plays, 30 a second at most. Pinned against published values in test/journey-physics.test.ts and test/journey-trip.test.ts; guide in English and Japanese; plan in docs/journey/plan.md. Dev dependency: wakusei-planets 0.15.0.
  • Beside it (MODULES-431): beside="on" on <uchusen-rocket> stands the real Starship stack (Super Heavy and the ship, Block 3, from the package's own model) beside the craft on screen at true scale, on the same ground line and clear of it, in the 3D view and the drawing. Fit holds both craft. The demo has a "Beside it" toggle under Scale; it is kept in the address (?beside=on), survives a reload, and is not offered for Starship itself. build(description, { beside: true }) gives Built.beside (the parts beside, slots beside-booster and beside-ship), and boundsOf, placesOf, glb and svg take them in; besideLayout, besideBounds, canBeside and BESIDE_ROCKET are the pure layout. The stack beside is drawn in this package's own paint in every look, so no licensed model comes in uncredited; a flight hides it.
  • Real craft for scale (MODULES-431): on the comparison page Starship with Super Heavy, Saturn V, SLS Block 1 and the ISS lie sideways in the SPX fleet band at the fleet ships' own scale and ruler, one row each, a rocket nose right and the station along its long axis, each labelled with its name and sourced length (124.4, 110.64, 98.15 and 109 m). A "Real craft for scale" toggle is on by default and is kept in the address (?real=off); it is hidden with Rockets alone, which has no fleet band. <uchusen-lineup real="on"> and lineupSvg({ real: true }) (which returns real) do it; off is today's picture. REAL_CRAFT lists them. The ISS line model ends its arrays 1.2 m inside the sourced 109 m, so its bar is 1.1% short.

[0.10.0] - 2026-11-04

The SPX fleet's first ships: ISV Kaminari SPX-207, ISV Miyamoto SPX-452 and her sister ISV Ariake SPX-186, with the viewer panel and the fleet on the comparison page.

  • Fix, the chosen tab of a ship's panel under the 3D view: it was drawn as a blank pill in every theme, because its fill was currentColor while its words were set to Canvas on the same button, so both were one colour. The chosen tab and the Labels toggle now have a tinted fill, a ring and bold words, in the page's own colours.
  • Fix, the demo's Rocket list: under SPX it holds the fleet ships by their registry names (ISV Miyamoto, SPX-452; ISV Ariake, SPX-186; ISV Kaminari, SPX-207) and no longer the kit's "Fleet ..." boxes of parts, on the demo and on the code builder. A kit box still draws when the address names it (?rocket=fleet-tanks).
  • Fleet kit quality pass (MODULES-414, MODULES-407 follow-up): the kit's look is raised. The hull is mostly white quilted thermal blanket with a few rigid framed panels, crinkled foil on the hardware that wears it and orange only on small removable access panels (LIVERY, hullPanels, blanketPanel, framedPanel, foilBand); plates can be quilted, framed over a sunk field, a single sheet or loose foil facets (Plate.quilt, inset, sheet, facets) and a lathe can be fluted. Pipes have real bends, bolted flange joints, glands, blind caps, valves and stand-off clamp brackets (pipeRun), and conduits leave the hull through glands. Nozzles are regeneratively cooled bells with a fluted tube-wall jacket, manifolds, a foil-wrapped chamber, a turbopump with its lines, a gimbal and actuators. The line look is held to 0.6 of the painted look's density. The Lit look: drive coils, windows, red and green navigation lights, strobes, floodlights and grow-lamps glow with "Engines: Lit" (MATERIALS glow). New: separation joints (separationJoint, separation on a ship's place), armoured portholes with burn shutters, an observation dome with six shutter petals, ten furnished rooms (ROOMS, room), and an observation dome lounge and a solarium module with clear glass (opacity). A fleet module may be up to 1.25 MB and a ship 12 MB.
  • The fleet module kit (src/model/fleet/, docs/fleet/kit.md): the pieces every ship of the fictional fleet is built from, in plain geometry and metres. 38 modules (fusion engine clusters and thruster pods, cryogenic and slim tanks, a sphere tank farm, cargo containers and a bay for four, habitat rings and drums, a laboratory, a sensor mast, a reactor, radiator arrays, docking nodes, trusses, adapters and a forward shield), each with its name, mass and size, the standard docking collars (four classes, S to H, each twice the one before) and a cutaway where it has an inside. A ship is a list of modules on a spine (assemble, shipPieces, shipParts), checked joint by joint. A detail kit (plating, hatches, conduits, radiators, tile, antennae, stencils, lamps, greebles) covers every surface; repeated detail is stamped, one template written many times. The shared data of the ships: engine cards (thrust = mass flow x specific impulse x g0, held by a test) with the relativistic performance and the Proxima trip, hull-layer stacks by role that a cutaway draws as real concentric shells, named sections with labels and numbered decks, four system insets of five or six numbered sub-parts, swappable mission pods, an exploded assembly, a symbol legend, scale bar and views at one scale, and the fleet palette. The modules are rockets in the picker under "Fleet (fictional)", labelled fictional, in all three looks, with one sample ship. A fleet part is lit with a shadow. Every module has a coarse level and a fine one (shipLevels, timeBuild, a build budget of 1 s for the first picture and 3 s for full detail, held by a test), names the real hardware it descends from, and is built with round pipes (pipeRun: bends, flanges, brackets) and I-beam, channel and round-strut sections. Any registry number is a designation (designation("207")); titleBlock and specBlock carry the glossary (ISV, class codes, FTD and DCD, KAZE, ATC, the Japanese name with its ruby); BUILDERS makes a module of a ship's own size; cutYaw turns where a cutaway opens; the solids by range of SPX-03's adapter (cub, prism, quad, discX, discZ) are shared. The fleet is written in-universe (titleBlock: planned and in-development status, designations from SPX-, the maker "SPX"); the picker group is "SPX fleet" and the NASA group is just "NASA" so the maker row stays on one line. The element has screenPoint(point) and a uchusen-draw event, so a label can follow a part in 3D. Adds about 62 KB (minified) to the root entry and about 25 MB to the package's assets; the fleet's ships are allowed 6 MB of mesh where a rocket is allowed 600 KB.
  • Test only: the freeze test walks the fleet in its own test, so the walks of every real rocket stay as long as they were.
  • ISV 加美鳴 (かみなり) Kaminari, SPX-207, the Heavy Transport (MODULES-404): a planned 1,820 m interstellar freighter, an original design of the SPX fleet, grouped under "SPX fleet" in the picker, drawn in code from a table of metres in all three looks. 47 slots (30 modules and 17 rooms and decks of the cutaway, each its own part), three hardpoints that take swapped modules in four named variants, two engines on their own, header tanks and 32 attitude thrusters, 63 named sections, 29 decks, hull-layer stacks, propulsion cards, a panel in the web component (tabs, labels that follow the parts, insets that open on a click) and the voyage arithmetic (relativistic, flip at halfway; Proxima in 33.5 years on board). Its meshes are built at run time and are not shipped as .glb files (John's decision: fictional ships are exempt from the mesh limit); the panel's Download 3D model button makes the full-detail .glb on demand, and a test opens the exported file and matches its parts and triangles. A fleet ship is built coarse first and fine when close (build(description, { detail })): the first picture costs about 0.2 s, the coarse mesh 424,000 triangles and the page's JavaScript heap 149 MB instead of 1.1 GB, and the full 2.34 million triangles are built once, when the camera comes near, an inset opens or one part is shown alone; a test holds the budget (first picture 1 s, full detail 3 s). The design bible is docs/fleet/ship-02.md; scripts/fleet-render.ts draws the sheets.
  • ISV 有明 Ariake, SPX-186, Miyamoto's sister (MODULES-405): the second Romurusu-class ship, built from the same code with deliberate differences: near-black raised hexagonal tiles on her drive shrouds and collar, all four hangar boxes filled (cargo 5,600 t against Miyamoto's 2,800 t, so 0.0385 g on the same drive), dawn-gold livery, a survey pod, a sensor mast and a second solarium. Miyamoto gains a gold solar array along her starboard side (stowed and deployed, about 2.1 MW at one astronomical unit; fusion stays the main power) and a rounded nose in solar cells. Hangar doors and racks read as such. The class table is written once (CLASS_TABLE) and appears in the design bible, a class sheet, the README and the viewer's spec tab, whose Sister ship row goes from one ship to the other; a test holds them together.
  • The comparison page shows the fleet ships lying lengthwise in their own band, at a scale that fits what is shown, with an All / Rockets / SPX fleet switch and zoom kept in the address, Length, Beam and Height rows, and the maker as "SPX".
  • The demo's part choices: a ship with more than sixteen parts shows together, apart and one menu for the rest, so its chips do not fill the page.
  • Test only: two e2e flakes on a slow runner. The Space Shuttle drag check took its first picture while the 3D view was still fading in from a blur (1.5 s), so the picture it compared with was blurred; the test now waits for the fade to end. The variant-change freeze test sampled graphics buffers before the new variant's parts were built, so its peak could be too low; it now waits for the view to draw the change.

[0.9.0] - 2026-11-04

"Put this rocket on your site" is the family's embed panel (MODULES-379).

  • The demo's copy panel and the code builder are kazoku-ui's <kazoku-embed-panel> (kazoku-ui ^0.15.1). Nothing they had is gone, and a test counts it: the six ways (CDN script as the HTML tab, iframe, module, SVG, data address, image link), the note for each (in English and Japanese), Copy (now "Copy code"), Save SVG, Save PNG, Open the embed page, and the credit line, which shows only for a painted rocket whose parts need one.
  • Added by the panel: React, Vue, Angular and Svelte tabs (the element, with a painted rocket's credit beside it), a size (240, 320, 480, 640), the drawing beside the code, and Read the docs. The picture is the drawing itself, never the 3D view or an iframe, so it adds no WebGL context and no frame loop.
  • EmbedSettings.size: the iframe's largest width and the linked picture's width and height (480 by default, so the old text is unchanged).
  • demo/embed-code.ts writes the framework tabs; test/embed-panel.test.ts holds the six ways to the package's own embedCode, the attributes to ones the element reads, the credit to every tab, and compiles the React, Vue, Angular and Svelte code.
  • scripts/check-standard.mjs is kazoku-ui 0.15's (the embed-panel item); the demo moves to @johnmorrisdotca/kazoku-ui ^0.15.1.

[0.8.0] - 2026-11-04

  • The wheel zooms the view. The element's own hands (the ones a page without the family's view controls gets) now zoom with the wheel over the 3D view, as a pinch did; before, the wheel zoomed only once the view had focus. With the pointer anywhere else the page scrolls, and a wheel that starts with the zoom already at its end scrolls the page too, so the page is never trapped. A sideways swipe, or Shift and the wheel, is left to the page. Under the family's view controls (drive()) nothing changes: they already zoomed with the wheel (kazoku-ui 0.13).
  • Demo and documentation: the hint under the view, the Element page, the README and the Looks guide (English and Japanese) say that the wheel zooms, not Ctrl or Command with the wheel.

[0.7.0] - 2026-11-03

  • Demo: the view controls' Auto-turn speeds are the family's speed buttons, 0.5×, 1× and 2× (kazoku-ui 0.14, ^0.14.0), in place of Slow, Medium and Fast. The reader's choice is the controls' pace attribute and ?pace=2 in the address (the address key was speed). The base speed stays speed="5" degrees a second, which the buttons multiply, and Turn left and Turn right keep their way at any speed. The copied embed code turns at the same speed as the page (spin is the seconds a turn: 144, 72 or 36), where it said slow whatever the buttons said. Browser tests hold the three buttons, the speed each sets (sign kept), the address and the copied code, and that an old ?speed=fast opens at 1×.
  • Fixed: the drawing of a flight (no WebGL, mode="drawing", the embed page before the 3D view) took each phase's own angles for the grid fins, legs and flaps, so every move jumped at a phase while the 3D view mixed them. It now takes the angles the 3D view has at that moment, rounded to 5 degrees: the drawing changes at most about one time in five degrees of a move (17 times for Falcon 9's grid fins opening from 85 degrees), still no more than about 20 draws a second. A browser test seeks across the fins' opening and holds that each angle has its drawing, the drawing changes only when the rounded angle does, and the phase's own drawing is no longer the one for all of it; it fails without the fix.
  • Documentation: the Element page, the Looks guide and the Upgrading guide (English and Japanese) say what the speed buttons do; the README's pictures of the demo show them.

[0.6.0] - 2026-11-03

  • Fixed: a look chosen while the 3D view starts, or while a rocket loads, is no longer lost. start() and the rocket change read the look before the load and applied it after, so the attribute said the new look and the view drew the old one; both now read it again after the load (and the parts shown with it). Two browser tests change the look in the turn the canvas appears and again with a variant change, and fail without the fix.
  • Fixed: data-painted no longer stays at loading after the painted look is left. Leaving it now sets data-painted to an empty value and sends no uchusen-painted event for it. A browser test holds a model back, chooses painted, then line.
  • Where the browser can build shaders in parallel (the KHR_parallel_shader_compile extension, which real graphics cards have), the first draw of a look waits for three.js's compileAsync, so the page keeps answering while a look is first built and the last picture stays up meanwhile (a model that comes in later builds its own the same way, with a four-second limit so a browser that never says it is ready still draws; data-painted says model or code only once they are built). Software drawing, which every test here uses, has no such extension, so nothing waits there and it behaves as before. Measured in software on a Mac with and without the wait forced on: choosing the painted look held the page for tasks of 206 and 427 ms before, and 204 alone or 192 and 412 ms after (which of the two depends on whether the model has arrived before the first draw), so software shows no gain, as expected; the gain on a real graphics card is not measured, because no test may draw on one.
  • Falcon 9 v1.0 with Dragon 1 (v1.0-dragon), the vehicle that flew COTS Demo Flight 1: the v1.0's two stages with Dragon 1 on top and no fairing (47.8 m with Dragon 1 as the Falcon 9 v1.0 article's infobox states it; the parts are drawn to more and the variant says so). A flight for it, and a flight for Dragon 1 on its own, from SpaceX's COTS Demo Flight 1 press kit (its mission timeline, page 7) and Spaceflight Now's launch timeline, both written before the launch, so the plan: liftoff, max q at 1:16, MECO at 2:58, separation at 3:02, second stage ignition at 3:09, cutoff at 9:00 in a "186-mile-high orbit", Dragon's separation at 9:35 (the trunk stays with the second stage, as the timeline says), then Dragon's deorbit burn at 2:32 (hours and minutes), entry at 2:58, drogue parachutes at "45,000 feet", main parachutes at "about 10,000 feet" and the water landing at 3:19. The two engines that shut down early have no time on the page, so that step has none. Dragon's thrusters and parachutes are not drawn.
  • The flight bar takes words: flight.words = { play: "再生" } says its own words (Play, Pause, Back, Next, the slider's name, the note that there is no timeline and the lines of its source note) in another language; what is left out stays English, and a phase's name and what happens in it are the data's.
  • Demo: the whole page is in Japanese when asked (?lang=ja or the language picker), not only its header and footer: the choices, the facts table's labels, the embed and compare sections, the builder, the parts, what is planned and the sources, with the flight bar's words. The words are demo/words.js, English and Japanese side by side, and a test holds that each key is in both with the same blanks. Notes, quotations and flight steps that come from a source stay as the source gave them, in English, and the page says so. The Japanese awaits a native reader. A browser test opens the page in Japanese, checks it and switches back by the picker.
  • Demo: the test that ignored the touch icon's published address is gone, now that the family's icon link is relative.

[0.5.0] - 2026-11-03

  • Flights for the other variants, each from a page read for it and with a blank where the page gives none: Starship flight test 1 (Block 1 as it first flew: the stages never separated, and the stack was destroyed at T+4:01), Falcon 9 v1.1 with CASSIOPE (Spaceflight Now's live coverage), Falcon 9 Full Thrust with ABS-2A and Eutelsat 117 West B (Spaceflight Now's timeline; Wikipedia's ABS-2A names the version) and Grasshopper's highest hop (744 m in 79 s, Wikipedia's table of its hops). Not here: Falcon 9 v1.0 (no page read gives a v1.0 flight with a fairing), Starship Block 4 (not flown) and Dragon on its own (no timeline read); they stay without a flight.

  • Altitude and speed in the flights, only where a page gives one, in its words: flight test 1's 39 km and 29 km, 146 km on flight test 7, 195 km on flight test 12 and its booster's 1,450 km/h at the water, CASSIOPE's "more than 20 miles" and "310 kilometers", "Mach 1" on the Full Thrust flight, CRS-16's planned orbit and Grasshopper's 744 m. The flight bar shows a speed beside the altitude.

  • Grid fins, legs and flaps turn in a flight. Each is a group of pieces with a name, a pivot and an axis (Piece.move), a node of its own in the .glb (booster~grid-fins~0, with its axis), turned in the 3D view by setting one rotation and in the drawing by moved (svg({ moves })); PartPose.moves carries the angles a phase wants and frameAt mixes them. Falcon 9's grid fins are stowed for the ascent and open for the entry and its legs open before the touchdown, Super Heavy's fins steer after the boostback, the Ship's flaps turn at its entry and flip (the pages say each; how far is a picture). A painted model that is one shell does not turn: nothing is cut to fake a move. No new draw loop: a turn is set inside the flight's one frame, and the number of nodes, buffers and programs is the same each time (the freeze test holds it).

  • The family's must-have list passes (node scripts/check-standard.mjs says ok, and a test holds the file to its recorded hash): the demo is made with the family's header and footer (the language picker and the theme switch, Docs and Embed links, light and dark), the family's template and README writer list this package, the README has "The family", and the documentation site has its recorded-hash test and its browser test.

  • Usage, written and tested: examples/ holds a script tag from jsDelivr and from unpkg, an iframe of the embed page, Vite, webpack, React (with a server render), Vue, Svelte, Angular, TypeScript and Node, and pnpm test:usage builds, type-checks or runs each against the package as npm packs it and opens each page in a browser, which must draw the rocket and reach its 3D view. CI runs it, and the guides hold each file word for word. Two new guides, Bundlers and CDNs and TypeScript and Node, each with a Japanese twin (the Japanese awaits a native reader).

  • A flame's colour comes from what its engine burns, each from a page read for it: PROPELLANTS and propellantOf (Merlin, Kestrel, F-1, Rutherford and the RD-107 and RD-108 burn kerosene; Raptor and BE-4 methane; J-2, RS-25 and BE-3 hydrogen; the Space Shuttle's boosters and the SLS's are solid; the lunar module's descent engine burns Aerozine 50 and nitrogen tetroxide). Before, any rocket with a Starship part had a methane flame and every other rocket a kerosene one, so Saturn V, the Space Shuttle, SLS, New Glenn and Soyuz were drawn as burning kerosene. A part with an engine no page read here names, such as the ship of the 2019 design and of Block 4, has a neutral grey-white flame. Each part has its own, in the drawing and the 3D view (BuiltPart.flame), and a Space Shuttle's orbiter and boosters burn two colours at once. No new draw: the flames of a kind share one program and one set of clocks, and the freeze test passes. The colours are a picture.

  • Fixed: the import map in the README and in the Getting started guide named three only, but the 3D view also imports three/addons/ (its loaders and controls), so a page copied from them drew the line picture and never the 3D view. Both now name three/addons/, as the snippet the demo copies always did. pnpm test:usage found it.

  • WebKit's "Refused to apply a stylesheet" errors, which the demo test had been told to ignore, are gone and the ignore is removed. They came from the demo page's Content-Security-Policy after the page lost its style hash (chikyu-earth 0.10's realistic Earth then fell back to a style tag the policy refused). The page has no policy of its own now, because the family's header writes a script and a style, so there is nothing to refuse; the embed page and the code builder keep the strict policy (style-src 'self', no inline style), and a browser test holds that they run under it with no report, in Chromium and in WebKit on CI.

  • Documentation: the family's docs-site files of 2026-11-03 (scripts/docs-site.mjs, e2e/docs-site.demo.mjs, held to their recorded hashes): the browser test reads a seeded sample of the pages and checks the links from the files, and every guide's picture is a real image (![..](../images/..), ../../images/ in Japanese) that the docs site publishes, in place of a link to the picture.

  • Demo, at a desk's width: the family header is one row and the hint under the view is left out, so the choices and the view still end within a 900 px window; the line Earth is drawn in a shadow root of its own, so the family header's help switch does not wake for each of its redraws.

  • Demo: the page itself is English; only the header and footer are in Japanese too. The page no longer carries a Content-Security-Policy of its own, because the family's header writes a script and a style; the embed page keeps its strict one.

[0.4.0] - 2026-11-03

  • Demo: the rocket, variant, parts, look and view (the From row) are kept in the address with the maker, the Earth and the view controls' choices, each at a default that leaves the address clean, so a link or a reload opens what was on the screen.
  • Demo: kazoku-ui 0.12 (Centre came in 0.11). Once the view is zoomed or moved, a Centre button brings the rocket back to the middle at Fit and the default angle (the keys Home and 0 too). A rocket is thin, so the controls are told its size on the screen (object-size) and hold a pan so that at least a quarter of it stays in view. There is no grab-radius: a rocket is not round, so the default drag is kept. A browser test drags it far off and presses Centre.
  • The drag rule has its browser check: e2e/direction.demo.ts runs kazoku-ui's shared e2e/ground.mjs on the Space Shuttle's stack (a plain rocket body has nothing to follow up or down), and reads Starship's camera angle. A drag right moves the surface right, a drag up moves it up, the arrow keys agree and Auto-turn takes the near side to the right.
  • Demo: the Earth behind the rocket takes chikyu-earth 0.10: max-ratio="1" instead of sizing the element at half and scaling it, the Sun and the view are set on the same tick (one draw, so the every-fourth-draw workaround is gone), and the page's Content-Security-Policy has no style hash: style-src 'self' alone, which a test now holds (a refused stylesheet is an error).
  • The release runs the freeze test before anything is published: release.yml calls kazoku-ui's shared release workflow at v0.11.0 with freeze-command: pnpm test:freeze.
  • Engines: the parts whose data lists engines but whose drawing has no bell stay dark on purpose, and a test names them (Jupiter-C, Dragon 1, Dragon 2, Cargo Dragon 2, Apollo's service module, the lunar module's ascent stage, Dragon on top of Falcon 9). No source read here gives a Draco or SuperDraco thruster's size, the service propulsion engine's or the A-7's, and a bell's size is never estimated.
  • The README opens with the package's thumbnail, and the demo carries it as its link preview (og:image) and publishes the card, a dark card and an icon on Pages at thumbnail.png, thumbnail-dark.png and icon.png.
  • Documentation: a reference site made from the source's doc comments (every export has a summary, its parameters, what it returns and an example that runs), thirteen guides with a Japanese twin of each, a code builder page (builder.html), eighteen pictures, a longer README, and every release of this changelog dated. pnpm docs:check and pnpm docs:site are new, and pnpm test:readme now runs the guides too. No behaviour changed.

[0.3.0] - 2026-11-02

  • Falcon 1, and the Falcon 1e that was announced and never flew, drawn by this package's code. Sizes from SpaceX's 2008 user's guide, with Wikipedia's other figures kept beside them. A part placed rather than stacked can now stand above the ground (strapOn.y).
  • Cargo Dragon 2, on the sizes its article gives for both versions of Dragon 2, with no windows. Falcon 9 Block 4 stays unlisted: the Full Thrust article was read too and gives it no sizes of its own. Full Thrust keeps that article's 71 m beside its 69.8 m.
  • Saturn V with the Apollo spacecraft, drawn by this package's code from sourced lengths and widths: 7 parts, 4,658 triangles and 143 KB, well under the largest code-made mesh (Starship Block 4, 17,220 triangles and 508 KB).
  • The Space Shuttle, stacked with its external tank and two boosters, drawn by this package's code from each part's own article: 5,554 triangles and 156 KB.
  • The Space Launch System, Block 1 with Orion, drawn by this package's code: 5,172 triangles and 155 KB.
  • New Glenn 7×2 (2,732 triangles, 84 KB) and Electron (2,812 triangles, 81 KB), drawn by this package's code.
  • Other makers' rockets share one scale in <uchusen-lineup>, and each lists its own sources.
  • Soyuz-2 with its four boosters, drawn by this package's code: 5,592 triangles and 160 KB. A lathe's axis may lean (lean), for its boosters. Vulcan Centaur and Ariane 6 are listed in PLANNED_ROCKETS with their sourced facts, to come.
  • Drone ships (Of Course I Still Love You, Just Read the Instructions, A Shortfall of Gravitas) and landing zones (LZ-1, LZ-4), each with a landed Falcon 9 first stage, legs out: 2,988 and 3,084 triangles, 109 and 106 KB. A variant's other sizes are facts.sizes, and firstWord names its first date when it is not a flight.
  • The Starbase integration tower with its mount and arms: alone (1,748 triangles, 65 KB), with Block 3 stacked on it (18,092 triangles, 546 KB, the largest code-made mesh so far, just over Block 4's 17,220 and 508 KB, and under the 600 KB limit) or catching its booster (12,236 triangles, 380 KB).
  • Inside Crew Dragon, cut open, with its four seats, panel and cargo, and a person for scale: dragon crew-dragon-inside, 1,268 triangles and 41 KB.
  • Starbase as a first scene, from OpenStreetMap's places and outlines: launch-site (4,084 triangles, 141 KB), build-site (1,296, 40 KB) and city (5,620, 189 KB). A browser test measures what scenes draw a frame, and that their graphics memory stays flat as they are switched. The tower's footprint, 13 m, is now the map's.
  • FLIGHT_LOG and flightLogOf: real flights as data, Falcon 1's five and Starship's fourteen, with their dates, vehicles and outcomes.
  • Discovery, the Smithsonian's CC0 scan of a real orbiter, as space-shuttle discovery: its mark, flags and names painted out, reduced to 73,707 triangles and 2.6 MB, under the largest painted model's 2.7 MB. Its picture is cut into thousands of islands, so an edge moves only along what the picture shows, with no scraps on its wings. MODEL_CREDITS rows may now say CC0 or public domain.
  • The licence line is now MIT AND CC-BY-4.0 AND ODbL-1.0: Starbase's coordinates, outlines and map heights and the tower's 13 m footprint are © OpenStreetMap contributors, under ODbL 1.0, not MIT. NOTICE, the README and the files that hold them say so.
  • In the to-scale lineup, the stacked Space Shuttle is turned so its orbiter shows, not its tank, and Electron, black all over, takes a thin light outline on the dark ground. Its shape and figures are unchanged.
  • The stacked Space Shuttle is painted by NASA's own models: its orbiter (30,000 triangles from 48,376, 842 KB), its external tank (6,326, 153 KB) and its solid rocket booster (4,136, 123 KB), with every mark painted out and the orbiter's bay shut. pnpm models:nasa makes NASA's models, by hand; NOTICE.md says what they rest on.
  • The Apollo lunar module, lunar-module: NASA's model, its flag and the country's name removed, 97,588 triangles reduced to 59,949 and 972 KB in two files, its stages apart.
  • Apollo docked to Soyuz, apollo-soyuz: NASA's model, its flags and the countries' names painted out, 32,996 triangles reduced to 29,314 and 497 KB in three files.
  • The Gemini spacecraft, gemini: NASA's model, its flag and the country's name painted out, 38,840 triangles reduced to 27,007 and 548 KB in two files.
  • The Mercury spacecraft, mercury friendship-7: NASA's model, 164,622 triangles reduced to 40,000 and 591 KB, its colours judged from photographs because NASA's copy is all one grey.
  • Jupiter-C, jupiter-c: NASA's model, its lettering removed, 8,933 triangles and 136 KB.
  • The International Space Station, iss: NASA's model, 174,440 triangles reduced to 60,701 and 1,050 KB, its colours judged from photographs because NASA's copy is all one grey.
  • The Hubble Space Telescope, hubble: NASA's model, a lettered plate painted out, 7,672 triangles and 470 KB.
  • The demo's credit and source lists break a long address, so it never pushes a phone's page sideways.
  • node scripts/budget.ts lists what each rocket asks of a page: triangles and bytes.
  • Embeds: an embed page for a site that cannot run script, and embedCode for a CDN script and the element (with an import map for three.js, so no bundler is needed), an iframe, a module, the SVG, a data address and a link to the shipped picture, with assetPathOf and embedNote. The demo copies each of them for what is on the screen, and saves an SVG or a PNG. A painted embed carries the CC BY credit of the parts it shows. The embed page takes engines=on, phase= and flight=1, and its models always come from its own site.
  • Engines: engines="on" lights each engine at full thrust: a plume with shock diamonds and a glow on the hull in the painted look, a drawn flame and ring in the line looks, in each engine's own place. They are off by default and off under reduced motion. A rocket's engines light where a source tells of them and its drawing has them, as the Shuttle's three and two, and a part with neither, or a stage that has landed, has no flame. A flame's length and diamonds are a picture, not a measurement. One instanced draw for a part's flames however many burn: lighting or dousing them makes and frees nothing on the graphics card after the first, a flame draws at most 30 times a second, stops moving after 15 seconds with no one touching anything, and nothing draws after that.
  • Flights: <uchusen-flight for="rocket"> plays, pauses and scrubs a flight with element.play(), pause(), seek() and endFlight(), or the phase attribute, showing engine by engine which burn in each phase. Starship Blocks 1 to 3 (flight tests 5, 7 and 12), Falcon 9 Block 5 (with its fairing, landing on a drone ship; with Dragon, returning to land) and the Falcon Heavy test flight, with times and counts from named pages, and blanks where a page gives none. How the picture moves between the phases is illustrative, and the page says so. There is smoke and water on a plain pad at the start, and the flames fan out high up. Under reduced motion it does not play, and no flame shows; the slider and the charts still work. It moves only inside the view's one frame loop, stands still out of sight and on a hidden tab, and ends by itself, after which nothing draws. Not yet: a tower, catch arms, a drone ship, or moving fins, flaps and legs.
  • Demo: Turn left and Turn right beside the view controls. A press changes the way at once, with no jump, and starts the turn if it had stopped; a change of look, variant or parts keeps the choice. spinOf and cleanWay read the element's own spin and way.
  • The demo's builder offers parts from every rocket, row by row from the bottom, with builderState: each row holds only what fits on the row below, a row with one answer is answered for the reader, and a change lower down keeps what still fits. It cannot reach a rocket that does not go together, so it has no error to show.
  • MAKERS, and each rocket's maker and madeBy: whose it is, as its source says, and a blank for a site. Demo: a Maker row first, Sites among its choices, then only that maker's rockets, kept in the address with the rocket and variant, so the choices stay on one screen at a desk. A maker with one rocket chooses it.
  • Demo: the sections under the rocket are one at a time, chosen in a row of tabs and kept in the address (#builder), so the page is no longer one long scroll.
  • Fixed: a view's own spin (spin="slow" with no controls driving it) now settles after a minute and a half with no one touching it, as it always said it did. Its own turning counted as being touched.
  • Demo: a Background row, None or Earth, beside Look and From, off by default and kept in the address (?background=earth). It is the page's own: the embed page and what is copied carry the rocket, and say so. The rocket floats in front of the Earth from @johnmorrisdotca/chikyu-earth, turning once in 12 minutes: a line-drawn globe behind Line drawing and Thick lines, one SVG and no canvas, and the realistic Earth behind Painted, a second WebGL context given back when it is left. A person who does not choose it loads nothing of it and pays nothing. It draws 2 or 4 times a second, not at all out of sight, on a hidden tab or under reduced motion, and stops turning when nobody has touched the page for five minutes. e2e/freeze.demo.ts holds its budgets, and pnpm test:freeze runs that file alone. None of this is in the published package.
  • Demo: kazoku-ui 0.10 (chikyu-earth needs >=0.9.0), with controls="advanced" on the bar, so it keeps tilt, Front and the pan pad on show; its 2× preset is gone, and a double press on the view still goes to 2 times. The Content-Security-Policy's style-src gains one hash, for the realistic Earth's inline <style>, until chikyu-earth adopts its styles as kazoku-ui does.

[0.2.2] - 2026-11-02

  • Demo: kazoku-ui 0.7 (a dev dependency, used only by the demo). The demo's strict Content-Security-Policy is now plain style-src 'self': the controls adopt their styles as a constructable stylesheet since kazoku-ui 0.3.1, so the build no longer writes the controls' style text's hash into the page (the %KAZOKU_STYLE% step of scripts/site.ts is gone). The introduction's own pause (a one-minute timer and a scroll observer in demo/demo.ts) is replaced by the controls' autoplay-for="60" and their idle-out-of-sight, from kazoku-ui 0.7.1; docs/element.md says so.
  • Repository: release.yml calls kazoku-ui's shared reusable-release.yml (pinned to v0.7.3): the same checks, tag, GitHub release with the tarball and npm publish by trusted publishing; the trusted publisher entry stays release.yml. The GitHub release's notes are generated by GitHub until the shared workflow reads scripts/release-notes.ts. AGENTS.md is written from kazoku-ui's template.

[0.2.1] - 2026-11-02

  • Fixed: the demo could hang the screen while turning. When the 3D view turned by itself, or glided to a stop after a drag, the controls' change event asked for the next frame while the view's own loop did too, so each frame started two and the number of draws doubled every frame: thousands of draws a second, enough to starve the graphics card (measured in a real browser on a real graphics card: 12,308 draws in 3 seconds, against 181 now at 60 frames a second). One frame is asked for, once.
  • Fixed: every change of variant, look or parts left the old shapes in the graphics card (about 60 buffers each), and a painted model's pictures with them. They are given back now, and the glow's too.
  • Fixed: the canvas had no size limit but a ratio of 2. It is held to 4096 pixels a side and 6 million pixels in all, so a view as wide as a 5K screen is no longer drawn at 15 million.
  • The drawing, with no WebGL, is zoomed and moved by its viewBox instead of a CSS scale, so it never grows past its box; it is made again at most 20 times a second, never while out of sight (a hidden tab, scrolled away), and is not rebuilt when only the zoom or the move changes.
  • The "Tilt to turn" listener is let go when the 3D view is, and does nothing out of sight; it was added again after each return to the screen.
  • drive() with the same choice again does nothing.
  • The demo's auto-turn stops after a minute and when the view leaves the screen; Play starts it again.
  • pixelRatioFor(width, height, deviceRatio), with MAX_PIXELS, MAX_SIDE and MAX_RATIO.
  • New browser tests: draws per frame, nothing drawing when still or out of sight, no growth of contexts, buffers, vertex arrays or textures over changes, a lost context, and the canvas within its budget from 1x to 5x on a 5K screen.

[0.2.0] - 2026-11-01

  • element.drive({ yaw, tilt, zoom, panX, panY }): a page can hand the turn, tip, zoom and move to the family's <kazoku-view-controls> (@johnmorrisdotca/kazoku-ui). The element's own drag, wheel, keys and spin stand down, and the 3D view and the drawing both follow, so it works with no WebGL as well. drive(null) takes them back. kazoku-ui is not imported by the package: the demo uses it, as a dev dependency.
  • The demo uses the shared view controls: angle, tilt, auto-turn, Front, zoom, Fit and move, with the same drag, pinch and keys as the rest of the family, and the choices kept in the address (?yaw=40&tilt=10&zoom=2). Its own slow-spin switch and hint are gone.
  • turnedBy(base, yaw, tilt) and the ViewChoice type: the camera angle for a view turned and tipped by the controls.

[0.1.1] - 2026-11-01

  • The painted Falcon 9 Block 5 second stage shows this package's own engine nozzle when it stands apart or alone, as the model has none, and not when it is nested in the first stage.
  • The Falcon 9's drawn vacuum nozzle is 3.3 m across at the exit, the figure Wikipedia's Merlin infobox gives, in the line looks too (the v1.0 keeps its narrower bell).

[0.1.0] - 2026-10-31

  • Starship: Super Heavy and the Ship, in Block 1, Block 1 as it first flew, Block 2, Block 3 and the announced Block 4, each with its own sourced sizes, and an artist's model of the 2019 design.
  • Falcon 9 in v1.0, v1.1, Full Thrust and Block 5, with a fairing or with Dragon 2; Falcon Heavy; Dragon 1 and Dragon 2; Grasshopper, the test vehicle.
  • <uchusen-rocket>: three looks (line, thick, painted), together, apart and each part alone, rotation by drag, touch, keyboard and a slow spin.
  • check and build: a typed way to assemble a rocket from parts, with one record for every part.
  • <uchusen-lineup>: rockets at one scale with a ruler, a person and a building.
  • A .glb and .svg per rocket and part, and the painted models under CC BY 4.0.

View sourceEdit on GitHubMade from the source of @johnmorrisdotca/uchusen-rockets 0.14.0.