cm2walki / squad Goto Github PK
View Code? Open in Web Editor NEWDockerfile for automated build of a Squad gameserver: https://hub.docker.com/r/cm2network/squad/
Home Page: https://CM2.Network
License: MIT License
Dockerfile for automated build of a Squad gameserver: https://hub.docker.com/r/cm2network/squad/
Home Page: https://CM2.Network
License: MIT License
I'm trying to run this image within a compose file and it seems like this image doesn't support the ARM architecture. Is this correct and if so, are you guys planning on adding support for this?
Issue: When creating the container fresh from the image, steamcmd fails to install the game, due to the current disk write failure.
Solution: Pre create the "steamapps" folder for steamcmd to use.
Further information: https://squad.fandom.com/wiki/Disk_Write_Failure
Hi, I followed your instructions on:
https://hub.docker.com/r/cm2network/squad
unfortunately I am not able to connect to the server. Netstat listening port dump only shows steam service running
udp 0 0 0.0.0.0:27165 0.0.0.0:* 3508152/SquadGameSe
no services attached to 7787
dump of logs:
docker logs squad-dedicated | grep 7787
Looking for binary: ../../../SquadGame/Config/BinaryConfig.ini
sh: 1: xdg-user-dir: not found
[S_API] SteamAPI_Init(): Loaded local 'steamclient.so' OK.
CAppInfoCacheReadFromDiskThread took 2 milliseconds to initialize
Setting breakpad minidump AppID = 393380
[S_API FAIL] Tried to access Steam interface SteamNetworking006 before SteamAPI_Init succeeded.
[S_API FAIL] Tried to access Steam interface SteamUser021 before SteamAPI_Init succeeded.
[S_API FAIL] Tried to access Steam interface SteamFriends017 before SteamAPI_Init succeeded.
LogInit: Command Line: Port=7787 QueryPort=27165 RCONPORT=21114 FIXEDMAXPLAYERS=80 FIXEDMAXTICKRATE=50 RANDOM=15774
[2023.09.30-02.57.03:520][ 0]LogPackageName: SearchForPackageOnDisk took 7.924s, but failed to resolve Port=7787.umap.
[2023.09.30-02.57.03:620][ 0]LogNet: Display: SteamNetDriver_2147482548 bound to port 7787
[2023.09.30-02.57.03:620][ 0]LogNet: GameNetDriver SteamNetDriver_2147482548 IpNetDriver listening on port 7787
[S_API FAIL] Tried to access Steam interface STEAMINVENTORY_INTERFACE_V003 before SteamAPI_Init succeeded.
root@frost:~# docker logs squad-dedicated | grep 7787
Looking for binary: ../../../SquadGame/Config/BinaryConfig.ini
sh: 1: xdg-user-dir: not found
[S_API] SteamAPI_Init(): Loaded local 'steamclient.so' OK.
CAppInfoCacheReadFromDiskThread took 2 milliseconds to initialize
Setting breakpad minidump AppID = 393380
[S_API FAIL] Tried to access Steam interface SteamNetworking006 before SteamAPI_Init succeeded.
[S_API FAIL] Tried to access Steam interface SteamUser021 before SteamAPI_Init succeeded.
[S_API FAIL] Tried to access Steam interface SteamFriends017 before SteamAPI_Init succeeded.
LogInit: Command Line: Port=7787 QueryPort=27165 RCONPORT=21114 FIXEDMAXPLAYERS=80 FIXEDMAXTICKRATE=50 RANDOM=15774
[2023.09.30-02.57.03:520][ 0]LogPackageName: SearchForPackageOnDisk took 7.924s, but failed to resolve Port=7787.umap.
[2023.09.30-02.57.03:620][ 0]LogNet: Display: SteamNetDriver_2147482548 bound to port 7787
[2023.09.30-02.57.03:620][ 0]LogNet: GameNetDriver SteamNetDriver_2147482548 IpNetDriver listening on port 7787
[S_API FAIL] Tried to access Steam interface STEAMINVENTORY_INTERFACE_V003 before SteamAPI_Init succeeded.
processes within docker image
/home/steam# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
steam 1 0.0 0.0 3896 2920 ? Ss 02:55 0:00 bash entry.sh
steam 84 0.0 0.0 3896 3068 ? S 02:56 0:00 bash /home/steam/squad-dedicated/SquadGameServer.sh Port=7787 QueryPort=27165 RCONPORT=21114 FIXEDMAXPLAYERS=80 FIXE
steam 91 5.0 2.0 3234568 1318752 ? Sl 02:56 1:06 /home/steam/squad-dedicated/SquadGame/Binaries/Linux/SquadGameServer SquadGame Port=7787 QueryPort=27165 RCONPORT=21
root 151 0.0 0.0 4028 3440 pts/0 Ss 03:16 0:00 bash
root 521 0.0 0.0 6756 2844 pts/0 R+ 03:18 0:00 ps aux
Hey! I was planning to dockerize a Squad server myself when I stumbled over this, very nice.
However when I am starting the server I get a lot of these logs:
[2022.04.19-15.59.17:241][392]LogOnlineSession: Warning: STEAM: Empty session setting CurrentModLoaded : OnlineService of type String
[2022.04.19-15.59.17:241][392]LogOnlineSession: Warning: STEAM: Empty session setting CurrentModLoadedHash1 : OnlineService of type String
[2022.04.19-15.59.17:241][392]LogOnlineSession: Warning: STEAM: Empty session setting CurrentModLoadedHash2 : OnlineService of type String
[2022.04.19-15.59.17:241][392]LogOnlineSession: Warning: STEAM: Empty session setting SessionPassword : OnlineServiceAndPing of type String
[2022.04.19-15.59.17:241][392]LogOnlineSession: Warning: STEAM: Server setting ,NUMPUBCONN:100 overflows Steam SetGameTags call
[2022.04.19-15.59.17:241][392]LogOnlineSession: Warning: STEAM: Server setting ,NUMPRIVCONN:0 overflows Steam SetGameTags call
[2022.04.19-15.59.17:241][392]LogOnlineSession: Warning: STEAM: Server setting ,MatchTimeout_f:120.000000 overflows Steam SetGameTags call
[2022.04.19-15.59.17:241][392]LogOnlineSession: Warning: STEAM: Server setting ,SEARCHKEYWORDS_s:Custom overflows Steam SetGameTags call
[2022.04.19-15.59.17:241][392]LogOnlineSession: Warning: STEAM: Server setting ,CurrentModLoadedCount_i:0 overflows Steam SetGameTags call
[2022.04.19-15.59.17:241][392]LogOnlineSession: Warning: STEAM: Server setting ,AllModsWhitelisted_b:false overflows Steam SetGameTags call
[2022.04.19-15.59.17:241][392]LogOnlineSession: Warning: STEAM: Server setting ,PlayerReserveCount_i:0 overflows Steam SetGameTags call
[2022.04.19-15.59.17:241][392]LogOnlineSession: Warning: STEAM: Server setting ,PublicQueueLimit_i:25 overflows Steam SetGameTags call
[2022.04.19-15.59.17:241][392]LogOnlineSession: Warning: STEAM: Server setting ,PublicQueue_i:0 overflows Steam SetGameTags call
[2022.04.19-15.59.17:241][392]LogOnlineSession: Warning: STEAM: Server setting ,ReservedQueue_i:0 overflows Steam SetGameTags call
[2022.04.19-15.59.47:250][887]LogOnlineSession: Warning: STEAM: Empty session setting CurrentModLoaded : OnlineService of type String
[2022.04.19-15.59.47:250][887]LogOnlineSession: Warning: STEAM: Empty session setting CurrentModLoadedHash1 : OnlineService of type String
[2022.04.19-15.59.47:250][887]LogOnlineSession: Warning: STEAM: Empty session setting CurrentModLoadedHash2 : OnlineService of type String
[2022.04.19-15.59.47:250][887]LogOnlineSession: Warning: STEAM: Empty session setting SessionPassword : OnlineServiceAndPing of type String
[2022.04.19-15.59.47:250][887]LogOnlineSession: Warning: STEAM: Server setting ,NUMPUBCONN:100 overflows Steam SetGameTags call
[2022.04.19-15.59.47:250][887]LogOnlineSession: Warning: STEAM: Server setting ,NUMPRIVCONN:0 overflows Steam SetGameTags call
[2022.04.19-15.59.47:250][887]LogOnlineSession: Warning: STEAM: Server setting ,MatchTimeout_f:120.000000 overflows Steam SetGameTags call
[2022.04.19-15.59.47:250][887]LogOnlineSession: Warning: STEAM: Server setting ,SEARCHKEYWORDS_s:Custom overflows Steam SetGameTags call
[2022.04.19-15.59.47:250][887]LogOnlineSession: Warning: STEAM: Server setting ,CurrentModLoadedCount_i:0 overflows Steam SetGameTags call
[2022.04.19-15.59.47:250][887]LogOnlineSession: Warning: STEAM: Server setting ,AllModsWhitelisted_b:false overflows Steam SetGameTags call
[2022.04.19-15.59.47:250][887]LogOnlineSession: Warning: STEAM: Server setting ,PlayerReserveCount_i:0 overflows Steam SetGameTags call
[2022.04.19-15.59.47:250][887]LogOnlineSession: Warning: STEAM: Server setting ,PublicQueueLimit_i:25 overflows Steam SetGameTags call
[2022.04.19-15.59.47:250][887]LogOnlineSession: Warning: STEAM: Server setting ,PublicQueue_i:0 overflows Steam SetGameTags call
[2022.04.19-15.59.47:250][887]LogOnlineSession: Warning: STEAM: Server setting ,ReservedQueue_i:0 overflows Steam SetGameTags call
[2022.04.19-16.00.17:257][379]LogOnlineSession: Warning: STEAM: Empty session setting CurrentModLoaded : OnlineService of type String
[2022.04.19-16.00.17:257][379]LogOnlineSession: Warning: STEAM: Empty session setting CurrentModLoadedHash1 : OnlineService of type String
[2022.04.19-16.00.17:257][379]LogOnlineSession: Warning: STEAM: Empty session setting CurrentModLoadedHash2 : OnlineService of type String
[2022.04.19-16.00.17:257][379]LogOnlineSession: Warning: STEAM: Empty session setting SessionPassword : OnlineServiceAndPing of type String
[2022.04.19-16.00.17:257][379]LogOnlineSession: Warning: STEAM: Server setting ,NUMPUBCONN:100 overflows Steam SetGameTags call
[2022.04.19-16.00.17:257][379]LogOnlineSession: Warning: STEAM: Server setting ,NUMPRIVCONN:0 overflows Steam SetGameTags call
[2022.04.19-16.00.17:257][379]LogOnlineSession: Warning: STEAM: Server setting ,MatchTimeout_f:120.000000 overflows Steam SetGameTags call
[2022.04.19-16.00.17:257][379]LogOnlineSession: Warning: STEAM: Server setting ,SEARCHKEYWORDS_s:Custom overflows Steam SetGameTags call
[2022.04.19-16.00.17:257][379]LogOnlineSession: Warning: STEAM: Server setting ,CurrentModLoadedCount_i:0 overflows Steam SetGameTags call
[2022.04.19-16.00.17:257][379]LogOnlineSession: Warning: STEAM: Server setting ,AllModsWhitelisted_b:false overflows Steam SetGameTags call
[2022.04.19-16.00.17:257][379]LogOnlineSession: Warning: STEAM: Server setting ,PlayerReserveCount_i:0 overflows Steam SetGameTags call
[2022.04.19-16.00.17:257][379]LogOnlineSession: Warning: STEAM: Server setting ,PublicQueueLimit_i:25 overflows Steam SetGameTags call
Also those:
[2022.04.19-15.50.07:220][996]LogSquad: ASQDeployableSpawner::TrySpawn : Spawner Team1SpawnerAmmoCrate1_1 Deployable was not able to find a matching deployable !
[2022.04.19-15.50.07:220][996]LogSquad: ASQDeployableSpawner::TrySpawn : Spawner Team1SpawnerAmmoCrate2 Deployable was not able to find a matching deployable !
[2022.04.19-15.50.07:220][996]LogSquad: ASQDeployableSpawner::TrySpawn : Spawner Team1SpawnerAmmoCrate3 Deployable was not able to find a matching deployable !
[2022.04.19-15.50.07:220][996]LogSquad: ASQDeployableSpawner::TrySpawn : Spawner Team1SpawnerAmmoCrate4 Deployable was not able to find a matching deployable !
[2022.04.19-15.50.07:220][996]LogSquad: ASQDeployableSpawner::TrySpawn : Spawner Team1SpawnerAmmoCrate5 Deployable was not able to find a matching deployable !
[2022.04.19-15.50.07:221][996]LogSquad: ASQDeployableSpawner::TrySpawn : Spawner Team1SpawnerRepairStation1 Deployable was not able to find a matching deployable !
[2022.04.19-15.50.07:221][996]LogSquad: ASQDeployableSpawner::TrySpawn : Spawner Team1SpawnerRepairStation2 Deployable was not able to find a matching deployable !
[2022.04.19-15.50.07:221][996]LogSquad: ASQDeployableSpawner::TrySpawn : Spawner Team2SpawnerAmmoCrate1_3 Deployable was not able to find a matching deployable !
[2022.04.19-15.50.07:221][996]LogSquad: ASQDeployableSpawner::TrySpawn : Spawner Team2SpawnerAmmoCrate2 Deployable was not able to find a matching deployable !
[2022.04.19-15.50.07:221][996]LogSquad: ASQDeployableSpawner::TrySpawn : Spawner Team2SpawnerAmmoCrate3 Deployable was not able to find a matching deployable !
[2022.04.19-15.50.07:221][996]LogSquad: ASQDeployableSpawner::TrySpawn : Spawner Team2SpawnerAmmoCrate4 Deployable was not able to find a matching deployable !
[2022.04.19-15.50.07:221][996]LogSquad: ASQDeployableSpawner::TrySpawn : Spawner Team2SpawnerAmmoCrate5 Deployable was not able to find a matching deployable !
[2022.04.19-15.50.07:221][996]LogSquad: ASQDeployableSpawner::TrySpawn : Spawner Team2SpawnerRepairStation1 Deployable was not able to find a matching deployable !
[2022.04.19-15.50.07:221][996]LogSquad: ASQDeployableSpawner::TrySpawn : Spawner Team2SpawnerRepairStation2 Deployable was not able to find a matching deployable !
[2022.04.19-15.50.12:050][236]LogSquad: Error: Failed to spawn EquipableItem
[2022.04.19-15.50.12:058][236]LogSkeletalMesh: USkeletalMeshComponent::InitArticulated : Could not find root physics body: '/Game/Maps/Anvil/Gameplay_Layers/Anvil_AAS_v1.Anvil_AAS_v1:PersistentLevel.BP_Arbalet_Kord_Desert_C_2147482365.WeaponMesh1P'
[2022.04.19-15.50.12:058][236]LogSkeletalMesh: USkeletalMeshComponent::InitArticulated : Could not find root physics body: '/Game/Maps/Anvil/Gameplay_Layers/Anvil_AAS_v1.Anvil_AAS_v1:PersistentLevel.BP_Arbalet_Kord_Desert_C_2147482365.WeaponMesh3P'
[2022.04.19-15.50.12:058][236]LogSquad: Error: Failed to spawn EquipableItem
[2022.04.19-15.50.12:058][236]LogSquad: Error: Failed to spawn EquipableItem
[2022.04.19-15.50.12:060][236]LogSkeletalMesh: USkeletalMeshComponent::InitArticulated : Could not find root physics body: '/Game/Maps/Anvil/Gameplay_Layers/Anvil_AAS_v1.Anvil_AAS_v1:PersistentLevel.BP_Arbalet_Kord_Desert_C_2147482343.WeaponMesh1P'
[2022.04.19-15.50.12:060][236]LogSkeletalMesh: USkeletalMeshComponent::InitArticulated : Could not find root physics body: '/Game/Maps/Anvil/Gameplay_Layers/Anvil_AAS_v1.Anvil_AAS_v1:PersistentLevel.BP_Arbalet_Kord_Desert_C_2147482343.WeaponMesh3P'
[2022.04.19-15.50.12:060][236]LogSquad: Error: Failed to spawn EquipableItem
[2022.04.19-15.50.12:060][236]LogSquad: Error: Failed to spawn EquipableItem
And the server does not appear to start (because of this?). High chance that this is not an issue within your repo, but I am giving it a shot anyway since I would have no idea where to report this otherwise.
This is how my docker-compose looks like:
version: '3.9'
services:
squad:
image: cm2network/squad
container_name: squad
restart: unless-stopped
network_mode: "host"
cpuset: "0-3"
volumes:
- /data/Squad:/storage/squad/
environment:
- PORT=7787
- QUERYPORT=27165
- RCONPORT=21114
- FIXEDMAXPLAYERS=100
Thanks guys.
When starting the server the first log line is:
WARNING: setlocale('en_US.UTF-8') failed, using locale: 'C'. International characters may not work.
The error goes away after manually performing the following steps:
1) login as root
2) apt-get update
3) apt-get install locales
4) run dpkg-reconfigure locales
5) choose / type: 158 -> should be en_US.UTF-8 UTF-8
6) set it as default (3)
8) done
So it would be great to have the locales installed and set to UTF-8 by default.
I'm trying to get a Squad Server running using Docker (Host Windows 10 x64). However, when I start the container it fails with the messages
ERROR! Failed to install app '403240' (Requires 64bit operating system)
sed: can't read /home/steam/squad-dedicated/SquadGame/ServerConfig/Rcon.cfg: No such file or directory
bash: /home/steam/squad-dedicated/SquadGameServer.sh: No such file or directory
.
Here's the entire log:
Redirecting stderr to '/home/steam/Steam/logs/stderr.txt'
[ 0%] Checking for available updates...
[----] Verifying installation...
[ 0%] Downloading update...
[ 0%] Checking for available updates...
[----] Download complete.
[----] Extracting package...
[----] Extracting package...
[----] Extracting package...
[----] Extracting package...
[----] Installing update...
[----] Installing update...
[----] Installing update...
[----] Installing update...
[----] Installing update...
[----] Installing update...
[----] Installing update...
[----] Installing update...
[----] Cleaning up...
[----] Update complete, launching Steamcmd...
Redirecting stderr to '/home/steam/Steam/logs/stderr.txt'
[ 0%] Checking for available updates...
[----] Verifying installation...
Steam Console Client (c) Valve Corporation
-- type 'quit' to exit --
Loading Steam API...OK.
Connecting anonymously to Steam Public...Logged in OK
Waiting for user info...OK
ERROR! Failed to install app '403240' (Requires 64bit operating system)
sed: can't read /home/steam/squad-dedicated/SquadGame/ServerConfig/Rcon.cfg: No such file or directory
bash: /home/steam/squad-dedicated/SquadGameServer.sh: No such file or directory
I'm not really experienced in Docker, but it might be that the base-image steamcmd isn't using the right version of Debian
Would be great if the image could add mod support.
I don't have time right now for the PR, but the current way I do is this:
#!/bin/sh
APPID=403240
WORKSHOPID=393380
MODPATH="${STEAMAPPDIR}/SquadGame/Plugins/Mods"
MODS=(2818478721)
# Ensure game is up-2-date
"${STEAMCMDDIR}/steamcmd.sh" +force_install_dir $STEAMAPPDIR +login anonymous +app_update $APPID validate +quit
# Install each mod
for MODID in ${MODS[@]}; do
echo "Installing mod ${MODID}"
"${STEAMCMDDIR}/steamcmd.sh" +force_install_dir $STEAMAPPDIR +login anonymous +workshop_download_item $WORKSHOPID $MODID +quit
# Remove previous installed mod content from server
rm -r "${MODPATH}/${MODID}" 2>/dev/null
# Copy mod content
cp -R "${STEAMAPPDIR}/steamapps/workshop/content/${WORKSHOPID}/${MODID}" "${MODPATH}/${MODID}" 2>/dev/null
done
(based on https://squad.fandom.com/wiki/Uploading_a_mod_to_a_dedicated_server)
Would be great to have this built into the init script and expose an env var MODS to enter specific mod ids.
Hello,
ist there any option to connect via SSH or FTP to the container?
Or is there an option to install any apps (FTP-server, SSH-server, ...) in the container?
Best Regards MHW
Last year I was using this Docker image to run a few personal Squad servers.
I have been away from squad for a bit and have since rebuilt my server, gaming PC and have anew router.
I have setup squad again and built a few servers using this docker image, my issue is I cant seem to logon without a password using steam credentials via my settings in Admins.cfg and I am not 100% sure what is going wrong. I have carried out various checks and my setup appears to be right.
I am using settings for the config files that I had backed up to GitHub.
This could possible be a Squad game issue or another problem my side. Or, maybe an issue with steam and this build?
When I login with a password I can see my steam ID in the logs. When I try and access without a password and my steam ID etc added to Admins.cfg I cant see anything in the logs when I get the error in the Squad game GUI.
It would be good if someone can confirm that they can build a server with this image and can login to a pass-worded server without a password and via steam credentials from Admins.cfg, at least I will then know that my issue lies somewhere else - thanks
I am having some problems with the latest image.
I have downloaded and built from previous builds without issue before, I last updated following the commit on May the 1st.
I decided to update following the release of Squad 14.1 and the addition of MOD support on Linux, I wanted to ensure I had the latest build.
I created a container using the following:
docker run -d --net=host --volume=/home/rosarch/squad:/home/steam/squad-dedicated --name=squad-dedicated cm2network/squad
I like having a volume to keep the config stateful.
This is the error from the logs...
Redirecting stderr to '/home/steam/Steam/logs/stderr.txt'
opensslconnection.cpp (1499) : Assertion Failed: unable to load trusted SSL root certificates
[ 0%] Checking for available updates...
[----] Verifying installation...
Steam Console Client (c) Valve Corporation
-- type 'quit' to exit --
Loading Steam API...opensslconnection.cpp (1499) : Assertion Failed: unable to load trusted SSL root certificates
OK.
Looking at the logs from another container that is using an older image, it seems to be working ok (even though there is an SteamDatagramTransportLock error), I can connect and play on the server.
../steamnetworkingsockets/clientlib/steamnetworkingsockets_lowlevel.cpp (117) : Assertion Failed: SteamDatagramTransportLock held for 32.6ms!
OK.
Connecting anonymously to Steam Public...Logged in OK
I know you have made a load of changes recently so can only assume this is why it is no longer working as expected. Any ideas?
docker run -d ^
--net=host ^
-e PORT=7787 ^
-e QUERYPORT=27165 ^
-e RCONPORT=21114 ^
-e FIXEDMAXPLAYERS=10 ^
-e FIXEDMAXTICKRATE=20 ^
-v "D:\ProgramData\steam\squad\server":/home/steam/squad-dedicated ^
--name="squad-dedicated-server" ^
%image%
When started the container will download all the required files from steam cmd, then stop with the below error:
Clearing Mods...
find: '/home/steam/squad-dedicated/SquadGame/Plugins/Mods/*': No such file or directory
bash: /home/steam/squad-dedicated/SquadGameServer.sh: No such file or directory
exited with code 127
This will not allow for persistent volumes either so I cannot give you what it has downloaded and what it hasn't
Here is my docker-compose:
version: "3"
services:
squad:
image: cm2network/squad
stdin_open: true
tty: true
restart: always
network_mode: "host"
volumes:
- /squad/:/home/steam/squad-dedicated/
environment:
- PORT=7787
- QUERYPORT=27165
- RCONPORT=21114
- FIXEDMAXPLAYERS=80
ports:
- 7787:7787/tcp
- 7788:7788/tcp
- 27165:27165/tcp
- 27166:27166/tcp
- 21114:21114/tcp
- 7787:7787/udp
- 7788:7788/udp
- 27165:27165/udp
- 27166:27166/udp
- 21114:21114/udp
Am I missing anything?
@CM2Walki
hi buddy, i have ran:
sudo docker run -d --net=host -v /squad-data:/home/steam/squad-dedicated -e PORT=7787 -e QUERYPORT=27166 -e RCONPORT=21115 --name=squad cm2network/squad
and i'm sure /squad-data directory was created, and modified its accessbility to 777
BUT, i got
:
Success! App '403240' fully installed.
sed: can't read /home/steam/squad-dedicated/SquadGame/ServerConfig/Rcon.cfg: No such file or directory
Clearing Mods...
find: '/home/steam/squad-dedicated/SquadGame/Plugins/Mods/*': No such file or directory
bash: /home/steam/squad-dedicated/SquadGameServer.sh: No such file or directory
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.