Git Product home page Git Product logo

tools's Introduction

Iconify is the most versatile icon framework.

  • Unified icon framework that can be used with any icon library.
  • Out of the box includes 150+ icon sets with more than 200,000 icons.
  • Embed icons in HTML with Iconify Icon web component or components for front-end frameworks.
  • Embed icons in designs with plug-ins for Figma, Sketch and Adobe XD.
  • Add icon search to your applications with Iconify Icon Finder.

For more information visit https://iconify.design/.

Iconify parts

There are several parts of project, some are in this repository, some are in other repositories.

What is included in this repository?

  • Directory packages contains main reusable packages: types, utilities, reusable functions used by various components.
  • Directory iconify-icon contains iconify-icon web component that renders icons. It also contains wrappers for various frameworks that cannot handle web components.
  • Directory components contains older version of icon components that are native to various frameworks, which do not use web component.
  • Directory plugins contains plugins for various frameworks, which generate icons.

Other repositories you might want to look at:

  • Data for all icons is available in iconify/icon-sets repository.
  • Tools for parsing icons and generating icon sets are available in iconify/tools repository.

Iconify icon components

Main packages in this repository are various icon components.

Why are those icon components needed? Iconify icon components are not just yet another set of icon components. Unlike other icon components, Iconify icon components do not include icon data. Instead, icon data is loaded on demand from Iconify API.

Iconify API provides data for over 200,000 open source icons! API is hosted on publicly available servers, spread out geographically to make sure visitors from all over the world have the fastest possible connection with redundancies in place to make sure it is always online.

Why is API needed?

When you use an icon font, each visitor loads an entire font, even if your page only uses a few icons. This is a major downside of using icon fonts. That limits developers to one or two fonts or icon sets.

If you are using typical icon set that is not a font, you still need to bundle all icons used in your application, even ones that visitor does not need.

Unlike icon fonts and components for various icon sets, Iconify icon components dynamically load icon data from Iconify API whenever it is needed.

This makes it possible to have an unlimited choice of icons!

Packages in this repository

There are several types of packages, split in their own directories.

Main packages

Directory packages contains main packages that are reusable by all other packages in this repository as well as third party components.

Main packages:

  • Iconify types - TypeScript types.
  • Iconify utils - common files used by various Iconify projects (including tools, API, etc...).
  • Iconify core - common files used by icon components and plugins.
  • API redundancy - library for managing redundancies for loading data from API: handling timeouts, rotating hosts. It provides fallback for loading icons if main API host is unreachable.

Web component

Directory iconify-icon contains iconify-icon web component and wrappers for various frameworks.

Package Usage
Web component Everywhere
React wrapper React
SolidJS wrapper SolidJS

Frameworks that are confirmed to work with web components without custom wrappers:

  • Svelte.
  • Lit.
  • Ember.
  • Vue 2 and Vue 3, but requires custom config when used in Nuxt (see below).
  • React, but with small differences, such as using class instead of className. Wrapper fixes it and provides types.

Demo

Directory iconify-icon-demo contains demo packages that show usage of iconify-icon web component.

  • React demo - demo using web component with React. Run npm run dev to start demo.
  • Next.js demo - demo for web component with Next.js. Run npm run dev to start demo.
  • Svelte demo with Vite - demo for web component with Svelte using Vite. Run npm run dev to start demo.
  • SvelteKit demo - demo for web component with SvelteKit. Run npm run dev to start the demo.
  • Vue 3 demo - demo for web component with Vue 3. Run npm run dev to start demo.
  • Nuxt 3 demo - demo for web component with Nuxt 3. Run npm run dev to start demo. Requires custom config, see below.
  • Vue 2 demo - demo for web component with Vue 2. Run npm run build to build demo and npm run serve to start it.
  • SolidJS demo - demo using web component with SolidJS. Run npm run dev to start demo.
  • Lit demo - demo for web component with Lit. Run npm run start to start demo.

Nuxt 3 usage

When using web component with Nuxt 3, you need to tell Nuxt that iconify-icon is a custom element. Otherwise it will show few warnings in dev mode.

Example nuxt.config.ts:

export default defineNuxtConfig({
	vue: {
		compilerOptions: {
			isCustomElement: (tag) => tag === 'iconify-icon',
		},
	},
});

This configuration change is not needed when using Vue with @vitejs/plugin-vue.

Iconify icon components

Directory components contains native components for several frameworks:

Package Usage
React component React
Vue component Vue
Svelte component Svelte

Deprecation notice

Components in directory components are slowly phased out in favor of iconify-icon web component. Components are still maintained and supported, but it is better to switch to web component.

Functionality is identical, but web component has some advantages:

  • No framework specific shenanigans. Events and attributes are supported for all frameworks.
  • Works better with SSR (icon is rendered only in browser, but because icon is contained in shadow DOM, it does not cause hydration problems).
  • Better interoperability. All parts of applicaiton reuse same web component, even if those parts are written in different frameworks.

Deprecation status:

  • SVG Framework: can be replaced with iconify-icon.
  • React component: can be replaced with iconify-icon using @iconify-icon/react wrapper.
  • Svelte component: can be replaced with iconify-icon, does not require Svelte specific wrapper.
  • Vue 3 component: can be replaced with iconify-icon, does not require Vue specific wrapper.
  • Vue 2 component: can be replaced with iconify-icon, does not require Vue specific wrapper. Make sure you are not using Webpack older than version 5.
  • Ember component: can be replaced with iconify-icon, does not require Ember specific wrapper.

To import web component, just import it once in your script, as per iconify-icon README file.

Demo

Directory components-demo contains demo packages that show usage of icon components.

  • React demo - demo for React component. Run npm run dev to start demo.
  • Next.js demo - demo for React component with Next.js. Run npm run dev to start demo.
  • Vue demo - demo for Vue component. Run npm run dev to start demo.
  • Nuxt demo - demo for Vue component with Nuxt. Run npm run dev to start demo.
  • Svelte demo with Vite - demo for Svelte component using Vite. Run npm run dev to start demo.
  • SvelteKit demo - demo for SvelteKit, using Svelte component on the server and in the browser. Run npm run dev to start the demo.

Plugins

Directory plugins contains plugins.

Package Usage
Tailwind CSS plugin Tailwind CSS

Demo

Directory plugins-demo contains demo packages that show usage of plugins.

  • Tailwind demo - demo for Tailwind CSS plugin. Run npm run build to build demo, open src/index.html in browser to see result.

Installation, debugging and contributing

See CONTRIBUTING.md.

Sponsors

Documentation

Documentation for all packages is available on Iconify documentation website:

Licence

Iconify is licensed under MIT license.

SPDX-License-Identifier: MIT

Some packages of this monorepo in previous versions were dual-licensed under Apache 2.0 and GPL 2.0 licence, which was messy and confusing. This was later changed to MIT for simplicity.

This licence does not apply to icons. Icons are released under different licences, see each icon set for details. Icons available by default are all licensed under various open-source licences.

ยฉ 2020-PRESENT Vjacheslav Trushkin

tools's People

Contributors

cyberalien avatar dependabot[bot] avatar yunsii 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

Watchers

 avatar  avatar  avatar  avatar

tools's Issues

Enhance figma download flow

Feature request:

Figma images query and download concurrrently

  • Use p-limit to implement, allow user to set concurrency limit
  • Use axios to replace fetch, axios support more advanced features, like timout, system proxy etc.

Polish query and download print log

  • Print loading log with ora
  • Print stat log after import task end, specially highlight icons which download error (It's hard to see how many icons download error for now).

Above is what I want to enhance figma download flow at present, I can create a PR for it if the request is allowd. If more features needed, please let me known.

What to return in a promiseEach?

Hi there,

I'm trying to import the FontAwesome Duotone icons where I'm replacing the classes. I'm using your conversion script (link) but I've added the following then():

}).then(() => {

        // Replace duotone classes
        if (prefix === 'fad') {
            return collection.promiseEach(svg => {
                let string = svg.toString();
                string = string.replace('fa-primary', 'icon-primary').replace(/fa-secondary/g, 'icon-secondary');
                console.log(string);
                svg = new tools.SVG(string);
                return svg;
            });
        }

    }).then(() => {

However, I'm getting the following error:

TypeError: func.then is not a function
    at next (/srv/www/m/mediasoep.nl/vhosts/iconify/htdocs/node_modules/@iconify/tools/src/collection.js:352:22)
    at /srv/www/m/mediasoep.nl/vhosts/iconify/htdocs/node_modules/@iconify/tools/src/collection.js:377:13
    at new Promise (<anonymous>)
    at Collection.promiseEach (/srv/www/m/mediasoep.nl/vhosts/iconify/htdocs/node_modules/@iconify/tools/src/collection.js:326:16)

When I change the return line to return tools.SVGO(svg);, it works correctly. But I don't want to use any tool from the tools to fix this. What do I return instead?

SVGO Vulnerability in 1.x / Dropped support for importing SVG Fonts?

We are seeing vulnerabilities in 1.3.18 for SVGO and that is the last published version with ImportFont which we are currently utilizing. See CVE-2021-33587 for more info.

In the move from 1.x to 2.x it appears the ImportFont functionality (as referenced in the 1.x docs here was removed.

Is there an alternative way to import fonts in 2.x or is this support being dropped?

cheerio issue

Hi. When using cheerio and iconify i get this. I am using github actions, and the way I think it works it does pnpm install and astro check. If I do that on local / github action I get this issue that I provided. Althout I can fix it if i rewrite the import import * as cheerio from 'cheerio'; it works.

Error when evaluating SSR module /Users/martinlejko/Repos/github.com/martinlejko/martinlejko.github.io/astro.config.ts: failed to import "astro-icon" |- file:///Users/martinlejko/Repos/github.com/martinlejko/martinlejko.github.io/node_modules/.pnpm/@[email protected]/node_modules/@iconify/tools/lib/svg/index.mjs:1 import cheerio from 'cheerio'; ^^^^^^^ SyntaxError: The requested module 'cheerio' does not provide an export named 'default' at ModuleJob._instantiate (node:internal/modules/esm/module_job:171:21) at async ModuleJob.run (node:internal/modules/esm/module_job:254:5) at async ModuleLoader.import (node:internal/modules/esm/loader:474:24) at async nodeImport (file:///Users/martinlejko/Repos/github.com/martinlejko/martinlejko.github.io/node_modules/.pnpm/[email protected]_@[email protected]/node_modules/vite/dist/node/chunks/dep-NjL7WTE1.js:52928:15) at async ssrImport (file:///Users/martinlejko/Repos/github.com/martinlejko/martinlejko.github.io/node_modules/.pnpm/[email protected]_@[email protected]/node_modules/vite/dist/node/chunks/dep-NjL7WTE1.js:52786:16) at async eval (/Users/martinlejko/Repos/github.com/martinlejko/martinlejko.github.io/astro.config.ts:9:31) at async instantiateModule (file:///Users/martinlejko/Repos/github.com/martinlejko/martinlejko.github.io/node_modules/.pnpm/[email protected]_@[email protected]/node_modules/vite/dist/node/chunks/dep-NjL7WTE1.js:52844:5)

Is there a way that we change the import line into the compatible one?

Get the absolute path of each file

๐Ÿ‘‹

Is there anyway to get the absolute path of each file when running the forEach() on a collection instance? For example, when running the following, I only get the svg, and name.

return collection.forEach((svg, name) => {
  console.log(
    `Found icon ${name}: ${svg.toString()}\n`
  );
});

I need to have the path of each file for the project I am working on and couldn't find anywhere in the code where I can find the path.

I really appreciate any help on this ๐Ÿ˜€

`title` tag is removed from the body

The title tag is being stripped out during the importDirectory call. This prevents someone from being able to disable the plugin removeTitle during the runSVGO call to keep the title tag.

@Iconify/tools isnot compatible with vite-plugin-dynamic-import

I use vite-plugin-dynamic-import in my Vue+Vite project. and also, the @iconify-vue is used. During the build of project, the following error appears:

'promises' is not exported by __vite-browser-external, imported by node_modules/@iconify/tools/lib/misc/scan.mjs

apparently , the @iconify/tool is not compatible with the plugin.

How can handle this issue?

How to import Iconify JSON into app

What's the recommended way, after exporting a directory of icons to an iconify JSON file, to import that JSON file into your app for use? I would think to do Iconify.addCollection(myCollectionFile); but there's no easy way to import JSON files.

Should the tools export as a javascript file instead for easy module import?

Minify arcs

This might be out of scope but Many icons have duplicate arcs. Look at this path:

M12 19.2c-2.5 0-4.71-1.28-6-3.2.03-2 4-3.1 6-3.1s5.97 1.1 6 3.1a7.232 7.232 0 01-6 3.2M12 5a3 3 0 013 3 3 3 0 01-3 3 3 3 0 01-3-3 3 3 0 013-3m0-3A10 10 0 002 12a10 10 0 0010 10 10 10 0 0010-10c0-5.53-4.5-10-10-10Z

In theory, automatic optimizations could convert it to:

M12 19.2c-2.5 0-4.71-1.28-6-3.2.03-2 4-3.1 6-3.1s5.97 1.1 6 3.1a7.232 7.232 0 01-6 3.2M12 5a3 3 0 010 6 3 3 0 010-6m0-3a10 10 0 000 20 10 10 0 0010-10c0-5.53-4.5-10-10-10Z

Or maybe

M12 19.2c-2.5 0-4.71-1.28-6-3.2.03-2 4-3.1 6-3.1s5.97 1.1 6 3.1a7.232 7.232 0 01-6 3.2M12 5a3 3 0 010 6 3 3 0 010-6m0-3A10 10 0 1022 12c0-5.53-4.5-10-10-10Z

Or even

M12 19.2c-2.5 0-4.71-1.28-6-3.2.03-2 4-3.1 6-3.1s5.97 1.1 6 3.1a7.232 7.232 0 01-6 3.2M12 5a3 3 0 010 6 3 3 0 010-6m0-3a10 10 0 1010 10 10 10 0 00-10-10Z

If this was somehow implemented, it would make Iconify even smaller.

How do I export all icons within an Iconify JSON file to SVG?

I've been going through the docs and I can't find a demonstration for this scenario. I have an Iconify JSON set (solar), and I want to extract all icons to a directory in SVG format. How can I accomplish this? Can someone link me to the documentation that shows this process?

Importing @iconify/tools fails

When importing @iconify/tools into a TypeScript project it fails:

Could not find a declaration file for module '@iconify/tools'. './node_modules/.pnpm/@[email protected]_@[email protected]/node_modules/@iconify/tools/lib/index.mjs' implicitly has an 'any' type.

The simple fix is to add:

"types": "./lib/index.d.ts"

to package.json:

"exports": {
		"./*": "./*",
		".": {
			"require": "./lib/index.cjs",
			"import": "./lib/index.mjs",
			"types": "./lib/index.d.ts"
		},

SVG class doesn't return the name

When importing a single SVG file, the SVG class doesn't return the name of the file.

tools.ImportSVG('path-to-file.svg').then(svg => {
    // SVG was imported
    // Variable 'svg' is instance of SVG class
    console.log(svg.toString());
}).catch(err => {
    console.error(err);
});

The SVG class only has the following methods on it:

  • toString()
  • toMinifiedString()
  • getBody()
  • getDimensions()

And these following two properties:

  • width
  • height

It would be helpful to have a new method getName() or a new property name that will return the relevant SVG file name like the Collection class does.

svgo upgrade to 3.0.2?

Since the current version of svgo doesn't use native stable sort, maybe you could consider upgrading to svgo 3.0.2? It does require node.js 14+, so that may be a breaking change depending on how you run it.
Another bonus is that types are now included since 3.0.2.

https://github.com/svg/svgo/releases

Want to import duplicates and import

I want to disable the duplicates check during the import process and want to import the duplicate items but ignoreDuplicates: false seems has no effect.

tools.ImportDir('directory', {
    ignoreDuplicates: false,
}).then(collection => {
    //
}).catch(err => {
    //
});

How do I disable the ignoreDuplicates check and import everything including the duplicates? Any help would be highly appreciated ๐Ÿ˜€

how i can do about this error?

  • OS: macOS latest
  • Browser: chrome latest
  • Nuxt version: 3.8.1
  • @iconify/tools version - 3.0.7

issue

  1. I used the importDirectory function in nuxt3 and I get this error in the iconify internal function
    แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-12-07 แ„‹แ…ฉแ„’แ…ฎ 6 03 13

  2. so, Below is the part that uses importDirectory

<script setup>
import { importDirectory } from '@iconify/tools'

const iconSet = await importDirectory('../assets/icons', {
  prefix: 'datamaker'
})
console.log(iconSet)
</script>
  1. In the terminal, you'll get an error like this
    แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-12-07 แ„‹แ…ฉแ„’แ…ฎ 6 05 36

Example appears to be out of date

The Example in the README appears to be out of date.

These imports don't exist in utils 2.x:

import { promises as fs } from 'fs';
import { importDirectory } from '@iconify/tools/lib/import/directory';
import { cleanupSVG } from '@iconify/tools/lib/svg/cleanup';
import { runSVGO } from '@iconify/tools/lib/optimise/svgo';
import { parseColors, isEmptyColor } from '@iconify/tools/lib/colors/parse';

What are the new ones? ๐Ÿ˜Š

importFromFigma unexpected fetch error

When I use importFromFigma, it always throw a 404 error, after investigation, the real error is "ReferenceError: fetch is not defined"
image

So, I think this lib should handle error more elegant, and give a specific requirement of fetch. I use cross-fetch for now like:

import 'cross-fetch/polyfill'

Or integrated cross-fetch?

I can make a PR if possible.

Minify z

Some icons are being shipped like this:

m7 10l5 5l5-5H7Z

In many cases this can be simplified to

m7 10l5 5l5-5Z

In the cases where a straight line isn't enough, this could still be simplified to

m7 10l5 5l5-5H7

No matching version found

/var/www # npm i @iconify/tools --save-dev
npm ERR! code ETARGET
npm ERR! notarget No matching version found for @iconify/utils@^2.0.0.
npm ERR! notarget In most cases you or one of your dependencies are requesting
npm ERR! notarget a package version that doesn't exist.

error importing icon

I have one icon with problematic syntax that cleanupCVG is having trouble.

I believe this is the line that is causing error:
<text x="465.1" y="269.5" fill="#bd0728" stroke="#fff" stroke-width="1.6" font-family="helvetica" font-size="25.6" transform="matrix(1.33 0 0 1.33 -363 -108)"><tspan>G</tspan></text>

I am importing it via directory import described here. I'm wondering why try/catch isn't catching it properly.
https://iconify.design/docs/libraries/tools/import/directory.html#examples

Thank you

nuxt  |  ERROR  [unhandledRejection] Unexpected element: <text>
nuxt  | 
nuxt  |   at node_modules/@iconify/tools/lib/svg/cleanup/bad-tags.cjs:53:13
nuxt  |   at isSync (node_modules/@iconify/tools/lib/svg/parse.cjs:65:7)
nuxt  |   at checkNode (node_modules/@iconify/tools/lib/svg/parse.cjs:19:5)
nuxt  |   at next (node_modules/@iconify/tools/lib/svg/parse.cjs:35:9)
nuxt  |   at next (node_modules/@iconify/tools/lib/svg/parse.cjs:33:18)
nuxt  |   at node_modules/@iconify/tools/lib/svg/parse.cjs:37:7
nuxt  |   at isSync (node_modules/@iconify/tools/lib/svg/parse.cjs:66:7)
nuxt  |   at checkNode (node_modules/@iconify/tools/lib/svg/parse.cjs:19:5)
nuxt  |   at next (node_modules/@iconify/tools/lib/svg/parse.cjs:35:9)
nuxt  |   at next (node_modules/@iconify/tools/lib/svg/parse.cjs:33:18)

gu

Special SVG content cannot be cleaned up

import { SVG, cleanupSVG } from "@iconify/tools";

const reallyBadIcon = `<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1649832310065"
  class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1294"
  xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200">
  <defs>
    <style type="text/css">
      @font-face {
        font-family: feedback-iconfont;
        src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype");
      }
    </style>
  </defs>
  <path
    d="M393.142857 548.571429A82.285714 82.285714 0 0 1 475.428571 630.857143v201.142857A82.285714 82.285714 0 0 1 393.142857 914.285714h-201.142857A82.285714 82.285714 0 0 1 109.714286 832v-201.142857A82.285714 82.285714 0 0 1 192 548.571429h201.142857z m438.857143 0A82.285714 82.285714 0 0 1 914.285714 630.857143v201.142857A82.285714 82.285714 0 0 1 832 914.285714h-201.142857A82.285714 82.285714 0 0 1 548.571429 832v-201.142857A82.285714 82.285714 0 0 1 630.857143 548.571429h201.142857z m-438.857143 54.857142h-201.142857a27.428571 27.428571 0 0 0-27.428571 27.428572v201.142857c0 15.140571 12.288 27.428571 27.428571 27.428571h201.142857a27.428571 27.428571 0 0 0 27.428572-27.428571v-201.142857a27.428571 27.428571 0 0 0-27.428572-27.428572z m438.857143 0h-201.142857a27.428571 27.428571 0 0 0-27.428572 27.428572v201.142857c0 15.140571 12.288 27.428571 27.428572 27.428571h201.142857a27.428571 27.428571 0 0 0 27.428571-27.428571v-201.142857a27.428571 27.428571 0 0 0-27.428571-27.428572zM393.142857 109.714286A82.285714 82.285714 0 0 1 475.428571 192v201.142857A82.285714 82.285714 0 0 1 393.142857 475.428571h-201.142857A82.285714 82.285714 0 0 1 109.714286 393.142857v-201.142857A82.285714 82.285714 0 0 1 192 109.714286h201.142857z m438.857143 0A82.285714 82.285714 0 0 1 914.285714 192v201.142857A82.285714 82.285714 0 0 1 832 475.428571h-201.142857A82.285714 82.285714 0 0 1 548.571429 393.142857v-201.142857A82.285714 82.285714 0 0 1 630.857143 109.714286h201.142857z m-438.857143 54.857143h-201.142857a27.428571 27.428571 0 0 0-27.428571 27.428571v201.142857c0 15.140571 12.288 27.428571 27.428571 27.428572h201.142857a27.428571 27.428571 0 0 0 27.428572-27.428572v-201.142857a27.428571 27.428571 0 0 0-27.428572-27.428571z m438.857143 0h-201.142857a27.428571 27.428571 0 0 0-27.428572 27.428571v201.142857c0 15.140571 12.288 27.428571 27.428572 27.428572h201.142857a27.428571 27.428571 0 0 0 27.428571-27.428572v-201.142857a27.428571 27.428571 0 0 0-27.428571-27.428571z"
    p-id="1295"></path>
</svg>`;

(async () => {
  const svg = new SVG(reallyBadIcon);
  console.log(svg.getBody())
  await cleanupSVG(svg);
  console.log(svg.toMinifiedString());
})();

Do I have to delete style manually?

customize the exports field of the package

When I was using the exportJSONPackage API, I encountered a situation where I needed to customize the exports field of the package (add a types). I found that this is fixed, and would like to optimize it or have other considerations? Please let me know

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.