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
mission
object to thelaunch
object, thelaunch_designator
field 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 newImage
object 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
ImageVariant
objects (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
CelestialBody
object has been created forOrbit
,Location
, andLandingLocation
objects, 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
Country
objects. - 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
,PayloadFlight
objects allow the addition of uncrewed & non-reusable space objects to rockets in a similar fashion as the existingSpacecraft
objects. - 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_designator
automation 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
Rocket
objects 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
, andSpaceStation
objects, 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.
FK
meansForeign Key
, which creates a single relation from one object to another (reusable) one. For example, theLocation
FK in thePad
model. One pad can only be linked to one location, but one location is often linked to multiple pads.M2M
meansMany-To-Many
, which creates relations from one object to multiple other ones. For example, theAstronautFlight
M2M in theSpacewalk
model, for linking multiple crew members to a single spacewalk object.
- added the
CelestialBody
model (+CelestialBodyType
config), used as FK in theLocation
,LandingLocation
, andOrbit
models - added the
Country
config to replace string-based information in theAgency
,Astronaut
,Location
, andPad
models - added the
Image
andImageVariant
models (+ImageLicense
andImageVariantType
configs), used as FK in place of almost all previousimage_url
,profile_url
,logo_url
, etc. fields across many models - added the
LauncherConfigurationFamily
model, used as M2M in theLauncherConfiguration
model - added the
Payload
andPayloadFlight
models (+PayloadType
config) - added the
ProgramType
config, used as FK in theProgram
model - added the
SocialMediaLink
model (+SocialMedia
config), used as M2M in theAstronaut
andAgency
models - added the
SpacecraftConfigurationFamily
model, used as M2M in theSpacecraftConfiguration
model - added the
SpacecraftConfigurationType
config, used as FK in theSpacecraftConfiguration
model
- added the
active
andimage
fields toLocation
andPad
models - added the
duration
andturn_around_time
duration fields to theSpacecraftFlight
model - added the
fastest_turnaround
duration fields to thePad
,Launcher
,LauncherConfiguration
,Spacecraft
, andSpacecraftConfiguration
models - added the
geo_capacity
andsso_capacity
fields to theLauncherConfiguration
model - added the
is_placeholder
field to theLauncher
model - added the
is_placeholder
field to theLauncherConfig
model (for cases where the exact variant is not known yet, e.g. a generic Vulcan Centaur or Ariane 6) - added the
live
boolean field to theVidURL
model, and automated it - added payload and spacecraft landing statistics to the
Agency
model - added stats to the
SpacecraftConfiguration
model - added the
astronauts
field to theEvent
model - added the
attempted_landings
andfailed_landings
fields to theLandingLocation
model
- combined the functionality of comma-separated
lsp__ids
and the singlelsp__id
filters intolsp__id
on thelaunches
endpoint - moved the
launch_designator
field (unpopulated before 2.3.0) from theMission
model to theLaunch
model, and automated it - renamed the
docked
field in theSpaceStation
model tocurrently_docked
- renamed the
infoURLs
andvidURLs
fields in theLaunch
model toinfo_urls
andvid_urls
- renamed the
location
field in theLanding
model tolanding_location
- renamed the
manufacturer
filter on theSpacecraftConfiguration
endpoint toagency
, to match the filtering field - renamed the
nation_url
field in theAgency
model tosocial_icon
- made the
apogee
,gto_capacity
launch_mass
,leo_capacity
, andto_thrust
fields floats in theLauncherConfiguration
model - made the
family
field in theLauncherConfiguration
model a FK to the newLauncherConfigurationFamily
config - made the
founding_year
field an integer in theAgency
model - made the
latitude
andlongitude
fields floats in theLocation
andPad
models - made the
launch_cost
field an integer in theLauncherConfiguration
model - made the
spacecraft_stage
field in theRocket
model an M2M relation to theSpacecraftFlight
model - made the
status
,net
,window_start
andwindow_end
fields non-nullable in theLaunch
model - made the
status
field in theLauncher
model aLauncherStatus
FK, and added filtering by FK ID on the endpoint - made the
type
field in theAgency
model a FK to theAgencyType
config - replaced the
agency_id
field in thePad
model with an M2M relation to theAgency
model - replaced the
turn_around_time_days
integer field in theFirstStage
model by an ISO8601-formattedturn_around_time
duration field - reworked the
DockingEvent
model to make it work with a chaser and a target, both of which can be aSpacecraft
,SpaceStation
, orPayload
FK - reworked the
DockingLocation
model to make it have both aSpacecraft
FK and aPayload
FK
- removed the
holdreason
field from theLaunch
model - removed the
launch_library_url
fields from all models where it was still present (remains from the LL1 era) - removed the
news_url
andvideo_url
fields from theEvent
model (replaced byInfoURL
andVidURL
M2Ms like for launches, as introduced in 2.2.0) - removed the
r_spacex_api_id
field from theLaunch
model and the associated filter on the endpoint (API deprecated) - removed the
the nation_url
field from theSpacecraftConfiguration
model - removed the
twitter
andinstagram
fields from theAstronaut
model - removed the
vehicle_range
field from theLauncherConfiguration
model
- added the
Payload Deployed
(ID 9) launch status, returned asIn Flight
(ID 6) in older versions - added
webcast_live
automation for NASA+ URLs inVidURL
objects
- 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
list
andnormal
modes - major refactor of all endpoints to ensure polymorphism is properly documented in the schema
- removed the non-strict LSP & location filtering option from the
Launch
endpoint that prevented proper filter documentation - renamed all endpoint URLs to use plural and
snake_case
- significant database-related performance improvements on all endpoints