{"id":42099268,"url":"https://github.com/perl-sdl3/sdl3.pm","last_synced_at":"2026-02-22T19:06:03.993Z","repository":{"id":328760396,"uuid":"649940805","full_name":"Perl-SDL3/SDL3.pm","owner":"Perl-SDL3","description":"Perl Wrapper for the Simple DirectMedia Layer 3.0","archived":false,"fork":false,"pushed_at":"2026-02-22T04:48:42.000Z","size":150,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-22T09:58:22.889Z","etag":null,"topics":["ffi","ffi-bindings","gamedev","jit","perl","sdl3"],"latest_commit_sha":null,"homepage":"https://metacpan.org/dist/SDL3","language":"Perl","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Perl-SDL3.png","metadata":{"files":{"readme":"README.md","changelog":"Changes.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"community_bridge":null,"custom":null,"github":"sanko","issuehunt":null,"ko_fi":null,"liberapay":null,"open_collective":null,"otechie":null,"patreon":null,"tidelift":null}},"created_at":"2023-06-06T01:30:38.000Z","updated_at":"2026-02-22T04:48:45.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Perl-SDL3/SDL3.pm","commit_stats":null,"previous_names":["perl-sdl3/sdl3.pm"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/Perl-SDL3/SDL3.pm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Perl-SDL3%2FSDL3.pm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Perl-SDL3%2FSDL3.pm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Perl-SDL3%2FSDL3.pm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Perl-SDL3%2FSDL3.pm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Perl-SDL3","download_url":"https://codeload.github.com/Perl-SDL3/SDL3.pm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Perl-SDL3%2FSDL3.pm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29723582,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-22T15:10:41.462Z","status":"ssl_error","status_checked_at":"2026-02-22T15:10:04.636Z","response_time":110,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ffi","ffi-bindings","gamedev","jit","perl","sdl3"],"created_at":"2026-01-26T12:14:40.967Z","updated_at":"2026-02-22T19:06:03.987Z","avatar_url":"https://github.com/Perl-SDL3.png","language":"Perl","funding_links":["https://github.com/sponsors/sanko"],"categories":[],"sub_categories":[],"readme":"# NAME\n\nSDL3 - Perl Wrapper for the Simple DirectMedia Layer 3.0\n\n# SYNOPSIS\n\n```perl\nuse v5.40;\nuse SDL3 qw[:all :main];\nmy ( $x, $y, $dx, $dy, $ren ) = ( 300, 200, 5, 5 );\n\nsub SDL_AppInit( $app, $ac, $av ) {\n    state $win;\n    SDL_Init(SDL_INIT_VIDEO);\n    SDL_CreateWindowAndRenderer( 'Bouncing Box', 640, 480, 0, \\$win, \\$ren );\n    SDL_SetRenderVSync( $ren, 1 );\n    SDL_APP_CONTINUE;\n}\n\nsub SDL_AppEvent( $app, $ev ) {\n    $ev-\u003e{type} == SDL_EVENT_QUIT ? SDL_APP_SUCCESS : SDL_APP_CONTINUE;\n}\n\nsub SDL_AppIterate($app) {\n    $dx *= -1 if $x \u003c= 0 || $x \u003e= 620;    # Bounce X (Window 640 - Rect 20)\n    $dy *= -1 if $y \u003c= 0 || $y \u003e= 460;    # Bounce Y (Window 480 - Rect 20)\n    $x  += $dx;\n    $y  += $dy;\n    SDL_SetRenderDrawColor( $ren, 20, 20, 30, 255 );\n    SDL_RenderClear($ren);\n    SDL_SetRenderDrawColor( $ren, int($x) % 255, int($y) % 255, 200, 255 );\n    SDL_RenderFillRect( $ren, { x =\u003e $x, y =\u003e $y, w =\u003e 20, h =\u003e 20 } );\n    SDL_RenderPresent($ren);\n    SDL_APP_CONTINUE;\n}\nsub SDL_AppQuit { }\n```\n\n# DESCRIPTION\n\nThis module provides a Perl wrapper for SDL3, a cross-platform development library designed to provide low level access\nto audio, keyboard, mouse, joystick, and graphics hardware.\n\nThere are a few examples in this distribution's `eg/` directory but games and other demos I've written may be found on\ngithub: [https://github.com/sanko/SDL3.pm-demos](https://github.com/sanko/SDL3.pm-demos).\n\n## Features\n\nEach feature listed below is a tag you may use.\n\n### `:all`\n\nThis binds all functions, defines all types, and imports them into your package.\n\nSee [the SDL3 Wiki](https://wiki.libsdl.org/SDL3/FrontPage) for documentation of the hundreds of types and functions\nyou'll have access to with this import tag.\n\n### `:asyncio` - Async I/O\n\nSDL offers a way to perform I/O asynchronously. This allows an app to read or write files without waiting for data to\nactually transfer; the functions that request I/O never block while the request is fulfilled.\n\nSee [SDL3: CategoryAsyncIO](https://wiki.libsdl.org/SDL3/CategoryAsyncIO)\n\n### `:atomic` - Atomic Operations\n\nAtomic operations.\n\nIMPORTANT: If you are not an expert in concurrent lockless programming, you should not be using any functions in this\nfile. You should be protecting your data structures with full mutexes instead.\n\nSee [SDL3: CategoryAtomic](https://wiki.libsdl.org/SDL3/CategoryAtomic)\n\n### `:audio` - Audio Playback, Recording, and Mixing\n\nAudio functionality for the SDL library.\n\nAll audio in SDL3 revolves around `SDL_AudioStream`. Whether you want to play or record audio, convert it, stream it,\nbuffer it, or mix it, you're going to be passing it through an audio stream.\n\nSee [SDL3: CategoryAudio](https://wiki.libsdl.org/SDL3/CategoryAudio)\n\n### `:bits` - CategoryBlendmode\n\nFunctions for fiddling with bits and bitmasks.\n\nSee [SDL3: CategoryBits](https://wiki.libsdl.org/SDL3/CategoryBits)\n\n### `:blendmode` - Blend modes\n\nBlend modes decide how two colors will mix together. There are both standard modes for basic needs and a means to\ncreate custom modes, dictating what sort of math to do on what color components.\n\nSee [SDL3: CategoryBlendmode](https://wiki.libsdl.org/SDL3/CategoryBlendmode)\n\n### `:camera` - Camera Support\n\nVideo capture for the SDL library.\n\nSee [SDL3: CategoryCamera](https://wiki.libsdl.org/SDL3/CategoryCamera)\n\n### `:clipboard` - Clipboard Handling\n\nSDL provides access to the system clipboard, both for reading information from other processes and publishing\ninformation of its own.\n\nThis is not just text! SDL apps can access and publish data by mimetype.\n\nSee [SDL3: CategoryClipboard](https://wiki.libsdl.org/SDL3/CategoryClipboard)\n\n### `:cpuinfo` - CPU Feature Detection\n\nCPU feature detection for SDL.\n\nThese functions are largely concerned with reporting if the system has access to various SIMD instruction sets, but\nalso has other important info to share, such as system RAM size and number of logical CPU cores.\n\nSee [SDL3: CategoryCPUInfo](https://wiki.libsdl.org/SDL3/CategoryCPUInfo)\n\n### `:dialog` - File Dialogs\n\nFile dialog support.\n\nSDL offers file dialogs, to let users select files with native GUI interfaces. There are \"open\" dialogs, \"save\"\ndialogs, and folder selection dialogs. The app can control some details, such as filtering to specific files, or\nwhether multiple files can be selected by the user.\n\nNote that launching a file dialog is a non-blocking operation; control returns to the app immediately, and a callback\nis called later (possibly in another thread) when the user makes a choice.\n\nSee [SDL3: CategoryDialog](https://wiki.libsdl.org/SDL3/CategoryDialog)\n\n### `:error` - Error Handling\n\nSimple error message routines for SDL.\n\nMost apps will interface with these APIs in exactly one function: when almost any SDL function call reports failure,\nyou can get a human-readable string of the problem from [SDL\\_GetError()](https://wiki.libsdl.org/SDL3/SDL_GetError).\n\nSee [SDL3: CategoryError](https://wiki.libsdl.org/SDL3/CategoryError)\n\n### `:events` - Event Handling\n\nEvent queue management.\n\nSee [SDL3: CategoryEvents](https://wiki.libsdl.org/SDL3/CategoryEvents)\n\n### `:filesystem` - Filesystem Access\n\nSDL offers an API for examining and manipulating the system's filesystem. This covers most things one would need to do\nwith directories, except for actual file I/O.\n\nSee [SDL3: CategoryFilesystem](https://wiki.libsdl.org/SDL3/CategoryFilesystem)\n\n### `:gamepad` - Gamepad Support\n\nSDL provides a low-level joystick API, which just treats joysticks as an arbitrary pile of buttons, axes, and hat\nswitches. If you're planning to write your own control configuration screen, this can give you a lot of flexibility,\nbut that's a lot of work, and most things that we consider \"joysticks\" now are actually console-style gamepads. So SDL\nprovides the gamepad API on top of the lower-level joystick functionality.\n\nSee [SDL3: CategoryGamepad](https://wiki.libsdl.org/SDL3/CategoryGamepad)\n\n### `:gpu` - 3D Rendering and GPU Compute\n\nThe GPU API offers a cross-platform way for apps to talk to modern graphics hardware. It offers both 3D graphics and\ncompute support, in the style of Metal, Vulkan, and Direct3D 12.\n\nSee [SDL3: CategoryGPU](https://wiki.libsdl.org/SDL3/CategoryGPU)\n\n### `:guid` - GUIDs\n\nA GUID is a 128-bit value that represents something that is uniquely identifiable by this value: \"globally unique.\"\n\nSDL provides functions to convert a GUID to/from a string.\n\nSee [SDL3: CategoryGUID](https://wiki.libsdl.org/SDL3/CategoryGUID)\n\n### `:haptic` - Force Feedback Support\n\nThe SDL haptic subsystem manages haptic (force feedback) devices.\n\nSee [SDL3: CategoryHaptic](https://wiki.libsdl.org/SDL3/CategoryHaptic)\n\n### `:hidapi` - HIDAPI\n\nHID devices.\n\nSee [SDL3: CategoryHIDAPI](https://wiki.libsdl.org/SDL3/CategoryHIDAPI)\n\n### `:hints` - Configuration Variables\n\nFunctions to set and get configuration hints, as well as listing each of them alphabetically.\n\nSee [SDL3: CategoryHints](https://wiki.libsdl.org/SDL3/CategoryHints)\n\n### `:init` - Initialization and Shutdown\n\nAll SDL programs need to initialize the library before starting to work with it.\n\nSee [SDL3: CategoryInit](https://wiki.libsdl.org/SDL3/CategoryInit)\n\n### `:iostream` - I/O Streams\n\nSDL provides an abstract interface for reading and writing data streams. It offers implementations for files, memory,\netc, and the app can provide their own implementations, too.\n\nSDL\\_IOStream is not related to the standard C++ iostream class, other than both are abstract interfaces to read/write\ndata.\n\nSee [SDL3: CategoryIOStream](https://wiki.libsdl.org/SDL3/CategoryIOStream)\n\n### `:joystick` - Joystick Support\n\nSDL joystick support.\n\nThis is the lower-level joystick handling. If you want the simpler option, where what each button does is well-defined,\nyou should use the gamepad API instead.\n\nSee [SDL3: CategoryJoystick](https://wiki.libsdl.org/SDL3/CategoryJoystick)\n\n### `:keyboard` - Keyboard Support\n\nSDL keyboard management.\n\nSee [SDL3: CategoryKeyboard](https://wiki.libsdl.org/SDL3/CategoryKeyboard)\n\n### `:keycode` - Keyboard Keycodes\n\nDefines constants which identify keyboard keys and modifiers.\n\nSee [SDL3: CategoryKeycode](https://wiki.libsdl.org/SDL3/CategoryKeycode)\n\n### `:loadso` - Shared Object/DLL Management\n\nSystem-dependent library loading routines.\n\nSee [SDL3: CategorySharedObject](https://wiki.libsdl.org/SDL3/CategorySharedObject)\n\n### `:locale` - Locale Info\n\nA struct to provide locale data.\n\nThis provides a way to get a list of preferred locales (language plus country) for the user. There is exactly one\nfunction: [SDL\\_GetPreferredLocales()](https://wiki.libsdl.org/SDL3/SDL_GetPreferredLocales), which handles all the\nheavy lifting, and offers documentation on all the strange ways humans might have configured their language settings.\n\nSee [SDL3: CategoryLocale](https://wiki.libsdl.org/SDL3/CategoryLocale)\n\n### `:log` - Log Handling\n\nSimple log messages with priorities and categories. A message's `SDL_LogPriority` signifies how important the message\nis. A message's `SDL_LogCategory` signifies from what domain it belongs to. Every category has a minimum priority\nspecified: when a message belongs to that category, it will only be sent out if it has that minimum priority or higher.\n\nSee [SDL3: CategoryLog](https://wiki.libsdl.org/SDL3/CategoryLog)\n\n### `:main` - Application entry points\n\nThis is a special import tag that informs SDL to use its new callback based App system.\n\nYou **must** define [SDL\\_AppInit](https://wiki.libsdl.org/SDL3/SDL_AppInit),\n[SDL\\_AppEvent](https://wiki.libsdl.org/SDL3/SDL_AppEvent),\n[SDL\\_AppIterate](https://wiki.libsdl.org/SDL3/SDL_AppIterate), and\n[SDL\\_AppQuit](https://wiki.libsdl.org/SDL3/SDL_AppQuit) in your code.\n\nSee `eg/hello_world.pl` for an example and [SDL3: CategoryMain](https://wiki.libsdl.org/SDL3/CategoryMain).\n\n### `:messagebox` - Message Boxes\n\nSDL offers a simple message box API, which is useful for simple alerts, such as informing the user when something fatal\nhappens at startup without the need to build a UI for it (or informing the user \\_before\\_ your UI is ready).\n\nSee [SDL3: CategoryMessagebox](https://wiki.libsdl.org/SDL3/CategoryMessagebox)\n\n### `:metal` - Metal support\n\nFunctions to creating Metal layers and views on SDL windows.\n\nThis provides some platform-specific glue for Apple platforms. Most macOS and iOS apps can use SDL without these\nfunctions, but this API they can be useful for specific OS-level integration tasks.\n\nSee [SDL3: CategoryMetal](https://wiki.libsdl.org/SDL3/CategoryMetal)\n\n### `:misc` - Miscellaneous\n\nSDL API functions that don't fit elsewhere.\n\nSee [SDL3: CategoryMisc](https://wiki.libsdl.org/SDL3/CategoryMisc)\n\n### `:mouse` - Mouse Support\n\nAny GUI application has to deal with the mouse, and SDL provides functions to manage mouse input and the displayed\ncursor.\n\nSee [SDL3: CategoryMouse](https://wiki.libsdl.org/SDL3/CategoryMouse)\n\n### `:mutex` - Thread Synchronization Primitives\n\nSDL offers several thread synchronization primitives. This document can't cover the complicated topic of thread safety,\nbut reading up on what each of these primitives are, why they are useful, and how to correctly use them is vital to\nwriting correct and safe multithreaded programs.\n\nSee [SDL3: CategoryMutex](https://wiki.libsdl.org/SDL3/CategoryMutex)\n\n### `:pen` - Pen Support\n\nSDL pen event handling.\n\nSDL provides an API for pressure-sensitive pen (stylus and/or eraser) handling, e.g., for input and drawing tablets or\nsuitably equipped mobile / tablet devices.\n\nSee [SDL3: CategoryPen](https://wiki.libsdl.org/SDL3/CategoryPen)\n\n### `:pixels` - Pixel Formats and Conversion Routines\n\nSDL offers facilities for pixel management.\n\nSee [SDL3: CategoryPixels](https://wiki.libsdl.org/SDL3/CategoryPixels)\n\n### `:platform` - Platform Detection\n\nSDL provides a means to identify the app's platform, both at compile time and runtime.\n\nSee [SDL3: CategoryPlatform](https://wiki.libsdl.org/SDL3/CategoryPlatform)\n\n### `:power` - Power Management Status\n\nSDL power management routines.\n\nWell, routine.\n\nThere is a single function in this category: [SDL\\_GetPowerInfo()](https://wiki.libsdl.org/SDL3/SDL_GetPowerInfo).\n\nThis function is useful for games on the go. This allows an app to know if it's running on a draining battery, which\ncan be useful if the app wants to reduce processing, or perhaps framerate, to extend the duration of the battery's\ncharge. Perhaps the app just wants to show a battery meter when fullscreen, or alert the user when the power is getting\nextremely low, so they can save their game.\n\nSee [SDL3: CategoryPower](https://wiki.libsdl.org/SDL3/CategoryPower)\n\n### `:process` - Process Control\n\nProcess control support.\n\nThese functions provide a cross-platform way to spawn and manage OS-level processes.\n\nSee [SDL3: CategoryProcess](https://wiki.libsdl.org/SDL3/CategoryProcess)\n\n### `:properties` - Object Properties\n\nA property is a variable that can be created and retrieved by name at runtime.\n\nSee [SDL3: CategoryProperties](https://wiki.libsdl.org/SDL3/CategoryProperties)\n\n### `:rect` - Rectangle Functions\n\nSome helper functions for managing rectangles and 2D points, in both integer and floating point versions.\n\nSee [SDL3: CategoryRect](https://wiki.libsdl.org/SDL3/CategoryRect)\n\n### `:render` - 2D Accelerated Rendering\n\nSDL 2D rendering functions.\n\nSee [SDL3: CategoryRender](https://wiki.libsdl.org/SDL3/CategoryRender)\n\n### `:scancode` - Keyboard Scancodes\n\nThe SDL keyboard scancode representation.\n\nAn SDL scancode is the physical representation of a key on the keyboard, independent of language and keyboard mapping.\n\nSee [SDL3: CategoryScancode](https://wiki.libsdl.org/SDL3/CategoryScancode)\n\n### `:sensor` - Sensors\n\nSDL sensor management.\n\nThese APIs grant access to gyros and accelerometers on various platforms.\n\nSee [SDL3: CategorySensor](https://wiki.libsdl.org/SDL3/CategorySensor)\n\n### `:storage` - Storage Abstraction\n\nThe storage API is a high-level API designed to abstract away the portability issues that come up when using something\nlower-level.\n\nSee [SDL3: CategoryStorage](https://wiki.libsdl.org/SDL3/CategoryStorage)\n\n### `:surface` - Surface Creation and Simple Drawing\n\nSDL surfaces are buffers of pixels in system RAM. These are useful for passing around and manipulating images that are\nnot stored in GPU memory.\n\nSee [SDL3: CategorySurface](https://wiki.libsdl.org/SDL3/CategorySurface)\n\n### `:stdinc` - Standard Library Functionality\n\nSDL provides its own implementation of some of the most important C runtime functions. Using these functions allows an\napp to have access to common C functionality without depending on a specific C runtime (or a C runtime at all).\n\nSee [SDL3: CategoryStdinc](https://wiki.libsdl.org/SDL3/CategoryStdinc)\n\n### `:system` - Platform-specific Functionality\n\nPlatform-specific SDL API functions. These are functions that deal with needs of specific operating systems, that\ndidn't make sense to offer as platform-independent, generic APIs.\n\nMost apps can make do without these functions, but they can be useful for integrating with other parts of a specific\nsystem, adding platform-specific polish to an app, or solving problems that only affect one target.\n\nSee [SDL3: CategorySystem](https://wiki.libsdl.org/SDL3/CategorySystem)\n\n### `:thread` - Thread Management\n\nSDL offers cross-platform thread management functions. These are mostly concerned with starting threads, setting their\npriority, and dealing with their termination.\n\nSee [SDL3: CategoryThread](https://wiki.libsdl.org/SDL3/CategoryThread)\n\n### `:time` - Date and Time\n\nSDL realtime clock and date/time routines.\n\nThere are two data types that are used in this category: [SDL\\_Time](https://wiki.libsdl.org/SDL3/SDL_Time), which\nrepresents the nanoseconds since a specific moment (an \"epoch\"), and\n[SDL\\_DateTime](https://wiki.libsdl.org/SDL3/SDL_DateTime), which breaks time down into human-understandable components:\nyears, months, days, hours, etc.\n\nMuch of the functionality is involved in converting those two types to other useful forms.\n\nSee [SDL3: CategoryTime](https://wiki.libsdl.org/SDL3/CategoryTime)\n\n### `:timer` - Timer Support\n\nSDL provides time management functionality. It is useful for dealing with (usually) small durations of time.\n\nSee [SDL3: CategoryTimer](https://wiki.libsdl.org/SDL3/CategoryTimer)\n\n### `:touch` - Touch Support\n\nSDL offers touch input, on platforms that support it. It can manage multiple touch devices and track multiple fingers\non those devices.\n\nSee [SDL3: CategoryTouch](https://wiki.libsdl.org/SDL3/CategoryTouch)\n\n### `:tray` - System Tray\n\nSDL offers a way to add items to the \"system tray\" (more correctly called the \"notification area\" on Windows). On\nplatforms that offer this concept, an SDL app can add a tray icon, submenus, checkboxes, and clickable entries, and\nregister a callback that is fired when the user clicks on these pieces.\n\nSee [SDL3: CategoryTray](https://wiki.libsdl.org/SDL3/CategoryTray)\n\n### `:version` - Querying SDL Version\n\nFunctionality to query the current SDL version, both as headers the app was compiled against, and a library the app is\nlinked to.\n\nSee [SDL3: CategoryVersion](https://wiki.libsdl.org/SDL3/CategoryVersion)\n\n### `:video` - Display and Window Management\n\nSDL's video subsystem is largely interested in abstracting window management from the underlying operating system. You\ncan create windows, manage them in various ways, set them fullscreen, and get events when interesting things happen\nwith them, such as the mouse or keyboard interacting with a window.\n\nSee [SDL3: CategoryVideo](https://wiki.libsdl.org/SDL3/CategoryVideo)\n\n### `:vulkan` - Vulkan Support\n\nFunctions for creating Vulkan surfaces on SDL windows.\n\nSee [SDL3: CategoryVulkan](https://wiki.libsdl.org/SDL3/CategoryVulkan)\n\n# See Also\n\nThe project's repo: [https://github.com/Perl-SDL3/SDL3.pm](https://github.com/Perl-SDL3/SDL3.pm)\n\nThe SDL3 Wiki: [https://wiki.libsdl.org/SDL3/FrontPage](https://wiki.libsdl.org/SDL3/FrontPage)\n\n# LICENSE\n\nThis software is Copyright (c) 2025 by Sanko Robinson \u003csanko@cpan.org\u003e.\n\nThis is free software, licensed under:\n\n```\nThe Artistic License 2.0 (GPL Compatible)\n```\n\nSee the `LICENSE` file for full text.\n\n# AUTHOR\n\nSanko Robinson \u003csanko@cpan.org\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fperl-sdl3%2Fsdl3.pm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fperl-sdl3%2Fsdl3.pm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fperl-sdl3%2Fsdl3.pm/lists"}