Fact-checked by Grok 2 weeks ago

Solar2D

Solar2D is a free and open-source, Lua-based 2D designed for rapid development of cross-platform applications and games using a single codebase. Originally developed as the proprietary Corona SDK by Corona Labs Inc., the project was forked by the developer community in 2020 following the company's closure, rebranded as Solar2D, and released under the to ensure its continued evolution. It has been actively maintained for over a and powers hundreds of thousands of apps worldwide. Key features of Solar2D include its lightweight scripting language, which provides over 1,000 functions for handling graphics, physics, audio, and user input; an instant-update simulator for quick iteration during development; and extensive plugin support for integrations like advertising, analytics, and media services through official directories. The engine supports deployment to a wide range of platforms, including and , and , , macOS, Windows, desktops, and for web browsers, making it suitable for mobile, desktop, and connected TV environments. Solar2D emphasizes ease of use with native library bindings for C/C++, Objective-C, and Java, allowing advanced customization without royalties or user tracking. Its vibrant open-source community contributes to ongoing improvements via GitHub, forums, and Discord, fostering a ecosystem of free plugins and code exchanges.

Overview

Description

Solar2D is a free, open-source, Lua-based cross-platform framework designed for the rapid development of 2D applications and games. It evolved from the Corona SDK as an official open-source fork, maintaining a focus on simplicity and efficiency for developers. The framework supports deployment to a variety of platforms, including mobile devices on and , desktops running macOS, Windows, and , televisions via and , and web browsers through HTML5. This cross-platform compatibility enables the creation of a single codebase that can be published across multiple environments with minimal adjustments. Solar2D prioritizes fast iteration cycles and ease of use, particularly appealing to beginners, while enabling the development of immersive 2D experiences such as games and interactive apps. A distinguishing feature is its hot-reloading mechanism via Live Builds, which allows code and asset changes to update automatically on simulators or devices over a local network without requiring full rebuilds, accelerating the testing process. Additionally, it offers access to plugins for extending functionality in areas like monetization and analytics.

Licensing and development model

Solar2D is released under the , which was adopted following its open-sourcing in 2020, permitting free use for both commercial and non-commercial purposes while providing full access to the source code hosted on . This permissive licensing model enables developers to modify, distribute, and integrate the engine into their projects without restrictions on redistribution or proprietary use. Development of Solar2D is community-led primarily through the repository at coronalabs/, where volunteers and former Corona Labs team members contribute code, plugins, and documentation to maintain and enhance the , with the Solar2D organization supporting related projects. The project relies on user sponsorships and donations to fund ongoing work, fostering a collaborative environment that has sustained active development since the rebranding from SDK amid financial challenges at Corona Labs. The release process includes daily builds for testing new features and bug fixes, alongside periodic stable public releases to ensure reliability for production use. For instance, the stable version 2025.3726, released on November 5, 2025, introduced stability improvements and several bug fixes across platforms. Unlike the original SDK, which featured paid subscription tiers for advanced features, Solar2D operates entirely without fees, subscriptions, or royalties, making it accessible to all developers.

History

Origins as Corona SDK

Corona SDK originated from the efforts of Ansca Mobile, a company founded in 2008 by Carlos Icaza and Walter Luh in , with the goal of simplifying cross-platform . The was publicly introduced as a Lua-based tool for creating native mobile applications, with its first beta released in June 2009 for early adopters, followed by version 1.0 in December 2009, initially targeting devices. By April 2010, Ansca unveiled version 2.0, which expanded support to include and , enabling developers to build 2D games and apps using scripting for rapid prototyping across platforms. In June 2012, Ansca Mobile rebranded to Corona Labs Inc., reflecting the product's growing prominence. Under Corona Labs, the SDK initially operated as a commercial offering with a model, providing a free basic tier for core development and paid Pro subscriptions starting at around $200 annually for advanced tools and builds. Key milestones included the launch of Corona Enterprise in August 2012, which introduced native bindings for deeper platform integration. In March 2013, the company launched Corona Cloud, adding capabilities for monetization, analytics, leaderboards, achievements, and social integration to support professional app deployment. These enhancements catered to the needs of game developers seeking efficient solutions without the complexity of full engines like . In March 2015, Corona Labs made the SDK completely free for all users. In November 2015, the company was acquired by Perk.com for $2.3 million, which aimed to integrate Corona with its rewards platform. In June 2017, following acquisition by Appodeal in March 2017, Corona Enterprise was also made free, eliminating all paid tiers. In January 2019, Corona Labs announced plans to open-source the engine under the GPLv3 , making the core codebase publicly available on while retaining commercial options for certain features. The gained significant traction, with over 500,000 developers worldwide using it to create mobile apps and games by the late . Its emphasis on Lua's lightweight syntax and quick iteration cycles made it particularly popular for indie 2D projects, powering titles in app stores and contributing to a community-driven ecosystem. However, by late 2019, Corona Labs faced mounting challenges, including intense competition from established engines like and escalating costs of maintaining cross-platform compatibility amid evolving mobile OS requirements, which strained sustainability.

Open-sourcing and rebranding

In February 2020, Corona Labs announced the shutdown of the company effective May 1, 2020, citing financial difficulties where operating expenses had outpaced revenue, with the final commercial update of the Corona SDK released in May 2020. This decision came amid the emerging , which exacerbated economic pressures on many tech firms, though the core issues predated the global crisis. The original Corona SDK, which had powered thousands of commercial mobile games and apps since its inception, faced an uncertain future as the proprietary model ended. Following the company's closure, a group of developers from the Corona community initiated an open-source in May 2020, rebranding the engine as Solar2D to distance it from the "" name—partly due to its unfortunate association with the ongoing —and to sidestep potential conflicts. The inaugural release under the new name, version 2020.3572, marked the project's independence and was distributed via daily builds on . The migration involved transferring the full codebase to a public repository under the coronalabs organization, preserving the foundational scripting core and APIs while establishing community-led governance through forums, pull requests, and volunteer contributions. This shift to the enabled rapid iteration without corporate oversight, focusing on offline builds and compatibility. The immediate aftermath saw robust community engagement, ensuring the project's survival and growth; by its fifth anniversary in May 2025, Solar2D had evolved into a mature open-source engine with consistent updates integrating support for the latest OS APIs on iOS, Android, and desktop platforms.

Core Architecture

Lua scripting and API

Solar2D utilizes Lua 5.1.3 as its primary scripting language, leveraging Lua's design as a lightweight, embeddable extension language to enable procedural programming within the engine's runtime environment. This integration allows developers to write scripts that interact seamlessly with the underlying C++ core, facilitating rapid prototyping and iteration for cross-platform applications. Lua's simplicity and efficiency make it ideal for real-time scenarios like games, where scripts handle logic without imposing heavy overhead on performance. The scripting model in Solar2D is predominantly event-driven, where developers attach listeners to objects or the runtime to respond to events such as user input, collisions, and timers. For instance, a touch event listener can be added to a display object using object:addEventListener("touch", listenerFunction), enabling asynchronous handling of interactions without polling. This paradigm promotes modular code organization, as scripts react to system-dispatched events rather than relying on a traditional main loop for all updates. Collision events from the physics engine and timer callbacks further exemplify this approach, allowing precise control over dynamic behaviors like object interactions or scheduled actions. Solar2D's API is structured around modular libraries that provide high-level abstractions for common functionalities, organized into namespaces accessible directly in Lua scripts. Key libraries include display for creating and managing visual objects, such as loading images with display.newImage("path/to/image.png") to instantiate a textured rectangle; physics, which wraps the Box2D version 3.1 (as of April 2025) engine for simulations via functions like physics.addBody(object, "dynamic"); and system, offering platform-specific information through properties like system.getInfo("platform") to query device capabilities. These libraries encapsulate low-level details, enabling developers to focus on application logic while maintaining portability across targets. Lua scripting in Solar2D benefits from the language's compilation at load time, ensuring fast execution suitable for performance-sensitive tasks, alongside a sandboxed environment that restricts direct to the operating system for enhanced security in deployed applications. Scripts operate within a contained , where I/O operations are limited to designated directories like system.DocumentsDirectory, preventing unauthorized file or network manipulations outside the app's scope. This isolation supports secure distribution on app stores while allowing controlled persistence and resource management. Error handling and are tailored to the event-driven nature of game loops, with assertions providing immediate feedback on issues like invalid calls or type mismatches, displayed as pop-up alerts in the simulator or logged to console in builds. Stack traces are generated for unhandled exceptions, tracing back through the call hierarchy to pinpoint errors in main.lua or modular scripts, often including line numbers and context from event listeners. Developers can customize error handlers via the global object to suppress alerts in production or integrate with external tools, ensuring robust without disrupting the core loop.

Runtime and platform abstraction

Solar2D's runtime is implemented as a C++ core, originally developed for the Corona SDK and forked into the open-source Solar2D project under the MIT license. This core orchestrates the application's execution, managing the life cycle from initialization in main.lua through the ongoing event and drawing loop that renders updates to the screen. The runtime environment operates within a secure sandbox, limiting access to files, memory, and network resources to those specific to the application, with paths generated via platform-agnostic APIs to ensure isolation across devices. Memory management in the runtime integrates Lua's automatic garbage collector, which periodically identifies and frees unreferenced objects, including display objects removed from the scene hierarchy. Developers must explicitly set global variables and unused objects to nil to avoid persistent references that could lead to memory leaks, as the collector does not immediately process them. The C++ core complements this by handling native , ensuring compatibility with Lua's collection cycle without direct developer intervention in low-level deallocation. To support non-blocking operations, the employs an event-driven model via the global singleton, dispatching events like enterFrame without true multithreading in scripts; instead, coroutines and timers provide to prevent UI freezes during long computations. Platform abstraction layers unify hardware and OS interactions, exposing consistent for core functionalities: file I/O through system.pathForFile, which resolves sandboxed paths regardless of the underlying filesystem; device capabilities via system.getInfo, returning details such as model, (e.g., or x86), and environment type; and orientation handling with display that normalize screen metrics across , , macOS, and Windows. Performance optimizations target a configurable frame rate of up to 60 , set via the frameRate key in , with the default at 30 but commonly elevated to 60 for smooth rendering. Updates rely on delta time passed to enterFrame events, enabling frame-rate independent logic by scaling movements and simulations proportionally to elapsed time between frames, thus maintaining consistent behavior even if actual varies due to device load. The accommodates both 32-bit and 64-bit architectures, including (for ) and x86 (for ), as detected by system.getInfo, allowing builds to target diverse without code changes. Security is enforced through the , which prohibits arbitrary native code execution from ; access to platform-specific features requires plugins, which are C++ or native modules that expose controlled via the , mediating calls to prevent unauthorized system interactions.

Features

Graphics and rendering

Solar2D's graphics system is built around the library, which provides a suite of functions for creating 2D visual elements such as sprites, shapes, and text objects. Sprites and textured images are generated using display.newImage() or display.newImageRect(), which load assets and support mipmapping to optimize rendering quality and performance across varying distances and resolutions. Primitive shapes like rectangles, circles, and polygons are created via display.newRect(), display.newCircle(), and display.newPolygon(), respectively, allowing for vector-based drawing that scales without . Text rendering is handled by display.newText() for standard fonts or display.newEmbossedText() for stylized effects, with options for dynamic font loading and styling. The rendering pipeline in Solar2D leverages as the primary backend on mobile platforms like and , enabling hardware-accelerated 2D drawing through GLSL shaders, while desktop builds on Windows and macOS use with experimental support for on Windows. A key aspect of the pipeline is the structure, implemented via groups created with display.newGroup() or display.newContainer(), which establish parent-child hierarchies for organizing objects. These hierarchies facilitate efficient transformations—such as , , and applied via like x, y, rotation, and scaleX—and automatic of off-screen child objects to minimize draw calls and improve performance. Visual effects in Solar2D include a range of built-in filters applied directly to display objects through the fill.effect or stroke.effect properties, such as "filter.blurGaussian" for adjustable blurring or "filter.grayscale" for monochrome conversion, which leverage the GPU for real-time processing without custom code. For more advanced customization, developers can define shaders using graphics.defineEffect(), specifying vertex and fragment programs in GLSL ES to create effects like distortion or color manipulation, with access to uniforms such as CoronaTotalTime for animation. These shaders integrate seamlessly into the rendering pipeline, supporting time-dependent effects across platforms. Performance optimizations in Solar2D's graphics system emphasize texture atlasing through image sheets, created with graphics.newImageSheet(), which packs multiple assets into a single texture to reduce binding overhead and draw calls, particularly beneficial on resource-constrained mobile devices. The engine also handles high-density displays like by automatically selecting @2x or higher resolution variants based on device capabilities, ensuring sharp visuals while maintaining vector shapes' scalability. These features collectively enable efficient rendering of complex 2D scenes with minimal developer overhead.

Physics simulation

Solar2D integrates the physics engine through its physics library, enabling 2D simulations of moving and colliding objects influenced by forces such as . To initialize the physics system, developers require the library with local physics = require("physics") and start the simulation using physics.start(), which must precede other physics operations; the simulation can be paused with physics.pause() or stopped with physics.stop(). This setup leverages display objects to represent physical bodies visually, allowing seamless integration of physics with rendering. Physics bodies are created via physics.newBody(), specifying properties like body type (dynamic for simulated movement under forces, static for immovable objects with , or kinematic for velocity-driven motion ignoring forces), derived from and area (default 1.0), and shapes such as (shape="circle", [radius](/page/Radius)=20) or polygons (via a of up to eight vertices). Fixtures are added to bodies using physics.addBody(displayObject, {density=1.0, [friction](/page/Friction)=0.3, [bounce](/page/Bounce)=0.2}), defining collision properties like and restitution. Multi-element bodies support complex shapes, such as combining polygons for vehicle components. Collision detection operates through an event-based system, dispatching events in phases: "began" for initial , "ended" for separation, "preCollision" for pre-interaction modifications (e.g., disabling with event.contact.isEnabled = false), and "postCollision" for post-interaction analysis including and values. Local events attach to specific bodies (e.g., body:addEventListener("collision", handler) for player-enemy interactions), while global events use Runtime:addEventListener("collision", handler) for broader scenarios. Joints impose constraints between bodies, created with physics.newJoint(type, bodyA, bodyB, ...) and removed via joint:removeSelf(). Common types include revolute () joints for rotational connections at an anchor point, with optional limits (joint:setRotationLimits(-20, 20)) and (joint.motorSpeed = 100; joint.maxMotorTorque = 100000), and distance joints to maintain separation between anchors, adjustable for (dampingRatio=0.5) and . Simulation parameters ensure stability and performance, with gravity set via physics.setGravity(0, 10) in meters per second squared (default: (0, 9.8)), scale adjusted by pixels per meter using physics.setScale(60) (default: 30) to match visual units, and time step controlled by physics.setTimeStep(1/60) for fixed-rate updates. For optimization, bodies "sleep" by default after inactivity to reduce computational overhead, disabled globally with physics.start(true) or per body via body.isSleepingAllowed = false. Common use cases include platformers, where static bodies form immovable platforms and dynamic bodies simulate player jumps and falls under , and ragdolls, assembled from multiple dynamic bodies connected by revolute joints to mimic , physics-driven limb movement. Debugging is facilitated by physics.setDrawMode("hybrid"), which overlays wireframes and fills on bodies during simulation for visual inspection of shapes and interactions.

Audio and input handling

Solar2D provides a robust audio library for handling sound effects and music playback, leveraging for cross-platform compatibility across mobile, desktop, and TV platforms. Sound effects are typically loaded into memory using audio.loadSound(), which prepares short audio files for quick playback, while longer background music tracks are recommended to be loaded via audio.loadStream() to enable streaming and reduce memory usage. The library supports up to 32 distinct channels, allowing developers to assign specific sounds to channels for independent control, with properties like audio.totalChannels and audio.freeChannels providing runtime monitoring of channel availability. Playback is initiated with audio.play(), which returns a channel number and accepts options such as loops for repeating audio indefinitely (e.g., loops = -1 for continuous looping) or a finite number of times, making it suitable for that loops seamlessly. management is handled through audio.setVolume(), which sets the master or per-channel levels as a decimal value between 0 and 1, enabling dynamic adjustments for effects like music during . For smoother transitions, fade effects are available via audio.fadeIn(), audio.fadeOut(), and audio.fade(), which gradually adjust channel volumes over a specified time in seconds, preventing abrupt audio changes in user experiences. Input handling in Solar2D is event-driven, primarily through listeners attached to the runtime or display objects, supporting interactions essential for mobile and touch-enabled devices. The touch provides detailed data including phase values—began for initial contact, moved for gestures, ended for release, and cancelled for interruptions—along with coordinates (x, y) and a unique id for tracking multiple simultaneous touches. This structure facilitates , such as pinch-to-zoom, by monitoring distance changes between two or more touch points across moved phases, allowing developers to implement intuitive controls without external libraries. Keyboard and gamepad inputs are unified under the key event, which dispatches on key presses or releases with properties like keyName for standardized US layout mapping (e.g., "a" or "space") and phase ("down" or "up") for precise timing. Gamepads and joysticks extend this via the same event system, treating buttons as key inputs and analog axes as separate axis events with InputDevice objects to identify the controller, supporting multiplayer scenarios on platforms like and consoles. Haptic feedback enhances tactile responses on supported devices through system.vibrate(), which triggers device vibration patterns; for example, a simple call vibrates at default intensity, while options like {"impact", "light"} provide nuanced iOS haptics, with fallback beeps in the macOS simulator. Microphone access for voice input is facilitated through third-party plugins, such as the Microphone plugin, which enables real-time recording, volume detection, and automatic gain control, integrating seamlessly into the build process via build.settings. For optimization, streaming audio via loadStream() is preferred for extended files to avoid loading entire assets into memory, balancing performance on resource-constrained devices while maintaining low latency for interactive sounds. Input events are lightweight and processed efficiently in the Lua runtime, with touch phases enabling gesture detection without additional overhead, ensuring responsive handling in complex scenarios.

Networking and persistence

Solar2D's networking capabilities are primarily handled through the network library, which enables asynchronous HTTP and requests via the network.request() function. This function allows developers to send GET, , or other methods to specified URLs, handling responses through listener events for success, failure, or progress. For more advanced or low-level connectivity, the socket library, based on LuaSocket version 3.0-rc1, provides TCP creation using socket.tcp(), supporting custom protocols beyond standard HTTP. Lua tables are commonly used as data structures for preparing payloads in these networking operations. Data serialization and deserialization for networking are facilitated by the json library, which converts Lua tables to JSON strings with json.encode() and parses JSON back to tables using json.decode(), ensuring compatibility with REST APIs and web services. For persistence, Solar2D utilizes the system.DocumentsDirectory constant in conjunction with system.pathForFile() and the io library to store files that persist across app sessions, such as game saves or user progress, by writing and reading data via io.open(), io.write(), and io.read(). Binary storage is achieved by directly writing raw bytes to files opened in binary mode. Simple key-value storage for preferences, like user settings, is managed through system.setPreferences() to write tables to device storage and system.getPreference() to retrieve values, with categories such as "app" for app-specific data. Cloud integration is supported through marketplace plugins, including those for , which handle , , and real-time databases, and PlayFab, which provides backend services for leaderboards, multiplayer, and virtual economies. Multiplayer functionality, such as real-time synchronization, can be implemented using plugins like the develephant WebSockets client, enabling bidirectional communication over ws:// or wss:// connections. Security in networking is enforced by default support for in network.request(), which uses the device's native TLS implementation to secure data transmission. Developers are recommended to encrypt sensitive user information, such as passwords, using Lua-compatible libraries like LuaCrypto before storage or transmission, following platform-specific guidelines to avoid cleartext exposure.

Development and Deployment

Simulator and tools

The Solar2D desktop simulator serves as the primary development environment for prototyping and testing applications on macOS and Windows platforms. It offers real-time preview capabilities, allowing developers to run code directly on the host machine and observe immediate visual and behavioral feedback without needing physical devices. A key feature is hot-reload, which automatically reloads and updates the simulation upon saving changes to the source files, streamlining iterative development workflows. The simulator emulates diverse characteristics to facilitate cross-platform testing, including various screen sizes, aspect ratios, and orientations configurable via the project's config.lua file. For instance, developers can specify content scaling modes such as "letterbox" or "zoomEven" to adapt visuals to different resolutions, ensuring consistent rendering across emulated and form factors. Performance profiling is supported through built-in APIs like system.getTimer() for timing code execution and monitoring frame rates, helping identify bottlenecks early in development. Debugging within the simulator relies on straightforward logging via the print() function, which directs output to an integrated console window for real-time inspection of variables, errors, and execution flow. For more advanced , such as setting breakpoints, stepping through code, and inspecting variables, integration with external tools like ZeroBrane Studio is commonly employed; this connects to the simulator via debug flags (e.g., launching with "/debug" on Windows or "-debug YES" on macOS) to enable remote debugging sessions. Memory management features include manual garbage collection calls and monitoring via collectgarbage("count"), allowing developers to track memory usage and detect potential leaks by observing incremental increases over repeated simulations. Solar2D lacks a built-in asset or scene editor, emphasizing instead seamless integration with external integrated development environments (IDEs) for asset handling and code management. Popular choices include with dedicated extensions like Solar2D Editor, which provide syntax highlighting, API autocompletion for over 1,000 functions, and project launching directly from the IDE to the simulator. This setup supports efficient organization of assets such as images, sounds, and scripts within project directories. For testing, Solar2D leverages the unit testing framework, a robust library that enables writing and executing modular tests outside or alongside simulator runs. Developers can mock Solar2D APIs (e.g., display objects) to isolate logic and verify functionality, with tests invocable via command-line tools or simulator integration. To simulate resource-constrained environments, the framework dispatches memoryWarning events that trigger low-memory scenarios, allowing tests to validate application resilience without actual device deployment.

Build process and platforms

Solar2D facilitates the and of applications through its tool, which generates platform-specific binaries or exports while maintaining portability via the underlying . The primary occurs in the build.settings , a placed in the project root that defines essential parameters such as application name, version, supported orientations, icons, splash screens, and plugins. For instance, orientations are specified under a table with keys like default and supported, allowing values such as "portrait" or "landscapeRight". Plugins are included via a plugins , referencing publisher IDs and versions, e.g., ["plugin.gpgs"] = { publisherId = "com.coronalabs" }. Icons vary by platform: requires density-specific files (e.g., Icon-xxxhdpi.png at 192×192 pixels), uses asset catalogs in Images.xcassets, Windows employs Icon-win32.ico, and macOS utilizes Icon-osx.icns. Builds are performed locally using the Simulator to generate platform-specific projects, requiring tools like for and for . Live builds for device testing are available via cloud for , , and , allowing real-time updates without full recompilation, but production builds must be handled locally. Optimization options in build.settings include flags like skipPNGCrush = true under the iphone table to disable PNG processing during builds, reducing build time at the potential cost of larger file sizes. Solar2D remains actively maintained as of 2025, with recent releases such as version 2025.3722 in August 2025 introducing improvements to HTML5 builds and other features.
PlatformOutput FormatKey RequirementsSigning/Deployment Notes
iOS.app bundleApple Developer account, provisioning profiles, XcodeRequires development or distribution certificates generated via Keychain Access and the Apple Developer portal; supports Ad Hoc for limited devices or App Store for submission. Local builds use Xcode for compilation and sideloading via USB or iTunes for testing.
tvOS.app bundleApple Developer account, provisioning profiles, XcodeSimilar to iOS; requires tvOS-specific icons and launch screens. Deployment via Xcode to Apple TV devices or App Store.
AndroidAPK or AABJava package name, keystore, Android StudioDebug signing uses a default debug.keystore; release builds require a custom keystore generated with keytool. AAB is optimized for Google Play, including app bundle signing. Local installation via Android Studio or adb install for sideloading.
Android TVAPK or AABJava package name, keystore, Android StudioRequires leanback launcher support; tested on Android TV devices. Signing and deployment similar to Android, via Google Play or sideloading.
Amazon FireAPKJava package name, keystore, Amazon Developer accountBuilds similar to Android; deployment via Amazon Appstore. Requires Amazon-specific testing on Fire tablets and TV.
Windows Desktop.exe executableOpenGL 2.1+ driverBuilds directly from Simulator, producing a 32-bit .exe with DLLs and assets in a folder; no signing required for basic distribution, though code signing is recommended for security.
macOS Desktop.app bundlemacOS systemGenerated via Simulator; includes bundle structure with assets. Notarization via Apple's tools is advised for distribution outside the Mac App Store.
Linux DesktopExecutable binaryLinux system with OpenGLCommunity-maintained support; builds via Simulator on macOS/Windows, experimental deployment on Linux distributions like Ubuntu. No official signing process.
HTML5Web folder exportWebGL-compatible browserExports a self-contained directory with HTML, JavaScript, and assets for WebGL rendering; no compilation needed, deploy by uploading to a web server for browser access. Still in beta, with Lua-JavaScript interop supported.
The release cycle emphasizes iterative testing through before store submission. For and , developers register devices and App IDs in the Apple Developer portal, generate provisioning profiles, and use Organizer for archiving and uploading to App Store Connect, adhering to Apple's guidelines on metadata, screenshots, and review processes. and releases involve generating signed AABs for Console upload, complying with policies on permissions, content ratings, and testing via internal tracks. builds are submitted to the . Desktop builds are distributed as installers or zipped folders, while HTML5 exports require hosting on servers for modern compatibility. This workflow ensures apps built with Solar2D's platform abstraction deploy consistently across targets.

Community and Ecosystem

Documentation and support

Solar2D provides comprehensive official documentation through its primary resource at docs.coronalabs.com, which includes a detailed API reference covering over 1,000 APIs for libraries such as , physics, and audio, along with beginner-oriented guides like the "Getting Started" section that introduces project creation, Lua programming basics, and platform setup. The documentation also features topic-specific on areas like distribution, monetization, and media handling, ensuring developers have structured paths for learning core functionalities. Video tutorials supplement the written resources, with official and community-endorsed series available on , such as the "Solar2D Getting Started Tutorials" playlist that covers project setup, scene management, and deployment in step-by-step videos aligned with the . These tutorials, often referencing the docs.coronalabs.com guides, help visual learners implement concepts like physics simulations and audio integration from the outset. Community support is facilitated through the official forums at forums.solar2d.com, where users engage in on technical issues, share code snippets, and discuss best practices, with active categories for announcements including 2025 releases like version 2025.3726 that detail fixes for audio and API compatibility. Bug reports and feature requests are handled via the repository at github.com/coronalabs/, where issues are tracked and resolved by contributors, supporting the open-source development model. Learning paths include sample projects bundled with the Solar2D Simulator, providing hands-on examples for features like sprite manipulation and physics, accessible in daily builds available through releases for testing upcoming changes. Migration guides from the legacy SDK are available primarily through threads, offering step-by-step instructions on transitioning from online builds to Solar2D's offline system, including plugin updates and build settings adjustments. Support for Solar2D is entirely community-driven, relying on responsive maintainers and thousands of developers via forums, , and , with no paid tiers but options for project sponsorship to aid maintenance. This model ensures timely responses to queries, as evidenced by rapid discussions following 2025 release announcements.

Plugins and extensions

Solar2D's system enables developers to extend the engine's core functionality by integrating native code modules written in languages such as for , Java or C++ for , and wrapping them for use in scripts. These are loaded dynamically via the require() function and configured through the build.settings file, where developers specify the plugin's publisher ID and version to include it during the build process. This architecture allows access to platform-specific APIs that are not natively available in Solar2D's -based , such as advanced interactions or third-party services. Plugins are categorized by their primary function, with common types including and tools, and attribution services, networking integrations, and features for or system-level tasks. For , examples include the Unity Ads v4 plugin, which supports rewarded video and interstitial ads, and the Appodeal plugin, which aggregates multiple ad networks for optimized revenue. In , the Firebase Analytics plugin provides event tracking and crash reporting, while plugins like the SDK v4 enable sharing, login, and app invites. plugins encompass for near-field communication reading and writing, as well as haptic feedback via the Taptic plugin for customizable patterns on supported devices. The primary resource for discovering plugins is the Solar2D Free Plugin Directory at plugins.solar2d.com, which hosts a collection of community-contributed, open-source options available at no cost. For paid or premium plugins, developers can turn to marketplaces such as the or offerings from studios like Spiral Code Studio, which provide specialized extensions like QR scanners or text-to-speech capabilities. These directories ensure plugins are vetted for compatibility with Solar2D's build process and simulator testing. Developing custom plugins follows structured guidelines outlined in Solar2D Native documentation, starting with creating a (e.g., .so for or .a for ) and exposing functions through bindings. Plugins must adhere to naming conventions like "plugin.name" and include a build.settings integration template for easy adoption. Representative examples include the library for file compression and decompression tasks, and for handling UTF-8 encoded text processing in . Self-hosted plugins can be built using Native tools and tested in the simulator, allowing developers to distribute them independently or submit to directories for broader use.

Notable projects and adoption

Solar2D, formerly known as Corona SDK, has powered hundreds of thousands of apps and games across mobile, desktop, and other platforms since its inception over a decade ago. This widespread adoption stems from its open-source model, which facilitates rapid cross-platform development and community contributions. As of 2025, the project remains actively maintained, with daily builds incorporating updates for modern OS support, such as 35 compatibility in build 2025.3721. Several notable games highlight Solar2D's versatility in indie development. Coromon, a game by TRAGsoft, leverages Solar2D for its pixel-art world and turn-based , achieving success on mobile and PC platforms. , an action title from Ltd. released in 2015, uses the engine to deliver humorous survival gameplay with procedural elements, amassing positive reviews on app stores. The Forever Lost adventure series by Glitch Games, starting with Episode 1 in 2012, exemplifies point-and-click puzzle design built entirely in Solar2D, with the developer crediting the framework for enabling detailed 3D-like environments in 2D. On , titles like ConflictCraft demonstrate expansion, integrating achievements and leaderboards via Solar2D's Steamworks . These projects are often showcased in the "Made with Solar2D" curator group, which promotes releases built with the engine. Case studies underscore Solar2D's role in and . Glitch Games has produced multiple hits like Forever Lost using Solar2D since 2009, relying on plugins for in-app purchases and to drive revenue in the adventure genre. Educational apps, such as Labo Tank by Labo Lado Co., Ltd., illustrate enterprise adoption, where the engine's simplicity accelerates development of interactive learning tools for mobile devices. Developers frequently cite quick iteration cycles—often prototyping full games in days—as key to launching mobile successes with integrated IAP systems. Community metrics reflect sustained engagement. The main Solar2D GitHub repository holds approximately 2,700 stars, indicating developer interest in its Lua-based codebase. Forums feature ongoing activity, including 2025 announcements on the Code Exchange for shared resources like plugins and templates, with thousands of posts from a global user base. Discord and forum discussions maintain high interaction, supporting new projects and troubleshooting.

References

  1. [1]
    Solar2D Game Engine
    Solar2D is a Lua based game engine with focus on ease of iterations and usage. This is a fully open source project that is forked from the well established and ...Is Solar 2D still AliveSolar2D PlaygroundForumsCode ExchangeFree Plugins Directory
  2. [2]
    Solar2D Game Engine main repository (ex Corona SDK) - GitHub
    Solar2D is a cross-platform framework which is ideal for rapidly creating apps and games for mobile devices, TV, desktop systems and HTML5.
  3. [3]
    System Requirements - Solar2D Documentation
    Solar2D lets you build games/apps for all major platforms including iOS, Android, Kindle, Apple TV, Android TV, macOS, and Windows. Get the free toolset!
  4. [4]
    Generating Live Builds - Solar2D Documentation
    To create a live build, simply follow these steps: In the Solar2D Simulator, open the Build dialog window (File → Build) for either iOS, Android, or tvOS.Missing: hot | Show results with:hot
  5. [5]
  6. [6]
    MIT license - Solar2D
    MIT License Copyright (c) 2020 Solar2D Game Engine Permission is hereby granted, free of charge, to any person obtaining a copy of this software and ...Missing: licensing | Show results with:licensing
  7. [7]
    Solar2D Game Engine - GitHub
    Best 2D Game Engine around. Corona Game Engine fork. Verified. We've verified that the organization solar2d controls the domain: solar2d.com.
  8. [8]
    The End of Corona SDK - Other - Solar2D Game Engine
    Jun 11, 2020 · Short answer is yes. Long answer, Corona has rebranded to Solar2D and switched to fully open source with the MIT license which means anyone can enhance the ...Missing: history | Show results with:history
  9. [9]
    Corona transition to Solar2D - Spiral Code Studio
    Apr 26, 2020 · Corona game engine has gone opensource, the CoronaLabs company no more. The engine is now being developed and supported based on donations.
  10. [10]
    Daily Builds and Public Releases - Solar2D Game Engine
    Solar2D 2025.3724 has been released. 0, 341, September 25, 2025 ; Solar2D 2025.3723 has been released. 0, 341, September 22, 2025.Missing: stable | Show results with:stable
  11. [11]
    Solar2D 2025.3721 has been released
    Jun 8, 2025 · Solar2D lets you build games/apps for all major platforms including iOS, Android, Kindle, Apple TV, Android TV, macOS, and Windows. Get the free ...
  12. [12]
    Corona SDK is now Free! - Announcements - Solar2D Game Engine
    We just announced that Corona SDK is now fully free. There are no longer Starter, Basic and Pro tiers. Instead, all users of Corona SDK get everything the ...
  13. [13]
    Solar2D Reviews in 2025 - SourceForge
    Built on the lightweight and fast Lua scripting language, Solar2D is completely free to use, with no hidden fees, charges, or royalties. ... Videos and Screen ...
  14. [14]
    Corona Labs annual update
    Feb 12, 2020 · Corona Labs will cease operations on May 1, 2020, but Corona will become open source with a new MIT license. Marketplace sales will stop, and ...
  15. [15]
    Rebranding Corona - Announcements - Solar2D Game Engine
    Apr 6, 2020 · With our recent announcement about the closing of Corona Labs and the new software going fully open source there probably should be a new name.Missing: fork | Show results with:fork
  16. [16]
    Releases · coronalabs/corona - GitHub
    Solar2D Game Engine main repository (ex Corona SDK) - Releases · coronalabs/corona.Missing: stable | Show results with:stable
  17. [17]
    Corona Labs transition update 22-April-2020
    ### Summary of Corona Labs Transition Update (22-April-2020)
  18. [18]
    Solar2D Fifth Anniversary - Announcements
    Solar2D is celebrating its 5th anniversary as an independent, open-source project, a free alternative supporting major platforms and latest APIs.
  19. [19]
    Introduction to Lua - Solar2D Documentation
    Lua Functions. Note. Corona uses Lua version 5.1.3. Please see the Lua 5.1 Reference Manual for more details. Conventions. Names (also called identifiers) in ...
  20. [20]
    Chapter 3 — Bringing it to Life - Solar2D Documentation
    As you learned in the BalloonTap project, Solar2D is largely an event-based framework where information is dispatched during a specific event to an event ...Missing: driven | Show results with:driven
  21. [21]
    Solar2D Documentation — API Reference | Events | collision
    This is a Box2D limitation. Currently, the Box2D physics engine is liable to crash during a collision if Corona code attempts to modify objects still ...<|control11|><|separator|>
  22. [22]
    Solar2D Documentation — API Reference | Libraries | display
    Solar2D lets you build games/apps for all major platforms including iOS, Android, Kindle, Apple TV, Android TV, macOS, and Windows. Get the free toolset!
  23. [23]
    physics - API Reference - Solar2D Documentation
    While the underlying engine is built around the popular Box2D, we've taken a different design approach which eliminates a lot of the coding that is ...
  24. [24]
    io - Solar2D Documentation — API Reference | Libraries
    Standard Lua library to create, write, and read files. Applications running on a device are “sandboxed”, meaning your files (application images, data ...
  25. [25]
    Debugging Guide - Solar2D Documentation
    This guide will teach you how to debug your code, detect some common problems, and find their solutions.
  26. [26]
    Display Objects — Images, Text, Shapes, etc.
    Solar2D lets you build games/apps for all major platforms including iOS, Android, Kindle, Apple TV, Android TV, macOS, and Windows. Get the free toolset!
  27. [27]
    Custom Shader Effects - Solar2D Documentation
    This guide outlines how to create custom effects using custom shader code, structured in the same way that Solar2D's built-in shader effects are implemented.
  28. [28]
    Experimental daily build: renderer features - Solar2D Forums
    Mar 7, 2023 · This provides an opt-in Vulkan backend on Windows. (A few other platforms could follow, later.) I ran it through all the examples back when it ...Missing: DirectX | Show results with:DirectX
  29. [29]
    Group Programming - Solar2D Documentation
    In Solar2D, the stage can be considered the parent display group, and new display groups that you create are automatically added as child groups of it.Missing: scene | Show results with:scene
  30. [30]
    culling of child in display group - Solar2D Forums
    It says “Solar2D will cull child objects that are outside the boundaries of the screen.” Questions. How is this done? How do one know which child has been “ ...Missing: scene parent- hierarchies
  31. [31]
    Image Effects — Filters, Generators, Composites
    In Solar2D, visual effects can be applied to display objects with unprecedented ease. This guide contains a list of all built-in shader effects.
  32. [32]
  33. [33]
    Image Sheets - Solar2D Documentation
    Solar2D fully supports image sheets, sometimes referred to as sprite sheets or texture atlases. This allows you to load multiple images/frames from a single ...
  34. [34]
  35. [35]
    Physics Setup - Solar2D Documentation
    This guide discusses how to set up Box2D physics in your Corona app. Physics are commonly used for apps that involve a simulation of objects that move, collide ...
  36. [36]
    Physics Bodies - Solar2D Documentation
    This guide discusses how to create Box2D physical bodies in your Corona app, including polygonal and multi-element bodies.
  37. [37]
    Collision Detection - Physics - Solar2D Documentation
    This guide discusses how to handle collisions between physical objects, or ignore (filter) collisions between specific object sets.Missing: driven | Show results with:driven
  38. [38]
    Physics Joints - Solar2D Documentation
    A pivot joint, known as a revolute joint in Box2D terms, joins two bodies at an overlapping point, like two boards joined by a rotating peg. The initial ...
  39. [39]
    API Reference | Libraries | physics | Start - Solar2D Documentation
    By default, physical bodies not involved in a collision will “sleep” after a few seconds. This reduces performance overhead, but in some cases you may not want ...Missing: optimization | Show results with:optimization
  40. [40]
    Documentation API Reference Libraries audio loadSound
    Solar2D lets you build games/apps for all major platforms including iOS, Android, Kindle, Apple TV, Android TV, macOS, and Windows. Get the free toolset!
  41. [41]
    Documentation API Reference Libraries audio loadStream
    Solar2D lets you build games/apps for all major platforms including iOS, Android, Kindle, Apple TV, Android TV, macOS, and Windows. Get the free toolset!Missing: optimization | Show results with:optimization
  42. [42]
    Audio Usage/Functions - Solar2D Documentation
    This guide discusses how to use the Corona audio library to play sound effects and streaming audio.
  43. [43]
    play - Solar2D Documentation — API Reference | Libraries | audio
    The `audio.play()` function plays audio on a channel, returning the channel number or 0 if it fails. It takes an audio handle as a required parameter.
  44. [44]
    audio | fade - Solar2D Documentation — API Reference | Libraries
    audio.setVolume(). Overview. This fades a playing sound in a specified amount to a specified volume. The audio will continue playing after the fade completes.
  45. [45]
    Solar2D Documentation — API Reference | Events | touch
    Overview. When the user's finger touches the screen, a hit event is generated and dispatched to display objects in the display hierarchy.Missing: input keyboard
  46. [46]
    Solar2D Documentation — API Reference | Events | key
    Key events occur when a keyboard key or gamepad/joystick button has been pressed down or released. In your key event listener, you can return true.
  47. [47]
    Game Controllers - Solar2D Documentation
    In Corona, creating apps with gamepad/joystick support is both easy and interactive. This guide outlines how the game controller APIs and events work together.
  48. [48]
    system | vibrate - Solar2D Documentation — API Reference | Libraries
    Overview. Vibrates and haptic feedback on a phone. In the Corona Simulator, this will sound a system beep (macOS only).
  49. [49]
    Microphone Plugin for Solar2D - Documentation Spiral Code Studio
    To use this plugin, add an entry into the plugins table of build.settings . When added, the build server will integrate the plugin during the build phase.
  50. [50]
    The 2D Game Engine - Corona Labs
    Join over 500k developers worldwide using Corona to create hit mobile apps. DOWNLOAD. About. Product · FAQ ... Corona SDK is now Solar2D. https://Solar2D.com/. ×
  51. [51]
    Project Configuration - Solar2D Documentation
    Configuration settings for an app are defined using a config.lua file written in Lua syntax. It should be placed in the project's base directory.Missing: 2025.3721 release masking
  52. [52]
    Remote Debugging - ZeroBrane Studio - Lua IDE/editor/debugger ...
    ZeroBrane Studio supports remote debugging that allows to debug arbitrary Lua applications. The application may be running on the same or a different computer.Missing: Solar2D | Show results with:Solar2D<|separator|>
  53. [53]
    Solar2D Editor - Visual Studio Marketplace
    May 9, 2023 · The Solar2D Editor extension for VS Code Autocompletes hundreds of Solar2D Apis and allows you to easily launch and debug project.Missing: asset management integration
  54. [54]
    lunarmodules/busted: Elegant Lua unit testing. - GitHub
    Luarocks busted is a unit testing framework with a focus on being easy to use. Supports Lua >= 5.1, luajit >= 2.0.0, and moonscript.Missing: Solar2D | Show results with:Solar2D
  55. [55]
    Solar2D Documentation — API Reference | Events | memoryWarning
    Solar2D lets you build games/apps for all major platforms including iOS, Android ... An event listener to be notified when a low memory situation occurs.Missing: simulator simulation flags
  56. [56]
    Project Build Settings - Solar2D Documentation
    This guide outlines the most common build settings for apps across the various platforms that Solar2D supports.Missing: stable | Show results with:stable
  57. [57]
    Advanced Build Settings - Solar2D Documentation
    Solar2D lets you build games/apps for all major platforms including iOS, Android, Kindle, Apple TV, Android TV, macOS, and Windows. Get the free toolset!
  58. [58]
    Provisioning and Building — iOS - Solar2D Documentation
    This guide explains how to set up your system and devices in the Apple Developer portal. It also explains how to build your apps for testing or distribution.
  59. [59]
    Signing and Building — Android - Solar2D Documentation
    Solar2D lets you build games/apps for all major platforms including iOS, Android, Kindle, Apple TV, Android TV, macOS, and Windows. Get the free toolset!Missing: platforms | Show results with:platforms
  60. [60]
    Creating Win32 Desktop Apps - Solar2D Documentation
    Debugging ... Also note that when running a built Win32 desktop app or the Corona Shell, all print() output and Lua errors/warnings will be streamed to stdout .
  61. [61]
    Creating macOS Desktop Apps - Solar2D Documentation
    ... Lua errors/warnings will be streamed to stdout . There are various ways to manage this output. One way is to run the executable embedded in the app bundle ...<|control11|><|separator|>
  62. [62]
    Using JavaScript in HTML5 Builds - Solar2D Documentation
    This guide explains how to interact between JavaScript and Lua code when running HTML5 build. Note HTML5 builds are still in beta. Things in this guide may be ...
  63. [63]
    Solar2D Documentation
    Solar2D lets you build games/apps for all major platforms including iOS, Android, Kindle, Apple TV, Android TV, macOS, and Windows. Get the free toolset!
  64. [64]
    API Reference - Solar2D Documentation
    This is the complete list of Lua APIs for Solar2D. · If you're new, download Solar2D and proceed to the Getting Started series. · To download this documentation ...Libraries · Display · Display | newText · Display | newRect
  65. [65]
    Developer Guides - Solar2D Documentation
    Windows · Introduction to Lua
  66. [66]
    Solar2D Getting Started Tutorials - YouTube
    Solar2D Chapter 1: Creating a Project (Getting Started Tutorial Series) · Solar2D Chapter 2: Upward & Onward (Getting Started Tutorial Series) · Solar2D Chapter 3 ...
  67. [67]
    Video tutorial for complete beginners - Solar2D Forums
    Hi, If you're brand new to this, or have just a little experience, here is a video tutorial series that will help get you up and started.
  68. [68]
    Solar2D Game Engine
    ### Summary of Solar2D Forums Content on Build Server and Local Builds
  69. [69]
    Example Projects (Spritesheet manipulation examples)
    Corona SDK comes with a number of examples bundled with the Simulator and there are at least a couple examples using sprite sheets. Start the simulator.Missing: builds | Show results with:builds
  70. [70]
    How to migrate from Corona online builds to Solar2D offline builds?
    May 22, 2020 · I've been using Corona 3579 and until now, I haven't sought to change-over from the 3579 online build to the new 3595 offline builds.Missing: 3572 | Show results with:3572
  71. [71]
  72. [72]
    Solar2D Documentation — Plugins
    Solar2D lets you build games/apps for all major platforms including iOS, Android, Kindle, Apple TV, Android TV, macOS, and Windows. Get the free toolset!
  73. [73]
    Plugins - Solar2D Native
    Solar2D plugins leverage Lua's module system in which plugins are lazily loaded ... // Lua version assumes version and revision default to 1. int result ...<|control11|><|separator|>
  74. [74]
    Solar2D Free Plugin Directory
    Free Plugins Directory · plugin.textbelt · plugin.unityads.v4 · plugin.macTrackpad · plugin.inMobi · plugin.appodeal.beta.Unity · plugin.apsalar · shared.firebase.
  75. [75]
    Solar2D Plugins - Spiral Code Studio
    Solar2D Plugins. QR Scanner · TextToSpeech · NFC · Chrome Tabs · Facebook SDK · Flashlight · Vibrator and Haptic feedback.
  76. [76]
  77. [77]
    Has anyone tested Solar2D build 2025.3721?
    Jun 15, 2025 · As the title says, I'm wondering if anyone has tested their apps using Solar2D build 2025.3721 (with Android 35 and 16KB support).Missing: daily stable
  78. [78]
    Made With Solar2D
    Melodious - Action - William · Labo Tank - Educational - Labo Lado Co., Ltd. · Forever Lost: Episode 2 - Adventure - Glitch Games · Dentures and Demons - Adventure ...
  79. [79]
    ConflictCraft released on Steam - Games - Solar2D Forums
    Hi guys, our new game ConflictCraft now available on Steam. Made completely with Corona SDK. Thanks to Corona's new steamworks plugin - we have achievements ...
  80. [80]
    Solar2D - Success & Horror Stories | Pandaqi Blog
    Mar 7, 2020 · Success story #1. I was testing a two-player game on my phone with my little sister. The game must be played with two players, so I could ...