i3 is a tiling window manager for X11.
For more information about i3, please see the project's website and online documentation.
For information about contributing to i3, please see CONTRIBUTING.md.
Generates status bar to use with i3bar, dzen2 or xmobar
License: BSD 3-Clause "New" or "Revised" License
i3 is a tiling window manager for X11.
For more information about i3, please see the project's website and online documentation.
For information about contributing to i3, please see CONTRIBUTING.md.
I'd like to set up a disk module entry for a particular thumb drive I occasionally use. The underlying OS (mint 17.1) dynamically mounts this drive to /media/uid/volname, and only the directory /media exists before drive is mounted.
If I set up a disk module entry for the mount point of this drive, i3status does not do nice things when the drive is not mounted because the mount directory doesn't exist. The display output is "SPEC VIOLATION: full_text is NULL!". Looking at i3status output, full_text is indeed missing.
In the code it appears that a failed stat on the mount point causes an early exit even when format_not_mounted is defined.
It would be better if i3status interpreted a missing directory as a non-mounted drive instead and used the format_not_mounted format instead of erroring out.
This is a migrated issue from i3/i3. See i3/i3#1082 for the discussion there. Original post:
[Originally reported by james@…]
(I recently rebuilt my kernel to 3.10.9 from the stock slackware-current generic kernel. If I guild the kernel without wext flags, i3status shows "W: down" even though it is connected.
iwconfig fails:
/sbin/iwconfig
eth0 no wireless extensions.
lo no wireless extensions.
wlan0 no wireless extensions.
iw works:
/usr/sbin/iw dev wlan0 link
Connected to 00:19:07:58:7b:70 (on wlan0)
SSID: UCInet Mobile Access
freq: 2412
RX: 1798455 bytes (7610 packets)
TX: 218591 bytes (1698 packets)
signal: -64 dBm
tx bitrate: 48.0 MBit/s
bss flags: short-preamble short-slot-time
dtim period: 0
beacon int: 100
I know I can build the kernel with the wext compatibility, but I gather it is deprecated and so going away eventually, so I'm filing this bug.
I'm getting this error on i3. The bar simply does not work. I have i3status and i3-wm installed. When I type i3status in the terminal and hit enter, there is no output.
What is the solution to this issue? I've used i3 before and the bar worked perfectly. I'm using the same i3 config as before.
When starting i3 the wireless %bitrate
and %quality
are fetched once but will not be updated afterwards.
iw
shows the constant changes in bitrate and signal quality that i3status is missing.
Running i3status 2.10, Linux 4.3.3 and iwlwifi.
As of version 2.10 my status line no longer telling me the SSID or the signal quality of my wireless connection, instead two question marks are displayed. My IP address is still displaying correctly. The line from my i3status config file:
wireless wlan0 {
format_up = "Wifi: (%quality at %essid) %ip"
format_down = "Wifi: down"
}
is showing up as:
Wifi: (? at ?) 192.168.1.13
Using the module path_exists... It will update the module with either red or green to indicate its status. I would like for that module to disappear when it is not available. This is possible in few other modules by issuing format_down = "" and path_exists does not have one.
$ acpi
Battery 0: Discharging, 57%, 02:45:08 remaining
i3status says 40,18%, 2:55 h remaining.
10 minutes is not much, I don't care about this, but why is there a difference in the percentage?
relevant config:
battery 0 {
format = " %status %percentage <> %remaining -> %emptytime "
format_down = "No battery"
path = "/sys/class/power_supply/BAT%d/uevent"
low_threshold = 10
}
Please see: i3/i3#2364
I see that Pango markup support was added to i3bar
and quickly made non-default. When it was default, it was possible to use markup in the i3status
config -- for example:
disk "/" {
format = "<span size='large' color='#ffffff'>disk:</span> %avail
}
I'm wondering if there would be any interest in adding a markup
option to i3status
general config. This would allow users who know about the markup (and consequently know of the need to escape ampersands, angle brackets, etc.) to use it, but those who don't care about additional formatting would be unaffected.
I realize, however, that features which are achievable some way other than changing the i3status
source are generally not added, and this falls into that category. I wrote a simple wrapper script to inject "markup": "pango"
into the JSON before passing it along to i3bar
, and it seems to work fine. I also took my first look at the source and hacked together a solution there. It was fairly straightforward to add, so I wanted to see what others thought about it.
After finding out about i3/i3#1993 I checked i3status as well. While building does not fail here, we end up with
$ ./i3status --version
i3status () © 2008-2012 Michael Stapelberg and contributors
I am bitten by a particular "bug" in the wireless module of i3status and would love to see a new release so that I can get reliable bandwidth information back :)
How about it?
i3status should support changing the sep_block_width
property in its config:
general {
sep_block_width = 9
}
I noticed that 2.10 added PulseAudio support, which is great for those systems that run it, but an unneccesary dependency for those that don't have audio or that are running a minimal distribution.
I3 is a great gui for many types of uses and it would be nice if i3status would not inadvertently force a given audio subsystem; it would therefore be great if PulseAudio support could be optional.
The newer version of systemd
/udev
uses new naming schemes. Therefore, some times the Ethernet is named enxXXXXXXXXXXXX
and is not detected by the the ethernet _first_
.
When compiling i3status without pulseaudio installed I arrived upon this horrible reality.
CC src/print_cpu_temperature.c
CC src/auto_detect_format.c
CC src/print_path_exists.c
CC src/print_disk_info.c
CC src/print_eth_info.c
CC src/print_cpu_usage.c
CC src/print_battery_info.c
src/pulse.c:5:30: fatal error: pulse/pulseaudio.h: No such file or directory
compilation terminated
Here is a patch that fixes this misstep which I can confirm works with i3status 2.10.
http://pastebin.com/i2VnRmcK
Please do not force users to choose between using pulse and finding a replacement for i3status and/or i3 itself. The latter option will certainly win in my case.
Lastly I know this is a repeat issue, however the issue still persists so I feel I am unfortunately left no choice other than to make a new issue... Please do not close it without resolving the issue by either making pulseaudio an optional dependency or by not using it at all.
i get this message in i3bar
status_command process exited unexpectedly (exit 0)
log is here
i3 version 4.11
http://logs.i3wm.org/logs/5642684278505472.bz2
5642684278505472.zip
Hi - I need to have an explicit </fc>
added to my config when writing out xmobar output... and the volume is muted. The following works:
volume master {
format = "Vol: %volume"
format_muted = "Vol: muted</fc>" # bugfix
device = "default"
mixer = "Master"
mixer_idx = 0
}
Quickly scanning the code, it appears to be an issue with missing an END_COLOR step in src/print_volume.c:
if (muted) {
START_COLOR("color_degraded");
pbval = 0;
}
...
out:
*outwalk = '\0';
if (!pbval)
END_COLOR;
OUTPUT_FULL_TEXT(buffer);
}
Looking through some of the source of this project, I stumbled on a potential bug in i3status.h. The macro "with" (line 58) that is used to define a variable without a new scope has a potential hidden bug.
The code is as follows:
#define with(type, var, init) \
for (type var = (type)-1; (var == (type)-1) && ((var = (init)) || 1);)
This little "hack" would end up in an infinite loop if called like so: with(int, i, -1);
Although unlikely, it is still a hidden bug.
The following is a recommendation to what that like should be changed to, of course not unless there is some vulnerability or other bug that sprouts from it that I am unaware of. After the first pass, var will be assigned a value that will be guaranteed to fail the first predicate in the condition area of the for loop.
#define with(type, var, init) \
for (type var = (type)-1; (var == (type)-1) && ((var = (init)) || 1); var = (type)1)
Looking even deeper again 😄, there is a bug that may arise if used irresponsibly. With the call with(int, *i, <some address>)
, it is clear that a segmentation fault will occur during execution after being a pointer variable initialized to -1 and then have its value peeked in the condition var == (type)-1
as var
will expand to the dereference form which will explode in a segmentation fault. Though that is only if used irresponsibly, which should be avoided.
For some reason the ACPI on my laptop (Sony Vaio Duo 11) often reports 0.01W of charge rate even when it's fully charged (or rather, 80% charged because of the "battery health" function). It would be great if one could define a threshold under which the battery charge/discharge rate would be considered 0. For now, whenever my battery thinks it is charging with 0.01W, the time obviously also goes awry, i.e. showing 3570:00 as remaining time.
Again, sorry I do not have a pull request already done. However, here is a link to the commit to a patch in the FreeBSD ports tree along with a description of the fixes:
https://svnweb.freebsd.org/ports?view=revision&revision=395523
Fix multiple issues with the wireless information reported by i3status for
an interface:
I have got problem with i3status. when I input i3status in terminal. it show that input in flex scanner failed.
[yanboyang@archlinux config]$ i3status
input in flex scanner failed
when I use
gdb to debug it
it show
Starting program: /usr/bin/i3status
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
input in flex scanner failed
[Inferior 1 (process 5506) exited with code 02]
do you know how to solve this problem
Because of this line, the volume percentage shown by i3status is almost always off by 1% compared to other tools. What is wrong with doing float division and rounding to the nearest int value?
int vol_perc = roundf( (float)avg_vol * 100 / PA_VOLUME_NORM );
The Makefile uses git to determine the current release number, this does not work when building from a release archive, since the release archive does not contain the git history.
Steps to reproduce:
% curl -Ls https://github.com/i3/i3status/archive/2.9.tar.gz | tar zxvf -
% make -C i3status-2.9
fatal: Not a git repository (or any parent up to mount point /Volumes/Users)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
What other ways could be used to put the release version information into the release archive?
Commit 668bf20 appears to lift code from the NetworkManager, without acknowledging that in the commit message. Function find_ssid
appears to be copied verbatim: NM code vs i3status code, the preceding nl80211_xbm_to_percent
function appears to be copied with a minor change.
Since the commit message only references my cr.i3wm.org submission, it may imply (to a reader that does not check the original) that the NetworkManager snippets already were in the patch that I submitted. That is not nice. I was actually careful to write original code suitable for use in BSD-licensed i3status rather than copying GPL'ed snippets.
Furthermore, I wonder how it is ok to use code originating from a GPLv2 project in i3status in the first place.
it used to display this just fine. with the last update that I did the volume still adjust properly above 100% still. but it display 100%
i3 version 4.11 (2015-09-30, branch "4.11")
http://logs.i3wm.org/logs/5077991642103808.bz2
not sure if this is due to a change in pulse audio, or i3status.
It would be great if i3status allowed separator
and separator_block_width
as universal module options. There already are two such options, namely min_width
and align
. I think the separator options would be a great addition.
My use case is that I have two volume modules for two different pulse devices and I would like to remove the separator between the two blocks and change the spacing between them.
The separator_block_width
property was already discussed as a general directive here, but I think it would be a better fit for a per module option.
Log: http://logs.i3wm.org/logs/5649050225344512.bz2
Version: i3 version 4.9 (2015-02-28, branch "tags/4.9")
Putting a left angle bracket into the format of a block causes that block to not show up. Example (assuming volume is in the bar):
volume master {
format = "<%volume>"
}
This used to show up as e.g. ...|<10%>|...
. I'm finding that it shows up as ...||...
.
I wasn't able to escape the left angle bracket with a backslash, so I assume it's not a new syntax feature. Found nothing relating to it in the release notes. Only left angle brackets broke the block -- right angle brackets made no difference. I could place it anywhere in the format and the same thing would happen.
Tested this on a system which hadn't upgraded to i3 v4.9. Worked before, broke immediately after I upgraded & restarted i3 in-place.
Shouldn't be terribly hard, but to be frank I lack the c chops to do it in a way that isn't ugly as hell.
Reason: The device index is variable, whereas the device name appears to be pretty constant even across reboots and unplug/replugs.
Proof: run pacmd list-sinks| grep -e 'card:' -e 'device.id' -e 'index:' -e 'alsa.card_name'
, unplug and replug a device and re-run it. Each time the device will increment its index.
The PulseAudio code in print_volume
lacks support for muted volume. Also, would it be possible to add the device alsa
which completely ignores PulseAudio? I'd gladly write a patch for the latter.
Sorry I don't have a pull request ready, but I committed a patch to FreeBSD's ports tree with various fixes for the Ethernet status on FreeBSD. Here are the details from the commit message and a reference to the commit which includes the patch file:
https://svnweb.freebsd.org/ports?view=revision&revision=393973
Fix some nits with displaying Ethernet media status exposed by the recent
extended Ethernet media states:
As of yesterday in freshly created live-ISOs for Manjaro Linux i3status fails with the above error. Strangely, the finished install with the same configs works fine. Using the custom .i3/config and freshly installing i3status-git with yaourt also does not fix it.
Please let me know what useful information I can provide.
Using i3-wm-4.10.4
A simple marker module just indicating a marker string (for example, @email
) will simplify collaboration between i3status and filter scripts that may want to insert extra information at some designated position of the output (for example, by using sed substitution).
I could open a PR if you like the idea.
i3status
displays No battery
, while acpi
displays that there is a battery plugged in (and there actually is).
i3status --version
displays i3status 2.9 (2015-03-22) © 2008-2012 Michael Stapelberg and contributors
i3status
displays:
i3status: trying to auto-detect output_format setting
i3status: auto-detected "term"
no IPv6 | 144.3 GiB | DHCP: yes | VPN: no | W: (046% at Burchtridder) 192.168.178.21 | E: down | No battery | 0.04 | 2015-10-27 09:09:55
acpi
displays Battery 0: Charging, 8%, 00:39:05 until charged
Hello,
I do all updates of i3status manually with killall -USR1 i3status
, every full minute with systemd, and whenever volume and network changes occur.
I use arch linux; after a full system upgrade (where i3status was updated) I noticed that i3status was only updating when I changed the volume (up, down or mute toggle).
killall -USR1 i3status
has no effect (regardless of the executing user), while other signals terminate i3status as expected. The only way I can update it is by controlling pulseaudio: pactl set-sink-mute 0 toggle
and pactl set-sink-volume ...
trigger an update; pactl list short
does not.
After downgrading from version 2.10-1 to 2.9-1, SIGUSR1 works as expected again.
Hi,
Whenever I have hide_seconds = true
in my battery config my config refuses to load (Error: status command process exited unexpectedly (exit 1)
.
My version is:
i3 version 4.8 (2014-06-15, branch "4.8") © 2009-2014 Michael Stapelberg and contributors
My whole config:
general {
colors = true
interval = 5
}
#order += "ipv6"
order += "disk /"
order += "run_watch DHCP"
order += "run_watch VPN"
order += "wireless wlan0"
order += "ethernet eth0"
order += "battery 0"
#order += "load"
order += "tztime local"
wireless wlan0 {
format_up = "%ip @ %essid (%quality)"
format_down = ""
}
ethernet eth0 {
# if you use %speed, i3status requires root privileges
format_up = "%ip (%speed)"
format_down = ""
}
battery 0 {
path = "/sys/class/power_supply/BAT1/uevent"
format = "%status %percentage %remaining"
integer_battery_capacity = true
last_full_capacity = false
hide_seconds = true
}
run_watch DHCP {
pidfile = "/var/run/dhclient*.pid"
}
run_watch VPN {
pidfile = "/var/run/vpnc/pid"
format = "test"
}
tztime local {
format = "%Y-%m-%d %H:%M:%S"
}
load {
format = "%1min"
}
disk "/" {
format = "%avail"
}
At least in some common configurations (with modern Intel wifi adapters) the reported %bitrate is wrong. It is the same bitrate reported by the deprecated iwconfig, while iw reports the correct figure. Perhaps i3status should use some newer libraries.
The use of asoundlib in print_volume.h
results in very poor performance on Linux systems with PulseAudio as the default sound server. I've done a profiling test to support my claims, the results are here (viewable with e.g. kcachegrind). In summary, during 20 iterations there are 20 calls to print_volume
, 20 calls to pa_mainloop_run
, subsequently 3680 calls to pa_mainloop_iterate
, 120302 calls to pa_xmalloc
etc.
This may be either a bug in print_volume.c
, in asoundlib itself or merely a fact showing the need for a native PulseAudio module for i3status -- I don't really know.
For the record, here is my /etc/asound.conf
file:
# Use PulseAudio by default
pcm.!default {
type pulse
fallback "sysdefault"
hint {
show on
description "Default ALSA Output (currently PulseAudio Sound Server)"
}
}
ctl.!default {
type pulse
fallback "sysdefault"
}
It seems every time my machine boots up, it either puts the temperature info in
/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp1_input
or
/sys/devices/platform/coretemp.0/hwmon/hwmon1/temp1_input
With either hwmon0 or hwmon1 existing and the other folder doesn't exist at all. This seems to be random which one upon boot. It would be nice to be able to set the path to just include hwmon?
or hwmon[01]
but the path variable does not seem to support wildcards in the middle of the path.
i3status currently doesn't compile on a musl libc system. The problem is that some functions use GLOB_TILDE
which is a GNUism and (probably) only available in glibc.
This is the output of make on the master branch:
CC src/pulse.c
CC src/print_wireless_info.c
CC src/print_cpu_usage.c
CC src/print_eth_info.c
CC src/print_disk_info.c
CC src/print_ip_addr.c
CC src/print_path_exists.c
CC src/auto_detect_format.c
CC src/print_cpu_temperature.c
CC src/print_run_watch.c
In file included from /usr/include/alsa/asoundlib.h:38:0,
from src/print_volume.c:11:
/usr/include/sys/poll.h:1:2: warning: #warning redirecting incorrect #include <sys/poll.h> to <poll.h> [-Wcpp]
#warning redirecting incorrect #include <sys/poll.h> to <poll.h>
^
CC src/print_volume.c
src/process_runs.c: In function 'process_runs':
src/process_runs.c:27:35: error: 'GLOB_TILDE' undeclared (first use in this function)
if (glob(path, GLOB_NOCHECK | GLOB_TILDE, NULL, &globbuf) < 0)
^
src/process_runs.c:27:35: note: each undeclared identifier is reported only once for each function it appears in
Makefile:71: recipe for target 'src/process_runs.o' failed
make: *** [src/process_runs.o] Error 1
See also: i3/i3#1859
My Wifi Quality was stuck at 100% signal strength.
I found a signed with unsigned integer division which seems to be the culprit.
(introduced in 668bf20)
couldn't attach patch, so here's the plaintext:
diff --git a/src/print_wireless_info.c b/src/print_wireless_info.c
index cd95562..f70d47d 100644
--- a/src/print_wireless_info.c
+++ b/src/print_wireless_info.c
@@ -100,7 +100,7 @@ static void print_bitrate(char *buffer, int buflen, int bitrate) {
snprintf(buffer, buflen, "%g %cb/s", rate / divisor, scale);
}
-static uint32_t nl80211_xbm_to_percent(int32_t xbm, uint32_t divisor) {
+static uint32_t nl80211_xbm_to_percent(int32_t xbm, int32_t divisor) {
#define NOISE_FLOOR_DBM -90
#define SIGNAL_MAX_DBM -20
Hi,
Currently, when i3status passes a click event on a tztime module to an external program, it does not include its instance name (which is mendatory for tztime).
{'y': 9, 'x': 2256, 'button': 1, 'name': 'tztime'}
Could you please make it so that i3status passes an instance
key with the name of the tztime module being clicked ?
Please also make sure it does so on time
modules with instance names.
Hello Everyone,
I am having an issue where i3status shows no wlan even though im connected online
ifconfig
enp0s25: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 00:21:cc:bd:a6:0a txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 20 memory 0xf2500000-f2520000
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 0 (Local Loopback)
RX packets 20 bytes 1760 (1.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 20 bytes 1760 (1.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlp3s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1280
inet 10.0.0.119 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 2601:583:703:7684:f27b:cbff:fe73:32e9 prefixlen 64 scopeid 0x0
inet6 2601:583:703:7684::ba0d prefixlen 128 scopeid 0x0
inet6 fe80::f27b:cbff:fe73:32e9 prefixlen 64 scopeid 0x20
ether f0:7b:cb:73:32:e9 txqueuelen 1000 (Ethernet)
RX packets 52130 bytes 45391146 (43.2 MiB)
RX errors 0 dropped 0 overruns 0 frame 62520
TX packets 40658 bytes 10056064 (9.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 17
i3status.conf
order += "wireless wlp3s0"
wireless wlp3s0 {
format_up = " %essid %quality "
format_down = " no wlan "
}
I have also tried first
I wonder if that feature could have a chance of being merged: defining a set of mountpoint instead of only one, in order to factorize configuration definition.
For instance let's say I want to monitor available space on /, /home and /var, I'd do it that way:
disk "/ /home /var" {
format = "%avail %path"
}
The output would then be:
2.5 GiB / | 90.2 GiB /home | 1.2 GiB /var
Currently there's the format text which defines a message structure common to all three statuses except for the %status value. So a simple idea to define different message structures for different statuses is just to set format = "%status" and then set three different full messages, one for each status. The problem with that approach is that %status seems to be replaced after other placeholders were replaced. So I'm suggesting to replace it the first. I think this is a simple change that address problems nowadays handled in a more ad hoc fashion (for example, hide %remaining when charge is 100%). One use case is to completely hide the battery indicator when the battery is full and the computer is plugged in.
I could open a PR if you like the idea.
To compile src/first_network_device.c on FreeBSD the following patch is required:
--- a/src/first_network_device.c
+++ b/src/first_network_device.c
@@ -1,4 +1,5 @@
// vim:ts=4:sw=4:expandtab
+#include <sys/socket.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <ifaddrs.h>
Otherwise I get the below error:
src/first_network_device.c:30:28: error: incomplete definition of type 'struct sockaddr'
if (addrp->ifa_addr->sa_family != AF_INET &&
~~~~~~~~~~~~~~~^
/usr/include/ifaddrs.h:35:9: note: forward declaration of 'struct sockaddr'
struct sockaddr *ifa_addr;
^
src/first_network_device.c:30:43: error: use of undeclared identifier 'AF_INET'
if (addrp->ifa_addr->sa_family != AF_INET &&
^
src/first_network_device.c:31:28: error: incomplete definition of type 'struct sockaddr'
addrp->ifa_addr->sa_family != AF_INET6)
~~~~~~~~~~~~~~~^
/usr/include/ifaddrs.h:35:9: note: forward declaration of 'struct sockaddr'
struct sockaddr *ifa_addr;
^
src/first_network_device.c:31:43: error: use of undeclared identifier 'AF_INET6'
addrp->ifa_addr->sa_family != AF_INET6) ^
4 errors generated.
Makefile:79: recipe for target 'src/first_network_device.o' failed
As the title says, the refresh doesn't work anymore for me. I'm using the Ubuntu wily and the stable repo mentioned on i3wm.org. But I can also reproduce the bug with a version I built from source.
How can I go about debugging this?
After running pulseaudio -k && pulseaudio --start
, i3status stops updating the display for the volume.
As far as I have seen is not possible to visualize mobile broadband connections as it's possible to do with wired and wireless ones. I think it would be a nice feature to have :)
I think this would be a good idea since the i3 theme colors are already defined on i3/config thus we would not have yet another file to put color information, what do you think?
This is a very minor nitpick, but I'm not quite sure how to trim the leading zero from the %quality string when quality is ~=100. The reason I'm submitting this an issue and not simply assuming that it's intended behavior is because volume and battery life seem to correctly trim the zero.
Here is an illustration of what I'm referring to http://i.imgur.com/9qhKV1P.jpg
As an aside, thank you for i3 and all of its related software. I'm just beginning to use it and am already hooked.
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.