Making Video Games in 2025 (without an engine)
This article explores the unique approach of a veteran indie game developer, known for 'Celeste,' who chooses to build games without a commercial engine, opting instead for a custom C#-based toolchain. It details their highly opinionated workflow, covering everything from language choice to custom editors and platform portability, showcasing the power of bespoke solutions. Hacker News found it refreshing for its deep dive into practical, engine-agnostic development without once mentioning AI, focusing purely on craft and control.
The Lowdown
Noel Berry, a game developer with two decades of experience and co-creator of the acclaimed game 'Celeste,' challenges the common assumption that large commercial engines like Unity or Unreal are essential for making games. He argues that building custom toolchains can be easier, more fun, and less overhead, especially for indie projects that don't require the vast feature sets of these engines and wish to avoid their potential business pitfalls. Berry shares his specific workflow and rationale for this 'engine-less' approach to game development in 2025.
- Motivation for Custom Tools: Berry emphasizes avoiding engine bloat, regaining control over the development stack, and sidestepping issues like unethical business decisions or disruptive updates common with proprietary engines. He finds he often rewrites core engine features anyway, making the engine redundant.
- Programming Language: He primarily uses modern C#, highlighting its significant improvements in performance and syntax since 2003. He praises its balance of speed and ease of use, accessibility for small teams (citing his brother's rapid learning curve), and robust reflection capabilities for editor tooling.
- Core Development Libraries: For cross-platform system abstraction (windowing, input, rendering), Berry relies on SDL3, noting its open-source nature, industry adoption (e.g., Valve), and new GPU abstraction layer. He built a custom C# layer, 'Foster,' on top of SDL. FMOD is used for audio, despite being proprietary, due to its advanced dynamic audio control.
- Asset Management: He employs a straightforward approach, loading assets as needed. For pixel art games, entire games load upfront due to small file sizes. Custom scripts handle asset conversion during compilation, particularly for formats like Aseprite files, which integrate directly into his engine for animation.
- Editor and UI Tools: Rather than using commercial tools, Berry often creates custom level editors. He leverages Dear ImGui, an immediate-mode GUI library, for building editor UIs, appreciating its simplicity and ease of integration with C# reflection to inspect game objects.
- Portability: Previously a concern, C# Native-AOT (Ahead-of-Time compilation) has made C# code portable across major console architectures, removing the need for transpilation tools. Combined with SDL3's console support, C# game deployment is significantly simplified.
- Development Environment: Berry has transitioned from Windows to Linux for game development, citing increasing frustrations with Microsoft's OS and a preference for open-source, cross-platform tools.
- Miscellaneous Insights: He views Godot as the best open-source alternative for those who do need an engine. For 3D, he still prefers custom frameworks for stylized games, exemplified by 'Celeste 64' built in under two weeks. He acknowledges that large teams might find engine migration costly but notes a trend of mid-sized studios moving to custom solutions.
Ultimately, Berry concludes that choosing to make games without a big engine is a personal preference, particularly suited for those who find the process enjoyable and seek maximum control, especially experienced indie developers or smaller teams. He aims to demystify the 'from scratch' approach, showcasing it as a viable and often superior path.
The Gossip
Crafting Custom Code vs. Commercial Convenience
The discussion extensively debated the merits and pitfalls of developing games with a custom engine versus using off-the-shelf commercial solutions. Many commenters, including one who identified as a seasoned developer, cautioned that building a custom engine is only viable for those with deep experience, warning it could otherwise become a 'fool's errand.' Conversely, advocates for custom approaches praised their simplicity and control, highlighting code-first frameworks or lower-level libraries as superior for non-AAA titles. Others defended commercial engines, citing their crucial role in providing platform targeting and stability for reaching a broad market, and acknowledged the effort involved in custom development, even suggesting AI tools could mitigate the challenges of C++.
Celeste's Creator Confirms Credibility
A significant portion of the comments expressed surprise and increased admiration upon realizing the author, Noel Berry, is a developer behind the highly acclaimed game 'Celeste.' This revelation instantly lent substantial credibility and context to the article's arguments about custom game development, transforming it from a general opinion piece into an authoritative guide from an accomplished expert. Some commenters also pointed out that the topic had been previously discussed on Hacker News, indicating ongoing community interest.
Bloated Base or Beautiful Blueprint?
Commenters engaged in a nuanced discussion about the inherent 'bloat' of large game engines and their role. While agreeing with the author that engines can be excessively feature-rich, some questioned the extent to which developers should reinvent the wheel. One prominent view suggested that engines, despite their bulk, offer valuable foundational elements like sophisticated rendering pipelines and editor UI frameworks. This perspective argued that instead of eschewing engines entirely, developers could use them as a 'vehicle' for core rendering and UI, then build custom nodes or plugins to integrate differentiating features, thus leveraging the engine's strengths without being entirely constrained by its defaults.