Skip to content

Defining a stable core API for better maintainability #16975

Open
@neshume

Description

Proposal: Defining a stable core API for better maintainability

Description

As a developer using Bevy for project development, I've encountered challenges with maintaining my projects due to the rapid evolution of the Bevy API. While I understand and appreciate the reasons behind the frequent changes (rapid iteration, performance improvements, keeping up with the evolving Rust gamedev ecosystem), I believe that defining a stable core API could provide significant benefits for project maintainability and long-term adoption.

Proposal

I suggest that we consider defining a stable core API that encapsulates the fundamental primitives and patterns that are unlikely to change frequently. This could include things like:

  • Colors
  • Transforms
  • Basic ECS composition and usage
  • Core math types and operations
  • Key input event handling
  • Basic rendering setup and configuration

The goal would be to provide a fixed, well-documented API for these core concepts that developers can rely on across Bevy versions, even as the wider framework continues to evolve and improve.

Potential Benefits

  • Improved maintainability for long-lived projects
  • Reduced upgrade friction and breaking changes for fundamental use cases
  • A stable foundation for learning Bevy and building reusable libraries
  • Increased adoption and confidence in using Bevy for serious projects

Potential Approaches

  • Carefully designing core APIs with forwards/backwards compatibility in mind
  • Providing a separate "core" library with a fixed API, distinct from the main library
  • Maintaining thorough documentation and guides for the stable APIs
  • Providing detailed changelogs and migration guides for any necessary breaking changes
  • Offering a slower-moving, stability-focused release channel in addition to the current cutting-edge channel

Open Questions

  • What specific primitives and patterns should be included in the stable core?
  • How do we balance stability with the need for ongoing improvement and evolution?
  • How do we handle necessary breaking changes to the stable core over time?
  • What's the best way to structure and distribute a stable core API alongside the main library?

I'm open to discussion and feedback on this proposal. I believe that with careful design and community input, we could define a stable core that would make Bevy even more powerful and appealing for long-term, serious project development.

Cheers,

Neshume

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    A-MetaAbout the project itselfC-FeatureA new feature, making something new possibleS-Needs-DesignThis issue requires design work to think about how it would best be accomplished

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions