[beta] Font/sound editors and type system improvements!


  • You can now create and edit GMS2.3 fonts! (thanks to Anton)
  • You can now create and edit GMS2.3 audio assets! (also thanks to Anton)
  • I added an option for implicit type detection for simple instance variables!
    Located in Linter settings; when enabled, GMEdit will automatically assign types for variable assignments such as v = 0, v = "", v = buffer_create(...) and alike. This feature isn’t very smart (e.g. no support for script calls or complex expressions), but still can save you from having to type /// @is {type} in a handful of places.


  • Dark theme now looks a little nicer, especially various checkboxes (thanks to Anton)
  • Rearranged the Preferences menu a little based on what you are more likely to change often
  • #import remapping now works for {types} inside JSDoc comments
  • Extending/implementing object or instance built-in types will now inherit built-in auto-completion and syntax highlighting items.
  • self-fields are now syntax-highlighted (e.g. will show missing variables) so long as the function/event does not contain with-blocks.
  • Anonymous structure literals ({...}) can now be cast to namespaces that they “implement” all fields of.
  • I rewrote how syntax highlighting for @hint works, which now reflects the various degrees of madness that you can do with it.
  • If methods are not given an explicit field type, they will now be typed as function<>, which will spare you of some cases with forgetting parentheses after a = func.
  • Rainbow brackets no longer have a limit on max “depth” - so long as your theme supports them.
    The work involved with doing so also opens up opportunities in making highlighter a little smarter in future.
  • Added a warning if file save operation fails (e.g. the file is read-only).
  • Tooltips now show more information when mouseovering variables and I fixed some cases where the tooltip would tell you what the object is rather than what the variable is.
  • Checks involving is_undefined(arg) will now mark 2.3 function arguments as optional.


  • Fixed linter incorrectly parsing struct[$ key]
  • Fixed rainbow bracket flag for themes not being set on startup.
  • Fixed inconsistencies with return types for some built-in functions
  • Fixed incorrect linter types for Fixed incorrect linter types for /// @hint {type} namespace_ImpStatic.inst` combined with #import
  • Fixed 2.2 GUID being technically off-spec (no visible effect).
  • Fixed 2.3 shaders not opening given specific settings.
  • Fixed a very specific case with syntax highlighting breaking on 3+ consecutive /// @is {type} lines
  • Fixed live linter forgetting about variables in #event properties
  • Fixed function name inside object events changing scope and causing warnings.
  • Fixed @interface clashing with @hint X extends Y
  • Fixed with blocks not changing context correctly for linter type checks.
  • Fixed local variables without type information being detected as missing fields sometimes.
  • Fixed static func = function()->type not adding type to function signature.
  • Fixed type constraints not being allowed in some cases.
  • Fixed auto-completion hints showing the “raw” type sometimes.
  • Fixed : not bringing up type auto-completion when after a function(.
  • Fixed context menu copy-paste not working on Mac OS.
  • Fixed function<> not being allowed in some type specifications.
  • Fixed a few spots where you could cast function<> to function<> with incompatible arguments.
  • Fixed hint type information not being removed when hints get cleared.
    (meaning that you couldn’t “un-type” a field without hitting Ctrl+R)
  • Fixed a rare softlock with outline-view involving unusually-formatted code.
  • Fixed detection of #import preprocessor when a script only uses function()-> and nothing else of typed syntax.
  • Fixed local variable type inference mistaking globalvars for local variable declarations.
  • Fixed instance variables with names matching those of built-in “types” not being added to instance’s variable list.
  • Fixed it being possible to lose @implements information when reloading a project.
  • field:s inside struct literals {...} can no longer show up as “missing”, though ultimately this is a complex issue to tackle due to syntax overlap (field: vs case val: vs a?b:c vs var a:type).
  • Fixed warning line highlights not moving along when adding/removing code before them (#124).
  • Fixed use of argument inside constructor methods marking constructor as having optional arguments (#127).
  • Fixed some cases where tooltips/status bar could not display information about very specific variable names.
  • Fixed linter not handling types in #args in “live” mode.
  • Fixed #90 - #args JSDoc generator shouldn’t insert spaces around =
  • Using the “New IDE” button no longer causes the new window to auto-load the original project when assigning GMEdit as “open with” application.
  • Fixed GMLive.js not doing anything when running code without any tabs (that is, with code in default tab).

It is entirely possible that I forgot something because there are too many changes.

Hotfix (Mar 01)

  • Fixed global.varname. not bringing up auto-completion.
  • Fixed type information in auto-completion info continuing to stack in some cases.
  • Fixed @is and @implements not working in files with Unix endings.
  • Fixed snippets overriding other auto-completion items.


GMEdit-Beta-Windows.zip 98 MB
Version Feb 26, 2021 Feb 26, 2021
GMEdit-Beta-Mac.zip 90 MB
Version Feb 26, 2021 Feb 26, 2021
GMEdit-Beta-Linux.zip 92 MB
Version Feb 26, 2021 Feb 26, 2021
GMEdit-Beta-App-Only.zip 11 MB
Version Feb 26, 2021 Feb 26, 2021

Get GMEdit

Download NowName your own price


Log in with itch.io to leave a comment.

fantastic,until you don't need to open gms2 ide

I'm seeing these asset editing tools like the sound/font viewer and you're really starting to win me over.


Thank you!

Using it and already noticing the vast improvements. Thanks for the continual updates!