Giter Site home page Giter Site logo

onedata / oneclient Goto Github PK

View Code? Open in Web Editor NEW
5.0 6.0 3.0 26.54 MB

Oneclient is the Onedata command line interface for mounting distributed virtual filesystem on local machines.

Home Page: https://onedata.org

License: MIT License

CMake 4.72% Makefile 1.56% C++ 76.82% C 0.09% Erlang 0.09% Python 15.91% Shell 0.80%

oneclient's Introduction

oneclient

Build Status Coverage Status

Latest stable release: version

oneclient is a command line Onedata client. It provides a POSIX interface to user's files in Onedata system.

User Guide

Building

Dependencies

An up-to-date list of oneclient build dependencies for Ubuntu and Fedora is available in control and oneclient.spec files respectively. For building on Ubuntu Bionic, detailed dependecy list can be found in Travis configuration.

Compilation

export ONEDATA_GIT_URL=https://github.com/onedata
git clone https://github.com/onedata/oneclient.git && cd oneclient

# Initialize submodules
make submodules

# To build debug version
mkdir debug && cd debug
cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DCODE_COVERAGE=ON -DWITH_CEPH=ON -DWITH_SWIFT=ON -DWITH_S3=ON -DWITH_GLUSTERFS=ON -DWITH_WEBDAV=ON -DWITH_XROOTD=ON -DWITH_ONEDATAFS=ON ..
cd ..
cmake --build release

oneclient by default compiles with built-in support for Ceph, S3, OpenStack SWIFT, GlusterFS, WebDAV and XRootD. These drivers can be disabled during compilation by providing the following flags:

  • WITH_CEPH=OFF - disables Ceph support
  • WITH_S3=OFF - disables S3 support
  • WITH_SWIFT=OFF - disables Swift support
  • WITH_GLUSTERFS=OFF - disables GlusterFS support
  • WITH_WEBDAV=OFF - disables WebDAV support
  • WITH_XROOTD=OFF - disables XRootD support
  • WITH_NFS=OFF - disable NFS support

The compiled binary oneclient will be created on path release/oneclient.

Installation

Linux

Oneclient is supported on several major Linux platforms including Ubuntu and CentoOS. To install oneclient using packages simply use the following command:

curl -sS  http://get.onedata.org/oneclient.sh | bash

Oneclient is packaged into self-contained packages, i.e. it has to be installed into it's default prefix /opt/oneclient. The provided packages will do that by default and create symlinks in the /usr prefix to the oneclient binary as well as man pages, configuration file and auto-completion scripts.

Usage

oneclient can be called directly from command line to mount Onedata virtual filesystem on the machine. For most cases basic usage should be sufficient:

oneclient -t <ACCESS_TOKEN> -H <PROVIDER_IP> <MOUNT_PATH>

When connecting to a Oneprovider instance without a valid trusted SSL certificate, -i option must be added.

Mounting selected spaces

oneclient will present under the specified mountpoint all spaces available to the user whose access token was passed on the command line.

It is however possible to limit the spaces which are visible, by providing a white list of the spaces on the command line. This can be achieved using 2 options:

  • --space <name> - every occurence of this option followed by the name of a space will limit the mounted spaces to the specified spaces (e.g. --space Space1 --space Space2)
  • --space-id <id> - every occurence of this option followed by the id of a space will limit the mounted spaces to the specified spaces (e.g. --space-id a58a461875b59988bd16eca960d8130b --space-id bd16eca960d8130ba58a461875b53451)

Direct IO and Proxy IO modes

By default oneclient will automatically try to detect if it can access storage supporting mounted spaces directly, which significantly improves IO performance as all read and write operations go directly to the storage and not via the Oneprovider service.

This feature can be controlled using 2 command line options:

  • --force-proxy-io - disables Direct IO mode, all data transfers will go via Oneprovider service
  • --force-direct-io - forces Direct IO mode, if it is not available for any of mounted spaces, oneclient will fail to mount

In direct io mode, Oneclient will attempt to access the target storage directly on first attempt to read/write a file. This means that very often the first operation will fail with warning Resource temporarily unavailable. However if the storage access is detected, the consecutive operations should work as expected.

Buffering

oneclient employs an in-memory buffer for input and output data blocks, which can significantly improve performance for various types of storages, in particular object based storages such as S3.

If for some reason this local cache is undesired, it can be disabled using --no-buffer option.

Force full block read mode

By default, POSIX read request can return less bytes than requested, especially on network filesystem which can return partial data range which is immediately available and request the remaining bytes assuming the application will run another read request with adjusted offset and size. However, some applications assume that the read always return the requested range or error. In order to enable this behavior in oneclient it necessary to provide the --force-fullblock-read on the command line.

Overriding storage helper parameters

Oneclient allows to override certain storage helper parameters in order to customize direct access to storage from a Oneclient host to the storage. Use cases for this feature include specifying custom mounpoint for POSIX storages, alternate IP addresses for network storages (e.g. available over local network from Oneclient host), etc.

For example, to tell Oneclient that storage with a NFS storage is mounted at /home/user1/nfs the following option should be added to the Oneclient command line: --override 2bede2623303bc2a19696e5817e13c0b:mountPoint:/home/user/nfs. 2bede2623303bc2a19696e5817e13c0b is the storage Id of this storage.

The --override option takes 3 arguments separated by ::

  • storade ID - this is Onedata internal storage Id, which can be obtained from Onepanel administrator interface or using REST API
  • parameter name - this is the name of the storage helper parameter, these are specific to particular type of storage
  • parameter value - a value which should override the value specified in the Oneprovider when registering the storage

Logging

In order to enable a verbose log, oneclient provides a -v flag which takes a single integer argument which determines the log verbosity:

  • -v 0 - (default) only serious errors
  • -v 1 - warnings and errors which are not fatal
  • -v 2 - verbose information on requests and their handling
  • -v 3 - trace function calls along with their arguments
  • -v 4 - binary messages between Oneclient and Oneprovider

Please note that above level 2, the size of the logs can be substantial thus it is necessary to monitor free disk space.

All options

The list of all options can be accessed using:

$ oneclient -h
Usage: oneclient [options] mountpoint

A Onedata command line client.

General options:
  -h [ --help ]                         Show this help and exit.
  -V [ --version ]                      Show current Oneclient version and
                                        exit.
  -u [ --unmount ]                      Unmount Oneclient and exit.
  -c [ --config ] <path> (=/etc/oneclient.conf)
                                        Specify path to config file.
  -H [ --host ] <host>                  Specify the hostname of the Oneprovider
                                        instance to which the Oneclient should
                                        connect.
  -P [ --port ] <port> (=443)           Specify the port to which the Oneclient
                                        should connect on the Oneprovider.
  -i [ --insecure ]                     Disable verification of server
                                        certificate, allows to connect to
                                        servers without valid certificate.
  -t [ --token ] <token>                Specify Onedata access token for
                                        authentication and authorization.
  --space <name>                        Allows to specify which space should be
                                        mounted, where the value of the
                                        argument is space name. Specify
                                        multiple times for multiple spaces. If
                                        not specified, all users spaces will be
                                        mounted.
  --space-id <id>                       Allows to specify which space should be
                                        mounted, where the value of the
                                        argument is space id. Specify multiple
                                        times for multiple spaces. If not
                                        specified, all users spaces will be
                                        mounted.
  -l [ --log-dir ] <path> (=/tmp/oneclient/0)
                                        Specify custom path for Oneclient logs.
  -v [ --verbose-log-level ] <level> (=0)
                                        Specify the verbosity level (0-3) for
                                        verbose logs (only available in debug
                                        builds).

Advanced options:
  --io-trace-log                        Enable detailed IO trace log
                                        (experimental).
  --log-read-write-perf                 Enable read write performance logger.
  --force-proxy-io                      Force proxied access to storage via
                                        Oneprovider for all spaces.
  --force-direct-io                     Force direct access to storage for all
                                        spaces.
  --buffer-scheduler-thread-count <threads> (=1)
                                        Specify number of parallel buffer
                                        scheduler threads.
  --communicator-pool-size <connections> (=10)
                                        Specify number of connections in
                                        communicator pool.
  --communicator-thread-count <threads> (=4)
                                        Specify number of parallel communicator
                                        threads.
  --scheduler-thread-count <threads> (=1)
                                        Specify number of parallel scheduler
                                        threads.
  --storage-helper-thread-count <threads> (=10)
                                        Specify number of parallel storage
                                        helper threads.
  --no-buffer                           Disable in-memory cache for
                                        input/output data blocks.
  --provider-timeout <duration> (=120)  Specify Oneprovider connection timeout
                                        in seconds.
  --storage-timeout <duration> (=120)   Specify I/O storage timeout in seconds.
  --disable-read-events                 Disable reporting of file read events.
  --no-fullblock-read                   Disable fullblock read mode. With this
                                        option read can return less data than
                                        requested in case it is immediately
                                        available and consecutive blocks need
                                        to be prefetched from remote storage.
  --read-buffer-min-size <size> (=4096) Specify minimum size in bytes of
                                        in-memory cache for input data blocks.
  --read-buffer-max-size <size> (=104857600)
                                        Specify maximum size in bytes of
                                        in-memory cache for input data blocks.
  --read-buffer-prefetch-duration <duration> (=1)
                                        Specify read ahead period in seconds of
                                        in-memory cache for input data blocks.
  --write-buffer-min-size <size> (=20971520)
                                        Specify minimum size in bytes of
                                        in-memory cache for output data blocks.
  --write-buffer-max-size <size> (=52428800)
                                        Specify maximum size in bytes of
                                        in-memory cache for output data blocks
                                        of a single opened file handle.
  --read-buffers-total-size <size> (=2097152000)
                                        Specify total maximum size in bytes of
                                        in-memory cache for input data blocks
                                        of all opened file handles. When 0,
                                        read buffers are unlimited.
  --write-buffers-total-size <size> (=1048576000)
                                        Specify total maximum size in bytes of
                                        in-memory cache for output data blocks
                                        of all opened file handles. When 0,
                                        write buffers are unlimited.
  --write-buffer-flush-delay <delay> (=5)
                                        Specify idle period in seconds before
                                        flush of in-memory cache for output
                                        data blocks.
  --min-block-prefetch-size <bytes> (=1048576)
                                        Specify the minimum prefetch block
                                        size.
  --seqrd-prefetch-threshold <fraction> (=1.000000)
                                        Specify the fraction of the file, which
                                        will trigger replication prefetch after
                                        that part of the file is already
                                        replicated (experimental).
  --rndrd-prefetch-threshold <fraction> (=1.000000)
                                        Specify the fraction of the file, which
                                        will trigger replication prefetch after
                                        that part of the file is already
                                        replicated in random blocks across
                                        entire file (experimental).
  --rndrd-prefetch-eval-frequency <count> (=50)
                                        Number of reads from single file handle
                                        which will be skipped before next
                                        evaluation of cluster prefetch. 0 means
                                        that prefetch evaluation will be
                                        performed on each read. (experimental).
  --rndrd-prefetch-block-threshold <count> (=0)
                                        Number of separate blocks after which
                                        replication for the file is triggered
                                        automatically. 0 disables this feature
                                        (experimental).
  --rndrd-prefetch-cluster-window <size> (=20971520)
                                        Cluster window size for prefetching in
                                        [bytes]. When -1 is provided, the
                                        entire file is considered for
                                        prefetching (experimental).
  --rndrd-prefetch-cluster-block-threshold <count> (=5)
                                        Number of separate blocks in a cluster
                                        window around current read, after which
                                        replication of a cluster block (window)
                                        is triggered (experimental).
  --rndrd-prefetch-cluster-window-grow-factor <fraction> (=0.000000)
                                        Prefetch cluster window grow factor,
                                        which enables the prefetch window to
                                        grow proportionally to current
                                        replication progress -
                                        initial_window_size*[1+grow_factor*file
                                        _size*replication_progress/initial_wind
                                        ow_size)] (experimental).
  --prefetch-mode arg (=async)          Defines the type of block prefetch
                                        mode. Possible values are: async, sync.
                                        Default is: async (experimental).
  --cluster-prefetch-threshold-random   Enables random cluster prefetch
                                        threshold selection (experimental).
  --metadata-cache-size <size> (=5000000)
                                        Maximum number of file attributes
                                        cached in the metadata cache.
  --readdir-prefetch-size <size> (=2500)
                                        Specify the size of requests made
                                        during readdir prefetch (in number of
                                        dir entries).
  --dir-cache-drop-after <seconds>      Specify (in seconds) how long should
                                        directories be cached since last
                                        activity. When 0 is provided, the cache
                                        never expires.
  --tag-on-create <name>:<value>        Adds <name>=<value> extended attribute
                                        to each locally created file.
  --tag-on-modify <name>:<value>        Adds <name>=<value> extended attribute
                                        to each locally modified file.
  -r [ --override ] <storageId>:<name>:<value>
                                        Allows to override selected helper
                                        parameters for specific storage, e.g.
                                        'd40f2f63433da7c845886f6fe970048b:mount
                                        Point:/mnt/nfs'
  --emulate-available-space <bytes> (=0)
                                        When set to non-zero value, emulates
                                        available space reported by stat system
                                        call to specified number of bytes.
  --hard-link-count                     Show hard link count properly in stat.
  --enable-archivematica                Enable Archivematica mode.
  --open-shares-mode                    Enable open share mode, in which space
                                        directories list open data shares.
  --show-space-ids                      Show space Id's instead of space names
                                        in the filesystem tree.

FUSE options:
  -f [ --foreground ]         Foreground operation.
  -d [ --debug ]              Enable debug mode (implies -f).
  -s [ --single-thread ]      Single-threaded operation.
  -o [ --opt ] <mount_option> Pass mount arguments directly to FUSE.

Monitoring options:
  --monitoring-type <reporter>        Enables performance metrics monitoring -
                                      allowed values are: graphite.
  --monitoring-level-basic            Sets monitoring reporting level to basic
                                      - default.
  --monitoring-level-full             Sets monitoring reporting level to full.
  --monitoring-period <seconds> (=30) Performance metrics reporting period.
  --graphite-url <url>                Graphite url - required when
                                      monitoring-type is 'graphite', the scheme
                                      can be either tcp or udp and default port
                                      is 2003
  --graphite-namespace-prefix <name>  Graphite namespace prefix.

Configuration

Besides commandline configuration options, oneclient reads options from a global configuration file located at /usr/local/etc/oneclient.conf (/etc/oneclient.conf when installed from the package). Refer to the example configuration file for details on the options.

Environment variables

Some options in the config file can be overridden using environment variables, whose names are capitalized version of the config options. For the up-to-date list of supported environment variables please refer to oneclient manpage.

Running oneclient docker image

Running dockerized oneclient is easy:

docker run -it --privileged onedata/oneclient:21.02.1

To run oneclient image without it automatically mounting the volume specify custom entrypoint:

docker run -it --privileged --entrypoint bash onedata/oneclient:21.02.1

Persisting the token

The application will ask for a token and run in the foreground. In order for oneclient to remember your token, mount volume /root/.local/share/oneclient:

docker run -it --privileged -v ~/.oneclient_local:/root/.local/share/oneclient onedata/oneclient:21.02.1

You can also pass your token in ONECLIENT_ACCESS_TOKEN environment variable:

docker run -it --privileged -e ONECLIENT_ACCESS_TOKEN=$TOKEN onedata/oneclient:21.02.1

If oneclient knows the token (either by reading its config file or by reading the environment variable), it can be run as a daemon container:

docker run -d --privileged -e ONECLIENT_ACCESS_TOKEN=$TOKEN onedata/oneclient:21.02.1

oneclient's People

Contributors

bambooonedata avatar bkryza avatar bwalkowi avatar cwiertniamichal avatar darnik22 avatar jakud avatar kasias999 avatar kliput avatar krzysztof-trzepla avatar kzemek avatar lopiola avatar maciejmazur avatar michalrw avatar mistanisz avatar mpaciore avatar mwrona avatar rslota avatar rwidzisz avatar wgslr avatar xorver avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

oneclient's Issues

Mount with UID and GID

Is there any way to use oneclient with UID and GID options?

It seems the oneclient can not do this and passing these options directly to FUSE does not work.
I tried the following command: oneclient -o uid=1000 -o gid=1000 -H host -t token /mnt/onedata, but this error occurred: fuse: unknown option uid=1000'.

travis builds failing

travis builds seem to be failing for 11 months now, should they be fixed or maybe disabled?

Handshake Error - Mounting Space with oneclient

Hey Folks! We have successfully deployed a oneprovider service on a VM with the getting started scenario 1.0. Now on a different machine we would like to mount the created space (from onepanel. beta.onedata.org) with the onedata client. However when running the command:

oneclient -i -d -H 130.239.81.99 -t MDAxNWxvY2F00aW9uIG9uZXpv...truncated /mnt/onedata/

we are getting the following error:

Connecting to provider '130.239.81.99:443' using session ID: '12305344145841364711'...
E0523 12:38:13.460196  5600 persistentConnection.cc:198] Error during connection: [handshake:11] internal server error
E0523 12:38:13.460464  5600 translator.h:95] Handshake error: internal server error(11)
Connection error: 'internal server error'. Aborting...

Could you help us please debugging this issue? Thanks.

P.S: We are using version onedata/oneprovider:18.02.0-rc3 (same for the client)

approximative file count

On a fresh 18.02.0-rc13, on a fresh space, I turned on "Simple scan" import strategy. Directly on the server, I copied a folder containing 50000 file of size 1MB in the space folder.

Import started as expected, and successfully finished.
But when trying to count files with command:
ls 50000files_1MB/ | wc -l
On server I obtain 50000
On dockerized oneclient (rc13) on my laptop I obtain 49847

I tried to restart update strategy in order to "rescan" the folder but without success.

In the same way, when I do the command:
du -sh 50000files_1MB/
On server I obtain 49GB
On dockerized oneclient (rc13) on my laptop I obtain 0 (very long response time)
On provider admin web GUI I can see 48.8GB

However, when I do the command:
ls 50000files_1MB/ | tail
On both server and oneclient I can see:

1MB_0049992.txt
1MB_0049993.txt
1MB_0049994.txt
1MB_0049995.txt
1MB_0049996.txt
1MB_0049997.txt
1MB_0049998.txt
1MB_0049999.txt
1MB_0050000.txt

So it seems that import process is complete

Automatically finding the nearest provider

At the moment when running oneclient you specify a single provider hostname. However, if there are multiple providers supporting a single space, is there a way for oneclient to automatically find the nearest provider?

Unintuitive --help message.

The current --help message is of a form:

release/oneclient [options] mountpoint

General options:
  -h [ --help ]            print help
  -V [ --version ]         print version
  --config arg             path to user config file
  --authentication arg     authentication type to use for connection with a
                           Provider. Accepted values are 'token' and
                           'certificate'.
  -d [ --debug ]           enable debug output (implies -f)
  --debug_gsi              enable GSI debug output
  --no_check_certificate   disable remote certificate validation
  --proxyio                force ProxyIO

FUSE options:
  -o opt,...               mount options
  -f                       foreground operation
  -s                       disable multi-threaded operation

The key points of interest for a user such as a token and a provider_hostname are not well exposed or not present at all. Apart from synopsis, there is no example proper invocation of oneclient for any of popular use cases.

Compilation

Hi guys,

I'm having a hard time compiling oneclient. On a CentOS 7 I need to explicitly install packages in addition to the ones you nicely document in the README:

  • mock for building an RPM
  • CMake3, which is not in the default official repositories
  • ninja-build is even difficult to find
  • "Intel TBB NOT found!"
  • glog not installed (actually needs glog-devel package)
  • golang-devel
  • libsodium-devel
  • ...

I gave up here. Though I found out only very late that I was by default on the development branch, not the master. The master is a bit different, but also has its issues. I did not try and start over the entire process.

Now, my issue may seem like a rant, but this is not intended. You may want to include documentation about the missing packages or state on which system the configuration is supposed to work. A CentOS 7.2 does not quite cut it here.

Considering that the documentation mentions CMake 2.8, but CMake 3 is required by the CMakeLists.txt (cmake_minimum_required(VERSION 3.0.0)), the documentation may deserve some review anyhow.

Best regards,
Björn

Inconsistent behaviour of oneclient binary and oneclient docker image

When running oneclient command with no arguments one is presented with:

Usage: oneclient [options] mountpoint

General options:
  -h [ --help ]            print help
  -V [ --version ]         print version
  --config arg             path to user config file
  --authentication arg     authentication type to use for connection with a
                           Provider. Accepted values are 'token' and
                           'certificate'.
  -d [ --debug ]           enable debug output (implies -f)
  --debug_gsi              enable GSI debug output
  --no_check_certificate   disable remote certificate validation
  --proxyio                force ProxyIO

FUSE options:
  -o opt,...               mount options
  -f                       foreground operation
  -s                       disable multi-threaded operation

when running oneclient using a docker image, one is presented with interactive mode and asked to enter a token.

In both cases the same behaviour is expected. Printing --help is better then engaging user with interactive session.

memory mapping and fuse

Hey,

I ran into a problem when using oneclient with memory mapping and numpy arrays:
Inside a oneclient mount run the following python script:

import numpy as np

save_array = np.arange(9).reshape(3,3)
np.save("array.npy", save_array, fix_imports=False)

# works
load_array1 = np.load("array.npy", mmap_mode="c", fix_imports=False)

# doesn't work
load_array2 = np.load("array.npy", mmap_mode="r", fix_imports=False)

The error in the last step is:

Traceback (most recent call last):
  File "test.py", line 10, in <module>
    load_array2 = np.load("array.npy", mmap_mode="r", fix_imports=False)
  File "/usr/local/lib/python3.6/dist-packages/numpy/lib/npyio.py", line 450, in load
    return format.open_memmap(file, mode=mmap_mode)
  File "/usr/local/lib/python3.6/dist-packages/numpy/lib/format.py", line 869, in open_memmap
    mode=mode, offset=offset)
  File "/usr/local/lib/python3.6/dist-packages/numpy/core/memmap.py", line 264, in __new__
    mm = mmap.mmap(fid.fileno(), bytes, access=acc, offset=start)
OSError: [Errno 19] No such device

As far as I could find out, the problem might have something to do with fuse:
https://stackoverflow.com/questions/46839807/mmap-no-such-device

Any way to fix this on the oneclient side? E.g. mount options?

oneclient and readonly file system

Hello,
i'm trying to use oneclient to read data from a OneProvider where the data are imported from NFS.

I don't know why but if i try to read data from there i got a Read-only file system error.

ubuntu@oneprovider-pn:~/onedata/PaNOSC-WP6/samples/benchmarks/1m$ cp simulated.sample2d-1m-00979.h5 ~/
cp: error reading 'simulated.sample2d-1m-00979.h5': Read-only file system

i'm using oneclient 20.02.05 and the OneProvider version is 20.02.03. I tried tokens generated as the user space owner ( i also tried different access tokens and oneclient tokens but i have always the same error)

On the other hand I can access the same files from the GUI without problem and i can transfer them to another OneProvider on the same space

thanks
Andrea

Oneclient docker not exposing NFS

After starting a container, passing host and token as env variables, the NFS access point is not exposed to the host system.

$ docker run -it --privileged -e ONECLIENT_PROVIDER_HOST -e ONECLIENT_ACCESS_TOKEN -v ~/.oneclient_local:/root/.local/share/oneclient onedata/oneclient:17.06.0-beta6
Connecting to provider 'oneprovider.cloud.cnaf.infn.it:5555' using session ID: '7800789129593989533'...
Getting configuration...
Oneclient has been successfully mounted in '/mnt/oneclient'.

but logging in the container one can easily see that NFS is not running, and doesn't start

$ docker ps
CONTAINER ID        IMAGE                             COMMAND                  CREATED             STATUS              PORTS               NAMES
40057641ed30        onedata/oneclient:17.06.0-beta6   "/root/run.sh /mnt..."   2 minutes ago       Up 2 minutes                            eloquent_morse
$ docker exec -it 40057641ed30 bash
root@40057641ed30:/tmp# service nfs-kernel-server status\
nfsd not running
root@40057641ed30:/tmp# service nfs-kernel-server start
 * Exporting directories for NFS kernel daemon...                                                              [ OK ]
 * Starting NFS kernel daemon                                                                                  [ OK ]
root@40057641ed30:/tmp# service nfs-kernel-server status
nfsd not running

as confirmed by trying to mount the remote volume on the host

$ docker inspect --format "{{ .NetworkSettings.IPAddress }}" $(docker ps -ql)
172.17.0.2

screen shot 2017-07-21 at 10 48 26
screen shot 2017-07-21 at 10 44 25

Tested on 17.06.0-beta6, OSX version 10.12.5, Docker version 17.06.0-ce-mac19 (18663)

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.