Comments (15)
You probably run a systemd based Ubuntu, which Prax doesn't support (I know nothing about it).
You may try to access http://users.test:20559
to check if Prax works, then try sudo /etc/init.d/prax restart
to add the port redirections rules (port 80 to 20559, and 443 to 20558).
from prax.cr.
@ysbaddaden no luck. Any plans for systemd support? it is the most popular init system.
from prax.cr.
If http://users.test:20559 doesn't work, then it's not related to systemd.
prax stop; prax start --verbose
should restart Prax (in the foreground, with verbose output);ps ax | grep prax
should print/opt/prax/bin/prax-binary
as running (or a similar path);netstat -atn | grep :20559
should print something;- opening http://localhost:20559 should greet you with a Prax splash page (you can try alternative local IPs).
If any of these is failing, then Prax is indeed broken :(
If prax is running, lsof -p <prax pid>
should print some useful information (e.g. which sockets are opened). For example:
$ ps afx | grep prax
16271 pts/13 Sl+ 0:00 /opt/prax/bin/prax-binary --verbose
$ netstat -atn | grep :20559
tcp6 0 0 :::20559 :::* LISTEN
$ lsof -p 16271
prax-bina 16271 julien 12u IPv6 1675586 0t0 TCP *:20559 (LISTEN)
prax-bina 16271 julien 13u IPv6 1675587 0t0 TCP *:20558 (LISTEN)
from prax.cr.
@bbtdev here you can find systemd scripts and a README. I wrote it for Arch Linux but it's probably useful on any other distro with systemd.
from prax.cr.
I did a fresh install, ruby, everything:
vagrant@vagrant-VirtualBox:~$ sudo dpkg -i Downloads/prax_0.8.0-1_amd64.deb
Selecting previously unselected package prax.
(Reading database ... 126619 files and directories currently installed.)
Preparing to unpack .../prax_0.8.0-1_amd64.deb ...
Unpacking prax (0.8.0-1) ...
Setting up prax (0.8.0-1) ...
Processing triggers for systemd (239-7ubuntu10) ...
vagrant@vagrant-VirtualBox:~$ prax
Usage: prax <command> [<args>]
Some useful prax commands are:
certificate Self-sign SSL certificates
cleanup Removes all invalid links in ~/.prax
commands List all prax commands
iptables Sets or removes network port redirection rules (requires root...
link Link a Rack application to ~/.prax
list Lists all linked hosts in ~/.prax
log Tails the Prax log for the current Rack app
open Open a Rack application in browser
restart Restart the current Rack application
start Start Prax proxy server
stop Stop Prax proxy server
unlink Unlinks a Rack application from ~/.prax
See 'prax help <command>' for information on a specific command.
vagrant@vagrant-VirtualBox:~$ cd projects/users/
vagrant@vagrant-VirtualBox:~/projects/users$ mkdir ~/.prax
vagrant@vagrant-VirtualBox:~/projects/users$ prax link
ln -s '/home/vagrant/projects/users' '/home/vagrant/.prax/users'
vagrant@vagrant-VirtualBox:~/projects/users$ prax start
/opt/prax/bin/prax-binary: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory
vagrant@vagrant-VirtualBox:~/projects/users$ sudo gdebi ~/Downloads/compat-libevent2-5_2.0.21-1ubuntu18_amd64.deb
Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading state information... Done
No description
Do you want to install the software package? [y/N]:y
Selecting previously unselected package compat-libevent2-5.
(Reading database ... 132994 files and directories currently installed.)
Preparing to unpack .../compat-libevent2-5_2.0.21-1ubuntu18_amd64.deb ...
Unpacking compat-libevent2-5 (2.0.21-1ubuntu18) ...
Setting up compat-libevent2-5 (2.0.21-1ubuntu18)
vagrant@vagrant-VirtualBox:~/projects/users$ prax stop; prax start --verbose
I, [2018-11-09 23:10:32 -06:00 #4349] INFO -- prax: binding to [::]:20559
# new tab
vagrant@vagrant-VirtualBox:~/projects/users$ ps ax | grep prax
4349 pts/0 S+ 0:00 /opt/prax/bin/prax-binary --verbose
4435 pts/1 S+ 0:00 grep --color=auto prax
vagrant@vagrant-VirtualBox:~/projects/users$ sudo apt install net-tools
vagrant@vagrant-VirtualBox:~/projects/users$ netstat -atn | grep :20559
tcp6 0 0 :::20559 :::* LISTEN
agrant@vagrant-VirtualBox:~/projects/users$ lsof -p 4349
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
prax-bina 4349 vagrant cwd DIR 8,1 4096 6088 /opt/prax
prax-bina 4349 vagrant rtd DIR 8,1 4096 2 /
prax-bina 4349 vagrant txt REG 8,1 1757181 6112 /opt/prax/bin/prax-binary
prax-bina 4349 vagrant mem REG 8,1 1996592 400592 /lib/x86_64-linux-gnu/libc-2.28.so
prax-bina 4349 vagrant mem REG 8,1 100712 400627 /lib/x86_64-linux-gnu/libgcc_s.so.1
prax-bina 4349 vagrant mem REG 8,1 18656 400613 /lib/x86_64-linux-gnu/libdl-2.28.so
prax-bina 4349 vagrant mem REG 8,1 285072 11905 /usr/lib/x86_64-linux-gnu/libevent-2.0.so.5.1.9
prax-bina 4349 vagrant mem REG 8,1 149696 400722 /lib/x86_64-linux-gnu/libpthread-2.28.so
prax-bina 4349 vagrant mem REG 8,1 1623216 400653 /lib/x86_64-linux-gnu/libm-2.28.so
prax-bina 4349 vagrant mem REG 8,1 468944 400711 /lib/x86_64-linux-gnu/libpcre.so.3.13.3
prax-bina 4349 vagrant mem REG 8,1 2357760 3799 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0
prax-bina 4349 vagrant mem REG 8,1 426232 4583 /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0
prax-bina 4349 vagrant mem REG 8,1 174936 400566 /lib/x86_64-linux-gnu/ld-2.28.so
prax-bina 4349 vagrant 0u CHR 136,0 0t0 3 /dev/pts/0
prax-bina 4349 vagrant 1u CHR 136,0 0t0 3 /dev/pts/0
prax-bina 4349 vagrant 2u CHR 136,0 0t0 3 /dev/pts/0
prax-bina 4349 vagrant 3u a_inode 0,13 0 9689 [eventpoll]
prax-bina 4349 vagrant 4u unix 0x0000000000000000 0t0 40781 type=STREAM
prax-bina 4349 vagrant 5u unix 0x0000000000000000 0t0 40782 type=STREAM
prax-bina 4349 vagrant 6u CHR 136,0 0t0 3 /dev/pts/0
prax-bina 4349 vagrant 7u CHR 136,0 0t0 3 /dev/pts/0
prax-bina 4349 vagrant 8u CHR 136,0 0t0 3 /dev/pts/0
prax-bina 4349 vagrant 9r FIFO 0,12 0t0 40787 pipe
prax-bina 4349 vagrant 10w FIFO 0,12 0t0 40787 pipe
prax-bina 4349 vagrant 11u IPv6 40788 0t0 TCP *:20559 (LISTEN)
No luck with:
http://users.test:20559
https://users.test:20559
http://www.users.test:20559
https://www.users.test:20559
I tried also with rails server and without. Is prax supposed to start the server or I am?
@tijn that's really cool. I should try when I get users.test:20559 to work, there is no point otherwise, right? Also can it be used with .test?
from prax.cr.
@bbtdev yes, .test
works fine. That's how I use it.
Sorry if I'm stating the obvious but could it be that you have missed the dnsmasq settings that makes the traffic to .test
go to localhost
? Or maybe it has a typo that makes it fail?
from prax.cr.
@tijn sorry I suck at this.
I looked here https://github.com/ysbaddaden/prax.cr/wiki/User-Guide about how to use it. Am i suppose to install dnsmasq? And where can I find the settings I need to insert?
Just to be clear, are we talking about 'vanilla' prax.cr, or your guide? I didn't use your guide because first I have to get users.test:20559 to work. no?
from prax.cr.
@bbtdev indeed, you need to install dnsmasq.
You can use either guide because they all describe the same steps, but I think you might benefit from reading my guide or this version because I numbered the 3 things you need to accomplish to get it working. But the README in the root of the repo is saying the exact same things using different words.
They key is to find the text that clicks with you to understand the main points. This will help you in deciding how to deal with different distros/init systems/TLDs/ports/...
from prax.cr.
Great, Prax started and is running correctly. It's listening on all interfaces (ip4, ip6) on port 20559. Now, either http://localhost:20559/ or http://127.0.0.1:20559/ should display the Prax splash page.
You may try http://localhost/ or http://127.0.0.1/ to check if the port redirection is working.
Now, what doesn't work may be 2 things:
- the DNS resolver, to resolve
*.test
and*.localhost
as127.0.0.1
and::1
; - port forwarding, to forward the
:80
and:443
ports to:20559
and:20558
.
The deb package adds a dnsmasq configuration to NetworkManager in /etc/NetworkManager/dnsmasq.d/prax
. It works on Ubuntu 14.04, but systemd took over DNS, so maybe it doesn't work on later Ubuntu releases (sigh). Note that you may use the http://xip.io/ resolver as a workaround, for example http://users.127.0.0.1.xip.io:20559/ to check whether Prax works.
The guide by @tjin can definitely help to figure out how to fix the NetworkManager/dnsmasq configuration, and an alternative script to setup the iptables rules for port redirections. Or maybe systemd is getting in the way again?
I'm sorry that the installation isn't smooth. I'm still using Ubuntu 14.04 and I'm not interested into trying out later releases, and will most probably switch to another distro (AlpineLinux) when it goes out of LTS.
from prax.cr.
It work(yay, thank you), until I restarted. Dnsmasq does not want to start:
dnsmasq.service - dnsmasq - A lightweight DHCP and caching DNS server
Loaded: loaded (/lib/systemd/system/dnsmasq.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Mon 2018-11-12 01:45:24 CST; 16s ago
Process: 2849 ExecStart=/etc/init.d/dnsmasq systemd-exec (code=exited, status=5)
Process: 2838 ExecStartPre=/usr/sbin/dnsmasq --test (code=exited, status=0/SUCCESS)
Nov 12 01:45:24 vagrant-VirtualBox systemd[1]: Starting dnsmasq - A lightweight DHCP and caching DNS server...
Nov 12 01:45:24 vagrant-VirtualBox dnsmasq[2838]: dnsmasq: syntax check OK.
Nov 12 01:45:24 vagrant-VirtualBox dnsmasq[2849]: dnsmasq: directory /etc/resolv.conf for resolv-file is missing, cannot poll
Nov 12 01:45:24 vagrant-VirtualBox systemd[1]: dnsmasq.service: Control process exited, code=exited status=5
Nov 12 01:45:24 vagrant-VirtualBox dnsmasq[2849]: directory /etc/resolv.conf for resolv-file is missing, cannot poll
Nov 12 01:45:24 vagrant-VirtualBox systemd[1]: dnsmasq.service: Failed with result 'exit-code'.
Nov 12 01:45:24 vagrant-VirtualBox dnsmasq[2849]: FAILED to start up
Nov 12 01:45:24 vagrant-VirtualBox systemd[1]: Failed to start dnsmasq - A lightweight DHCP and caching DNS server.
Found a way to start it, but now my internet does not work, neither does prax. To install dnsmasq I had to disable systemd-resolved(the whole flow is below).
@tjin how did you manage the systemd-resolved and dnsmasq incompatibility? Do you have both services enabled?
Installing and starting dnsmasq
vagrant@vagrant-VirtualBox:~/projects/users$ ps aux | grep dns
vagrant 12475 0.0 0.0 17480 892 pts/0 S+ 01:18 0:00 grep --color=auto dns
vagrant@vagrant-VirtualBox:~/projects/users$ sudo systemctl restart dnsmasq
Failed to restart dnsmasq.service: Unit dnsmasq.service not found.
vagrant@vagrant-VirtualBox:~/projects/users$ sudo apt install dnsmasq
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
resolvconf
The following NEW packages will be installed:
dnsmasq
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 16.2 kB of archives.
After this operation, 73.7 kB of additional disk space will be used.
Get:1 http://us.archive.ubuntu.com/ubuntu cosmic/universe amd64 dnsmasq all 2.79-1 [16.2 kB]
Fetched 16.2 kB in 0s (34.6 kB/s)
Selecting previously unselected package dnsmasq.
(Reading database ... 137753 files and directories currently installed.)
Preparing to unpack .../dnsmasq_2.79-1_all.deb ...
Unpacking dnsmasq (2.79-1) ...
Setting up dnsmasq (2.79-1) ...
Created symlink /etc/systemd/system/multi-user.target.wants/dnsmasq.service → /lib/systemd/system/dnsmasq.service.
Job for dnsmasq.service failed because the control process exited with error code.
See "systemctl status dnsmasq.service" and "journalctl -xe" for details.
invoke-rc.d: initscript dnsmasq, action "start" failed.
● dnsmasq.service - dnsmasq - A lightweight DHCP and caching DNS server
Loaded: loaded (/lib/systemd/system/dnsmasq.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Mon 2018-11-12 01:19:50 CST; 53ms ago
Process: 12624 ExecStart=/etc/init.d/dnsmasq systemd-exec (code=exited, status=2)
Process: 12623 ExecStartPre=/usr/sbin/dnsmasq --test (code=exited, status=0/SUCCESS)
Nov 12 01:19:50 vagrant-VirtualBox systemd[1]: Starting dnsmasq - A lightweight DHCP and caching DNS server...
Nov 12 01:19:50 vagrant-VirtualBox dnsmasq[12623]: dnsmasq: syntax check OK.
Nov 12 01:19:50 vagrant-VirtualBox dnsmasq[12624]: dnsmasq: failed to create listening socket for port 53: Address already in use
Nov 12 01:19:50 vagrant-VirtualBox dnsmasq[12624]: failed to create listening socket for port 53: Address already in use
Nov 12 01:19:50 vagrant-VirtualBox dnsmasq[12624]: FAILED to start up
Nov 12 01:19:50 vagrant-VirtualBox systemd[1]: dnsmasq.service: Control process exited, code=exited status=2
Nov 12 01:19:50 vagrant-VirtualBox systemd[1]: dnsmasq.service: Failed with result 'exit-code'.
Nov 12 01:19:50 vagrant-VirtualBox systemd[1]: Failed to start dnsmasq - A lightweight DHCP and caching DNS server.
Processing triggers for systemd (239-7ubuntu10.1) ...
vagrant@vagrant-VirtualBox:~/projects/users$ sudo systemctl disable systemd-resolved
Removed /etc/systemd/system/multi-user.target.wants/systemd-resolved.service.
Removed /etc/systemd/system/dbus-org.freedesktop.resolve1.service.
vagrant@vagrant-VirtualBox:~/projects/users$ sudo systemctl stop systemd-resolved
vagrant@vagrant-VirtualBox:~/projects/users$ sudo systemctl enable dnsmasq
Synchronizing state of dnsmasq.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable dnsmasq
vagrant@vagrant-VirtualBox:~/projects/users$ sudo systemctl restart dnsmasq
vagrant@vagrant-VirtualBox:~/projects/users$ ps aux | grep dns
dnsmasq 12912 0.0 0.0 41620 356 ? S 01:21 0:00 /usr/sbin/dnsmasq -x /run/dnsmasq/dnsmasq.pid -u dnsmasq -7 /etc/dnsmasq.d,.dpkg-dist,.dpkg-old,.dpkg-new --local-service --trust-anchor=.,19036,8,2,49aac11d7b6f6446702e54a1607371607a1a41855200fd2ce1cdde32f24e8fb5 --trust-anchor=.,20326,8,2,e06d44b80b8f1d39a95c0b0d7c65d08458e880409bbc683457104237c7f8ec8d
vagrant 12929 0.0 0.0 17480 892 pts/0 S+ 01:22 0:00 grep --color=auto dns
*Forward .test to localhost
vagrant@vagrant-VirtualBox:~/projects/users$ cat /etc/NetworkManager/dnsmasq.d/prax
local=/test/
address=/test/127.0.0.1
address=/test/::1
vagrant@vagrant-VirtualBox:~/projects/users$ sudo systemctl restart NetworkManager.service
**Set up iptables**
vagrant@vagrant-VirtualBox:~/projects/users$ cat /etc/systemd/system/prax-iptables.service
[Unit]
Description=Prax (iptables configuration)
DefaultDependencies=no
Requires=network.target remote-fs.target
After=network.target remote-fs.target
[Service]
Type=oneshot
ExecStart=/usr/bin/prax iptables start
ExecStop=/usr/bin/prax iptables stop
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
vagrant@vagrant-VirtualBox:~/projects/users$ sudo systemctl enable prax-iptables.service
Created symlink /etc/systemd/system/multi-user.target.wants/prax-iptables.service → /etc/systemd/system/prax-iptables.service.
vagrant@vagrant-VirtualBox:~/projects/users$ sudo systemctl start prax-iptables.service
vagrant@vagrant-VirtualBox:~/projects/users$ systemctl | grep prax
prax-iptables.service
** Test prax **
vagrant@vagrant-VirtualBox:~/projects/users$ prax link
ln -s '/home/vagrant/projects/users' '/home/vagrant/.prax/users'
vagrant@vagrant-VirtualBox:~/projects/users$ prax start
I, [2018-11-12 01:30:57 -06:00 #13904] INFO -- prax: binding to [::]:20559
new tab
vagrant@vagrant-VirtualBox:~/projects/users$ prax open
+ xdg-open http://users.test
WORKS!!
** prax at login **
vagrant@vagrant-VirtualBox:~/projects/users$ cat ~/.config/systemd/user/prax.service
[Unit]
Description=Prax
[Service]
Type=simple
ExecStart=/usr/bin/prax start
ExecStop=/usr/bin/prax stop
WorkingDirectory=%h
[Install]
WantedBy=default.target
** restarted **
prax does not work
vagrant@vagrant-VirtualBox:~/projects$ systemctl | grep prax
prax-iptables.service loaded active exited Prax (iptables configuration)
prax.service loaded active exited LSB: Prax Rack server (iptables configuration).
agrant@vagrant-VirtualBox:~/projects/users$ ps aux | grep dns
vagrant 2819 0.0 0.0 17480 884 pts/1 S+ 01:44 0:00 grep --color=auto dns
vagrant@vagrant-VirtualBox:~/projects/users$ systemctl status dnsmasq.service
● dnsmasq.service - dnsmasq - A lightweight DHCP and caching DNS server
Loaded: loaded (/lib/systemd/system/dnsmasq.service; enabled; vendor preset:
Active: failed (Result: exit-code) since Mon 2018-11-12 01:45:24 CST; 16s ago
Process: 2849 ExecStart=/etc/init.d/dnsmasq systemd-exec (code=exited, status=
Process: 2838 ExecStartPre=/usr/sbin/dnsmasq --test (code=exited, status=0/SUC
Nov 12 01:45:24 vagrant-VirtualBox systemd[1]: Starting dnsmasq - A lightweight
Nov 12 01:45:24 vagrant-VirtualBox dnsmasq[2838]: dnsmasq: syntax check OK.
Nov 12 01:45:24 vagrant-VirtualBox dnsmasq[2849]: dnsmasq: directory /etc/resolv
Nov 12 01:45:24 vagrant-VirtualBox systemd[1]: dnsmasq.service: Control process
Nov 12 01:45:24 vagrant-VirtualBox dnsmasq[2849]: directory /etc/resolv.conf for
Nov 12 01:45:24 vagrant-VirtualBox systemd[1]: dnsmasq.service: Failed with resu
Nov 12 01:45:24 vagrant-VirtualBox dnsmasq[2849]: FAILED to start up
Nov 12 01:45:24 vagrant-VirtualBox systemd[1]: Failed to start dnsmasq - A light
from prax.cr.
dnsmasq
is just a mean to resolve a TLD wildcard (.localhost
and .test
) as a local IP. I use it because it's simple and came preinstalled in Ubuntu. This can be achieved in different ways. For example, maybe systemd-resolved
can be told to do that?
Actually, systemd-resolved
should resolve *.localhost
and *.localhost.localdomain
as 127.0.0.1
and ::1
by default (see https://www.freedesktop.org/software/systemd/man/systemd-resolved.service.html). Maybe you can use http://users.localhost/ instead of http://users.test/. Prax doesn't really care about the TLD, it can be whatever we want. In this case, don't bother with dnsmasq
and remove it.
The port redirection service should work, I guess?
from prax.cr.
Spent a whole day :(, nothing I tried works. I loose internet when I reboot and prax is not working. I need to have .test working.
@tijn
Do you have a sample dnsmasq.conf I could try? And what about /etc/resolve.conf, everything I tried regarding does not work? And what about systemd-resolved do you disable it completely have them both?
Thank you very much for you asistance.
from prax.cr.
You should remove dnsmasq
and reenable systemd-resolved
. Don't fight against systemd, you'll just lose an awful lot of time and get crazy and have nothing that works.
systemd-resolved
is supposed to resolve *.localhost
as 127.0.0.1
and ::1
by default which Prax will happily accept. Try to get http://users.localhost/ working first.
Then, if you have .localhost
working, you can try using dnsmasq as a frontend (or backend?) for systemd-resolved
or something to get .test
working, too.
from prax.cr.
Yes, you should follow @ysbaddaden 's advice. It is good advice™.
Once you get *.localhost working you can get back to getting .test
to work if you like: (BUT ONLY THEN! 😄)
Do you have a sample dnsmasq.conf I could try?
Sure, here it is:
» cat /etc/dnsmasq.d/prax
local=/test/
address=/test/127.0.0.1
address=/test/::1
And what about /etc/resolve.conf
Depending on your setup you need to change resolve.conf to include a line like this:name_servers=127.0.0.1
(to use dnsmasq) but that won't work for situations where Networkmanager or similar sofware takes over resolv.conf.
And what about systemd-resolved do you disable it completely have them both?
I have them both enabled on Arch, and that seems to work just fine. I can open my app on http://app.test and on http://app.localhost .
from prax.cr.
I am closing this issue for the moment, since I have to work :(, hopefully I will get to try again in a weekend.
from prax.cr.
Related Issues (20)
- Name resolution with external service not working HOT 2
- Tests are failing and test runner hangs. HOT 1
- `make package` fails HOT 1
- Can installation be made easier on Debian 9? HOT 4
- Bad request when sending host header
- ERROR -- prax: kill: No such process HOT 1
- Compilation error in 0.7.0/master with Crystal 0.24.1 HOT 2
- Please create next release. HOT 3
- start prax manually
- HTTP 1.0 request might return empty response HOT 4
- $RBENV_VERSION HOT 5
- Prax freezes after one of multiple applications is killed by the monitor HOT 9
- Cookies still getting combined into one header
- prax-binary: error while loading shared libraries: libevent-2.0.so.5 HOT 7
- https fails with no errors HOT 4
- OpenSSL Errors HOT 1
- Compile error HOT 3
- Not loading an app. HOT 3
- Error: can't find file 'thread' on require "thread" HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from prax.cr.