Giter Club home page Giter Club logo

xmouse's Introduction

XMouse

Remotely control X11/Wayland via SSH commands generated by your phone or tablet.

Features

  • Authentication via password or private key (ssh-rsa or ecdsa-sha2-nistp256)
  • Keyboard and Mouse emulation
  • Customizable keyboard functions and position, can save multiple layout profiles
  • Volume rocker on device mimics keyboard volume keys
  • Many other special keys, your functionality may vary
  • Send custom ssh commands
  • Tested on Ubuntu Linux, not windows, not mac
  • Minimal design
  • Free with no ads
  • Gyroscope air mouse (Z and Y axis for cursor movement)

Required programs on Linux host machine

Like this project? Donate to me via BitCoin using this address: 17DaqbcEEG3Hn5jBv3sRjPTUUCW1eBp1Wg

xmouse's People

Contributors

bradand avatar cobixewe avatar gialexpro avatar mnzaki avatar poussinou avatar renatocan avatar rohm1 avatar sharptrick avatar stephanritscher avatar thomaswaldmann 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

xmouse's Issues

New default keyboard profile

I thought that the regular profile was very poor so I made a new one and now I wish to see it by default in the application so that others could benefit too.

Old:
http://i.imgur.com/mFLDsjc.png

New:
http://i.imgur.com/XD3Ac2B.png
http://i.imgur.com/383fkT9.png

Code:

Esc<xmousesep>xdotool key Escape<xmousesep>2<xmousesep>#FFe6e6
Minimize<xmousesep>xdotool windowminimize $(xdotool getactivewindow)<xmousesep>3<xmousesep>#9FFF80
Maximize<xmousesep>xdotool windowsize $(xdotool getactivewindow) 100% 100%<xmousesep>3<xmousesep>#FFCC66
X<xmousesep>xdotool key alt+F4<xmousesep>2<xmousesep>#FF9999
F1<xmousesep>xdotool key F1<xmousesep>2<xmousesep>#FFFFFF
F2<xmousesep>xdotool key F2<xmousesep>2<xmousesep>#FFFFFF
F3<xmousesep>xdotool key F3<xmousesep>2<xmousesep>#FFFFFF
F4<xmousesep>xdotool key F4<xmousesep>2<xmousesep>#FFFFFF
F5<xmousesep>xdotool key F5<xmousesep>2<xmousesep>#FFFFFF
F6<xmousesep>xdotool key F6<xmousesep>2<xmousesep>#FFFFFF
F7<xmousesep>xdotool key F7<xmousesep>2<xmousesep>#FFFFFF
F8<xmousesep>xdotool key F8<xmousesep>2<xmousesep>#FFFFFF
F9<xmousesep>xdotool key F9<xmousesep>2<xmousesep>#FFFFFF
F10<xmousesep>xdotool key F10<xmousesep>2<xmousesep>#FFFFFF
F11<xmousesep>xdotool key F11<xmousesep>2<xmousesep>#FFFFFF
F12<xmousesep>xdotool key F12<xmousesep>2<xmousesep>#FFFFFF
+Brightness<xmousesep>xdotool key XF86MonBrightnessUp<xmousesep>3<xmousesep>#e6f7ff
-Brightness<xmousesep>xdotool key XF86MonBrightnessDown<xmousesep>3<xmousesep>#e6f7ff
Super<xmousesep>xdotool key super<xmousesep>2<xmousesep>#80d4ff
+Volume<xmousesep>xdotool key XF86AudioRaiseVolume<xmousesep>3<xmousesep>#B3E6FF
-Volume<xmousesep>xdotool key XF86AudioLowerVolume<xmousesep>3<xmousesep>#B3E6FF
Mute<xmousesep>xdotool key XF86AudioMute<xmousesep>2<xmousesep>#B3E6FF
Alt|Tab<xmousesep>xdotool key alt+Tab<xmousesep>2<xmousesep>#80d4ff
[Prev]<xmousesep>xdotool key XF86AudioPrev<xmousesep>3<xmousesep>#B3E6FF
[Next]<xmousesep>xdotool key XF86AudioNext<xmousesep>3<xmousesep>#B3E6FF
[Play]<xmousesep>xdotool key XF86AudioPlay<xmousesep>2<xmousesep>#B3E6FF
New<xmousesep>xdotool key ctrl+n<xmousesep>2<xmousesep>#E6B3FF
Open<xmousesep>xdotool key ctrl+o<xmousesep>2<xmousesep>#E6B3FF
Save<xmousesep>xdotool key ctrl+s<xmousesep>2<xmousesep>#E6B3FF
Find<xmousesep>xdotool key ctrl+f<xmousesep>2<xmousesep>#E6B3FF
Print<xmousesep>xdotool key ctrl+p<xmousesep>2<xmousesep>#E6B3FF
Select all<xmousesep>xdotool key ctrl+a<xmousesep>4<xmousesep>#E6B3FF
+Zoom<xmousesep>xdotool key ctrl+plus<xmousesep>3<xmousesep>#E6B3FF
-Zoom<xmousesep>xdotool key ctrl+minus<xmousesep>3<xmousesep>#E6B3FF
Undo<xmousesep>xdotool key ctrl+z<xmousesep>2<xmousesep>#F7E6FF
Redo<xmousesep>xdotool key ctrl+y<xmousesep>2<xmousesep>#F7E6FF
Copy<xmousesep>xdotool key ctrl+c<xmousesep>2<xmousesep>#F7E6FF
Crop<xmousesep>xdotool key ctrl+x<xmousesep>2<xmousesep>#F7E6FF
Paste<xmousesep>xdotool key ctrl+v<xmousesep>2<xmousesep>#F7E6FF
PgUp<xmousesep>xdotool key Prior<xmousesep>3<xmousesep>#FFFFFF
PgDown<xmousesep>xdotool key Next<xmousesep>3<xmousesep>#FFFFFF
Delete<xmousesep>xdotool key Delete<xmousesep>4<xmousesep>#FFFFFF
Home<xmousesep>xdotool key Home<xmousesep>2<xmousesep>#FFFFFF
Up<xmousesep>xdotool key Up<xmousesep>2<xmousesep>#FFFFB3
End<xmousesep>xdotool key End<xmousesep>2<xmousesep>#FFFFFF
Backspace<xmousesep>xdotool key BackSpace<xmousesep>4<xmousesep>#FFFFFF
Left<xmousesep>xdotool key Left<xmousesep>2<xmousesep>#FFFFB3
Down<xmousesep>xdotool key Down<xmousesep>2<xmousesep>#FFFFB3
Right<xmousesep>xdotool key Right<xmousesep>2<xmousesep>#FFFFB3
Enter<xmousesep>xdotool key Return<xmousesep>4<xmousesep>#FFFFFF
<Back<xmousesep>xdotool key XF86Back<xmousesep>5<xmousesep>#f2e5d9
Forward><xmousesep>xdotool key XF86Forward<xmousesep>5<xmousesep>#f2e5d9
+<xmousesep>xdotool key ctrl+t<xmousesep>1<xmousesep>#e6ccb3
-<xmousesep>xdotool key ctrl+w<xmousesep>1<xmousesep>#e6ccb3
Reopen Last Tab<xmousesep>xdotool key ctrl+shift+t<xmousesep>4<xmousesep>#e6ccb3
<-<xmousesep>xdotool key ctrl+shift+Tab<xmousesep>2<xmousesep>#e6ccb3
-><xmousesep>xdotool key ctrl+Tab<xmousesep>2<xmousesep>#e6ccb3

Thank you for the great work!

Better keyboard typing

Hello. I love your application, it's very good, very straight forward, but there is one thing that bugs me.

Can you make the keyboard to type in real-time, typing the text directly to the Host without sending the text.

Thank you.

Slow response

I tried the application it's really fantastic bit the response is really slow

Kodi connection

App works great I Raspbian pi! I was wondering if I'm missing something or if this just can't happen... the app works to launch Kodi but once inside Kodi it stops working. I have installed Yatse and Kore and both work fine. Is this just a settings thing in Kodi or does this simply not work within it? Would be an awesome feature!

Storage Keyboard Data in /storage

Hello

As I said in the Play Store: Great App!
I am just thinking of a little feature it could be easily implemented (I suppose). Storing the Keyboard Layouts in /storage or /storage/xmouse/. That way it would be extremely easy to backup carefully customized remotes and if it's, perhaps, in some XML format, it could be edited remotely on PC.

This project seems certainly dead, but just in case...

Cheers,

Invisible mouse display and impossible to use some keys

I could connect everything, but I had some issues:

  • Invisible mouse in any circunstance.
  • Volumen up and down don't work.
  • Other keys don't work.

My SO is Ubuntu 18.04. It may be related to it. In the past, I was using a propietary app called remoteLinux, which didn't give me issues. But I want open apps,

Help debugging

Hi,

I'd like to use this app, but I can't get it working. The ssh connection is set up and running. xdotool is installed and if I use connectBot to connect to the host, set DISPLAY as XMouse does and then use xdotool it works. If I use the buttons of XMouse however nothing seems to happen. Is there any way I can debug this? I already tried running sshd with -dddd but that does only show the hadshakes, etc but no commands.

Mouse lags because commands are too frequent

I find that mouse moves and scrolling is much too fast to be useful. There are too many events per second, even lagging the cursor sometimes (network issues? xdotool execution delay on server?). I do not need that high a temporal resolution.

I believe it is somewhere related to this function:

public void OnXMouseMoved(float dx, float dy,boolean scroll) {

I would like OnXMouseMove triggered much less often (such as less than 10x per second).

[IDEA] Jostick to move the mouse

Hi everyone,
I have been using this application for a while and it is pretty good. However, in my opinion, the mouse control could be improved adding a jostick to move it.

Tags on the git repository

I've started the process to include XMouse on F-Droid and they asked about including tags (https://github.com/bradand/XMouse/tags) on the git repository. They said that having a tag for each new release would be a tremendous help.

Could you tag the current version of app?

Thanks,

[]'s

Renato.

Support command limitation

Currently, XMouse opens an interactive prompt and executes arbitrary commands. In setups where the PC has limited trust in the phone, it would be nice to limit what the phone can do[1] by setting the command="..." option in authorized_keys.

AFAICT, all XMouse does is to invoke xdotool. That tool has a mode for interactive use, so rather than running the equivalent of

$ ssh user@host
$$ export DISPLAY=:0 && unset HISTFILE
$$ xdotool mousemove_relative ...
$$ xdotool click 1

it could do

$ ssh user@host DISPLAY=:0 xdotool -
$$ mousemove_relative ...
$$ click 1

If such operation were supported, a user could trivially limit the scope of what the phone can do to the PC by entering the authorized key as command="DISPLAY=:0 xdotool -" ecdsa-sha2-nist... AAAA..... It might also be beneficial in terms of responsiveness, as the xdotool program would be persistently active and have a persistent connection to the X server.

Practically speaking (ie. with respect to not breaking existing setups), such a feature could be introduced as an option. If enabled, a DISPLAY=:0 xdotool - command (possibly overwritable like the Initialization command) would be sent during the SSH connection process, and no further initialization command would be sent. At any execution event like xdotool key Escape, the leading xdotool part would be stripped off before sending, and commands that don't have that prefix result in an error message saying that this command is not possible in that mode.

[1]: I'm aware that in many situations, keyboard/mouse access can still be escalated, but being limited to injecting input events makes attacks a lot harder, could make them more noticable, and should rule them out when the screen is locked or similar. Especially, note that I have not verified whether xdotool in script mode would allow execution of arbitrary commands, which is something that could be taken up with their issue tracker

Segwit Address

I would suggest you add a segwit address for donations. With the current fees it is difficult to send a small donation. Segwit will at least half the fees.
Thank you

User cannot edit buttons nor commands.

User has no ability to modify existing keyboard buttons or commands. Once created the only option one has in order to change the name/command/size is to delete the button or command and create a new one.
The ability to edit an existing button or command via some sort of long press option would rock.

Hacker's Keyboard Integration

While XMouse is not in "Instant Messenger Style" mode it would be very cool if buttons such as 'tab', 'backspace', directional keys, function keys, and other named keys as well as modified combinations using 'Crtl', 'Alt', 'Shift', and 'Super' on Hacker's Keyboard generated their respective xdotool comands.

App crash after fedora 22 upgrade of openssh-server from 6.8p1-8.fc22.x86_64 to 6.9p1-1.fc22.x86_64

After doing a dnf update on fedora yesterday, I wanted to use this app as my remote control as I usually do but every time I try to connect it crashes with this logcat:

W/art (21931): Unresolved exception class when finding catch block: org.ietf.jgss.GSSException
E/AndroidRuntime(21931): FATAL EXCEPTION: AsyncTask #3
E/AndroidRuntime(21931): Process: com.stripe1.xmouse, PID: 21931
E/AndroidRuntime(21931): java.lang.RuntimeException: An error occured while executing doInBackground()
E/AndroidRuntime(21931): at android.os.AsyncTask$3.done(AsyncTask.java:304)
E/AndroidRuntime(21931): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
E/AndroidRuntime(21931): at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
E/AndroidRuntime(21931): at java.util.concurrent.FutureTask.run(FutureTask.java:242)
E/AndroidRuntime(21931): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
E/AndroidRuntime(21931): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
E/AndroidRuntime(21931): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
E/AndroidRuntime(21931): at java.lang.Thread.run(Thread.java:818)
E/AndroidRuntime(21931): Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lorg/ietf/jgss/Oid;
E/AndroidRuntime(21931): at com.jcraft.jsch.jgss.GSSContextKrb5.create(GSSContextKrb5.java:55)
E/AndroidRuntime(21931): at com.jcraft.jsch.UserAuthGSSAPIWithMIC.start(UserAuthGSSAPIWithMIC.java:125)
E/AndroidRuntime(21931): at com.jcraft.jsch.Session.connect(Session.java:463)
E/AndroidRuntime(21931): at com.stripe1.xmouse.tasks.SshConnectTask.doInBackground(SshConnectTask.java:53)
E/AndroidRuntime(21931): at com.stripe1.xmouse.tasks.SshConnectTask.doInBackground(SshConnectTask.java:1)
E/AndroidRuntime(21931): at android.os.AsyncTask$2.call(AsyncTask.java:292)
E/AndroidRuntime(21931): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
E/AndroidRuntime(21931): ... 4 more
E/AndroidRuntime(21931): Caused by: java.lang.ClassNotFoundException: Didn't find class "org.ietf.jgss.Oid" on path: DexPathList[[zip file "/data/app/com.stripe1.xmouse-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
E/AndroidRuntime(21931): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
E/AndroidRuntime(21931): at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
E/AndroidRuntime(21931): at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
E/AndroidRuntime(21931): ... 11 more
E/AndroidRuntime(21931): Suppressed: java.lang.ClassNotFoundException: org.ietf.jgss.Oid
E/AndroidRuntime(21931): at java.lang.Class.classForName(Native Method)
E/AndroidRuntime(21931): at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
E/AndroidRuntime(21931): at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
E/AndroidRuntime(21931): at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
E/AndroidRuntime(21931): ... 12 more
E/AndroidRuntime(21931): Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
W/ActivityManager( 416): Force finishing activity 1 com.stripe1.xmouse/.MainActivity

After a bit of googling I found this https://stackoverflow.com/questions/28411153/jsch-suppressed-java-lang-classnotfoundexception-lorg-ietf-jgss-oid

I added the recommended line right before MainActivity.session.connect and it didn't crash anymore.

Android 7.1

Looks like something changed in android 7 or 7.1 that breaks the app. Connecting to host works but commands don't get there.

Idea: Always Connection Active

In current version when i minimize Xmouse or screen lock, it automatic disconnect with machine.
So i hope you could implement feature to keep always active connection between mobile and machine, even in background too.

Thanks
Just lil Idea, ...

Minor interface redesign

Hi there!

This is an awesome app and I'm using it to control my raspberry pi home theater. Working great so far!

I just have one little adjustment I'd like to request. It would be great to just anchor the text input box right to the bottom of the mouse screen along with some essential buttons like tab and enter. Then the toggle button would just toggle between the mouse screen and the full range of buttons, but the text input and enter and tab would always been there at the bottom regardless of which screen you're on. Here's a very rough screenshot:

screens

Also, I'd be willing to fund some specific development on it if you were up for that. You can find contact information for me at https://colors.kaelshipman.me/about. Lemme know.

Support new OpenSSH private key format

When a current OpenSSH (7.8) is used to generate a public/private key pair, keys are stored in a new format that can't be read by XMouse and just results in 'invalid privatekey: [b@..." errors.

Please consider supporting the new file format.

As a workaround, keys can be generated with ssh-keygen -m PEM. If supporting the new format is not feasible, please add a note to that effect to the documentation or the error message.

Two-finger scroll also zooms

When doing a two-finger scroll in the webbrowser, the website also zooms (accidentally) as pinch-to-zoom also triggers. I suppose this is intended, however, I am unable to scroll a webpage without accidentally changing the zoom level.

Would it be possible to add a setting to disable the pinch-to-zoom for clumsy people like me? ๐Ÿ˜…

Awesome App you created! Love your work!

First steps

I am a little confused on how to get XMouse set up and working. I am guessing that the idea is to set up a SSH server on the target device, get xdotool running, and then SSH into the target device via the app in the peripheral device. Is this correct?

ConnectBot private key import

There is an error message "Error: invalid privatekey: [B@" when I'm trying to use the key generated with ConnectBot. I've tried the following:

  1. Generate keys in ConnectBot (standard settings, RSA 2048)
  2. Open "Manage Pubkeys menu"
  3. Copy private key
  4. Paste it in a file "private" on /sdcard
  5. Choose that file in XMouse's "Authentication" settings
  6. Try to connect and get "invalid privatekey" error
    In the end I just used new PC-generated keys, but it would be great to use already authorized ConnectBot keys.
    ConnectBot version: 1.8.6
    XMouse version: 2.0.21
    Attached are [with few symbols swapped] keys in question.
    ConnectBot (Android).txt
    ssh-keygen (PC).txt

drag and drop? draw?

is there a way to drag&drop?

or draw something (move while having mouse button pressed)?

it seems like "clicking/holding" on the LMB field always sends a click and immediately a release event also.

strange ssh effects on sleep / screen lock

I am trying 2.0.27 with ecdsa ssh key (see also #34). Was happy that it just worked on first try:

Nov  3 14:28:57 tux sshd[2338]: Accepted publickey for tw from 10.10.10.154 port 37713 ssh2: ECDSA SHA256:KGqgknI25/oAKCF01cp4sIswqIXmYRrQrmbOGie6z1I
Nov  3 14:28:57 tux sshd[2338]: pam_unix(sshd:session): session opened for user tw by (uid=0)
Nov  3 14:28:57 tux systemd-logind[774]: New session 953 of user tw.

Then phone went to sleep and later I tried again and it did not work any more:

Nov  3 14:42:24 tux sshd[2934]: error: Received disconnect from 10.10.10.154 port 37782:3: com.jcraft.jsch.JSchException: Auth fail [preauth]
Nov  3 14:42:24 tux sshd[2934]: Disconnected from authenticating user tw 10.10.10.154 port 37782 [preauth]
Nov  3 14:42:27 tux sshd[2936]: error: Received disconnect from 10.10.10.154 port 37783:3: com.jcraft.jsch.JSchException: Auth fail [preauth]
Nov  3 14:42:27 tux sshd[2936]: Disconnected from authenticating user tw 10.10.10.154 port 37783 [preauth]
...

If i force stop and restart XMouse app after that, it will be able to re-establish the connection.

Ubuntu 18.04 on host, Lineage OS 15.1 on phone.

Needed: Basic setup and debug and operating instructions

Why is the following not in README.md or some place where users can find it? And what to do when you get stuck before functionality is obtained (see the end)?

  1. install xmouse app on phone using f-droid app
  2. access menu stackmenu.manage-hosts
  3. add linux host with (+) icon
  4. fill in the the form with linux hostname, ipaddress, password, etc
  5. go back to the app home screen and press the "disconnected contacts symbol" to connect (why so obscure?)
  6. at this point it appears I am supposed to switch back and forth between keyboard mode and mouse mode by pressing Lower RightCorner icons that look like a mouse and a keyboard. Also obscure.
  7. result: mouse is not moving, keyboard is not typing
  8. Yes, I have xdotools installed and I run PRETTY_NAME="Ubuntu 20.04.2 LTS"

Now what?

Add immersive mode

I use XMouse on a phone with a small screen. I would be nice to utilize all available screen space.
Please, add an option to run XMouse in an immersive mode and an option to hide title bar.

Issue typeing negative numbers

If you try to type '-3' it fails to product output.

It appears that the issue is that the command xdotool type '-3' is trying to interpret -3 as an argument instead of the code to type if the command is changed to xdotool type -- '-3' works as expected.

VX ConnectBot/ConnectBot (ssh-agent) Integration

ConnectBot allows other android apps to use it as an ssh-agent. This means that said apps don't need to actually manage or even store SSH keys itself, which is pretty cool. You only need to trust one app with your SSH keys - e.g. ConnectBot, which already has great UI and infrastructure for managing public keys - and all other apps defer to it for signing the cryptographic-challenges required to initiate an SSH session.

Just to go over that again, it's the external app (e.g. XMouse) that creates the network connection to the remote ssh server, using it's own ssh libraries, it's just that it binds to ConnectBot in order to get a list of available identities (ie public keys), and then later, when the remote ssh server issues a challenge, XMouse will call the auth-agent again to sign the issued ssh cryptographic-challenge.

Source: connectbot/connectbot#13

An app called Agit uses this functionality.
The bit of Agit's code where it does this is here:
https://github.com/rtyley/agit/blob/agit-parent-1.7/agit/src/main/java/com/madgag/agit/ssh/AndroidSshSessionFactory.java

[IDEA] alternative protocol: Synergy

I've found the ssh+xdotool solution for sending inputs has too much latency.
So i'd like to suggest adding support for another protocol like Synergy that works pretty well with regular PCs.

Unable to connect

I'm using this application to connect my raspberry pi 4 b 8gb but it's not able to communicate through it

Better keyboard typing

Hello. I love your application, it's very good, very straight forward, but there is one thing that bugs me.

Can you make the keyboard to type in real-time, typing the text directly to the Host without sending the text.

Thank you.

Removed from Play Store

Unfortunately it seems that the App has been removed from the Play Store, do you know something about this?

writing/drawing mode

With xmouse and stylus I am able to do everything except a handwritten note because the left mouse click can't be locked. Before writing each letter I need to long press on the screen.

Can I request handwriting/drawing mode, it can be done by any of the following.

  1. Lock left mouse button press toggle
  2. Low long press delay, ideally configurable option.

This will allow more natural writing and drawing.

We intend to use this with openboard in classrooms.

Thanks for the very useful app.

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.