Git Product home page Git Product logo

clima's Issues

cargo install fails

...
   Compiling clima v0.0.6
error[E0277]: `?` couldn't convert the error to `termimad::Error`
  --> /home/tshepang/.cargo/registry/src/github.com-1ecc6299db9ec823/clima-0.0.6/src/viewer.rs:27:32
   |
27 |     terminal::enable_raw_mode()?;
   |                                ^ the trait `std::convert::From<crossterm::error::ErrorKind>` is not implemented for `termimad::Error`
   |
   = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
   = help: the following implementations were found:
             <termimad::Error as std::convert::From<crossterm::error::ErrorKind>>
             <termimad::Error as std::convert::From<std::io::Error>>
   = note: required by `std::convert::From::from`

This is followed by other similar errors.

Support coloured output

Measured colouring helps user to recognise key elements: headings, links, etc.
Would you consider optionally rendering those in colour?

Provide release version

Hi. i'm eager to create a package for your tool for void-linux. But they only accept release versions of packages. So, please provide release version. Thanks.

Build not possible

`:~/clima$ cargo install --path .
Installing clima v0.0.5 (/home/june/clima)
Updating crates.io index
Downloaded log v0.4.8
Downloaded lazy_static v1.4.0
Downloaded clap v2.33.0
Downloaded crossterm v0.14.2
Downloaded cfg-if v0.1.10
Downloaded ansi_term v0.11.0
Downloaded atty v0.2.14
Downloaded signal-hook v0.1.13
Downloaded vec_map v0.8.1
Downloaded textwrap v0.11.0
Downloaded mio v0.6.21
Downloaded unicode-width v0.1.7
Downloaded libc v0.2.66
Downloaded strsim v0.8.0
Downloaded minimad v0.6.3
Downloaded simplelog v0.6.0
Downloaded custom_error v1.7.1
Downloaded bitflags v1.2.1
Downloaded parking_lot v0.10.0
Downloaded iovec v0.1.4
Downloaded chrono v0.4.10
Downloaded signal-hook-registry v1.2.0
Downloaded slab v0.4.2
Downloaded term v0.5.2
Downloaded net2 v0.2.33
Downloaded parking_lot_core v0.7.0
Downloaded num-traits v0.2.11
Downloaded num-integer v0.1.42
Downloaded termimad v0.8.13
Downloaded time v0.1.42
Downloaded lock_api v0.3.3
Downloaded arc-swap v0.4.4
Downloaded byteorder v1.3.4
Downloaded autocfg v1.0.0
Downloaded dirs v1.0.5
Downloaded smallvec v1.2.0
Downloaded crossbeam v0.7.3
Downloaded scopeguard v1.0.0
Downloaded crossterm v0.16.0
Downloaded thiserror v1.0.10
Downloaded crossbeam-deque v0.7.2
Downloaded crossbeam-queue v0.2.1
Downloaded crossbeam-channel v0.4.0
Downloaded crossbeam-utils v0.7.0
Downloaded crossbeam-epoch v0.8.0
Downloaded autocfg v0.1.7
Downloaded memoffset v0.5.3
Downloaded thiserror-impl v1.0.10
Downloaded rustc_version v0.2.3
Downloaded quote v1.0.2
Downloaded syn v1.0.14
Downloaded semver v0.9.0
Downloaded proc-macro2 v1.0.8
Downloaded unicode-xid v0.2.0
Downloaded semver-parser v0.7.0
Compiling semver-parser v0.7.0
Compiling autocfg v0.1.7
Compiling libc v0.2.66
Compiling proc-macro2 v1.0.8
Compiling log v0.4.8
Compiling autocfg v1.0.0
Compiling unicode-xid v0.2.0
Compiling lazy_static v1.4.0
Compiling cfg-if v0.1.10
Compiling syn v1.0.14
Compiling scopeguard v1.0.0
Compiling slab v0.4.2
Compiling smallvec v1.2.0
error[E0658]: use of unstable library feature 'alloc': this library is unlikely to be stabilized in its current form or name (see issue #27783)
--> /home/june/.cargo/registry/src/github.com-1ecc6299db9ec823/smallvec-1.2.0/lib.rs:35:1
|
35 | pub extern crate alloc;
| ^^^^^^^^^^^^^^^^^^^^^^^

error[E0658]: use of unstable library feature 'maybe_uninit' (see issue #53491)
--> /home/june/.cargo/registry/src/github.com-1ecc6299db9ec823/smallvec-1.2.0/lib.rs:49:5
|
49 | use core::mem::MaybeUninit;
| ^^^^^^^^^^^^^^^^^^^^^^

error[E0658]: use of unstable library feature 'maybe_uninit' (see issue #53491)
--> /home/june/.cargo/registry/src/github.com-1ecc6299db9ec823/smallvec-1.2.0/lib.rs:294:12
|
294 | Inline(MaybeUninit),
| ^^^^^^^^^^^^^^

error[E0658]: use of unstable library feature 'maybe_uninit' (see issue #53491)
--> /home/june/.cargo/registry/src/github.com-1ecc6299db9ec823/smallvec-1.2.0/lib.rs:315:28
|
315 | fn from_inline(inline: MaybeUninit) -> SmallVecData {
| ^^^^^^^^^^^^^^

error[E0658]: use of unstable library feature 'maybe_uninit' (see issue #53491)
--> /home/june/.cargo/registry/src/github.com-1ecc6299db9ec823/smallvec-1.2.0/lib.rs:319:36
|
319 | unsafe fn into_inline(self) -> MaybeUninit {
| ^^^^^^^^^^^^^^

error[E0658]: use of unstable library feature 'maybe_uninit' (see issue #53491)
--> /home/june/.cargo/registry/src/github.com-1ecc6299db9ec823/smallvec-1.2.0/lib.rs:394:45
|
394 | data: SmallVecData::from_inline(MaybeUninit::uninit()),
| ^^^^^^^^^^^^^^^^^^^

error[E0658]: use of unstable library feature 'maybe_uninit' (see issue #53491)
--> /home/june/.cargo/registry/src/github.com-1ecc6299db9ec823/smallvec-1.2.0/lib.rs:434:63
|
434 | let mut data = SmallVecData::::from_inline(MaybeUninit::uninit());
| ^^^^^^^^^^^^^^^^^^^

error[E0658]: use of unstable library feature 'maybe_uninit' (see issue #53491)
--> /home/june/.cargo/registry/src/github.com-1ecc6299db9ec823/smallvec-1.2.0/lib.rs:470:45
|
470 | data: SmallVecData::from_inline(MaybeUninit::new(buf)),
| ^^^^^^^^^^^^^^^^

error[E0658]: use of unstable library feature 'maybe_uninit' (see issue #53491)
--> /home/june/.cargo/registry/src/github.com-1ecc6299db9ec823/smallvec-1.2.0/lib.rs:489:55
|
489 | unsafe { SmallVec::from_buf_and_len_unchecked(MaybeUninit::new(buf), len) }
| ^^^^^^^^^^^^^^^^

error[E0658]: use of unstable library feature 'maybe_uninit' (see issue #53491)
--> /home/june/.cargo/registry/src/github.com-1ecc6299db9ec823/smallvec-1.2.0/lib.rs:508:51
|
508 | pub unsafe fn from_buf_and_len_unchecked(buf: MaybeUninit, len: usize) -> SmallVec {
| ^^^^^^^^^^^^^^

error[E0658]: use of unstable library feature 'maybe_uninit' (see issue #53491)
--> /home/june/.cargo/registry/src/github.com-1ecc6299db9ec823/smallvec-1.2.0/lib.rs:670:55
|
670 | self.data = SmallVecData::from_inline(MaybeUninit::uninit());
| ^^^^^^^^^^^^^^^^^^^

error[E0658]: use of unstable library feature 'maybe_uninit' (see issue #53491)
--> /home/june/.cargo/registry/src/github.com-1ecc6299db9ec823/smallvec-1.2.0/lib.rs:737:55
|
737 | self.data = SmallVecData::from_inline(MaybeUninit::uninit());
| ^^^^^^^^^^^^^^^^^^^

error[E0658]: use of unstable library feature 'maybe_uninit' (see issue #53491)
--> /home/june/.cargo/registry/src/github.com-1ecc6299db9ec823/smallvec-1.2.0/lib.rs:1078:52
|
1078 | let mut data: MaybeUninit = MaybeUninit::uninit();
| ^^^^^^^^^^^^^^^^^^^

error[E0658]: use of unstable library feature 'maybe_uninit' (see issue #53491)
--> /home/june/.cargo/registry/src/github.com-1ecc6299db9ec823/smallvec-1.2.0/lib.rs:1078:35
|
1078 | let mut data: MaybeUninit = MaybeUninit::uninit();
| ^^^^^^^^^^^^^^

error[E0658]: use of unstable library feature 'maybe_uninit' (see issue #53491)
--> /home/june/.cargo/registry/src/github.com-1ecc6299db9ec823/smallvec-1.2.0/lib.rs:303:42
|
303 | SmallVecData::Inline(a) => a.as_ptr() as *const A::Item,
| ^^^^^^

error[E0658]: use of unstable library feature 'maybe_uninit' (see issue #53491)
--> /home/june/.cargo/registry/src/github.com-1ecc6299db9ec823/smallvec-1.2.0/lib.rs:310:42
|
310 | SmallVecData::Inline(a) => a.as_mut_ptr() as *mut A::Item,
| ^^^^^^^^^^

Compiling arc-swap v0.4.4
error[E0599]: no function or associated item named uninit found for type core::mem::MaybeUninit<_> in the current scope
--> /home/june/.cargo/registry/src/github.com-1ecc6299db9ec823/smallvec-1.2.0/lib.rs:394:58
|
394 | data: SmallVecData::from_inline(MaybeUninit::uninit()),
| -------------^^^^^^
| |
| function or associated item not found in core::mem::MaybeUninit<_>

error[E0599]: no function or associated item named uninit found for type core::mem::MaybeUninit<_> in the current scope
--> /home/june/.cargo/registry/src/github.com-1ecc6299db9ec823/smallvec-1.2.0/lib.rs:434:76
|
434 | let mut data = SmallVecData::::from_inline(MaybeUninit::uninit());
| -------------^^^^^^
| |
| function or associated item not found in core::mem::MaybeUninit<_>

error[E0599]: no function or associated item named uninit found for type core::mem::MaybeUninit<_> in the current scope
--> /home/june/.cargo/registry/src/github.com-1ecc6299db9ec823/smallvec-1.2.0/lib.rs:670:68
|
670 | self.data = SmallVecData::from_inline(MaybeUninit::uninit());
| -------------^^^^^^
| |
| function or associated item not found in core::mem::MaybeUninit<_>

error[E0599]: no function or associated item named uninit found for type core::mem::MaybeUninit<_> in the current scope
--> /home/june/.cargo/registry/src/github.com-1ecc6299db9ec823/smallvec-1.2.0/lib.rs:737:68
|
737 | self.data = SmallVecData::from_inline(MaybeUninit::uninit());
| -------------^^^^^^
| |
| function or associated item not found in core::mem::MaybeUninit<_>

error[E0599]: no method named assume_init found for type core::mem::MaybeUninit<A> in the current scope
--> /home/june/.cargo/registry/src/github.com-1ecc6299db9ec823/smallvec-1.2.0/lib.rs:916:39
|
916 | Ok(data.into_inline().assume_init())
| ^^^^^^^^^^^

error[E0599]: no function or associated item named uninit found for type core::mem::MaybeUninit<_> in the current scope
--> /home/june/.cargo/registry/src/github.com-1ecc6299db9ec823/smallvec-1.2.0/lib.rs:1078:65
|
1078 | let mut data: MaybeUninit = MaybeUninit::uninit();
| -------------^^^^^^
| |
| function or associated item not found in core::mem::MaybeUninit<_>

error[E0658]: use of unstable library feature 'maybe_uninit' (see issue #53491)
--> /home/june/.cargo/registry/src/github.com-1ecc6299db9ec823/smallvec-1.2.0/lib.rs:1081:30
|
1081 | data.as_mut_ptr() as *mut A::Item,
| ^^^^^^^^^^

error: aborting due to 23 previous errors

Some errors occurred: E0599, E0658.
For more information about an error, try rustc --explain E0599.
error: Could not compile smallvec.
warning: build failed, waiting for other jobs to finish...
error: failed to compile clima v0.0.5 (/home/june/clima), intermediate artifacts can be found at /home/june/clima/target

Caused by:
build failed
`

Build fails

Hey @Canop,

First of all, I would like to say that's seems a pretty great library.

I was trying to test https://github.com/Canop/termimad by clima, but when I was breaking through the manual I immediately encountered on the issue with building its origin :)

output of cargo build
error[E0277]: `?` couldn't convert the error to `termimad::Error`
  --> src/viewer.rs:35:36
   |
35 |     queue!(w, cursor::MoveTo(0, y))?;
   |                                    ^ the trait `std::convert::From<crossterm::utils::error::ErrorKind>` is not implemented for `termimad::Error`
   |
   = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
   = help: the following implementations were found:
             <termimad::Error as std::convert::From<crossterm::error::ErrorKind>>
             <termimad::Error as std::convert::From<std::io::Error>>
   = note: required by `std::convert::From::from`

error[E0308]: mismatched types
  --> src/viewer.rs:37:5
   |
37 |     mad_write_inline!(w, skin, "**Clima >** *$0*", &path)
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected struct `minimad::composite::Composite`, found struct `minimad::Composite`
   |
   = note: expected type `minimad::composite::Composite<'_>`
              found type `minimad::Composite<'_>`
note: Perhaps two different versions of crate `minimad` are being used?
  --> src/viewer.rs:37:5
   |
37 |     mad_write_inline!(w, skin, "**Clima >** *$0*", &path)
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)

error[E0277]: `?` couldn't convert the error to `termimad::Error`
  --> src/viewer.rs:41:36
   |
41 |     queue!(w, cursor::MoveTo(0, y))?;
   |                                    ^ the trait `std::convert::From<crossterm::utils::error::ErrorKind>` is not implemented for `termimad::Error`
   |
   = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
   = help: the following implementations were found:
             <termimad::Error as std::convert::From<crossterm::error::ErrorKind>>
             <termimad::Error as std::convert::From<std::io::Error>>
   = note: required by `std::convert::From::from`

error[E0308]: mismatched types
  --> src/viewer.rs:42:5
   |
42 | /     mad_write_inline!(
43 | |         w,
44 | |         skin,
45 | |         "Use the **๐Ÿก‘** and **๐Ÿก“** arrow keys to scroll, any other key to quit"
46 | |     )
   | |_____^ expected struct `minimad::composite::Composite`, found struct `minimad::Composite`
   |
   = note: expected type `minimad::composite::Composite<'_>`
              found type `minimad::Composite<'_>`
note: Perhaps two different versions of crate `minimad` are being used?
  --> src/viewer.rs:42:5
   |
42 | /     mad_write_inline!(
43 | |         w,
44 | |         skin,
45 | |         "Use the **๐Ÿก‘** and **๐Ÿก“** arrow keys to scroll, any other key to quit"
46 | |     )
   | |_____^
   = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)

error[E0308]: mismatched types
  --> src/viewer.rs:52:25
   |
52 |     skin.set_headers_fg(Yellow);
   |                         ^^^^^^ expected enum `crossterm::style::enums::color::Color`, found a different enum `crossterm::style::enums::color::Color`
   |
   = note: expected type `crossterm::style::enums::color::Color` (enum `crossterm::style::enums::color::Color`)
              found type `crossterm::style::enums::color::Color` (enum `crossterm::style::enums::color::Color`)
note: Perhaps two different versions of crate `crossterm` are being used?
  --> src/viewer.rs:52:25
   |
52 |     skin.set_headers_fg(Yellow);
   |                         ^^^^^^

error[E0308]: mismatched types
  --> src/viewer.rs:53:22
   |
53 |     skin.bold.set_fg(Yellow);
   |                      ^^^^^^ expected enum `crossterm::style::enums::color::Color`, found a different enum `crossterm::style::enums::color::Color`
   |
   = note: expected type `crossterm::style::enums::color::Color` (enum `crossterm::style::enums::color::Color`)
              found type `crossterm::style::enums::color::Color` (enum `crossterm::style::enums::color::Color`)
note: Perhaps two different versions of crate `crossterm` are being used?
  --> src/viewer.rs:53:22
   |
53 |     skin.bold.set_fg(Yellow);
   |                      ^^^^^^

error[E0308]: mismatched types
  --> src/viewer.rs:54:24
   |
54 |     skin.italic.set_fg(White);
   |                        ^^^^^ expected enum `crossterm::style::enums::color::Color`, found a different enum `crossterm::style::enums::color::Color`
   |
   = note: expected type `crossterm::style::enums::color::Color` (enum `crossterm::style::enums::color::Color`)
              found type `crossterm::style::enums::color::Color` (enum `crossterm::style::enums::color::Color`)
note: Perhaps two different versions of crate `crossterm` are being used?
  --> src/viewer.rs:54:24
   |
54 |     skin.italic.set_fg(White);
   |                        ^^^^^

error[E0308]: mismatched types
  --> src/viewer.rs:55:33
   |
55 |     skin.scrollbar.thumb.set_fg(AnsiValue(178));
   |                                 ^^^^^^^^^^^^^^ expected enum `crossterm::style::enums::color::Color`, found a different enum `crossterm::style::enums::color::Color`
   |
   = note: expected type `crossterm::style::enums::color::Color` (enum `crossterm::style::enums::color::Color`)
              found type `crossterm::style::enums::color::Color` (enum `crossterm::style::enums::color::Color`)
note: Perhaps two different versions of crate `crossterm` are being used?
  --> src/viewer.rs:55:33
   |
55 |     skin.scrollbar.thumb.set_fg(AnsiValue(178));
   |                                 ^^^^^^^^^^^^^^

error[E0277]: `?` couldn't convert the error to `termimad::Error`
  --> src/viewer.rs:68:40
   |
68 |         queue!(w, EnterAlternateScreen)?;
   |                                        ^ the trait `std::convert::From<crossterm::utils::error::ErrorKind>` is not implemented for `termimad::Error`
   |
   = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
   = help: the following implementations were found:
             <termimad::Error as std::convert::From<crossterm::error::ErrorKind>>
             <termimad::Error as std::convert::From<std::io::Error>>
   = note: required by `std::convert::From::from`

error[E0277]: `?` couldn't convert the error to `termimad::Error`
  --> src/viewer.rs:69:32
   |
69 |         queue!(w, cursor::Hide)?; // hiding the cursor
   |                                ^ the trait `std::convert::From<crossterm::utils::error::ErrorKind>` is not implemented for `termimad::Error`
   |
   = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
   = help: the following implementations were found:
             <termimad::Error as std::convert::From<crossterm::error::ErrorKind>>
             <termimad::Error as std::convert::From<std::io::Error>>
   = note: required by `std::convert::From::from`

error[E0277]: `?` couldn't convert the error to `termimad::Error`
  --> src/viewer.rs:70:53
   |
70 |         let _raw_screen = RawScreen::into_raw_mode()?;
   |                                                     ^ the trait `std::convert::From<crossterm::utils::error::ErrorKind>` is not implemented for `termimad::Error`
   |
   = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
   = help: the following implementations were found:
             <termimad::Error as std::convert::From<crossterm::error::ErrorKind>>
             <termimad::Error as std::convert::From<std::io::Error>>
   = note: required by `std::convert::From::from`

error[E0277]: `?` couldn't convert the error to `termimad::Error`
  --> src/viewer.rs:76:32
   |
76 |         queue!(w, cursor::Show)?;
   |                                ^ the trait `std::convert::From<crossterm::utils::error::ErrorKind>` is not implemented for `termimad::Error`
   |
   = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
   = help: the following implementations were found:
             <termimad::Error as std::convert::From<crossterm::error::ErrorKind>>
             <termimad::Error as std::convert::From<std::io::Error>>
   = note: required by `std::convert::From::from`

error[E0277]: `?` couldn't convert the error to `termimad::Error`
  --> src/viewer.rs:77:40
   |
77 |         queue!(w, LeaveAlternateScreen)?;
   |                                        ^ the trait `std::convert::From<crossterm::utils::error::ErrorKind>` is not implemented for `termimad::Error`
   |
   = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
   = help: the following implementations were found:
             <termimad::Error as std::convert::From<crossterm::error::ErrorKind>>
             <termimad::Error as std::convert::From<std::io::Error>>
   = note: required by `std::convert::From::from`

error: aborting due to 13 previous errors

Some errors have detailed explanations: E0277, E0308.
For more information about an error, try `rustc --explain E0277`.
error: Could not compile `clima`.

I am not precisely an expert but it feels like termimad has gone further by dependences then this crate.

Thanks

Feature: (Neo)Vim clima pipe plugin

Description

Vim and Neovim alike offer vertical and horizontal split panes. Out of the box, clima also offers a print option. I think there's some magic in combining the two for a live markdown preview with clima's capabilities.

Does this make sense to expose from the crate, or seem like a viable feature to implement?

Build fails on v0.1 tag

Fresh checkout:

   [...]
   Compiling hyper v0.14.17
   Compiling hyper-tls v0.5.0
   Compiling reqwest v0.11.10
   Compiling clima v0.1.0 (/home/user/clima)
error: there is no argument named `user`
  --> src/open.rs:56:60
   |
56 |                 format!("https://raw.githubusercontent.com/{user}/{repo}/master/README.md")
   |                                                            ^^^^^^

error: there is no argument named `repo`
  --> src/open.rs:56:67
   |
56 |                 format!("https://raw.githubusercontent.com/{user}/{repo}/master/README.md")
   |                                                                   ^^^^^^

error: there is no argument named `user`
  --> src/open.rs:66:60
   |
66 |                 format!("https://raw.githubusercontent.com/{user}/{repo}/{path}")
   |                                                            ^^^^^^

error: there is no argument named `repo`
  --> src/open.rs:66:67
   |
66 |                 format!("https://raw.githubusercontent.com/{user}/{repo}/{path}")
   |                                                                   ^^^^^^

error: there is no argument named `path`
  --> src/open.rs:66:74
   |
66 |                 format!("https://raw.githubusercontent.com/{user}/{repo}/{path}")
   |                                                                          ^^^^^^

error: could not compile `clima` due to 5 previous errors

Environment:

$ cargo --version
cargo 1.56.0 (4ed5d137b 2021-10-04)
$ rustc --version
rustc 1.56.1 (59eed8a2a 2021-11-01)

provide binaries

It would be nice if it could provide binaries, avoiding people to compiling it to test/use.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.