Here is some history and context for this release. If you don't care (which is perfectly OK), feel free to skip this section entirely 😄 Happy reading! ~Arnaud
The initial release of Launch Library 2.0.0 was made public in july 2020. Since then, two other versions have been released to implement small changes that required breaking changes in the API schema.
- 2.1.0 was released in november 2020 with some field type changes, a few new filters, new config endpoints, and a new launch status (TBC);
- 2.2.0 was released in february 2021, with docs fixes, throttle bypasses, and some new & removed fields.
Since february 2021, many new features have been added to version 2.2.0, as they did not break the API schema: mission patches, webcast automation, automated stats, comma-separated filters, spacecraft landings, T-0 precision, spacewalks, launch timelines, and many more smaller improvements.
This means that since 2021, all ideas requiring breaking changes to the API schema (i.e. a version bump) piled up while we worked on improving 2.2.0. In late 2022, we started keeping track with GitHub issues of every single change we wanted to see in the next LL2 version. By early 2024, we had completed all the development work for 2.2.0 features.
Before diving head first into all the piled up issues, we held two dev team meetings to go over every issue and plan how we would tackle the breaking database and API changes while ensuring full backwards compatibility with previous API versions.
That being done, we started working on version 2.3.0 on february 11. Some 100+ issues and 200+ pull requests later, Launch Library version 2.3.0 is ready.
User-facing changes aside, this release is a major step-up in code maintainability. All endpoints have undergone major refactoring work, and so have the tests which now cover all fields of all 2.3.0 endpoints. A lot of work also went into improving the human documentation, making the schema 100% accurate for client generation, and optimizing database queries for performance.
TL;DR - we really worked hard on this.
Special thanks go to Lucas, who contributed significantly to this effort, as well as Jacques and Caleb, who were essential in tackling the more intricate and infrastructure-related tasks.
And of course, a big shoutout as well to our Patrons who make this project possible and sustainable. 🤍
- 🤖 Launch designator automation
- Moved from the
missionobject to thelaunchobject, thelaunch_designatorfield is now fully automated for all previous launches. - This allows querying LL2 launches using COSPAR IDs, and effortlessly expanding LL2 data with other sources (e.g. live object status & orbital elements from Celestrak)
- Moved from the
- 📸 Rework of images as reusable objects
- The
image_url,profile_url,logo_url, etc. fields have been reworked to link to a newImageobject that can be reused to allow for better caching and crediting. - This object has crediting & license information, as well as a ready to use thumbnail and, when relevant, multiple
related
ImageVariantobjects (e.g. various versions of a logo)
- The
- 🚀 New launch status
- The
Payload Deployed(ID 9) launch status has been added as an intermediate status before confirmation of payload AOS. - It is returned as
In Flight(ID 6) in 2.2.0 and older versions.
- The
- 🪐 Celestial bodies
- A new
CelestialBodyobject has been created forOrbit,Location, andLandingLocationobjects, as well as filtering options on relevant endpoints. ⚠️ This means 2.3.0 can now include launches from other bodies than Earth. These are hidden in 2.2.0 and previous versions.
- A new
- 🏳️ Countries
- All the country & nationality information has been reworked to use one or multiple linked
Countryobjects. - This new object includes all the information needed to collect relevant metadata (e.g. flags) from other sources, or to accurately display one or multiple nationalities.
- All the country & nationality information has been reworked to use one or multiple linked
- 🛰️ Payloads
- While the idea remains not to transform LL2 into an exhaustive SATCAT, new
Payload,PayloadFlightobjects allow the addition of uncrewed & non-reusable space objects to rockets in a similar fashion as the existingSpacecraftobjects. - This makes it possible to provide a broader coverage (e.g. with dockings, landings, etc.) for high-profile missions.
- For exhaustive (but perhaps less detailed) payload information, the
launch_designatorautomation allows easy expansion with data from other sources.
- While the idea remains not to transform LL2 into an exhaustive SATCAT, new
- ⚙️ Multiple spacecraft per rocket & dockings rework
Rocketobjects can now have multipleSpacecraftFlight(&PayloadFlight) objects, to support some edge cases (e.g. Apollo CSM & LEM)- Dockings have been reworked to be possible between any two
SpacecraftFlight,PayloadFlight, andSpaceStationobjects, to support all space dockings.
- ⚡ Performance
- Significant effort has been made to optimize serializers and database queries for performance.
- This should™️ mean the end of server timeouts when querying large amounts of data at once, despite the increased complexity of 2.3.0 responses.
Ok maybe not frequently, but these are questions we expect so here are immediate answers.
A new API version is needed to implement breaking changes in the schema (e.g. field type changes or removals). Feature and data structure rework ideas requiring breaking changes have piled up over multiple years, so they could all be bundled into a massive new API version. This is LL 2.3.0.
Yes. All older versions remain functional as full backwards compatibility has been implemented.
Not necessarily, but it is recommended.
Bugs reported in older versions will be fixed as long as they do not impact the latest version. Questions related to older versions will continue to be answered to the best of our abilities.
No.
FKmeansForeign Key, which creates a single relation from one object to another (reusable) one. For example, theLocationFK in thePadmodel. One pad can only be linked to one location, but one location is often linked to multiple pads.M2MmeansMany-To-Many, which creates relations from one object to multiple other ones. For example, theAstronautFlightM2M in theSpacewalkmodel, for linking multiple crew members to a single spacewalk object.
- added the
CelestialBodymodel (+CelestialBodyTypeconfig), used as FK in theLocation,LandingLocation, andOrbitmodels - added the
Countryconfig to replace string-based information in theAgency,Astronaut,Location, andPadmodels - added the
ImageandImageVariantmodels (+ImageLicenseandImageVariantTypeconfigs), used as FK in place of almost all previousimage_url,profile_url,logo_url, etc. fields across many models - added the
LauncherConfigurationFamilymodel, used as M2M in theLauncherConfigurationmodel - added the
PayloadandPayloadFlightmodels (+PayloadTypeconfig) - added the
ProgramTypeconfig, used as FK in theProgrammodel - added the
SocialMediaLinkmodel (+SocialMediaconfig), used as M2M in theAstronautandAgencymodels - added the
SpacecraftConfigurationFamilymodel, used as M2M in theSpacecraftConfigurationmodel - added the
SpacecraftConfigurationTypeconfig, used as FK in theSpacecraftConfigurationmodel
- added the
activeandimagefields toLocationandPadmodels - added the
durationandturn_around_timeduration fields to theSpacecraftFlightmodel - added the
fastest_turnaroundduration fields to thePad,Launcher,LauncherConfiguration,Spacecraft, andSpacecraftConfigurationmodels - added the
geo_capacityandsso_capacityfields to theLauncherConfigurationmodel - added the
is_placeholderfield to theLaunchermodel - added the
is_placeholderfield to theLauncherConfigmodel (for cases where the exact variant is not known yet, e.g. a generic Vulcan Centaur or Ariane 6) - added the
liveboolean field to theVidURLmodel, and automated it - added payload and spacecraft landing statistics to the
Agencymodel - added stats to the
SpacecraftConfigurationmodel - added the
astronautsfield to theEventmodel - added the
attempted_landingsandfailed_landingsfields to theLandingLocationmodel
- combined the functionality of comma-separated
lsp__idsand the singlelsp__idfilters intolsp__idon thelaunchesendpoint - moved the
launch_designatorfield (unpopulated before 2.3.0) from theMissionmodel to theLaunchmodel, and automated it - renamed the
dockedfield in theSpaceStationmodel tocurrently_docked - renamed the
infoURLsandvidURLsfields in theLaunchmodel toinfo_urlsandvid_urls - renamed the
locationfield in theLandingmodel tolanding_location - renamed the
manufacturerfilter on theSpacecraftConfigurationendpoint toagency, to match the filtering field - renamed the
nation_urlfield in theAgencymodel tosocial_icon
- made the
apogee,gto_capacitylaunch_mass,leo_capacity, andto_thrustfields floats in theLauncherConfigurationmodel - made the
familyfield in theLauncherConfigurationmodel a FK to the newLauncherConfigurationFamilyconfig - made the
founding_yearfield an integer in theAgencymodel - made the
latitudeandlongitudefields floats in theLocationandPadmodels - made the
launch_costfield an integer in theLauncherConfigurationmodel - made the
spacecraft_stagefield in theRocketmodel an M2M relation to theSpacecraftFlightmodel - made the
status,net,window_startandwindow_endfields non-nullable in theLaunchmodel - made the
statusfield in theLaunchermodel aLauncherStatusFK, and added filtering by FK ID on the endpoint - made the
typefield in theAgencymodel a FK to theAgencyTypeconfig - replaced the
agency_idfield in thePadmodel with an M2M relation to theAgencymodel - replaced the
turn_around_time_daysinteger field in theFirstStagemodel by an ISO8601-formattedturn_around_timeduration field - reworked the
DockingEventmodel to make it work with a chaser and a target, both of which can be aSpacecraft,SpaceStation, orPayloadFK - reworked the
DockingLocationmodel to make it have both aSpacecraftFK and aPayloadFK
- removed the
holdreasonfield from theLaunchmodel - removed the
launch_library_urlfields from all models where it was still present (remains from the LL1 era) - removed the
news_urlandvideo_urlfields from theEventmodel (replaced byInfoURLandVidURLM2Ms like for launches, as introduced in 2.2.0) - removed the
r_spacex_api_idfield from theLaunchmodel and the associated filter on the endpoint (API deprecated) - removed the
the nation_urlfield from theSpacecraftConfigurationmodel - removed the
twitterandinstagramfields from theAstronautmodel - removed the
vehicle_rangefield from theLauncherConfigurationmodel
- added the
Payload Deployed(ID 9) launch status, returned asIn Flight(ID 6) in older versions - added
webcast_liveautomation for NASA+ URLs inVidURLobjects
- added admin panel validations to prevent common human errors (e.g. multiple librarians editing something at the same time)
- automated the endpoint docs to provide fully exhaustive filtering, sorting, ordering, and generic information
- major refactor of all serializers to clean up code and allow full tests coverage, this means some fields might have
been added/removed to/from the
listandnormalmodes - major refactor of all endpoints to ensure polymorphism is properly documented in the schema
- removed the non-strict LSP & location filtering option from the
Launchendpoint that prevented proper filter documentation - renamed all endpoint URLs to use plural and
snake_case - significant database-related performance improvements on all endpoints
