Giter Club home page Giter Club logo

svg2gcode's Introduction

svg2gcode

Build, test, and publish coverage for svg2gcode

Build svg2gcode-cli

Build svg2gcode-web Deploy svg2gcode-web

codecov

Convert vector graphics to g-code for pen plotters, laser engravers, and other CNC machines

Usage

Web interface

Check it out at https://sameer.github.io/svg2gcode. Just select an SVG and click generate!

SVG selected on web interface

Command line interface (CLI)

Input

cargo run --release -- examples/Vanderbilt_Commodores_logo.svg --off 'M4' --on 'M5' -o out.gcode

To convert curves to G02/G03 Gcode commands, use flag --circular-interpolation true.

Vanderbilt Commodores Logo

Output, rendered at https://ncviewer.com

cat out.gcode

Vanderbilt Commodores Logo Gcode

Library

The core functionality of this tool is available as the svg2gcode crate.

Blog Posts

These go into greater detail on the tool's origins, implementation details, and planned features.

FAQ / Interesting details

Reference Documents

svg2gcode's People

Contributors

christoshrousis avatar dependabot[bot] avatar lorenrogers avatar mdiller avatar sameer avatar web-flow avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

svg2gcode's Issues

Conversion yields strange artefacts

Hi Sameer,
i was casually using the converter yesterday but noticed very strange file conversions. Whenever i convert a file it starts adding places that dont even exist in my svg. I cant seem to wrap my head around the problem since a few days ago it worked without a problem.

I attached a picture of how my files look as well as the corresponding SVG and a snippet of the generated G-Code
CouvertTest3
ConversionError
.

Here is a snippet of how the converted GCode looks like:
G21
G90;svg#svg1 > defs#defs1 > rect#rect50
G0 Z1 F5000
G0 X137.88582 Y-174.40669109375
G0 Z5 F5000
G1 X345.7205 Y-174.40669109375006 F7500
G1 X345.7205 Y-209.76203109374995 F7500
G1 X137.88582 Y-209.76203109374995 F7500
G1 X137.88582 Y-174.40669109375 F7500;svg#svg1 > defs#defs1 > rect#rect46
G0 Z1 F5000
G0 X313.95541 Y-105.81734109375004
G0 Z5 F5000
G1 X573.4635999999999 Y-105.81734109375009 F7500
G1 X573.4635999999999 Y-146.12242809375002 F7500
G1 X313.95541 Y-146.12242809375002 F7500
G1 X313.95541 Y-105.81734109375004 F7500;svg#svg1 > defs#defs1 > rect#rect45
G0 Z1 F5000
G0 X317.49094 Y-64.09804109375003
G0 Z5 F5000
G1 X574.8778100000001 Y-64.09804109375006 F7500
G1 X574.8778100000001 Y-101.57470009375002 F7500
G1 X317.49094 Y-101.57470009375002 F7500
G1 X317.49094 Y-64.09804109375003 F7500;svg#svg1 > defs#defs1 > rect#rect44
G0 Z1 F5000
G0 X323.14779999999996 Y-23.085841093750002
G0 Z5 F5000
G1 X602.45498 Y-23.085841093750002 F7500
G1 X602.45498 Y-61.26960709375 F7500
G1 X323.14779999999996 Y-61.26960709375003 F7500
G1 X323.14779999999996 Y-23.085841093750002 F7500;svg#svg1 > defs#defs1 > rect#rect43
G0 Z1 F5000
G0 X318.90516 Y26.41162890624997
G0 Z5 F5000
G1 X670.97578 Y26.411628906249938 F7500
G1 X670.97578 Y-10.443710093750022 F7500
G1 X318.90516 Y-10.443710093750022 F7500
G1 X318.90516 Y26.41162890624997 F7500;svg#svg1 > defs#defs1 > rect#rect41
G0 Z1 F5000
G0 X10.606602000000002 Y170.66141390624998
G0 Z5 F5000
G1 X292.999572 Y170.66141390624995 F7500
G1 X292.999572 Y-215.91989609374997 F7500
G1 X10.606602000000002 Y-215.91989609374997 F7500
G1 X10.606602000000002 Y170.66141390624998 F7500;svg#svg1 > defs#defs1 > rect#rect40
G0 Z1 F5000
G0 X16.263455999999998 Y152.27663790624996
G0 Z5 F5000
G1 X271.529006 Y152.27663790624996 F7500
G1 X271.529006 Y-188.54883209375 F7500
G1 X16.263455999999998 Y-188.54883209375 F7500
G1 X16.263455999999998 Y152.27663790624996 F7500;svg#svg1 > g#layer3 > g#g1 > g#a > g#au > path#ai
G0 Z1 F5000
G0 X3.5105521177896004 Y180.65737233945796
G0 Z5 F5000
G1 X3.5374946046796003 Y180.138091470428 F7500
G1 X3.5501734220396 Y179.716473517133 F7500
G1 X3.5517582742096003 Y179.37346230089298 F7500
G1 X3.5462112916146005 Y179.08841362813803 F7500
G1 X3.5367021785946 Y178.83988929785303 F7500
G1 X3.5264006394896 Y178.60803912391304 F7500
G1 X3.5192688047246006 Y178.37221891274808 F7500
G1 X3.5184763786396003 Y178.1117844707881 F7500
G1 X3.52620253296835 Y177.9434548924481 F7500
G1 X3.5462112916146005 Y177.7941814927881 F7500
G3 X3.5838515306521006 Y177.6651552829756 R0.6454224821019823 F7500
G3 X3.6444721261546005 Y177.55756727417813 R0.5026339845167382 F7500
G3 X3.73104467594085 Y177.47221147384062 R0.4071295715486516 F7500
G3 X3.8465407778296004 Y177.40988188940813 R0.5093163847072916 F7500
G1 X3.9164723798308505 Y177.38764968094816 F7500
G1 X3.9963093078946 Y177.37176953204818 F7500
G1 X4.086051562020851 Y177.36224144270818 F7500
G1 X4.1856991422096 Y177.35906541292817 F7500
G1 X4.313081635373349 Y177.36343245387567 F7500
G1 X4.454331585024599 Y177.37653357671817 F7500
G1 X4.611033843333351 Y177.39836878145564 F7500
G1 X4.784773262469601 Y177.42893806808814 F7500
G1 X4.9755498424333515 Y177.4688369421994 F7500
G1 X5.1833635832246 Y177.51866090937315 F7500
G1 X5.6564419559696 Y177.6464961080182 F7500;svg#svg1 > g#layer3 > g#g1 > g#a > g#au > path#ak

It starts going there weird places at the beginning and randomly throughout the file. I also tried that with different SVG Files that i converted a few days ago without a problem to see if my files have some bug in it but I get the same result as well and a different then a few days ago.

Maybe you have an idea what happened.

Best regards,

Warn when viewbox is missing

I exported SVG from "Affinity photo" (with without viewBox option, so #20 is not the issue in this case)

SVG look like this:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="354px" height="1181px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;">
    <g transform="matrix(0.30102,0,0,1,4.19388,0)">
        <path d="M6,1175L1182,1179L1178,3L6,1L6,1175Z" style="fill:none;stroke:rgb(255,0,57);stroke-width:1.13px;"/>
    </g>
</svg>

so width="354px" height="1181px" it is cca 3x10cm with 300 DPI

i run svg2gcode and specify --dpi=300

cargo run --release -- examples/affinityexport-wo-viewbox.svg --dpi=300 --off 'M4' --on 'M5' -o out.gcode

And it generates:

G21
G90;svg > g > path
M4
G0 X17263.872 Y38396.67199999839
M5
G1 X1035830.93889024 Y0 F300
G1 X1032366.42505728 Y11288621.567999998 F300
G1 X17263.872 Y11307819.904 F300
G1 X17263.872 Y38396.67199999839 F300
M4
M2

Values are very high 1035830.93889024

Also if i run command without DPI option (it should use 96 default)

cargo run --release -- examples/affinityexport-wo-viewbox.svg --off 'M4' --on 'M5' -o out.gcode

But it generates also "nonsense" values:

G21
G90;svg > g > path
M4
G0 X53949.6 Y119989.59999999404
M5
G1 X3236971.684032 Y0 F300
G1 X3226145.078304 Y35276942.39999999 F300
G1 X53949.6 Y35336937.199999996 F300
G1 X53949.6 Y119989.59999999404 F300
M4
M2

Program End Sequence is not exactly same in exported GCODE

I am using web interface

I set "Program End Sequence" to

M05 S0
G1 F3500
G1 X0 Y0
M30

but it generates:

M5 S0
G1 F3500
G1 X0 Y0.0000009999999974752427
M30
M2

It is practicaly the same, but i expect to be exactly same as i write to the settings

Comments in GCode input

Last I checked any comments in the GCode input will not be included in the output.

If it is still happening, fixing it might require changes to the g-code crate as well as svg2gcode.

Offsets do not work anymore

Specifying offests does not work for me.
I remember it working, thus my guess would be that commit 0058925 broke something.

Thanks for this awesome tool!

Feature request: multiple passes

Would be great to be able to specify multiple passes per path, or object. This would be handy for laser-cutting, where multiple passes are common.

Random Artefacts after Conversion of Custom Font

Hi Sameer,

First of all thanks for this awesome Converter and thanks for making it public. I used your converter to convert svg into gcode for my PenPlotter. The issue im facing right now is that i purchased some new Single Line Fonts. Two of them seem to work fine after conversion. But I'm having trouble with one font. After converting to the Single Line Font i start the Converter and get random lines behind words. (see Screenshot). I already tried different words etc. but those artefacts seem to be random. Any Idea what that could be?

I also attached the Screenshot of another font to show that I dont encounter the problem with other fonts. I also asked the lead developer of AxiDraw as well as the support of Quantum Enterprise (wher i got the font from) and they told me that it is not a problem of the font but of the conversion.

I hope you can help me there.

Best regards
Test
TestGcode
TestwithBugs

These are the files and resultes with the other font which dont yield those errors somehow

Different Font without bug Different Font

TestWithoutBugs

Converting from 'Percent' to millimeters is not supported, treating as millimeters

Hi

I exported svg from Affinity Photo and svg looks like:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 354 1181" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;">
    <g transform="matrix(0.30102,0,0,1,4.19388,0)">
        <path d="M6,1175L1182,1179L1178,3L6,1L6,1175Z" style="fill:none;stroke:rgb(255,0,57);stroke-width:1.13px;"/>
    </g>
</svg>

It defines viewBox (in some units, seems like pixels mm x dpi) and width and height in percent

I run your program and get this warning

Converting from 'Percent' to millimeters is not supported, treating as millimeters

And result is 100x100 mm instead correct dimensions

It can be sized by --dimensions but i cannot specify only one dimension because of wrong aspect ratio 100x100 instead of 354x1181

cargo run --release -- examples/affinityexport.svg --off 'M4' --on 'M5' -o out.gcode
[2021-10-02T16:12:21Z WARN  svg2gcode::converter] Converting from 'Percent' to millimeters is not supported, treating as millimeters
[2021-10-02T16:12:21Z WARN  svg2gcode::converter] Converting from 'Percent' to millimeters is not supported, treating as millimeters

Generated output:

G21
G90;svg > g > path
M4
G0 X1.6949152542372883 Y0.5080440304826368
M5
G1 X101.69477966101695 Y0.1693480101608884 F300
G1 X101.35464406779661 Y99.74597798475868 F300
G1 X1.6949152542372883 Y99.91532599491956 F300
G1 X1.6949152542372883 Y0.5080440304826368 F300
M4
M2

your code can produce single-line word?

Hello, thank you for sharing svg2gcode, now there is a problem I hope to get your help,
hello

in SVG generated gcode, using a writer to write out the outline of the word,


轮廓线

obviously this is not the reality of life, what we need in life is a single-line font, I try to use other tools to deal with the single-line, but not ideal, your code can produce single-line word?
hello

Clean up linter warnings

src/main.rs|191 col 58 warning| unused variable: abs
src/code.rs|8 col 5 warning| variant is never constructed: AntiClockwise
src/code.rs|94 col 5 warning| variant is never constructed: UnitsInches
src/code.rs|101 col 5 warning| variant is never constructed: StopSpindle
src/machine.rs|64 col 5 warning| method is never used: distance
src/machine.rs|83 col 5 warning| method is never used: incremental

DTD Detected

If I run svg2gcode.exe and leave this line in my svg:

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

I get the error:

thread 'main' panicked at cli/src/main.rs:271:55:
called Result::unwrap() on an Err value: DtdDetected
note: run with RUST_BACKTRACE=1 environment variable to display a backtrace

If I remove the line it runs fine.

Install for CLI on RPI

I would like to run the CLI on a raspberry pi 4b running Pi OS 64bit. Is there any documentation of the installation of svg2gcode for this purpose?

For running CLI, is there documentation of the parameters?

Thanks!

Straight lines not being converted to gcode

First off I just want to say your tool is brilliant. Thanks so much for developing it!
I'm having one small problem though, that if the svg path does not contain any curves, no gcode will be created.
I have tried this as both open and closed paths and get the same result, and on the web and cli releases.

Any thoughts on why this might be?

web: g-code preview

Would be pretty cool to have a button to preview the g-code for an SVG before downloading it

Generate Line Numbers

In #34, it was pointed out that there should be an option to generate line numbers in the output

Add Basic Documentation & Tests

This project is great, and I'd love to contribute to it! The main issue I have is that nothing is documented or tested.. The README is pretty good, but the code itself doesn't have inline docs, and there's no unit testing.

To get this off the ground, I suggest adding a simple baseline level of documentation for each function stating what it's intended to do, and adding unit tests for the most critical functions.

Track curve control points by curve type

(Moving this out of the README and into an issue)

Smooth curves should not use the control point when the previous curve is not of the same type (quadratic -> smooth cubic, cubic -> smooth quadratic).

This is just a nit, it shouldn't matter if the SVG is correct.

off commands not part of output gcode

i am running the following command with one of the examples:

$ cargo run --release -- examples/Vanderbilt_Commodores_logo.svg --off 'M5' --on 'M3 S1000' -o out.gcode

it generates the following gcode:

G21
G94
G90
M3 S1000
G0 X0 Y0.3942308528309013;svg > g > g > path
G0 X58.644520553969095 Y113.10977699532148
M3 S1000
G1 X43.78657986962459 Y72.10494540682015 F300
G1 X8.218721863111911 Y72.11494512188344 F300
G1 X0.669752000000008 Y72.1169450648961 F300
G1 X34.73061602271223 Y46.238682452624076 F300
G1 X17.206685981491805 Y0 F300
G1 X58.48552118872407 Y24.83729227418418 F300
G1 X92.9503835985998 Y4.149881751262754 F300
G1 X99.86235600472372 Y0 F300
G1 X82.33942595951112 Y46.238682452624076 F300
G1 X116.3992899862155 Y72.1169450648961 F300
G1 X108.85052012230517 Y72.11494512188344 F300
G1 X73.28266211579249 Y72.10514540112143 F300
G1 X61.212710301279216 Y105.9741803204635 F300
G1 X58.64472055317068 Y113.11027698107469 F300
G1 X58.644520553969095 Y113.10977699532148 F300;svg > g > g > path
M3 S1000
G0 X58.64052056993776 Y105.1803229410195
M3 S1000
G1 X45.70857219667466 Y69.49533976618511 F300
G1 X8.218721863111897 Y69.5053394812484 F300
G1 X37.833603635010036 Y47.00398064584731 F300
G1 X22.597664459705626 Y6.799126262408663 F300
G1 X58.48952117275537 Y28.39351094156993 F300
G1 X94.470377530502 Y6.799126262408677 F300
G1 X79.23343835918978 Y47.003980645847335 F300
G1 X108.84932012709574 Y69.50533948124843 F300
G1 X71.35846979752513 Y69.49533976618514 F300
G1 X58.64052056993773 Y105.18032294101954 F300
G1 X58.64052056993776 Y105.1803229410195 F300;svg > g > g > path
M3 S1000
G0 X43.35758158226533 Y67.00581070402998
M3 S1000
G1 X43.35758158226533 Y61.70906163215922 F300
G1 X46.04307086129395 Y61.70906163215922 F300
G1 X54.470737216486455 Y30.691945448865695 F300
G1 X61.83010783651371 Y30.69194544886571 F300
G1 X70.859371790017 Y61.709061632159255 F300
G1 X73.4511614431119 Y61.709061632159255 F300
G1 X73.4511614431119 Y67.00581070403003 F300
G1 X62.293205987739974 Y67.00581070403004 F300
G1 X62.293205987739974 Y61.709061632159276 F300
G1 X65.21119433858917 Y61.709061632159276 F300
G1 X58.58822077872823 Y37.53175055215182 F300
G1 X52.47884516848901 Y61.70906163215927 F300
G1 X55.44173334008978 Y61.70906163215927 F300
G1 X55.44173334008978 Y67.00581070403004 F300
G1 X43.35778158146689 Y67.00581070403004 F300
G1 X43.35758158226533 Y67.00581070402998 F300
M3 S1000
G0 X0 Y0.3942308528309013
M20

as you can see it does not include the "off" commands in its output, any idea why? @sameer
btw: this little tool has singlehandedly gotten me to my first output so thanx a bunch!

cannot build unknown feature `proc_macro_span_shrink`

FYI cannot build today

$ cargo --version
cargo 1.73.0-nightly (694a57956 2023-07-11)

$ cargo build
   Compiling proc-macro-error v1.0.4
error[E0635]: unknown feature `proc_macro_span_shrink`
  --> /home/martin/.cargo/registry/src/index.crates.io-6f17d22bba15001f/proc-macro2-1.0.59/src/lib.rs:92:30
   |
92 |     feature(proc_macro_span, proc_macro_span_shrink)
   |                              ^^^^^^^^^^^^^^^^^^^^^^

For more information about this error, try `rustc --explain E0635`.
error: could not compile `proc-macro2` (lib) due to previous error
warning: build failed, waiting for other jobs to finish...

Multiple tools

Right now, there's only support for one tool.

It would be nice to allow multiple tools with separate settings for each of them:

  • Feed rate
  • Number of passes (#30 )
  • Tool on/off sequence
  • (as a later enhancement) Lateral offset, similar to stroke-alignment.

Tools could be identified using stroke color, although we'd need CSS/style support to do that.

Origin based on svg 0,0

I have only been using your website demo. From there, when I load an SVG made in inkscape, it seems to default X 0 as the farthest left extent of geometry and Y 0 as the farthest bottom extent of geometry with no consideration of file 0,0 reference. In general, that may be a good thing, and what I actually would prefer. The exception is when you need to maintain the 0,0 as designed for alignment or other purposes.

Is there currently a method to maintain file origin as the output origin (not looking to have to custom set the offsets every time)?

Thanks

XY Precision setting

While I have had very good and smooth running results with different controllers running the svg2gcode output, I find the 13 or so decimal places of mm a bit excessive. It would be helpful for output precision settings for a resulting smaller file size, and in cases like mine, a helpful preformatting where I am taking the gcode and handling it a bit before I drip feed it over to a controller.

Line numbers are also sometimes useful.

Thank you for sharing your project and your time.

Reduce travel time by solving open-loop TSP on paths

This is an idea I had from the very beginning, but requires a lot of time investment for questionable reward.

svg2gcode draws paths one by one with a naive DFS traversal of the SVG. There is a better way to do this that could be faster. Each path has a start and an end point. We could solve the open loop traveling salesman problem on the set of all paths to find the ordering that minimizes the total G0 move time.

It is a bit difficult as this is unfortunately not a Euclidean TSP, but some modification thereof due to the path start/stop points.

Fill shape

Hello I want to fill the shape.

Is it possible to draw filled shape?

For example If I draw star image as like example

I want the library to make automatically tool path for fill the star.

Problems with running CLI / batch SVG file processing

Hey Sameer!
Your tool seems to be perfect for what I need in the project, but I need to use it on a larger batch of SVG files (3000), and to do so I need to figure out the CLI use. Unfortunately I can't get it to work - the details are in my question on StackOverflow (https://stackoverflow.com/questions/74193515/svg2gcode-generator-for-laser-cutting-in-rust-how-to-use-it-for-batch-svg-p )
I would be very much thankful for Your answear!
Cheers,
Andrew

Release to Website Instructions

Sameer, I'm interested in installing your code in my own development environment to do a pull-request so I can create an update for you. However, I'm new to Rust and wondered if you have a write-up somewhere on how to install the prerequisites on a "empty" machine with only the OS installed. And then where to install your svg2gcode code project on that machine to get it running. I've cloned your project and see the Github Actions, but I've been unsuccessful it getting them to work to create a github.io website either. So there must be some Github settings that I am missing. Any help would be appreciated. Brian Watt, @1fifoto or [email protected]

Button disabled

Hello Sameer,

I've been using the svg2gcode website a while. It's great!
But today the 'Generate G-code' stays greyed out (disabled). I tested this on multible browsers and computers (macs).
My apologies if I'm doing something wrong here.

All the best,
Elias Heuninck
http://www.formlab.schoolofarts.be/

Support biarc interpolation

Biarc interpolation means GCode can consist of a few G2/G3 moves instead of many G1 moves. This will reduce gcode output size and improve handling of tolerances, assuming the machine better understands its own constraints and how to achieve the desired quality.

It should only be enabled when a flag is specified as many older/simpler machines do not support them.

Raspberry Pi logo fails

I love this project, it's so much faster than any Python implementation I've found.
It even runs on my Raspberry Pi!

I'm trying to create a simple wooden board holding that same Pi, but I noticed it fails on the logo.
The middle berry parts turn into triangle. There's no warnings that I can see.

I've attached the SVG so you can try for yourself.

out.gcode.zip
board_attachment.svg.zip
image

SVG offset

Is there a way to get all of the gcode offset by a certain amount on both X and Y axis?

Without the offset the gcode starts the printer at the very edge of the print bed. Thanks!

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.