rhysd / hgrep Goto Github PK
View Code? Open in Web Editor NEWGrep with human-friendly search results
License: MIT License
Grep with human-friendly search results
License: MIT License
# v0.2.6
$ ./hgrep-v0.2.6-x86_64-apple-darwin/hgrep --help | grep hidden
-., --hidden
Search hidden files and directories. By default, hidden files and directories are
$ ./hgrep-v0.2.6-x86_64-apple-darwin/hgrep --hidden </dev/null
# v0.2.7
$ ./hgrep-v0.2.7-x86_64-apple-darwin/hgrep --help | grep hidden
-., --hidden <hidden>
Search hidden files and directories. By default, hidden files and directories are skipped
$ ./hgrep-v0.2.7-x86_64-apple-darwin/hgrep --hidden </dev/null
error: The argument '--hidden <hidden>' requires a value but none was supplied
For more information try '--help'
Hi
Is it possible to provide a musl-binary (the way ripgrep does)?
(i use an old linux machine that i cannot upgrage)
Many thanks
Currently hgrep supports only UTF-8 texts. This means that hgrep tries to print UTF-16 texts as if they are encoded in UTF-8, resulting in a quite broken output.
ripgrep supports UTF-16 by --encoding
option so technically hgrep can support it too. ripgrep transcodes UTF-16 to UTF-8 on memory removing BOM using encoding_rs_io::DecodeReaderBytesBuilder
. It means that ripgrep reports byte offsets for matched regions in transcoded UTF-8 text.
hgrep can read matched file transcoding UTF-16 to UTF-8 as well. Currently hgrep reads file contents as-is. --encoding
(-E
) option can be added by reading files through the encoding_rs
encoders.
Lines 220 to 223 in 6f49cb0
Encoding::for_bom
and transcode input to UTF-8--encode
option which accepts encoding labels
Encoding::for_label
very specific problem, but not that hard to run into. I noticed when (h)greping for a specific macro the matching line was just a gray line.
With some more troubleshooting it seems this happens (gray line/whatever highlight color I would guess) any time the background is painted on a line starting with a #
even when it is not the highlighted result.
Changing the file extension to .c instead of .cs fixes it, running the same command in linux works fine. Just about any combo other than a .cs file, or without the line background painted, or without the line starting with a # or not on windows seems ok:)
Sadly I don't see an immediate way to actually turn of background painting for the matched line (other than just using the other printer which does solve this:)).
❯ brew tap "rhysd/hgrep" "https://github.com/rhysd/hgrep"
brew install hgrep
==> Downloading https://github.com/rhysd/hgrep/releases/download/v0.2.1/hgrep-v0.2.1-x86_64-apple-darwin.zip
Already downloaded: /Users/$USER/Library/Caches/Homebrew/downloads/712103ea480f4147dde712234225835a35bc2a2213180120913b81329051bd47--hgrep-v0.2.1-x86_64-apple-darwin.zip
==> Installing hgrep from rhysd/hgrep
Error: Failure while executing; `/Users/$USER/homebrew/Cellar/hgrep/0.2.1/bin/hgrep --generate-completion-script zsh` was terminated by uncaught signal ABRT. Here's the output:
❯ /Users/$USER/homebrew/Cellar/hgrep/0.2.1/bin/hgrep --generate-completion-script zsh
zsh: no such file or directory: /Users/$USER/homebrew/Cellar/hgrep/0.2.1/bin/hgrep
Don't think it is related to OS, but if you need I will share.
Hi,
I've packaged and merged hgrep
into the main pkgsrc branch, https://mail-index.netbsd.org/pkgsrc-changes/2021/10/20/msg242216.html
This means the package is now available from the official repositories for NetBSD.
Thank you for this awesome tool.
/pin
Could you release binary for linux with arm64(aarch64) architecture?
Thank you.
I have installed via cargo install hgrep
under MINGW64 (Windows 10).
Assuming an input file like myfile.c
:
/*
* foo has changed [...] and is now a 2-parameters function
*/
// foo(24)
int myvar = foo(42, 28);
... then if I run hgrep
on the file directly (e.g. hgrep foo myfile.c
) - then the matches are nicely indicated (in addition to corresponding line numbers):
... however if I try to Eat grep -nH
output (e.g. grep -nH foo myfile.c | hgrep
) - then the matches are NOT indicated anymore, only the corresponding line numbers are:
Can I somehow get the matched substrings to be indicated, also when consuming grep -nH
output?
Compilation failed on macOS Catalina 10.15.7 when trying to compile hgrep
v0.1.6 using Rust 1.56.0:
error: couldn't read src/../assets/bat/assets/syntaxes.bin: No such file or directory (os error 2)
--> src/syntect.rs:27:31
|
27 | const SYNTAX_SET_BIN: &[u8] = include_bytes!("../assets/bat/assets/syntaxes.bin");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: this error originates in the macro `include_bytes` (in Nightly builds, run with -Z macro-backtrace for more info)
error: couldn't read src/../assets/bat/assets/themes.bin: No such file or directory (os error 2)
--> src/syntect.rs:28:30
|
28 | const THEME_SET_BIN: &[u8] = include_bytes!("../assets/bat/assets/themes.bin");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: this error originates in the macro `include_bytes` (in Nightly builds, run with -Z macro-backtrace for more info)
error: could not compile `hgrep` due to 2 previous errors
I noticed when doing a grep on a project some resx files had proper highlighting and some did not. Renaming them to XML fixed this (as it used extension detection for lang I assume) but after some troubleshooting I found the same file with and without BOM would result in the problem (with BOM preventing the auto detection).
I downloaded the latest musl binary from GitHub releases, but am unable to run it.
❯ /spare/ssd/szafar/apps/bin/hgrep
zsh: no such file or directory: /spare/ssd/szafar/apps/bin/hgrep
❯ ldd /spare/ssd/szafar/apps/bin/hgrep
linux-vdso.so.1 (0x00007fff4bdf7000)
libgtk3-nocsd.so.0 => /lib/x86_64-linux-gnu/libgtk3-nocsd.so.0 (0x00007fad62b28000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fad62b0d000)
libc.musl-x86_64.so.1 => not found
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fad62b07000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fad62ae4000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fad628f2000)
/lib/ld-musl-x86_64.so.1 => /lib64/ld-linux-x86-64.so.2 (0x00007fad633d2000)
❯ file /spare/ssd/szafar/apps/bin/hgrep
/spare/ssd/szafar/apps/bin/hgrep: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-musl-x86_64.so.1, with debug_info, not stripped
OS: Arch Linux on Windows 10 x86_64
Kernel: 5.10.16.3-microsoft-standard-WSL2
Log:
❯ cargo install --git=https://github.com/rhysd/hgrep
Updating git repository `https://github.com/rhysd/hgrep`
Installing hgrep v0.1.3 (https://github.com/rhysd/hgrep#37082f52)
Updating `sjtu` index
Compiling libc v0.2.104
Compiling autocfg v1.0.1
Compiling cfg-if v1.0.0
Compiling memchr v2.4.1
Compiling proc-macro2 v1.0.30
Compiling lazy_static v1.4.0
Compiling unicode-xid v0.2.2
Compiling syn v1.0.80
Compiling pkg-config v0.3.20
Compiling serde_derive v1.0.130
Compiling log v0.4.14
Compiling regex-syntax v0.6.25
Compiling serde v1.0.130
Compiling crossbeam-utils v0.8.5
Compiling encoding_index_tests v0.1.4
Compiling regex-automata v0.1.10
Compiling hashbrown v0.11.2
Compiling proc-macro-hack v0.5.19
Compiling once_cell v1.8.0
Compiling same-file v1.0.6
Compiling crc32fast v1.2.1
Compiling crossbeam-epoch v0.9.5
Compiling fnv v1.0.7
Compiling ryu v1.0.5
Compiling bitflags v1.3.2
Compiling termcolor v1.1.2
Compiling ucd-trie v0.1.3
Compiling safemem v0.3.3
Compiling encoding_rs v0.8.29
Compiling adler v1.0.2
Compiling linked-hash-map v0.5.4
Compiling rayon-core v1.9.1
Compiling scopeguard v1.1.0
Compiling serde_json v1.0.68
Compiling version_check v0.9.3
Compiling xml-rs v0.8.4
Compiling bugreport v0.4.1
Compiling base64 v0.13.0
Compiling unicode-width v0.1.9
Compiling itoa v0.4.8
Compiling dtoa v0.4.8
Compiling strsim v0.10.0
Compiling std_prelude v0.2.12
Compiling anyhow v1.0.44
Compiling lazycell v1.3.0
Compiling textwrap v0.14.2
Compiling shell-escape v0.1.5
Compiling bat v0.18.3
Compiling bytecount v0.6.2
Compiling either v1.6.1
Compiling ansi_term v0.12.1
Compiling indexmap v1.7.0
Compiling num-traits v0.2.14
Compiling memoffset v0.6.4
Compiling num-integer v0.1.44
Compiling miniz_oxide v0.4.4
Compiling rayon v1.5.1
Compiling encoding-index-simpchinese v1.20141219.5
Compiling encoding-index-korean v1.20141219.5
Compiling encoding-index-singlebyte v1.20141219.5
Compiling encoding-index-japanese v1.20141219.5
Compiling encoding-index-tradchinese v1.20141219.5
Compiling thread_local v1.1.3
Compiling walkdir v2.3.2
Compiling pest v2.1.3
Compiling line-wrap v0.1.1
Compiling yaml-rust v0.4.5
Compiling error-chain v0.12.4
Compiling path_abs v0.5.1
Compiling encoding v0.2.33
Compiling semver-parser v0.10.2
Compiling aho-corasick v0.7.18
Compiling bstr v0.2.17
Compiling grep-matcher v0.1.5
Compiling os_str_bytes v4.2.0
Compiling content_inspector v0.2.4
Compiling atty v0.2.14
Compiling terminal_size v0.1.17
Compiling num_cpus v1.13.0
Compiling memmap2 v0.3.1
Compiling quote v1.0.10
Compiling jobserver v0.1.24
Compiling crossbeam-channel v0.5.1
Compiling semver v0.11.0
Compiling encoding_rs_io v0.1.7
Compiling flate2 v1.0.22
Compiling regex v1.5.4
Compiling clap v3.0.0-beta.5
Compiling cc v1.0.71
Compiling grep-searcher v0.1.8
Compiling crossbeam-deque v0.8.1
Compiling chrono v0.4.19
Compiling globset v0.4.8
Compiling console v0.14.1
Compiling grep-regex v0.1.9
Compiling console v0.15.0
Compiling clap_generate v3.0.0-beta.5
Compiling sys-info v0.9.0
Compiling onig_sys v69.7.1
Compiling pcre2-sys v0.2.5
Compiling ansi_colours v1.0.4
Compiling git-version-macro v0.3.5
Compiling grep-cli v0.1.6
Compiling ignore v0.4.18
Compiling git-version v0.3.5
Compiling pcre2 v0.2.3
Compiling grep-pcre2 v0.1.5
Compiling bincode v1.3.3
Compiling plist v1.2.1
Compiling serde_yaml v0.8.21
Compiling clircle v0.3.0
Compiling onig v6.3.0
Compiling syntect v4.6.0
Compiling hgrep v0.1.3 (/home/young/.cargo/git/checkouts/hgrep-76d18114b713642b/37082f5)
error[E0599]: no variant or associated item named `ColoredHelp` found for enum `AppSettings` in the current scope
--> src/main.rs:22:38
|
22 | .global_setting(AppSettings::ColoredHelp)
| ^^^^^^^^^^^ variant or associated item not found in `AppSettings`
error[E0061]: this function takes 4 arguments but 3 arguments were supplied
--> src/main.rs:242:19
|
242 | "bash" => generate::<Bash, _>(&mut app, "hgrep", &mut stdout),
| ^^^^^^^^^^^^^^^^^^^ -------- ------- ----------- supplied 3 arguments
| |
| expected 4 arguments
|
note: function defined here
--> /home/young/.cargo/registry/src/mirrors.sjtug.sjtu.edu.cn-7a04d2510079875b/clap_generate-3.0.0-beta.5/src/lib.rs:239:8
|
239 | pub fn generate<G, S>(gen: G, app: &mut clap::App, bin_name: S, buf: &mut dyn Write)
| ^^^^^^^^
error[E0061]: this function takes 4 arguments but 3 arguments were supplied
--> src/main.rs:243:18
|
243 | "zsh" => generate::<Zsh, _>(&mut app, "hgrep", &mut stdout),
| ^^^^^^^^^^^^^^^^^^ -------- ------- ----------- supplied 3 arguments
| |
| expected 4 arguments
|
note: function defined here
--> /home/young/.cargo/registry/src/mirrors.sjtug.sjtu.edu.cn-7a04d2510079875b/clap_generate-3.0.0-beta.5/src/lib.rs:239:8
|
239 | pub fn generate<G, S>(gen: G, app: &mut clap::App, bin_name: S, buf: &mut dyn Write)
| ^^^^^^^^
error[E0061]: this function takes 4 arguments but 3 arguments were supplied
--> src/main.rs:244:25
|
244 | "powershell" => generate::<PowerShell, _>(&mut app, "hgrep", &mut stdout),
| ^^^^^^^^^^^^^^^^^^^^^^^^^ -------- ------- ----------- supplied 3 arguments
| |
| expected 4 arguments
|
note: function defined here
--> /home/young/.cargo/registry/src/mirrors.sjtug.sjtu.edu.cn-7a04d2510079875b/clap_generate-3.0.0-beta.5/src/lib.rs:239:8
|
239 | pub fn generate<G, S>(gen: G, app: &mut clap::App, bin_name: S, buf: &mut dyn Write)
| ^^^^^^^^
error[E0061]: this function takes 4 arguments but 3 arguments were supplied
--> src/main.rs:245:19
|
245 | "fish" => generate::<Fish, _>(&mut app, "hgrep", &mut stdout),
| ^^^^^^^^^^^^^^^^^^^ -------- ------- ----------- supplied 3 arguments
| |
| expected 4 arguments
|
note: function defined here
--> /home/young/.cargo/registry/src/mirrors.sjtug.sjtu.edu.cn-7a04d2510079875b/clap_generate-3.0.0-beta.5/src/lib.rs:239:8
|
239 | pub fn generate<G, S>(gen: G, app: &mut clap::App, bin_name: S, buf: &mut dyn Write)
| ^^^^^^^^
error[E0061]: this function takes 4 arguments but 3 arguments were supplied
--> src/main.rs:246:21
|
246 | "elvish" => generate::<Elvish, _>(&mut app, "hgrep", &mut stdout),
| ^^^^^^^^^^^^^^^^^^^^^ -------- ------- ----------- supplied 3 arguments
| |
| expected 4 arguments
|
note: function defined here
--> /home/young/.cargo/registry/src/mirrors.sjtug.sjtu.edu.cn-7a04d2510079875b/clap_generate-3.0.0-beta.5/src/lib.rs:239:8
|
239 | pub fn generate<G, S>(gen: G, app: &mut clap::App, bin_name: S, buf: &mut dyn Write)
| ^^^^^^^^
Some errors have detailed explanations: E0061, E0599.
For more information about an error, try `rustc --explain E0061`.
error: failed to compile `hgrep v0.1.3 (https://github.com/rhysd/hgrep#37082f52)`, intermediate artifacts can be found at `/tmp/cargo-installWmUcTi`
Caused by:
could not compile `hgrep` due to 6 previous errors
This happens especially when running with rg --vimgrep
which can result in a line with more than one match will be printed more than once.
When running hgrep -C0
this will result in a panic on the duplicate line.
(Theoretically this could be considered invalid input, but I guess hgrep
should handle it more gracefully than panicking)
I can reproduce this using the 0.2.6 build on github release and also compiling latest from main
branch.
abc
def
rg --vimgrep . file | hgrep -c0 -C0
thread '<unnamed>' panicked at 'line 2 > chunk 1', /home/runner/work/hgrep/hgrep/src/chunk.rs:162:13
stack backtrace:
0: 0x5623558a1d34 - std::backtrace_rs::backtrace::libunwind::trace::h22893a5306c091b4
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
1: 0x5623558a1d34 - std::backtrace_rs::backtrace::trace_unsynchronized::h29c3bc6f9e91819d
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
2: 0x5623558a1d34 - std::sys_common::backtrace::_print_fmt::he497d8a0ec903793
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/sys_common/backtrace.rs:66:5
3: 0x5623558a1d34 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h9c2a9d2774d81873
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/sys_common/backtrace.rs:45:22
4: 0x562355725d1c - core::fmt::write::hba4337c43d992f49
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/core/src/fmt/mod.rs:1194:17
5: 0x56235589f295 - std::io::Write::write_fmt::heb73de6e02cfabed
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/io/mod.rs:1655:15
6: 0x5623558a37ae - std::sys_common::backtrace::_print::h63c8b24acdd8e8ce
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/sys_common/backtrace.rs:48:5
7: 0x5623558a37ae - std::sys_common::backtrace::print::h426700d6240cdcc2
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/sys_common/backtrace.rs:35:9
8: 0x5623558a37ae - std::panicking::default_hook::{{closure}}::hc9a76eed0b18f82b
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/panicking.rs:295:22
9: 0x5623558a34dd - std::panicking::default_hook::h2e88d02087fae196
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/panicking.rs:314:9
10: 0x5623558a3d55 - std::panicking::rust_panic_with_hook::habfdcc2e90f9fd4c
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/panicking.rs:698:17
11: 0x5623558a3c64 - std::panicking::begin_panic_handler::{{closure}}::he054b2a83a51d2cd
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/panicking.rs:588:13
12: 0x5623558a2264 - std::sys_common::backtrace::__rust_end_short_backtrace::ha48b94ab49b30915
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/sys_common/backtrace.rs:138:18
13: 0x5623558a39cd - rust_begin_unwind
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/panicking.rs:584:5
14: 0x562355664d83 - core::panicking::panic_fmt::h366d3a309ae17c94
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/core/src/panicking.rs:143:14
15: 0x5623557c3a9a - <hgrep::chunk::Files<I> as core::iter::traits::iterator::Iterator>::next::h5ee4291e70bebdc3
16: 0x56235579be59 - <rayon::iter::par_bridge::IterParallelProducer<Iter> as rayon::iter::plumbing::UnindexedProducer>::fold_with::h0dca500009f9e028
17: 0x5623557955a2 - rayon::iter::plumbing::bridge_unindexed_producer_consumer::h223e4423a9933835
18: 0x5623557a2ca7 - std::panicking::try::hf0836b1c957853cc
19: 0x5623557cb66d - rayon_core::registry::in_worker::he45b25a872d14469
20: 0x562355795507 - rayon::iter::plumbing::bridge_unindexed_producer_consumer::h223e4423a9933835
21: 0x5623557a2ca7 - std::panicking::try::hf0836b1c957853cc
22: 0x5623557cb66d - rayon_core::registry::in_worker::he45b25a872d14469
23: 0x562355795507 - rayon::iter::plumbing::bridge_unindexed_producer_consumer::h223e4423a9933835
24: 0x5623557a2ca7 - std::panicking::try::hf0836b1c957853cc
25: 0x5623557cb66d - rayon_core::registry::in_worker::he45b25a872d14469
26: 0x562355795507 - rayon::iter::plumbing::bridge_unindexed_producer_consumer::h223e4423a9933835
27: 0x5623557a2ca7 - std::panicking::try::hf0836b1c957853cc
28: 0x5623557b5895 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::h0b572bc3ae82dd95
29: 0x5623557a260f - std::panicking::try::h5cef0bae059587cf
30: 0x5623557b8ff3 - <rayon_core::job::StackJob<L,F,R> as rayon_core::job::Job>::execute::h5b2d03e421fd52dd
31: 0x56235566e2e5 - rayon_core::registry::WorkerThread::wait_until_cold::h8e688ed76ab0d924
32: 0x562355806d36 - rayon_core::registry::ThreadBuilder::run::h5b1fb0c08159930b
33: 0x5623558092d1 - std::sys_common::backtrace::__rust_begin_short_backtrace::hff0e2583cc1c2414
34: 0x562355804cad - core::ops::function::FnOnce::call_once{{vtable.shim}}::h0d99182cc1cda66c
35: 0x5623558a7435 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::ha99802c2c52ada61
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/alloc/src/boxed.rs:1861:9
36: 0x5623558a7435 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::ha39aea1c57e28a15
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/alloc/src/boxed.rs:1861:9
37: 0x5623558a7435 - std::sys::unix::thread::Thread::new::thread_start::h9f8e3d72b1f7662f
at /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/library/std/src/sys/unix/thread.rs:108:17
38: 0x7fec1b9f08fd - <unknown>
39: 0x7fec1ba72a60 - <unknown>
40: 0x0 - <unknown>
Consider to add indent guide to the result snippets. Since snippets usually include indents and sometimes the indent level is deep, it would be helpful to know the level.
┊ match self.regions.first().copied() {
┊ ┊ Some((s, e)) if o == s && o < e => RegionBoundary::Start,
┊ ┊ Some((_, e)) if o == e => {
┊ ┊ ┊ // When the next region is adjcent, skip changing highlight
┊ ┊ ┊ match self.regions.get(1) {
┊ ┊ ┊ ┊ Some((s, _)) if o == *s => RegionBoundary::NotFound,
┊ ┊ ┊ ┊ _ => RegionBoundary::End,
┊ ┊ ┊ }
┊ ┊ }
┊ ┊ _ => RegionBoundary::NotFound,
┊ }
┊
(U+250A)--no-indent-guide
(indent guide is enabled by default)Note that this feature is automatically disabled by --ascii-lines
.
Challenges:
I should to confirm that the guides are not so noisy in outputs before implementing this by crafting an example output.
rg
provides --sort
option. hgrep
also can support it.
Note that using --sort
option can slow hgrep
because sorting the matches means all matches must be calculated before printing them. For example, when a pattern matches to very last of large file, calculating highlights generally requires long time (since highlight must be calculated from the start of file).
Would be nice to get it available for any more popular Linux packaging system (or multiple of them), such as apt, yum or pacman. Currently there are only packages for more macOS-based managers, such as Homebrew and MacPorts, or the Rust cargo one. And bloating the system with lots of package managers just to install an app or two is not great.
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.