electron-vite / vite-plugin-electron Goto Github PK
View Code? Open in Web Editor NEW:electron: Electron⚡️Vite core repo
Home Page: https://github.com/electron-vite
License: MIT License
:electron: Electron⚡️Vite core repo
Home Page: https://github.com/electron-vite
License: MIT License
using Vite3.0.3
PNPM version number does not match properly due to version release
using absolute paths as entry (both main and preload) used to work until 0.4.5 but now breaks after 0.4.7 upgrade.
I'm attempting to port my electron-webpack project over to vite using vite-plugin-electron. https://github.com/imbateam-gg/titan-reactor
I'd like to retain the structure src/renderer
, src/common
, src/main
. With both renderer
and main
having aliases to common for shared utilities and types.
There is a resolve option in main
for this plugin but it seems to overwrite the previous configuration.
I got this error message when tring to build a NSIS installer using electron-builder
Application entry file "dist\electron\main\index.js" in the "D:\Vue-electron\dist\win-unpacked\resources\app.asar" does not exist. Seems like a wrong configuration. failedTask=build stackTrace=
Here is the snippet in the vite.config file, how to properly configure that entry
field when packaing the app ?
electron({ main: { entry: "electron/main/index.ts", vite: { build: { // For Debug sourcemap: true, outDir: "dist/electron/main", }, }, }
rollupOptions: {
input: {
main: path.resolve(__dirname, 'index.html'),
tabbar: path.resolve(__dirname, 'tabbar.html')
},
output: {
chunkFileNames: 'static/js/[name]-[format]-[hash].js',
entryFileNames: 'static/js/[name]-[format]-[hash].js',
assetFileNames: 'static/[ext]/[name]-[hash].[ext]'
}
}
如果配置了多页面,同时配置了output的话,编译后就会提示无法加载_plugin-vue_export-helper.xxxx.js
并且多页面只能在根目录(vite.config.js同级)
Error using THREEJS
WARNING: Multiple instances of Three.js being imported.
WARNING: Multiple instances of Three.js being imported.
WARNING: Multiple instances of Three.js being imported.
WARNING: Multiple instances of Three.js being imported.
WARNING: Too many active WebGL contexts. Oldest context will be lost
...
当工程使用vite+vite-plugin-electron方式启动时,在哪里可以配置--remote-debugging-port=9229启动项
While working in electron-vite-react
the following message in the vite-plugin-electron.log
is repeated on each build:
[24/07/2022, 14:09:15]
Command: "vite serve".
The main field in package.json may be incorrect, which causes the App to fail to start.
File build path: "C:\Users\PAXANDDOS\Desktop\electron-vite-react\dist\electron\main\index.js".
Recommended main value: "C:\Users\PAXANDDOS\Desktop\electron-vite-react\dist\electron\main\index.js".
Even though it looks like something that would break the application, it works as intended 🤔
The issue exists both on Vite
v3
and v2
, so it should be something in the plugin
My project has the following directory structure:
src
ㄴ main
ㄴ utils
test.js
index.js
ㄴ renderer
main.js
...
If i build the package using vite-plugin-electron
, the build succeeds, but when i import and use an external js file like the src/main/utils/test.js
file, the file is built without minify or code obfuscation. The main/utils/test.js
file in the build output path is the same as the existing file.
Is there a way to obfuscate (or minify) external js files other than the main entry file? Or is this a bug?
here is my vite.config.js
:
import { defineConfig } from 'vite'
import electron from 'vite-plugin-electron'
import vue from '@vitejs/plugin-vue'
import { resolve, join } from 'path'
import { builtinModules } from 'module'
export default defineConfig({
base: './',
root: resolve('./src/renderer'),
publicDir: resolve('./src/renderer/public'),
build: {
outDir: resolve('./dist')
},
plugins: [
vue(),
electron({
main: {
entry: 'src/main/index.js',
vite: {
publicDir: resolve('./src/main'),
build: {
emptyOutDir: true,
assetsDir: '.',
outDir: 'dist/main',
rollupOptions: {
external: [
'electron',
...builtinModules
]
}
}
}
},
renderer: {}
})
]
})
Thank you.
While I use vite-plugin-electron
with Vite offical template-vue-ts, getting the following errors.
使用vite 初始模板,在vite.config.ts中调用会报错
<script setup lang="ts">
import { ipcRenderer } from 'electron'
import { ref } from 'vue'
const num = ref(0)
async function increase() {
num.value = await ipcRenderer.invoke('hello', num.value)
}
</script>
<template>
<button @click="increase">{{ `Count is ${num}` }}</button>
</template>
![image](https://user-images.githubusercontent.com/59610606/176430674-c9184613-9009-4f80-80ce-25ba6b870aa5.png)
When use Prefix-Only Core Modules node:os
will case error:
Error: Module "node:os" has been externalized for browser compatibility and cannot be accessed in client code
I find Prefix-Only Core Modules is not external module when build
mian 主进程中使用axios,提示XMLHttpRequest is not defined
The electronic application I made runs playwright. The browser.close() function must be called to exit playwright.
How can I call the browser.close() function of playwright every time in development mode (npm run dev)?
Hey,
I see there is an option to prevent clearing the electron stuff in https://github.com/electron-vite/vite-plugin-electron/blob/main/src/index.ts#L20
But the build files are removed when the vite build commando is done.
When I put build.emptyOutDir
to false
in the vite config.
It works
How to specify in https://github.com/electron-vite/electron-vite-react/blob/main/vite.config.ts different apps each for a different window?
For example:
/src/app
/src/app_A
/src/app_B
where App.tsx
and main.tsx
are in /src/app
:
/src/app/App.tsx
/src/app/main.tsx
/src/app_A/App_A.tsx
/src/app_A/main_A.tsx
/src/app_B/App_B.tsx
/src/app_B/main_B.tsx
Steps to reproduce
.env
file with VITE_CAT=meow
electron/main.index.ts
and add console.log(import.meta.env.VITE_CAT);
npm run dev
and look at the output in the terminal.Bug
It will say undefined
Expected
It should say meow
The issue is here, this line should probably be deleted
ThreeJS is used in the project, and the interface cannot be displayed after packaging.
lingo3D is a 3D development framework based on ThreeJS package
project address: https://github.com/robomentor/Electron_Threejs_Template
The development environment can be used normally, but the interface cannot be displayed after packaging, and there is no related error message.
How to use:
yarn && yarn electron:rebuild
development mode:yarn electron:dev
release mode:yarn electron:build && yarn electron:win64
or
release mode:yarn electron:build && yarn electron:win32
or
release mode:yarn electron:build && yarn electron:mac
vite版本是3.0.9,是因为版本错误吗?
Module parse failed: Unexpected character '�' (1:0)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
(Source code omitted for this binary file)
ModuleParseError: Module parse failed: Unexpected character '�' (1:0)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
(Source code omitted for this binary file)
at handleParseError (/Volumes/geek+/www/flexible-assistant-client/node_modules/webpack/lib/NormalModule.js:976:19)
at /Volumes/geek+/www/flexible-assistant-client/node_modules/webpack/lib/NormalModule.js:1095:5
at processResult (/Volumes/geek+/www/flexible-assistant-client/node_modules/webpack/lib/NormalModule.js:800:11)
at /Volumes/geek+/www/flexible-assistant-client/node_modules/webpack/lib/NormalModule.js:860:5
at /Volumes/geek+/www/flexible-assistant-client/node_modules/loader-runner/lib/LoaderRunner.js:407:3
at iterateNormalLoaders (/Volumes/geek+/www/flexible-assistant-client/node_modules/loader-runner/lib/LoaderRunner.js:233:10)
at /Volumes/geek+/www/flexible-assistant-client/node_modules/loader-runner/lib/LoaderRunner.js:224:4
at /Volumes/geek+/www/flexible-assistant-client/node_modules/webpack/lib/NormalModule.js:834:15
at Array.eval (eval at create (/Volumes/geek+/www/flexible-assistant-client/node_modules/tapable/lib/HookCodeFactory.js:33:10), :12:1)
at runCallbacks (/Volumes/geek+/www/flexible-assistant-client/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:27:15)
[vite-plugin-esmodule] build failed.
/renderer/index.js 90 行 如项目内存在动态引入的情况,这将导致 vite 打包后运行报错
如:
import('./abc.vue')
运行后报错: exports is not defined
其原因是生成的代码为:
"use strict";Object.defineProperties(exports,{__esModule:...
import { app } from "@electron/remote";
console.log(app.getPath("userData"));
// 'C:\Users\Username\AppData\Roaming\Electron'
呃。主要是光秃秃的,在继承开发时,如果有问题就什么也看不到错误提示,能不能弄个菜单,至少让人可以打开开发工具查看错误?
呃,糟糕,发错位置了,应该是:https://github.com/caoxiemeihao/vite-plugin-electron-quick-start
只运行vite命令,也会启动electron,是需要配置吗?
项目地址:https://github.com/Hunlongyu/processing/blob/main/vite.config.ts
开发的时候能够正常打开多窗口,但构建的时候,会报错,提示找不到对应的 js 文件。
大佬能帮忙看一下吗?
Hi, I have some code shared between Vue and Electron like interface, enum...
I am using vite-tsconfig-paths for load resolve alias
anything is working perfectly in Vue app...but that is not working if I try to import anything to any file in the electron folder
[vite]: Rollup failed to resolve import "@shared/api/main" from "electron/preload/modules/main.module.ts".
This is most likely unintended because it can break your application at runtime.
If you do want to externalize this module explicitly add it to
`build.rollupOptions.external`
tsConfigPaths
tsconfigPaths({
loose: true
}),
paths
"paths": {
"#electron/*": [
"./electron/*"
]
}
环境: win11, yarn包管理, node 16.9.0
以下是错误堆栈信息。我意识到是路径的问题。当我修改 C:\Users\plus\Desktop\workspace\scrcpy-electron\node_modules\vite-electron-plugin\index.js 的build函数(手动处理distname之后dev正常运行)。
我的处理代码为
if (distname.includes('C:')) distname = distname.split('C:')[1]
这是不是一个在windows下的bug?
`
node:fs:1334
handleErrorFromBinding(ctx);
^
Error: ENOENT: no such file or directory, mkdir '/Users/plus/Desktop/workspace/scrcpy-electron/C:/Users/plus/Desktop/workspace/scrcpy-electron/dist-electron/main'
at Object.mkdirSync (node:fs:1334:3)
at ensureDir (C:\Users\plus\Desktop\workspace\scrcpy-electron\node_modules\vite-electron-plugin\index.js:50:63)
at build (C:\Users\plus\Desktop\workspace\scrcpy-electron\node_modules\vite-electron-plugin\index.js:223:5)
at FSWatcher. (C:\Users\plus\Desktop\workspace\scrcpy-electron\node_modules\vite-electron-plugin\index.js:285:17)
at FSWatcher.emit (node:events:394:28)
at FSWatcher.emitWithAll (C:\Users\plus\Desktop\workspace\scrcpy-electron\node_modules\chokidar\index.js:541:32)
at FSWatcher._emit (C:\Users\plus\Desktop\workspace\scrcpy-electron\node_modules\chokidar\index.js:632:8)
at NodeFsHandler._handleFile (C:\Users\plus\Desktop\workspace\scrcpy-electron\node_modules\chokidar\lib\nodefs-handler.js:400:14)
at NodeFsHandler._addToNodeFs (C:\Users\plus\Desktop\workspace\scrcpy-electron\node_modules\chokidar\lib\nodefs-handler.js:637:21) {
errno: -4058,
syscall: 'mkdir',
code: 'ENOENT',
path: '/Users/plus/Desktop/workspace/scrcpy-electron/C:/Users/plus/Desktop/workspace/scrcpy-electron/dist-electron/main'
}
`
感谢您的插件,请问有计划支持vite3吗?
How can I include additional files to the dist
directory?
My use case is I fork a script in electron/main/main.ts
.
参考旧的配置,增加了一个新的预加载脚本,并且窗口设置了contextIsolation
为false
,脚本通过window对象暴露了一些接口,但是窗口的window对象没有找到这些接口。
0.9.0
这是我的项目中的electron部分的结构:
.
├── assets
│ ├── black.otf
│ └── template.pdf
├── electron-env.d.ts
├── main
│ └── index.ts
├── preload
│ ├── index.ts
│ └── pdfWindowPreload.ts
└── utils
├── PdfForm.ts
├── PrintPdf.ts
└── pdfRender.ts
在preload中增加了一个pdfWindowPreload.ts
,内容为:
import { ipcRenderer } from 'electron'
declare const window: any
window.myAPI = {
printPdf: () => ipcRenderer.invoke('printPdf'),
closeWindow: () => ipcRenderer.invoke('closeWindow'),
onHandleClose: (callback) => ipcRenderer.on('handle-close', callback),
}
然后在vite.config.js中配置了新增的脚本:
...
preload: {
input: {
// You can configure multiple preload here
index: path.join(__dirname, 'electron/preload/index.ts'),
pdfWindowPreload: path.join(
__dirname,
'electron/preload/pdfWindowPreload.ts'
),
},
vite: {
build: {
// For Debug
sourcemap: 'inline',
outDir: 'dist/electron/preload',
},
},
},
...
我看控制台也输出build的结果了:
dist/electron/preload/index.js 2.40 KiB / gzip: 0.97 KiB
dist/electron/preload/index.js.map 4.26 KiB
dist/electron/preload/pdfWindowPreload.js 0.28 KiB / gzip: 0.17 KiB
dist/electron/preload/pdfWindowPreload.js.map 0.59 KiB
然后入口文件中引入并且window的web的配置为:
...
const preload = join(__dirname, '../preload/index.js')
const pdfPreload = join(__dirname, '../preload/pdfWindowPreload.js')
...
pdfWin = new PDFWindow({
title: 'Preview window',
alwaysOnTop: true,
modal: false,
autoHideMenuBar: true,
webPreferences: {
pdfPreload,
nodeIntegration: true,
contextIsolation: false,
},
})
但是在新窗口看window对象,即使没暴露出的方法。。。目前是在旧的preload中增加,暂时是解决了。有空帮忙看下,谢谢🙏
When vite.config.js is modified, vite spawn a new instance instead of closing the previous one.
export default defineConfig({
base: './',
plugins: [
jsx({}),
vue({}),
electron({
main: {
entry: 'src/main.ts',
},
}),
],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
}
},
build: {
minify: process.env.NODE_ENV === 'production',
}
})
Note: I used this in my electron project without using Boilerplate with the configuration as in the snippet.
Sorry for bothering again. I caught another problem. https://github.com/sindresorhus/file-url package doesn't work.
When executing yarn vite
with custom parameters, these are lost. Looking at the source code, electron is only launched with --no-sandbox
.
Is there a way to pass custom arguments to the electron application?
I want to be able to launch vite with: yarn vite -f ~/path/to/file
Doing import { ipcRenderer} from 'electron'
(or any other renderer electron module) crashes the app with reason: "crashed"
and exitCode: 11
.
nodeIntegrationInWorker
is set to true.[20890:0831/172750.464535:ERROR:shared_image_manager.cc(267)] SharedImageManager::ProduceOverlay: Trying to Produce a Overlay representation from a non-existent mailbox.
[20890:0831/172750.464559:ERROR:skia_output_device_buffer_queue.cc(354)] Invalid mailbox.
[20890:0831/172750.464564:ERROR:shared_image_manager.cc(267)] SharedImageManager::ProduceOverlay: Trying to Produce a Overlay representation from a non-existent mailbox.
[20890:0831/172750.464569:ERROR:skia_output_device_buffer_queue.cc(354)] Invalid mailbox.
[20890:0831/172750.464572:ERROR:shared_image_manager.cc(267)] SharedImageManager::ProduceOverlay: Trying to Produce a Overlay representation from a non-existent mailbox.
[20890:0831/172750.464578:ERROR:skia_output_device_buffer_queue.cc(354)] Invalid mailbox.
[20890:0831/172750.464580:ERROR:shared_image_manager.cc(267)] SharedImageManager::ProduceOverlay: Trying to Produce a Overlay representation from a non-existent mailbox.
[20890:0831/172750.464584:ERROR:skia_output_device_buffer_queue.cc(354)] Invalid mailbox.
[20890:0831/172750.464601:ERROR:shared_image_manager.cc(267)] SharedImageManager::ProduceOverlay: Trying to Produce a Overlay representation from a non-existent mailbox.
[20890:0831/172750.464606:ERROR:skia_output_device_buffer_queue.cc(354)] Invalid mailbox.
[20890:0831/172750.464609:ERROR:shared_image_manager.cc(267)] SharedImageManager::ProduceOverlay: Trying to Produce a Overlay representation from a non-existent mailbox.
[20890:0831/172750.464612:ERROR:skia_output_device_buffer_queue.cc(354)] Invalid mailbox.
Error sending from webFrameMain: Error: Render frame was disposed before WebFrameMain could be accessed
at n._sendInternal (node:electron/js2c/browser_init:165:629)
at b._sendInternal (node:electron/js2c/browser_init:161:2573)
at node:electron/js2c/browser_init:193:729
at new Promise (<anonymous>)
at Object.invokeInWebContents (node:electron/js2c/browser_init:193:477)
at b.executeJavaScript (node:electron/js2c/browser_init:161:3267)
at process.processTicksAndRejections (node:internal/process/task_queues:96:5)
vite.config.ts.txt
all I found was a pr in mandarin that apparently fixed this exact issue but it's still here, I'm using version 0.9.2 FIY
Uncaught TypeError: Failed to construct 'URL': Invalid URL
at index.2d20d94d.js:1:52013
See build: https://gist.github.com/yooouuri/b1d1706f7708865a359680bb3fdfbe0a#file-index-2d20d94d-js-L2745
It tries to generate a URL:
const nl = "" + new URL("electron.fe1dfbad.png", Wn.url).href
But,
const Wn = {};
There is no .url
on Wn
...
https://gist.github.com/yooouuri/b1d1706f7708865a359680bb3fdfbe0a#file-index-2d20d94d-js-L2
Happens when I upgrade vite to version 3.
How to reproduce:
git clone https://github.com/yooouuri/electron-vite-vue
cd electron-vite-vue
yarn install
yarn build
Open the binary in the release folder, for me its the .app (Mac OS).
how i can add other html files to render as new windows, i have tried adding this code to vite.config.js ;
build: { input: { main: resolve(__dirname, "index.html"), worker: resolve(__dirname, "worker.html"), toolbar: resolve(__dirname,'toolbar.html') }, },
but i dont get any output files in dist/electron/main folder, can you please help me.
Hi,
I had to add buffer
and other node packages to resolve otherwise it was converting it to ArrayBuffer. I use node libraries in the renderer.
renderer: {
resolve() {
return [
"bw-casclib", "events", "util", "fs/promises", "stream", "buffer", "string_decoder"
]
}
},
I find my case to be strange because I believe vite no longer automatically polyfills, so I must be doing something wrong? I'm additionally getting issues around this kind of thing and I'm not certain why.
Above I will also now need to include url
and zlib
to the resolves. Is this as designed or am I doing something wrong?
App threw an error during load
Error: Cannot find module 'node:path'
Require stack:
The modules themselves are working fine, and the sourcemaps are there in their respective folders in node_modules
, but the renderer can't load them:
DevTools failed to load source map: Could not load content for http://127.0.0.1:5173/resolve.js.map: HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE
I didn't see any existing issues about this so maybe something to do with my setup:
/* eslint-env node */
import vue from "@vitejs/plugin-vue";
import { join } from "path";
import { defineConfig } from "vite";
import renderer from "vite-plugin-electron-renderer";
const PACKAGE_ROOT = __dirname;
export default defineConfig({
mode: process.env.MODE,
root: PACKAGE_ROOT,
envDir: process.cwd(),
resolve: {
alias: {
"@": join(PACKAGE_ROOT, "src"),
"!": join(PACKAGE_ROOT, "assets"),
$: join(PACKAGE_ROOT, "../common"),
},
},
base: "",
server: {
fs: {
strict: true,
},
},
build: {
sourcemap: true,
target: `es2022`,
outDir: "dist",
assetsDir: ".",
rollupOptions: {
input: join(PACKAGE_ROOT, "index.html"),
output: {
entryFileNames: "[name].cjs",
},
},
emptyOutDir: true,
reportCompressedSize: false,
lib: {
entry: "src/index.ts",
formats: ["cjs"],
},
},
plugins: [
vue(),
renderer({
resolve() {
return ["path", "fs", "stream", "os", "child_process", "node-fetch", "spring-map-parser", "tachyon-client", "sdfz-demo-parser", "octokit"];
},
}),
],
});
Any ideas how I can fix these, or otherwise hide the warnings?
0.7.5 版本说会关闭,但是现在 0.9.0 还是存在这个问题。
Windows11 系统下,还是会自动生成 log 文件
macOS: v12.5.1 (M1 Max)
node: v18.7.0
npm: 8.18.0
package.json
{
"scripts": {
"dev": "vite",
"build": "vue-tsc --noEmit && vite build && electron-builder"
},
"engines": {
"node": "^14.18.0 || >=16.0.0"
},
"dependencies": {
"@ant-design/icons-vue": "^6.1.0",
"ant-design-vue": "^3.2.11",
"axios": "^0.27.2",
"dayjs": "^1.11.5",
"vue": "^3.2.37",
"vue-router": "^4.1.5",
"vuex": "^4.0.2"
},
"devDependencies": {
"@vitejs/plugin-vue": "^3.0.3",
"electron": "^20.1.0",
"electron-builder": "^23.3.3",
"less": "^4.1.3",
"typescript": "^4.8.2",
"unplugin-vue-components": "^0.22.4",
"vite": "^3.0.9",
"vite-plugin-electron": "^0.9.2",
"vue-tsc": "^0.40.4"
},
"env": {
"VITE_TITLE": "工作台",
"VITE_API_HOST": "https://www.xxx.com",
"VITE_API_PATH": "/api",
"VITE_DEV_SERVER_HOST": "127.0.0.1",
"VITE_DEV_SERVER_PORT": 8000
},
}
electron/main/index.ts
const url = `http://${process.env.VITE_DEV_SERVER_HOST}:${process.env.VITE_DEV_SERVER_PORT}`
Steps to reproduce:
Upgrade vite-plugin-electron to v0.8.5
Error:
failed to load config from /Users/higgihs/Sites/Test/electron-vite-react/vite.config.ts error when starting dev server: Error [ERR_REQUIRE_ESM]: require() of ES Module /Users/higgihs/Sites/Test/electron-vite-react/node_modules/vite-plugin-electron/dist/index.js from /Users/higgihs/Sites/Test/electron-vite-react/vite.config.ts not supported. Instead change the require of index.js in /Users/higgihs/Sites/Test/electron-vite-react/vite.config.ts to a dynamic import() which is available in all CommonJS modules. at Object._require.extensions.<computed> [as .js] (file:///Users/higgihs/Sites/Test/electron-vite-react/node_modules/vite/dist/node/chunks/dep-71eb12cb.js:62910:17) at Object.<anonymous> (/Users/higgihs/Sites/Test/electron-vite-react/vite.config.ts:36:43) at Object._require.extensions.<computed> [as .js] (file:///Users/higgihs/Sites/Test/electron-vite-react/node_modules/vite/dist/node/chunks/dep-71eb12cb.js:62907:24) at loadConfigFromBundledFile (file:///Users/higgihs/Sites/Test/electron-vite-react/node_modules/vite/dist/node/chunks/dep-71eb12cb.js:62915:21) at loadConfigFromFile (file:///Users/higgihs/Sites/Test/electron-vite-react/node_modules/vite/dist/node/chunks/dep-71eb12cb.js:62780:34) at async resolveConfig (file:///Users/higgihs/Sites/Test/electron-vite-react/node_modules/vite/dist/node/chunks/dep-71eb12cb.js:62398:28) at async createServer (file:///Users/higgihs/Sites/Test/electron-vite-react/node_modules/vite/dist/node/chunks/dep-71eb12cb.js:59018:20) at async CAC.<anonymous> (file:///Users/higgihs/Sites/Test/electron-vite-react/node_modules/vite/dist/node/cli.js:699:24)
Downgrading to v0.8.4 solves the problem
查资料说设置contextIsolation: false,但是在项目中要用contextBridge
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.