Color is 4 bytes, but we are using 4 floats in vertex data for color, which is 16 bytes.
In opengl we can specify GL_BYTE in glVertexAttribPointer and vec4 in shader and it will interpret our 4 bytes as 4 floats.
Is something like this possible in kha?

For just one color it's ok, but I want to pass color matrix to shader and using 12 (or even 20 if it should affect alpha) floats per vertex for that feels too expensive.

I personally do not see why should we emulate Mac behavior on other systems.
What we should do is allow Mac users to use app and for that purpose we can allow Mac users use Cmd button instead of Ctrl. I mean Cmd-click should give exactly the same result as Ctrl-click. Not sure if it should be done by Kha or by App.

In html5 target ctrl-click is used to emulate right-mouse click. This prevents from using this combination for something else. For example multiselection is often done with ctrl-clicking.
Should this behavior be optional or even removed???

Some time ago relative paths to Kha submodules were changed to absolute paths. I'm keeping copy of Kha and all sumbodules in repository on our server. And with this change it's not very easy task, because submodules now automatically point to github. Can I ask what was the purpose of this change?

It works on most platforms and configurations but crashes in windows when using Visual C++ 2015 with /O2 (default for Kha project) or /Ox optimizations.
It crashes somewhere inside memcpy, which is called from String + operator. Not sure which of the two because adding logging between them fixes the problem

I've tried to run similar code with plain hxcpp without Kha and it worked as expected, but I'm not aware of how to change c++ optimization options with hxcpp. I'm not even sure if I built debug or release...

As I can see it is not possible to delete file created with kha.Storage.namedFile(). I need this functionality and I think I can add it to some targets (flash, html5, Kore).

If the file does not exist kha.Storage.namedFile(filename).read() will return null.
But writing null kha.Storage.namedFile(filename).write(null) will just make no changes, so if the file existed it will remain the same with it's contents.
So for consistency it will be good to delete the file with kha.Storage.namedFile(filename).write(null).

Or I can just add function like kha.Storage.removeNamedFile(filename).