kode / khamake Goto Github PK
View Code? Open in Web Editor NEWKha's build tool.
Home Page: http://kha.tech
Kha's build tool.
Home Page: http://kha.tech
hello robert,
i have a couple of issues using external libraries with kha.
var libpath = pathlib.join(process.env.HAXEPATH, 'lib', libname.toLowerCase());
it probably would be better to run haxelib config
and use the output as basepath?
after i copied my libraries folder to the haxe installation i tried again. libraries still couldn't be found.
i have a git version of some library, so the .current
file contains dev
, and the .dev
file in turn contains the correct folder of the git clone.
so i deleted .current
and it picks up the .dev
file ... still doesn't work.
the problem is, the library doesn't have a Sources
folder, but src
as it's specified in the haxelib.json:classpath property
copied src folder to Sources folder .. still doesn't work.
the library depends on another haxelib library (haxelib.json:dependencies property)
added all dependencies manually ... still doesn't work.
the libraries contain an extraParams.hxml
that adds compiler flags (--macro) in this case, that don't get picked up by khamake
added the --macro's to the flashdevelop project file ... finally works! (well until i have to rebuild the project files)
now is it me being stupid, or is the whole haxelib integration not really supported by khamake?
In html5/debug-html5 the canvas in the index file is being generated with the size of 800x600 and in Main.hx System.init is being called with a size of 1024x768. Maybe all the references could use the size of the window in Kode Studio. This is when the size is not specified in khafile.js and khamake uses the default size.
it would be nice if we could specify a specific haxelib version in the project.kha file
Using ffmpeg with the Android Java backend will output the audio as it is. Setting the "quality" option changes nothing. HTML5 and Flash work fine.
Currently, when generating project names the resulting .hxproj ends up as something like MyProject-html5.hxproj
, it would be nice if this could be overridden and allow a custom project name, for example kha-html5.hxproj
when passing in kha
as a parameter of somekind.
When I try and build a project for the Unity target (works for html5/osx), using I get this error:
{ Error: ENOENT: no such file or directory, open 'Users/bparks/gitrepos/kha_super_cobra1/Empty/Kha/Tools/khamake/Data/unity/Shaders/proto.shader'
which I hardcode fixed by editing this file:
/Users/bparks/gitrepos/kha_super_cobra1/Empty/Kha/Tools/khamake/out/main.js
and inserting a '/' at the begin of the join.. So changed this:
let proto = fs.readFileSync(path.join(options.from, options.kha, 'Tools', 'khamake', 'Data', 'unity', 'Shaders', 'proto.shader'), 'utf8');
to this:
let proto = fs.readFileSync(path.join('/',options.from, options.kha, 'Tools', 'khamake', 'Data', 'unity', 'Shaders', 'proto.shader'), 'utf8');
Here's how I compiled.
$ khamake --t unity
Creating Kha project.
Exporting asset 1 of 24 (arial.ttf).
...
Exporting asset 2 of 24 (bomb1.wav).
Compiling shader 8 of 8 (painter-video.vert.glsl).
{ Error: ENOENT: no such file or directory, open 'Users/bparks/gitrepos/kha_super_cobra1/Empty/Kha/Tools/khamake/Data/unity/Shaders/proto.shader'
at Error (native)
at Object.fs.openSync (fs.js:640:18)
at Object.fs.readFileSync (fs.js:508:33)
at /Users/bparks/gitrepos/kha_super_cobra1/Empty/Kha/Tools/khamake/out/main.js:317:28
at next (native)
at fulfilled (/Users/bparks/gitrepos/kha_super_cobra1/Empty/Kha/Tools/khamake/out/main.js:4:58)
errno: -2,
code: 'ENOENT',
syscall: 'open',
path: 'Users/bparks/gitrepos/kha_super_cobra1/Empty/Kha/Tools/khamake/Data/unity/Shaders/proto.shader' }
I cloned the Empty repo, when I try to create a android project, I'm getting this error (complete log):
C:\Dev\Projetos\Kha\Empty>node Kha/make android
Graphics: direct3d9
Vr API is: none
Generating Kha project.
Assets done.
Haxe stderr: ..\Kha\Backends\Kore/kha/Starter.hx:76: characters 34-60 : Type not found : CardboardVrInterface
Haxe process exited with code 1
VrApi (main.js): undefined
korefile found, generating build files.
Generating Android solution
.
.
.
fs.js:500
return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
^
Error: ENOENT, no such file or directory 'C:\Dev\Projetos\Kha\Empty\Kha\Kore\Tools\koremake\Data\android.clas
spath'
at Error (native)
at Object.fs.openSync (fs.js:500:18)
at Object.fs.readFileSync (fs.js:352:15)
at Object.exports.copyIfDifferent (C:\Dev\Projetos\Kha\Empty\Kha\Kore\Tools\koremake\Files.js:60:38)
at ExporterAndroid.exportSolution (C:\Dev\Projetos\Kha\Empty\Kha\Kore\Tools\koremake\ExporterAndroid.js:25
:11)
at exportKakeProject (C:\Dev\Projetos\Kha\Empty\Kha\Kore\Tools\koremake\main.js:178:11)
at exportProject (C:\Dev\Projetos\Kha\Empty\Kha\Kore\Tools\koremake\main.js:190:10)
at Object.exports.run (C:\Dev\Projetos\Kha\Empty\Kha\Kore\Tools\koremake\main.js:215:2)
at C:\Dev\Projetos\Kha\Empty\Kha\Tools\khamake\main.js:412:35
at ChildProcess. (C:\Dev\Projetos\Kha\Empty\Kha\Tools\khamake\Haxe.js:27:3)
c:\path\to\prj\Kha\Tools\khamake\main.js:212
if (index >= assets.length) {
^
TypeError: Cannot read property 'length' of undefined
at exportAssets (c:\path\to\prj\Kha\Tools\khamake\main.js:212:21)
at exportKhaProject (c:\path\to\prj\Kha\Tools\khamake\main.js:595:2)
at exportProject (c:\path\to\prj\Kha\Tools\khamake\main.js:664:3)
at Object.exports.run (c:\path\to\prj\Kha\Tools\khamake\main.js:752:2)
at Object.<anonymous> (c:\path\to\prj\Kha\Tools\khamake\khamake.js:498:23)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Module.require (module.js:365:17)
from irc:
When I first run khamake for android native it takes 9 seconds. But second and other times it takes almost 2 minutes. I workaround this in script by deleting this dirs:
android_native_build/prj_name/app/src/main/jni
android_native_build/Sources
Compiling shader 1 of 1 (ChairFabric_shadowmap.frag.glsl).
Compiling shader 1 of 1 (ChairFabric_shadowmap.vert.glsl).
Compiling shader 1 of 1 (Coffee_mesh.frag.glsl).
Recompiling Coffee_mesh.frag
Compiling shader 1 of 1 (Coffee_mesh.vert.glsl).
fs.js:809
return binding.rename(pathModule._makeLong(oldPath),
^
Error: ENOENT: no such file or directory, rename 'C:\Users\blake\Documents\blender\build\html5-resources\Coffee_mesh.frag.essl.temp' -> 'C:\Users\blake\Documents\blender\build\html5-resources\Coffee_mesh.frag.essl'
at Error (native)
at Object.fs.renameSync (fs.js:809:18)
at ChildProcess.child.on (C:\Users\blake\Downloads\Armory3D\Armory\armsdk\win32\Kha\Tools\khamake\out\ShaderCompiler.js:356:44)
at emitTwo (events.js:106:13)
at ChildProcess.emit (events.js:191:7)
at maybeClose (internal/child_process.js:852:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:215:5)
Build failed, check console
I was getting this error with Armory3D
Here is my quote from Armory3D issue: #176
I was investigating this issue, my hunch was that it is asynchronous and the writing of the .temp is sometimes slow, depending on what's going on on my computer, which gives it the intermittent appearance. I found that the writing and renaming was done by the node.js plugin fs.js. I found the functions writefilesync and renamesync.
According to: https://nodejs.org/api/fs.html#fs_fs_writefilesync_file_data_options
Both writefilesync and renamesync are the synchronous versions of the functions.Then I found this article:
http://www.daveeddy.com/2013/03/26/synchronous-file-io-in-nodejs/
Which did a little experiment and comes to the conclusion that the writefilesync and renamesync are synchronous within the node.js context but they tell the operating system to do asynchronous write and rename.
Currently khamake use the Assets path as they are.
This means that the use of CDN (Content Delivery Network) would cache the assets even if they changed.
One solution to that is to generate a checksum string and append it to the asset path name.
Since khamake already contain a project.kha format with named asset. Khamake could generate such checksum and add it the asset name with the propper mapping in the generated project.kha.
A checksum should also be generated and appended to the kha.js and project.kha file names. This way CDN will be able to cache the kha game and its assets when they do not change and would not cache them if they change. This also allow efficient caching by browser by settign the server to tell the browser to cache the files as long as they can
Currently it's not possible to require local scripts from within khafile.js.
khafile.js
const myscript = require('./myscript.js');
let project = new Project('xxx');
...
Creating Kha project.
{ Error: Cannot find module './myscript.js'
...
I guess this is due to how the projectfile is run in https://github.com/KTXSoftware/khamake/blob/master/src/ProjectFile.ts#L24
as it only gets very limited access to anything from the executing script.
Came across this path issue recently when Kha is not located directly in project dir.
/test
─ Empty
─ Kha
Running from Empty
: node ../Kha/make
, builds fine.
Renaming test
to test(1)
/test(1)
─ Empty
─ Kha
Running from Empty
: node ../Kha/make
:
Creating Kha project.
/Users/lubos/Documents/test(1)/Kha/Sources/kha/graphics4/Graphics2.hx:87: characters 34-60 : Class<kha.Shaders> has no field painter_image_frag
/Users/lubos/Documents/test(1)/Kha/Sources/kha/graphics4/Graphics2.hx:88: characters 32-58 : Class<kha.Shaders> has no field painter_image_vert
/Users/lubos/Documents/test(1)/Kha/Sources/kha/graphics4/Graphics2.hx:322: characters 34-62 : Class<kha.Shaders> has no field painter_colored_frag
/Users/lubos/Documents/test(1)/Kha/Sources/kha/graphics4/Graphics2.hx:323: characters 32-60 : Class<kha.Shaders> has no field painter_colored_vert
/Users/lubos/Documents/test(1)/Kha/Sources/kha/graphics4/Graphics2.hx:586: characters 34-59 : Class<kha.Shaders> has no field painter_text_frag
/Users/lubos/Documents/test(1)/Kha/Sources/kha/graphics4/Graphics2.hx:587: characters 32-57 : Class<kha.Shaders> has no field painter_text_vert
/Users/lubos/Documents/test(1)/Kha/Sources/kha/graphics4/Graphics2.hx:816: characters 34-60 : Class<kha.Shaders> has no field painter_video_frag
/Users/lubos/Documents/test(1)/Kha/Sources/kha/graphics4/Graphics2.hx:817: characters 32-58 : Class<kha.Shaders> has no field painter_video_vert
/Users/lubos/Documents/test(1)/Kha/Sources/kha/vr/VrInterfaceEmulated.hx:308: characters 26-52 : Class<kha.Shaders> has no field painter_image_vert
/Users/lubos/Documents/test(1)/Kha/Sources/kha/vr/VrInterfaceEmulated.hx:309: characters 28-54 : Class<kha.Shaders> has no field painter_image_frag
Haxe compiler error.
Tested on Linux and MacOS.
The error is :
fs.js:500
return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
^
Error: ENOENT, no such file or directory 'C:\HaxeToolkit\haxe\lib\khage.current'
at Error (native)
at Object.fs.openSync (fs.js:500:18)
at Object.fs.readFileSync (fs.js:352:15)
at exportKhaProject (C:\Development\haxe\kha_test\Kha\Tools\khamake\main.js:502:24)
at exportProject (C:\Development\haxe\kha_test\Kha\Tools\khamake\main.js:638:3)
at Object.exports.run (C:\Development\haxe\kha_test\Kha\Tools\khamake\main.js:723:2)
at Object. (C:\Development\haxe\kha_test\Kha\Tools\khamake\khamake.js:498:23)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
Hi Robert,
I'm currently playing around with kha.Audio and was wondering about the used sound formats.
I have a couple of wav's in my assets folder, and when generating projects, i get ogg for flash/html5, wav for native targets. As my wav's are pretty big i'd like to use ogg on native targets as well. I looked through the khamake sources and see that the KoreExporter just copies the wavs. For testing, i copied the whole copySound() from FlashExporter.js, stuffed it in there and it's working (i get converted oggs and can play them in my app).
Now i was wondering how this could be integrated into khamake in a configurable way.
I did a basic implementation (only for KoreExporter) of a new field Project.assetOptions.
In the projects khafile.js
you can use it like:
project.assetOptions.audio.preferredFormat = 'ogg';
And the KoreExporter.copySound() now just has a simple if and a copy of the flash exporters copySound() for the ogg branch.
copySound(platform, from, to, encoders, options) {
if (options.preferredFormat == 'ogg') {
Files.createDirectories(this.directory.resolve(this.sysdir()).resolve(to).parent());
Converter.convert(from, this.directory.resolve(this.sysdir()).resolve(to + '.ogg'), encoders.oggEncoder);
return [to + '.ogg'];
} else {
fs.copySync(from.toString(), this.directory.resolve(this.sysdir()).resolve(to + '.wav').toString(), { clobber: true });
return [to + '.wav'];
}
}
Should i do a PR for this, or is it maybe just one usecase of what wighawag proposes in #34 and could be implemented better?
My kha project has some functionality implemented in c++, hence when building with kha-make I would like to tell it to include additional directories so it could generate correct project files.
Currently I need to modify generated project files manually.
I have had weird behavior wiht my shaders until I cleared my cache.
If the shaders from 2 projects have the same names. or maybe if they are modified? the browser will get from the cache (which might be the shader from the other one
For some reason I get 'relocation overflow in R_ARM_THM_CALL' whilst building for android.
Need to enable '-DANDROID_ARM_MODE=arm' in build.gradle in order to build.
As described here: https://stackoverflow.com/questions/45845787/cant-force-arm-mode-in-android-studio
Excerpt from working build.gradle:
externalNativeBuild {
cmake {
cppFlags "-frtti -fexceptions"
arguments '-DANDROID_ARM_MODE=arm'
}
}
Kore targets, for example node Kha/make android-native --compile --noproject
give an error:
throw er; // Unhandled 'error' event
^
Error: spawn bash ENOENT
at Process.ChildProcess._handle.onexit (internal/child_process.js:201:19)
at onErrorNT (internal/child_process.js:379:16)
at process._tickCallback (internal/process/next_tick.js:114:19)```
if i add a define in my khafile.js it should probably be passed to the generated korefile.js and in turn to the generated native solutions.
I've made this simple scripts for quick windows testing from FD by hitting F5.
For now I just copy them in other script, that also run node Kha/make windows.
Maybe they should be integrated in khamake?
In my khafile: project.addLibrary("haxe-crypto");
Output of khamake in project-flash.hxproj:
<classpaths>
<class path="C:\Kha\Sources" />
<class path="C:\Kha\Backends\Flash" />
<class path="..\Sources" />
<class path="C:\HaxeToolkit\haxe\lib\haxe-crypto\0,0,6\src" />
<class path="C:\HaxeToolkit\haxe\lib\haxe-crypto\0,0,6" />
</classpaths>
The unity backend has a bunch of errors mainly around shader compilation through khamake and then in the unity backend blob loading.
I've been patching as best I can, can someone supply me an older unity build folder for a project that actually works under unity, so I can finish patching the latest toolchains so they work and put it all in a pull request?
Cheers,
Matt
This is particularly useful when using the --watch
option so everything run automatically.
https://github.com/KTXSoftware/khamake/blob/master/main.js#L357
It would be nice to be able to customize this.
This patch: #101
Got reverted in this commit: 571138c#diff-75b50b3820b05967e723e942f965bbce
Unfortunately there is now no way to compile for Krom using desired graphics API. Is there a way to restore this? Was this option causing trouble?
If you use --watch
khamake won't recompile the project after making changes in a library added with project.addLibrary
.
I'm trying to define a haxe compilation flag for conditional compilation. I added to my khafile.js project.addDefine("stuff"); but it doesn't seem to take an effect. Is this not the correct use case for addDefine? is there another method that I should call? I'm using the haxelib version of kha.
I'm using this default setting in FD project files:
<option testMovie="Custom" />
<option testMovieCommand="run.bat" />
I'm copying my different run.bats after running khamake for specific platform.
So, It would be great if this scripts were named differently in different platform prj files, something like:
run_windows.cmd
run_android.cmd
run_html5.cmd
Could be along the lines of
project.addIcon(iconPath)
or
project.addIcon(iconSize, iconPath);
or
project.options.icons = [{size:"x-large", path: iconPath}, {iconPath:iconPath}];
or
something else
Following up on #34
it would be great to allow libraries to add pre process and post process step.
Maybe they could even have write access to the project object so they can add stuff
Not sure how this could be done but maybe a khafile.js per library that would in some way allow to pass callbacks ?
Would be great if we could operate on the project at various stage.
For example if we could process assets before they are given to the project.
Hello Robert,
i encounter issues with the generated FD project file for the flash target (FlashDevelop build 5.0.2.2). Kha is added via git submodule.
(Additional libraries in the project.kha file are added with relative paths and are debuggable)
<classpaths>
<class path="..\Sources" />
<class path="e:\projects\myproject\kha\Sources" />
<class path="e:\projects\myproject\kha\Backends\Flash" />
<class path="..\Libraries\somelib1\Sources" />
<class path="..\Libraries\somelib2\Sources" />
</classpaths>
This somehow breaks the ability to debug in FD. Breakpoints in Kha source files aren't hit, and doubleclicking logged exceptions/errors in the results panel fails to jump to the correct line in the files. The debugger always jumps to line 1.
Classpath | Test | Result |
---|---|---|
<class path="e:\projects\myproject\kha\Sources" /> |
original | fail |
<class path="..\kha\Sources" /> |
relative path | fail |
<class path="e:\projects\myproject\Kha\Sources" /> |
correct case | fail |
<class path="..\Kha\Sources" /> |
relative path + case | ok 😄 |
Trying to embed flash assets now fails (using haxelib version 15.8.0)
Steps to recreate:
haxelib run kha build flash --embedflashassets
Fails on:
...\haxe\lib\kha\15,8,0\Tools\khamake\FlashExporter.js:26
filename = filename.replaceAll('.', '_');
^
TypeError: undefined is not a function
It seems, that at some point filename doesn't contain string but object {path : "./project.kha"}
(or similar, writing that from memory, test dump is long gone...)
Falling back to 15.7.3 solves the problem.
Currently there is no way to do something in the khafile that depends on command line arguments
It would be great to be able to access the command line arguments from the khafile so it can act on them
The custom target thing does not currently allow khafile to know about the custom target.
I also think something different than custom target should be used to access any kind of arguments
Hi Robert,
while fiddling about with --from and --to i thought it would be nice to be able to specify the project file on the command line instead of having a hardcoded "khafile.js". If i take the example from #23, i have
@node Kha/make --target flash --from src/spriter/example-kha-g2 --to build/example-kha-g2
@node Kha/make --target flash --from src/spriter/example-kha-g4 --to build/example-kha-g4
What i'd like to do is something like ...
@node Kha/make --target flash --projectfile example-kha-g2.js --to build/example-kha-g2
@node Kha/make --target flash --projectfile example-kha-g4.js --to build/example-kha-g4
... so i don't have to keep the project files in diffrent subdirs.
Add support for letting library access project and modify it
Tested using windows, exporting for html5:
Calling khamake when the project directory path contains spaces crashes during sound conversion.
Output when no other files are converted:
D:\Documents\Eigene Programme\khaTris>node Kha/make html5
Creating Kha project.
Exporting asset 1 of 1 (land.wav).
D:\Documents\Eigene Programme\khaTris\Kha\Tools\oggenc\oggenc.exe {in} -o {out}
--quiet error: Error: spawn D:\Documents\Eigene ENOENT
Assets done.
D:\Documents\Eigene Programme\khaTris\Kha\Tools\oggenc\oggenc.exe {in} -o {out}
--quiet process exited with code -4058
Assets done.
Done.
Done.
generate a description file listing attribute and uniform (name and types) for all shaders as part of khamake
I run khamake like this
node Kha/make -t android-native --from path/to/android/native/build
And I get plenty of errors similar to this:
FC: cannot open PATH/TO/PRJ/KHA/KORE/SOURCES/KORE/NETWORK/SOCKET.H - No such file or folder
Would be nice to haven an parameter that ignores timestamp on files, re-exporting even when they are already there in a seemingly newer version.
'webkitMovementX' is deprecated. Please use 'movementX' instead.
'webkitMovementY' is deprecated. Please use 'movementY' instead.
Hi Robert,
i just tried to use the --from --to flags while creating a project.
@node Kha/make --target flash --from src/spriter/example-kha-g2 --to build/example-kha-g2
results in Kha paths being broken.
<class path="..\..\src\spriter\example-kha-g2\e:\projects.libraries\Spriter-Example\Kha\Sources" />
<class path="..\..\src\spriter\example-kha-g2\e:\projects.libraries\Spriter-Example\Kha\Backends\Flash" />
<class path="..\..\src\spriter\example-kha-g2" />
<class path="..\..\SpriterHaxeEngine" />
Bugfix is quite easy: In khamake/HaxeProject.js change path.join() to path.resolve()
for (let i = 0; i < options.sources.length; ++i) {
classpaths.e.push({
n: 'class',
path: path.relative(projectdir, path.resolve(options.from, options.sources[i]))
//path: path.relative(projectdir, path.join(options.from, options.sources[i]))
});
}
Result:
<class path="..\..\Kha\Sources" />
<class path="..\..\Kha\Backends\Flash" />
<class path="..\..\src\spriter\example-kha-g2" />
<class path="..\..\SpriterHaxeEngine" />
Now i think i should start to learn how to do proper forks and pull requests and stuff instead of posting here 😅
Hi, I am playing with Kha, which looks great so far!
Unfortunately, I am running into issues when trying to export to Unity:
First, I had to do some quick fixes on khamake files to workaround this issue: #74
Then, I did not succeed to get anything displayed on the Unity export. It just shows a black screen when running.
I tried with some basic lewis lepton's https://github.com/lewislepton/kha-tutorial-series examples (004_loadingImage and 005_drawingShape) with no luck.
The same examples work fine on html5, ios or mac export.
I am using latest Kha (git version) and latest Unity (5.5).
Am I missing something? Is there any other required step to make it work on Unity?
Thanks!
Edit: not sure if I should have posted this on Kha or khamake repository.
This has been discussed in the past on the irc channel. It would be good that instead of a return statement for the project in khafile, we would call instead callback passing in the project.
done(project);
instead of
return project;
This ways khafile would support asynchronous operations
This would also solve the linting error due to returning something while outside of the scope of a function
Hi,
I have installed nodejs on my android phone and wanted to build my game on it.
khamake fails at binding.futimes(fd, atime, mtime);
upon exporting assets for html5
This happen at https://github.com/Kode/khamake/blob/master/src/Exporters/Html5Exporter.ts#L207
Not sure if it is a android or arm issue in relation to fs-extra
After updating there is no image.description.original_width/height fields. I've added this (romamik@7cf8ded) but can't create pull request right now because it's based on my other changes for which I already created pull requests.
Can't build for Windows.
More accurately, it don't create the project solution.
Node v6.9.1
Compiling code.
korefile found.
Creating Windows project files.
ReferenceError: __dirname is not defined
at eval (eval at createProject (Kha\Kore\Tools\koremake\out\Solution.js:85:23), <anonymous>:3:34)
at Function.createProject (Kha\Kore\Tools\koremake\out\Solution.js:85:103)
at eval (eval at createSolution (Kha\Kore\Tools\koremake\out\Solution.js:93:24), <anonymous>:8:32)
at Function.createSolution (Kha\Kore\Tools\koremake\out\Solution.js:93:130)
at Function.create (Kha\Kore\Tools\koremake\out\Solution.js:117:33)
at exportKoremakeProject (Kha\Kore\Tools\koremake\out\main.js:149:40)
at exportProject (Kha\Kore\Tools\koremake\out\main.js:216:16)
at Object.<anonymous> (Kha\Kore\Tools\koremake\out\main.js:271:24)
at next (native)
at Kha\Kore\Tools\koremake\out\main.js:7:65
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.