diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 0000000..97702ab
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,63 @@
+{
+    // Use IntelliSense to learn about possible attributes.
+    // Hover to view descriptions of existing attributes.
+    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+        "version": "0.2.0",
+        "configurations": [
+          {
+            "name": "Debug",
+            "type": "cppdbg",
+            "request": "launch",
+            "program": "${workspaceFolder}/bin/Debug/${workspaceFolderBasename}.exe",
+            "args": [],
+            "stopAtEntry": false,
+            "cwd": "${workspaceFolder}",
+            "environment": [],
+            "externalConsole": false,
+            "MIMode": "gdb",
+            "setupCommands": [
+              {
+                "description": "Enable pretty-printing for gdb",
+                "text": "-enable-pretty-printing",
+                "ignoreFailures": false
+              }
+            ],
+            "windows": {
+              "miDebuggerPath": "gdb.exe",
+            },
+            "osx": {
+              "MIMode": "lldb"
+            },
+            "linux": {
+              "program": "${workspaceFolder}/bin/Debug/${workspaceFolderBasename}",
+              "miDebuggerPath": "/usr/bin/gdb",
+            },
+            "preLaunchTask": "build debug"
+          },
+          {
+            "name": "Run",
+            "type": "cppdbg",
+            "request": "launch",
+            "args": [],
+            "stopAtEntry": false,
+            "cwd": "${workspaceFolder}",
+            "environment": [],
+            "externalConsole": false,
+            "program": "${workspaceFolder}/bin/Release/${workspaceFolderBasename}.exe",
+            "MIMode": "gdb",
+            "windows": {
+              "program": "${workspaceFolder}/bin/Release/${workspaceFolderBasename}.exe",
+              "miDebuggerPath": "gdb.exe"
+            },
+            "osx": {
+              "program": "${workspaceFolder}/bin/Release/${workspaceFolderBasename}",
+              "MIMode": "lldb"
+            },
+            "linux": {
+              "program": "${workspaceFolder}/bin/Release/${workspaceFolderBasename}",
+              "miDebuggerPath": "/usr/bin/gdb"
+            },
+            "preLaunchTask": "build release",
+          }
+        ]
+      }
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..e98318a
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,11 @@
+{
+	"files.exclude": {
+		"**/.git": true,
+		"**/.svn": true,
+		"**/.hg": true,
+		"**/CVS": true,
+		"**/.DS_Store": true,
+		"**/*.o": true,
+		"**/*.exe": true,
+	}
+}
\ No newline at end of file
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
new file mode 100644
index 0000000..314809a
--- /dev/null
+++ b/.vscode/tasks.json
@@ -0,0 +1,70 @@
+{
+    // See https://go.microsoft.com/fwlink/?LinkId=733558
+    // for the documentation about the tasks.json format
+    "version": "2.0.0",
+    "tasks": [
+        {
+            "label": "build debug",
+            "type": "process",
+            "command": "make",
+            "windows": {
+                "command": "mingw32-make.exe",
+                "args": [
+                    "SHELL=cmd"
+                ],
+            },
+            "group": {
+                "kind": "build",
+                "isDefault": true
+            },
+            "problemMatcher": [
+                "$gcc"
+            ],
+            "dependsOn":["UpdateMake"]
+        },
+        {
+            "label": "build release",
+            "type": "process",
+            "command": "make",
+            "windows": {
+                "command": "mingw32-make.exe",
+                "args": [
+                    "SHELL=cmd",
+                    "config=release_x64"
+                ],
+            },
+            "linux": {
+                "args": [
+                    "config=release_x64"
+                ],
+            },
+            "osx": {
+                "args": [
+                ],
+            },
+            "group": "build",
+            "problemMatcher": [
+                "$gcc"
+            ],
+            "dependsOn":["UpdateMake"]
+        },
+        {
+            "label": "UpdateMake",
+            "type": "process",
+            "command": "./build/premake5",
+            "args": [
+                "gmake2"
+            ],
+            "windows": {
+                "command": "./build/premake5.exe"
+            },
+            "linux": {
+                "command": "./build/premake5"
+            },
+            "osx": {
+                "command": "./build/premake5.osx"
+            },
+            "group": "build"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/README.md b/README.md
index 762b016..bfa3ddc 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,66 @@
-# raylib-quickstart
-A simple cross platform template for windows, linux, and MacOS
+# Raylib-Quikstart
+Work in process quickstart for raylib using premake
+
+# VSCode Users
+Download the quickstart, rename the folder to your game name, and open it in VSCode.
+Press F5 to build, and you are good to go.
+
+# Windows Users
+There are two compiler toolchains avialble for windows, MinGW-W64 (a free compiler using GCC), and Microsoft Visual Studio
+## Using MinGW-W64
+Double click the premake-mingw.bat file.
+cd into the folder in your terminal
+run make 
+
+### Note on MinGW-64 versions
+Make sure you have a modern version of MinGW-W64 (not mingw).
+The best place to get it is from the W64devkit from
+https://github.com/skeeto/w64devkit/releases
+or the version installed with the raylib installer, just make sure to add the C:\raylib\w64devkit\bin to your path if you used the raylib installer
+
+## Microsoft Visual Studio
+Run the premake-VisualStudio.bat
+double click the .sln file that is geneated.
+develop your game, you are good to go.
+
+# Linux and MacOS Users
+CD into the folder
+run ./build/premake5 gmake2
+run make
+you are good to go
+
+# Building for other OpenGL targets
+If you need to build for a different OpenGL version than the default (OpenGL 3.3) you can specify an openGL version in your premake command line. Just modify the bat file or add the following to your command line
+
+## For OpenGL 1.1
+--graphics=opengl11
+
+## For OpenGL 2.1
+--graphics=opengl21
+
+## For OpenGL 4.3
+--graphics=opengl43
+
+## For OpenGLES 2.0
+--graphics=opengles2
+
+## For OpenGLES 3.0
+--graphics=opengles3
+
+# License
+Copyright (c) 2020-2024 Jeffery Myers
+
+This software is provided "as-is", without any express or implied warranty. In no event 
+will the authors be held liable for any damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose, including commercial 
+applications, and to alter it and redistribute it freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not claim that you 
+  wrote the original software. If you use this software in a product, an acknowledgment 
+  in the product documentation would be appreciated but is not required.
+
+  2. Altered source versions must be plainly marked as such, and must not be misrepresented
+  as being the original software.
+
+  3. This notice may not be removed or altered from any source distribution.
diff --git a/build/external/premake_external.lua b/build/external/premake_external.lua
new file mode 100644
index 0000000..8cbd596
--- /dev/null
+++ b/build/external/premake_external.lua
@@ -0,0 +1,28 @@
+function download_progress(total, current)
+    local ratio = current / total;
+    ratio = math.min(math.max(ratio, 0), 1);
+    local percent = math.floor(ratio * 100);
+    print("Download progress (" .. percent .. "%/100%)")
+end
+
+function check_raylib()
+    os.chdir("external")
+    if(os.isdir("raylib-master") == false) then
+        if(not os.isfile("raylib-master.zip")) then
+            print("Raylib not found, downloading from github")
+            local result_str, response_code = http.download("https://github.com/raysan5/raylib/archive/refs/heads/master.zip", "raylib-master.zip", {
+                progress = download_progress,
+                headers = { "From: Premake", "Referer: Premake" }
+            })
+        end
+        print("Unzipping to " ..  os.getcwd())
+        zip.extract("raylib-master.zip", os.getcwd())
+        os.remove("raylib-master.zip")
+    end
+    os.chdir("../")
+end
+
+function build_externals()
+     print("calling externals")
+     check_raylib()
+end
\ No newline at end of file
diff --git a/build/premake5 b/build/premake5
new file mode 100644
index 0000000..bcb51ce
Binary files /dev/null and b/build/premake5 differ
diff --git a/build/premake5.exe b/build/premake5.exe
new file mode 100644
index 0000000..1a637aa
Binary files /dev/null and b/build/premake5.exe differ
diff --git a/build/premake5.lua b/build/premake5.lua
new file mode 100644
index 0000000..c52ff8d
--- /dev/null
+++ b/build/premake5.lua
@@ -0,0 +1,175 @@
+newoption
+{
+	trigger = "graphics",
+	value = "OPENGL_VERSION",
+	description = "version of OpenGL to build raylib against",
+	allowed = {
+		{ "opengl11", "OpenGL 1.1"},
+		{ "opengl21", "OpenGL 2.1"},
+		{ "opengl33", "OpenGL 3.3"},
+		{ "opengl43", "OpenGL 4.3"}
+	},
+	default = "opengl33"
+}
+
+function platform_defines()
+    defines{"PLATFORM_DESKTOP"}
+
+    filter {"options:graphics=opengl43"}
+        defines{"GRAPHICS_API_OPENGL_43"}
+
+    filter {"options:graphics=opengl33"}
+        defines{"GRAPHICS_API_OPENGL_33"}
+
+    filter {"options:graphics=opengl21"}
+        defines{"GRAPHICS_API_OPENGL_21"}
+
+    filter {"options:graphics=opengl11"}
+        defines{"GRAPHICS_API_OPENGL_11"}
+
+    filter {"options:graphics=openges3"}
+        defines{"GRAPHICS_API_OPENGL_ES3"}
+
+    filter {"options:graphics=openges2"}
+        defines{"GRAPHICS_API_OPENGL_ES2"}
+
+    filter {"system:macosx"}
+        disablewarnings {"deprecated-declarations"}
+
+    filter {"system:linux"}
+        defines {"_GLFW_X11"}
+        defines {"_GNU_SOURCE"}
+-- This is necessary, otherwise compilation will fail since
+-- there is no CLOCK_MONOTOMIC. raylib claims to have a workaround
+-- to compile under c99 without -D_GNU_SOURCE, but it didn't seem
+-- to work. raylib's Makefile also adds this flag, probably why it went
+-- unnoticed for so long.
+-- It compiles under c11 without -D_GNU_SOURCE, because c11 requires
+-- to have CLOCK_MONOTOMIC
+-- See: https://github.com/raysan5/raylib/issues/2729
+
+    filter{}
+end
+
+ raylib_dir = "external/raylib-master"
+
+workspaceName = 'MyGame'
+baseName = path.getbasename(path.getdirectory(os.getcwd()));
+
+if (baseName ~= 'raylib-quickstart') then
+    workspaceName = baseName
+end
+
+if (os.isdir('build_files') == false) then
+    os.mkdir('build_files')
+end
+
+workspace (workspaceName)
+    location "../"
+    configurations { "Debug", "Release"}
+    platforms { "x64", "x86", "ARM64"}
+
+    defaultplatform ("x64")
+
+    filter "configurations:Debug"
+        defines { "DEBUG" }
+        symbols "On"
+
+    filter "configurations:Release"
+        defines { "NDEBUG" }
+        optimize "On"
+
+    filter { "platforms:x64" }
+        architecture "x86_64"
+
+    filter { "platforms:Arm64" }
+        architecture "ARM64"
+
+    filter {}
+
+    targetdir "bin/%{cfg.buildcfg}/"
+
+    include ("external/premake_external.lua")
+    build_externals()
+
+    project (workspaceName)
+        kind "ConsoleApp"
+        location "build_files/"
+        targetdir "../bin/%{cfg.buildcfg}"
+
+        filter "action:vs*"
+            debugdir "$(SolutionDir)"
+
+        filter {"action:vs*", "configurations:Release"}
+            kind "WindowedApp"
+            entrypoint "mainCRTStartup"
+
+        filter{}
+
+        vpaths 
+        {
+            ["Header Files/*"] = { "../include/**.h",  "../include/**.hpp", "../src/**.h", "../src/**.hpp"},
+            ["Source Files/*"] = {"../src/**.c", "src/**.cpp"},
+        }
+        files {"../src/**.c", "../src/**.cpp", "../src/**.h", "../src/**.hpp", "../include/**.h", "../include/**.hpp"}
+    
+        includedirs { "../src" }
+        includedirs { "../include" }
+
+        links {"raylib"}
+
+        includedirs {raylib_dir .. "/src" }
+        includedirs {raylib_dir .."/src/external" }
+        includedirs { raylib_dir .."/src/external/glfw/include" }
+        platform_defines()
+
+        filter "action:vs*"
+            defines{"_WINSOCK_DEPRECATED_NO_WARNINGS", "_CRT_SECURE_NO_WARNINGS"}
+            dependson {"raylib"}
+            links {"raylib.lib"}
+            characterset ("MBCS")
+            buildoptions { "/Zc:__cplusplus" }
+
+        filter "system:windows"
+            defines{"_WIN32"}
+            links {"winmm", "gdi32"}
+            libdirs {"../bin/%{cfg.buildcfg}"}
+
+        filter "system:linux"
+            links {"pthread", "m", "dl", "rt", "X11"}
+
+        filter "system:macosx"
+            links {"OpenGL.framework", "Cocoa.framework", "IOKit.framework", "CoreFoundation.framework", "CoreAudio.framework", "CoreVideo.framework", "AudioToolbox.framework"}
+
+        filter{}
+
+    project "raylib"
+        kind "StaticLib"
+    
+        platform_defines()
+
+        location "build_files/"
+
+        language "C"
+        targetdir "../bin/%{cfg.buildcfg}"
+
+        filter "action:vs*"
+            defines{"_WINSOCK_DEPRECATED_NO_WARNINGS", "_CRT_SECURE_NO_WARNINGS"}
+            characterset ("MBCS")
+            buildoptions { "/Zc:__cplusplus" }
+        filter{}
+
+        includedirs {raylib_dir .. "/src", raylib_dir .. "/src/external/glfw/include" }
+        vpaths
+        {
+            ["Header Files"] = { raylib_dir .. "/src/**.h"},
+            ["Source Files/*"] = { raylib_dir .. "/src/**.c"},
+        }
+        files {raylib_dir .. "/src/*.h", raylib_dir .. "/src/*.c"}
+
+        removefiles {raylib_dir .. "/src/rcore_*.c"}
+
+        filter { "system:macosx", "files:" .. raylib_dir .. "/src/rglfw.c" }
+            compileas "Objective-C"
+
+        filter{}
diff --git a/build/premake5.osx b/build/premake5.osx
new file mode 100644
index 0000000..d047378
Binary files /dev/null and b/build/premake5.osx differ
diff --git a/include/resource_dir.h b/include/resource_dir.h
new file mode 100644
index 0000000..41c4dce
--- /dev/null
+++ b/include/resource_dir.h
@@ -0,0 +1,95 @@
+/**********************************************************************************************
+*
+*   raylibExtras * Utilities and Shared Components for Raylib
+*
+*   Resource Dir * function to help find resource dir in common locations
+*
+*   LICENSE: MIT
+*
+*   Copyright (c) 2022 Jeffery Myers
+*
+*   Permission is hereby granted, free of charge, to any person obtaining a copy
+*   of this software and associated documentation files (the "Software"), to deal
+*   in the Software without restriction, including without limitation the rights
+*   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+*   copies of the Software, and to permit persons to whom the Software is
+*   furnished to do so, subject to the following conditions:
+*
+*   The above copyright notice and this permission notice shall be included in all
+*   copies or substantial portions of the Software.
+*
+*   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+*   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+*   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+*   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+*   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+*   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+*   SOFTWARE.
+*
+**********************************************************************************************/
+
+#pragma once
+
+#include "raylib.h"
+
+#if defined(__cplusplus)
+extern "C" {            // Prevents name mangling of functions
+#endif
+    /// <summary>
+    /// Looks for the specified resource dir in several common locations
+    /// The working dir
+    /// The app dir
+    /// Up to 3 levels above the app dir
+    /// When found the dir will be set as the working dir so that assets can be loaded relative to that.
+    /// </summary>
+    /// <param name="folderName">The name of the resources dir to look for</param>
+    /// <returns>True if a dir with the name was found, false if no change was made to the working dir</returns>
+    inline bool SearchAndSetResourceDir(const char* folderName)
+    {
+        // check the working dir
+        if (DirectoryExists(folderName))
+        {
+            ChangeDirectory(TextFormat("%s/%s", GetWorkingDirectory(), folderName));
+            return true;
+        }
+
+        const char* appDir = GetApplicationDirectory();
+       
+        // check the applicationDir
+        const char* dir = TextFormat("%s%s", appDir, folderName);
+        if (DirectoryExists(dir))
+        {
+            ChangeDirectory(dir);
+            return true;
+        }
+
+        // check one up from the app dir
+        dir = TextFormat("%s../%s", appDir, folderName);
+        if (DirectoryExists(dir))
+        {
+            ChangeDirectory(dir);
+            return true;
+        }
+
+        // check two up from the app dir
+        dir = TextFormat("%s../../%s", appDir, folderName);
+        if (DirectoryExists(dir))
+        {
+            ChangeDirectory(dir);
+            return true;
+        }
+
+        // check three up from the app dir
+        dir = TextFormat("%s../../../%s", appDir, folderName);
+        if (DirectoryExists(dir))
+        {
+            ChangeDirectory(dir);
+            return true;
+        }
+
+        return false;
+    }
+
+#if defined(__cplusplus)
+}
+#endif
\ No newline at end of file
diff --git a/premake-VisualStudio.bat b/premake-VisualStudio.bat
new file mode 100644
index 0000000..a63b775
--- /dev/null
+++ b/premake-VisualStudio.bat
@@ -0,0 +1,3 @@
+cd build
+premake5.exe vs2022 || pause
+cd ../
\ No newline at end of file
diff --git a/premake-mingw.bat b/premake-mingw.bat
new file mode 100644
index 0000000..decaf00
--- /dev/null
+++ b/premake-mingw.bat
@@ -0,0 +1,4 @@
+cd build
+premake5.exe gmake2
+pause
+cd ..
\ No newline at end of file
diff --git a/resources/wabbit_alpha.png b/resources/wabbit_alpha.png
new file mode 100644
index 0000000..db4081f
Binary files /dev/null and b/resources/wabbit_alpha.png differ
diff --git a/src/main.c b/src/main.c
new file mode 100644
index 0000000..dd859e2
--- /dev/null
+++ b/src/main.c
@@ -0,0 +1,56 @@
+/*
+Raylib example file.
+This is an example main file for a simple raylib project.
+Use this as a starting point or replace it with your code.
+
+For a C++ project simply rename the file to .cpp and run premake 
+
+-- Copyright (c) 2020-2024 Jeffery Myers
+--
+--This software is provided "as-is", without any express or implied warranty. In no event 
+--will the authors be held liable for any damages arising from the use of this software.
+
+--Permission is granted to anyone to use this software for any purpose, including commercial 
+--applications, and to alter it and redistribute it freely, subject to the following restrictions:
+
+--  1. The origin of this software must not be misrepresented; you must not claim that you 
+--  wrote the original software. If you use this software in a product, an acknowledgment 
+--  in the product documentation would be appreciated but is not required.
+--
+--  2. Altered source versions must be plainly marked as such, and must not be misrepresented
+--  as being the original software.
+--
+--  3. This notice may not be removed or altered from any source distribution.
+
+*/
+
+#include "raylib.h"
+#include "resource_dir.h"
+
+int main ()
+{
+	// set up the window
+	InitWindow(1280, 800, "Hello Raylib");
+
+	SearchAndSetResourceDir("resources");
+
+	Texture wabbit = LoadTexture("wabbit_alpha.png");
+	
+	// game loop
+	while (!WindowShouldClose())
+	{
+		// drawing
+		BeginDrawing();
+		ClearBackground(BLACK);
+
+		DrawText("Hello Raylib", 200,200,20,WHITE);
+
+		DrawTexture(wabbit, 400, 200, WHITE);
+		
+		EndDrawing();
+	}
+
+	// cleanup
+	CloseWindow();
+	return 0;
+}
\ No newline at end of file