Code Monkey home page Code Monkey logo

im-emoji-picker's Introduction

I'm Emoji Picker

an emoji picker compatible with linux systems using either XServer or Wayland with either Fcitx5 or IBus. You could also say that the im in im-emoji-picker stands for input method ๐Ÿ˜‰. I'm basically using the same systems some people use to type Japanese or Chinese characters with a western keyboard.

This project took heavy inspiration from the "predecessor" https://github.com/GaZaTu/x11-emoji-picker.

Screenshots ๐Ÿ˜ฎ

Recently used emoji (EndeavourOS with KDE (XServer) and Fcitx5):

docs/screenshot2.png

System emoji font support (openSUSE 15.1 with KDE (XServer) and IBus):

docs/screenshot1.png

Kaomoji support (EndeavourOS with KDE (XServer) and Fcitx5):

docs/screenshot3.png

Motivation ๐Ÿค”

Original Motivation (x11-emoji-picker)

I switched from Windows 10 to Linux at work and missed filling my emails with emojis. (the KDE version we use doesn't have the builtin emoji picker yet) (turns out that the KDE emoji picker only copies emojis to clipboard anyway so yea fuck that)

Reason For The New Emoji Picker

The issue with x11-emoji-picker is xdotool as the success rate for it to work is a lottery. Sometimes the target window requires focus to accept input; Sometimes it doesn't support XText so you need to use some hacky clipboard workaround; And sometimes it doesn't work at all. All in all a frustrating experience.

Another issue is with the x11... in the old emoji picker. I won't switch to Wayland anytime soon but having support for it in my emoji picker would've been nice so more people can use it.

Installation ๐Ÿ˜‰

Download the install.sh and run it. It downloads and installs either a .deb (Ubuntu, Debian) or a .rpm (openSUSE, Fedora).

  • Terminal: wget -q https://raw.githubusercontent.com/GaZaTu/im-emoji-picker/master/install.sh && sh install.sh
  • Specifying IMF: sh install.sh -f fcitx5 or sh install.sh -f ibus
  • Installing nightly build: sh install.sh -r tags/nightly-build

Otherwise look at the following options:

"I use Arch btw": run yay -S fcitx5-im-emoji-picker-git or yay -S ibus-im-emoji-picker-git.

Debian: Download a -debian-*.deb from /releases and install it.

  • Terminal: sudo apt install ./im-emoji-picker-*.deb

Ubuntu: Download a -ubuntu-*.deb from /releases and install it.

  • Terminal: sudo apt install ./im-emoji-picker-*.deb

openSUSE: Download a -opensuse-*.rpm from /releases and install it.

  • Terminal: sudo zypper install ./im-emoji-picker-*.rpm

Fedora: Download a -fedora-*.rpm from /releases and install it.

  • Terminal: sudo dnf install ./im-emoji-picker-*.rpm

Note: There are nightly releases aswell which are rebuilt on every push to master

Setup ๐Ÿ˜…

After installing I'm Emoji Picker theres some steps required to make it work.

  • Setup your input method framework (fcitx5 or ibus) if not already done.
    • Install it
    • Setup /etc/environment
    • Add IMF to autostart
  • Add I'm Emoji Picker to your input methods next to your keyboard language.
  • Maybe configure a global shortcut with which to change the current input method and open the emoji picker.
    • Advanced: you could also use the ibus or fcitx5-remote commands to switch the input method directly

With Fcitx5

See https://wiki.archlinux.org/title/Fcitx5.

TLDR (Fcitx5)

Update your /etc/environment file to include the following snippet:

GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx

Create an autostart entry for fcitx5. (works out of the box with some DEs)

With IBus

See https://wiki.archlinux.org/title/IBus.

TLDR (IBus)

Update your /etc/environment file to include the following snippet:

GTK_IM_MODULE=ibus
QT_IM_MODULE=ibus
XMODIFIERS=@im=ibus

Execute ibus-daemon -rxR in your terminal to create an autostart entry.

Execute ibus-setup to open the IBus settings so you can add I'm Emoji Picker to your input methods and maybe change your global shortcut to change the active input method.

Settings ๐Ÿ“

; The path of this file should be: $XDG_CONFIG_HOME/gazatu.xyz/im-emoji-picker.ini
; $XDG_CONFIG_HOME is usually ~/.config
; Can also be opened by pressing F4 while the emoji picker is open.
; most options require you to restart the IMF (fcitx or ibus)

[General]
; `true` = Immediately close the emoji picker after pressing enter.
; Can be done with `false` using shift+enter.
closeAfterFirstInput=false
; `true` = Only gender neutral emojis are visible (people and jobs for example)
gendersDisabled=false
; `not -1` = Any emoji released after this number is hidden
maxEmojiVersion=-1
; `true` = remember recently used kaomoji
saveKaomojiInMRU=false
; `float` = scale the emoji picker based on this number (for example 1.25)
; `` = use QT_SCALE_FACTOR
; (requires IMF restart)
; ALERT: doesn't work currently
scaleFactor=
; `true` = Only skin tone neutral emojis are visible (hands for example)
skinTonesDisabled=false
; `not empty` = Use this (for example: Noto Color Emoji) instead of your system font to display emojis
; (requires useSystemEmojiFont=true)
systemEmojiFontOverride=
; `true` = Use your system emoji font instead of the bundled Twemoji images to display emojis
; (requires IMF restart)
useSystemEmojiFont=false
; `true` = Automatically try to scale or hide emojis based on their system emoji font support
; (May lead to false positives)
useSystemEmojiFontWidthHeuristics=true
; `true` = Use the system Qt theme instead of the builtin dark fusion theme
; (requires IMF restart)
useSystemQtTheme=false
; `0` = Invisible emoji picker window
; (requires IMF restart)
windowOpacity=0.9

; Use something like the following to add custom hotkeys (target = the default key press as seen below):
; [customHotKeys]
; 1\sourceKeyChr=#
; 1\targetKeySeq=shift+tab
; size=1
[customHotKeys]
size=0

; The files to load emoji aliases from.
; Refer to src/res/aliases/github-emojis.ini for an example
; (requires IMF restart)
[emojiAliasFiles]
1\path=:/res/aliases/github-emojis.ini
size=1

Known Issues ๐Ÿ˜…

  • On Debian with Gnome i had to reboot after installing to be able to configure the emoji picker input method

  • When using Wayland it seems like most window managers (Sway, KDE/KWin) force focus on new windows which conflicts with the way im-emoji-picker handles inputs. This results in the emoji picker either flickering or disappearing instantly. A workaround is to manually configure a window rule.

    • Sway: no_focus [title="im-emoji-picker"]
    • KDE/KWin: #13 (comment)
  • When using Wayland both Fcitx5 and IBus might not report the correct text cursor location so the emoji picker can open either in the top left corner or in the center of the screen

  • If the emoji picker is ugly and doesn't follow your system theme (a bit like this) then take a look at https://wiki.archlinux.org/title/Uniform_look_for_Qt_and_GTK_applications.

  • Required font localizations for Kaomoji support:

    • cjk (tc, sc, kr, jp)
    • kannada
    • thai
    • tibetan
    • sinhala

Usage ๐Ÿง

  • ctrl+a = select all text in search input
  • ctrl+c = copy selected emoji
  • ctrl+x = cut selection in search (not really tbh)
  • ctrl+backspace = clear search
  • up, down, left, right = change selection
  • shift+up, shift+down, pgup, pgdown = change selection (faster)
  • escape = close emoji picker
  • return = write emoji to target input
  • shift+return = write emoji to target input and close emoji picker
  • tab = change view (MRU, List, Kaomoji)
  • shift+tab = change view (MRU, List, Kaomoji) (reverse)
  • f4 = open settings file and close emoji picker

Building ๐Ÿค“

Build Dependencies

  • cmake
  • make or ninja
  • gcc or clang

Dependencies

  • Qt5 (core, gui, widgets)
  • fcitx5 or ibus

Example Commands To Install Dependencies (probably)

Arch: sudo pacman -S gcc make cmake qt5-base fcitx5 fcitx5-qt fcitx5-gtk

Debian: sudo apt install gcc make cmake qtbase5-dev fcitx5 fcitx5-frontend-gtk3 fcitx5-frontend-qt5 im-config

openSUSE: sudo zypper install gcc make cmake libqt5-qtbase-devel ibus-devel

CMake

  • mkdir -p build
  • cd build
  • cmake -DCMAKE_BUILD_TYPE=Release ..
  • make -j$(nproc)

Special Thanks ๐Ÿค—

  • boring_nick for testing this on his arch+sway setup during the initial development phase
  • zneix and other contributors for their help on the original x11-emoji-picker

License ๐Ÿ˜ˆ

Project licensed under the MIT license: LICENSE

Emoji graphics licensed by Twitter under CC-BY 4.0 at https://github.com/twitter/twemoji

Emoji list licensed by Unicode at https://github.com/unicode-org/cldr

im-emoji-picker's People

Contributors

gazatu avatar wengxt 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

Watchers

 avatar

im-emoji-picker's Issues

Leads to fcitx5 crash when trying on using it on xdroid (Anbox-like app)

When I use the shortcut to launch im-emoji-picker in one app launched by xdroid but it instantly leads to a fcitx5 segmentation fault. Interestingly, it is so far only in this app but it is the only demanding app I have installed and it uses Unity and uses a lot of resources (will try to test other Unity apps):

I2023-03-21 07:56:39.525837 instance.cpp:1275] Override Enabled Addons: {}
I2023-03-21 07:56:39.525867 instance.cpp:1276] Override Disabled Addons: {}
I2023-03-21 07:56:39.557436 addonmanager.cpp:191] Loaded addon xcb
I2023-03-21 07:56:39.557615 addonmanager.cpp:191] Loaded addon imselector
I2023-03-21 07:56:39.558595 addonmanager.cpp:191] Loaded addon quickphrase
I2023-03-21 07:56:39.560622 addonmanager.cpp:191] Loaded addon m17n
I2023-03-21 07:56:39.564900 addonmanager.cpp:191] Loaded addon keyboard
I2023-03-21 07:56:39.566043 addonmanager.cpp:191] Loaded addon dbus
I2023-03-21 07:56:39.569153 addonmanager.cpp:191] Loaded addon fcitx4frontend
I2023-03-21 07:56:39.569931 addonmanager.cpp:191] Loaded addon dbusfrontend
I2023-03-21 07:56:39.571092 addonmanager.cpp:191] Loaded addon ibusfrontend
I2023-03-21 07:56:39.571547 addonmanager.cpp:191] Loaded addon luaaddonloader
I2023-03-21 07:56:39.572148 addonmanager.cpp:191] Loaded addon xim
E2023-03-21 07:56:39.573750 waylandmodule.cpp:243] Failed to open wayland connection
I2023-03-21 07:56:39.573766 addonmanager.cpp:191] Loaded addon wayland
I2023-03-21 07:56:39.584101 addonmanager.cpp:191] Loaded addon fcitx5imemojipicker
I2023-03-21 07:56:39.584472 addonmanager.cpp:191] Loaded addon clipboard
I2023-03-21 07:56:39.585366 addonmanager.cpp:191] Loaded addon imeapi
I2023-03-21 07:56:39.588185 addonmanager.cpp:191] Loaded addon pinyinhelper
I2023-03-21 07:56:39.588431 addonmanager.cpp:191] Loaded addon waylandim
I2023-03-21 07:56:39.588588 addonmanager.cpp:191] Loaded addon unicode
QStandardPaths: wrong permissions on runtime directory /run/user/1000, 0755 instead of 0700
I2023-03-21 07:56:39.630706 inputmethodmanager.cpp:198] Found 133 input method(s) in addon m17n
I2023-03-21 07:56:39.656468 inputmethodmanager.cpp:198] Found 727 input method(s) in addon keyboard
I2023-03-21 07:56:39.680951 addonmanager.cpp:191] Loaded addon kimpanel
I2023-03-21 07:56:39.695959 addonmanager.cpp:191] Loaded addon classicui
I2023-03-21 07:56:39.696285 addonmanager.cpp:191] Loaded addon notificationitem
I2023-03-21 07:56:39.696507 addonmanager.cpp:191] Loaded addon notifications
I2023-03-21 07:56:39.705714 kimpanel.cpp:112] Kimpanel new owner: 
I2023-03-21 07:56:40.852362 addonmanager.cpp:191] Loaded addon anthy
I2023-03-21 07:56:52.384829 addonmanager.cpp:191] Loaded addon emoji
I2023-03-21 07:56:52.387016 emoji.cpp:221] Trying to load emoji for de from StandardPathFile(fd=11,path=/usr/share/fcitx5/emoji/data/de.dict): 2563 entry(s) loaded.
I2023-03-21 07:56:52.389374 addonmanager.cpp:191] Loaded addon spell
=========================
Fcitx 5.0.22 -- Get Signal No.: 11
Date: try "date -d @1679381826" if you are using GNU date ***
ProcessID: 140006
fcitx5(+0x1520c)[0x5b719183020c]
/usr/lib/libc.so.6(+0x38f50)[0x7ee26d051f50]
/usr/lib/libQt5Gui.so.5(_ZNK7QScreen8geometryEv+0x4)[0x7ee263d62fb4]
/usr/lib/fcitx5/fcitx5imemojipicker.so(_Z19createPointInScreenP7QWidget5QRect+0xe1)[0x7ee264d745ca]
/usr/lib/fcitx5/fcitx5imemojipicker.so(_ZN17EmojiPickerWindow17setCursorLocationEPK5QRect+0x17c)[0x7ee264d77aa2]
/usr/lib/fcitx5/fcitx5imemojipicker.so(+0x178dcd)[0x7ee264d78dcd]
/usr/lib/fcitx5/fcitx5imemojipicker.so(+0x179e43)[0x7ee264d79e43]
/usr/lib/fcitx5/fcitx5imemojipicker.so(+0x179dbd)[0x7ee264d79dbd]
/usr/lib/fcitx5/fcitx5imemojipicker.so(+0x179d0c)[0x7ee264d79d0c]
/usr/lib/libQt5Core.so.5(+0x2bea71)[0x7ee2638bea71]
/usr/lib/libQt5Core.so.5(_ZN6QTimer7timeoutENS_14QPrivateSignalE+0x3f)[0x7ee2638c0fcf]
/usr/lib/libQt5Core.so.5(_ZN7QObject5eventEP6QEvent+0x1d6)[0x7ee2638b1b56]
/usr/lib/libQt5Widgets.so.5(_ZN19QApplicationPrivate13notify_helperEP7QObjectP6QEvent+0x9c)[0x7ee264578b5c]
/usr/lib/libQt5Core.so.5(_ZN16QCoreApplication15notifyInternal2EP7QObjectP6QEvent+0x128)[0x7ee26388df48]
/usr/lib/libQt5Core.so.5(_ZN14QTimerInfoList14activateTimersEv+0x3a3)[0x7ee2638d84b3]
/usr/lib/libQt5Core.so.5(+0x2d8af2)[0x7ee2638d8af2]
/usr/lib/libglib-2.0.so.0(g_main_context_dispatch+0x19b)[0x7ee265330afb]
/usr/lib/libglib-2.0.so.0(+0xb75d9)[0x7ee26538d5d9]
/usr/lib/libglib-2.0.so.0(g_main_context_iteration+0x32)[0x7ee26532e382]
/usr/lib/libQt5Core.so.5(_ZN20QEventDispatcherGlib13processEventsE6QFlagsIN10QEventLoop17ProcessEventsFlagEE+0x6c)[0x7ee2638d8c6c]
/usr/lib/libQt5Core.so.5(_ZN10QEventLoop4execE6QFlagsINS_17ProcessEventsFlagEE+0x12c)[0x7ee2638866ec]
/usr/lib/libQt5Core.so.5(_ZN16QCoreApplication4execEv+0x99)[0x7ee263891219]
/usr/lib/fcitx5/fcitx5imemojipicker.so(_Z8gui_mainiPPc+0x288)[0x7ee264d79152]
/usr/lib/fcitx5/fcitx5imemojipicker.so(_ZSt13__invoke_implIvPFviPPcEJiDnEET_St14__invoke_otherOT0_DpOT1_+0x47)[0x7ee264d9102b]
/usr/lib/fcitx5/fcitx5imemojipicker.so(_ZSt8__invokeIPFviPPcEJiDnEENSt15__invoke_resultIT_JDpT0_EE4typeEOS5_DpOS6_+0x4f)[0x7ee264d90ad8]
/usr/lib/fcitx5/fcitx5imemojipicker.so(_ZNSt6thread8_InvokerISt5tupleIJPFviPPcEiDnEEE9_M_invokeIJLm0ELm1ELm2EEEEvSt12_Index_tupleIJXspT_EEE+0x5f)[0x7ee264d90601]
/usr/lib/fcitx5/fcitx5imemojipicker.so(_ZNSt6thread8_InvokerISt5tupleIJPFviPPcEiDnEEEclEv+0x18)[0x7ee264d8fc2a]
/usr/lib/fcitx5/fcitx5imemojipicker.so(_ZNSt6thread11_State_implINS_8_InvokerISt5tupleIJPFviPPcEiDnEEEEE6_M_runEv+0x1c)[0x7ee264d8f670]
/usr/lib/libstdc++.so.6(+0xd72c3)[0x7ee26d2d72c3]
/usr/lib/libc.so.6(+0x85bb5)[0x7ee26d09ebb5]
/usr/lib/libc.so.6(+0x107d90)[0x7ee26d120d90]

[1]+  Speicherzugriffsfehler  (Speicherabzug geschrieben) LANG=C fcitx5

Other things in fcitx5 work, input methods and QuickPhrase so the problem is most likel really somewhere in the im-emoji-picker engine.
The engine works in all other apps I tried so far.
I'm on X11, Arch Linux x86_64.

Add config key for QoL

Current behavior is <Tab>/<Shift><Tab> changes page and <Left>/<Right> changes suggestion.

I'd like to assign [/] for changing page and ,/. to change suggestion. I'd be happy if you implement this, or direct me to where this is handled, I'll try implementing myself.

Another suggestion is allowing users to merge 3 pages into one with a config key.

[KDE/Wayland/fcitx5] Emoji picker appears and then vanishes immediately

Splitting this out from the conversation in #11:

ok the only thing i can imagine at this point is that there must be some kind of bug with KDE (wayland) + fcitx5 because fcitx immediately sends the deactivate event after the window opens (which is obviously wrong) and then it goes dark.
if i start the fcitx daemon with QT_QPA_PLATFORM=xcb it kinda works but that's obviously no solution.

Originally posted by @GaZaTu in #11 (comment)

I filed an upstream issue with @ fcitx/fcitx5#887, and the maintainer responded:

That's however, not a solvable issue from fcitx side.

Mainly it's because that the emoji picker itself embeds Qt and it will grab the focus away on wayland. that's why you see the deactivate event.


At this point, it's not clear to me where the issue lies - is this a kwin thing? Why do we not see the same behavior under X11?

For reference, here's my system configuration:

KWin version: 5.27.9
Qt Version: 5.15.10
Qt compile version: 5.15.10
XCB compile version: 1.16

fcitx version: 5.1.1
Kernel: 6.5.9

I also tried using latest HEAD from both fcitx + im-emoji-picker.

Popup doesn't show up

The input method popup won't show up when triggering the emoji picker.

For reference, when using another language (Chinese/Pinyin) the picker shows fine:

image

But when pressing the shortcut for im-emoji-picker, it just flashes for a moment and disappears. I'm using fcitx, and I don't see anything interesting in its output:

> fcitx5
I2024-01-19 17:00:08.123764 instance.cpp:1323] Override Enabled Addons: {}
I2024-01-19 17:00:08.123801 instance.cpp:1324] Override Disabled Addons: {}
I2024-01-19 17:00:08.127689 xcbconnection.cpp:185] Connecting to X11 display, display name::0.
I2024-01-19 17:00:08.127764 xcbconnection.cpp:190] X11 display: :0 is xwayland.
I2024-01-19 17:00:08.127828 addonmanager.cpp:193] Loaded addon xcb
I2024-01-19 17:00:08.129474 addonmanager.cpp:193] Loaded addon quickphrase
I2024-01-19 17:00:08.129585 addonmanager.cpp:193] Loaded addon imselector
I2024-01-19 17:00:08.135665 addonmanager.cpp:193] Loaded addon keyboard
I2024-01-19 17:00:08.137215 addonmanager.cpp:193] Loaded addon dbus
I2024-01-19 17:00:08.148126 addonmanager.cpp:193] Loaded addon fcitx4frontend
I2024-01-19 17:00:08.149146 addonmanager.cpp:193] Loaded addon ibusfrontend
I2024-01-19 17:00:08.149476 addonmanager.cpp:193] Loaded addon xim
I2024-01-19 17:00:08.150787 addonmanager.cpp:193] Loaded addon wayland
I2024-01-19 17:00:08.151252 addonmanager.cpp:193] Loaded addon dbusfrontend
I2024-01-19 17:00:08.151499 addonmanager.cpp:193] Loaded addon clipboard
I2024-01-19 17:00:08.164216 addonmanager.cpp:193] Loaded addon fcitx5imemojipicker
I2024-01-19 17:00:08.164484 addonmanager.cpp:193] Loaded addon waylandim
I2024-01-19 17:00:08.164630 addonmanager.cpp:193] Loaded addon unicode
I2024-01-19 17:00:08.165130 addonmanager.cpp:193] Loaded addon pinyinhelper
I2024-01-19 17:00:08.209491 inputmethodmanager.cpp:198] Found 737 input method(s) in addon keyboard
I2024-01-19 17:00:08.223497 addonmanager.cpp:193] Loaded addon kimpanel
I2024-01-19 17:00:08.223668 addonmanager.cpp:193] Loaded addon virtualkeyboard
I2024-01-19 17:00:08.253378 classicui.cpp:75] Created classicui for x11 display::0
I2024-01-19 17:00:08.253417 classicui.cpp:96] Created classicui for wayland display:
I2024-01-19 17:00:08.253435 addonmanager.cpp:193] Loaded addon classicui
I2024-01-19 17:00:08.253710 addonmanager.cpp:193] Loaded addon notificationitem
I2024-01-19 17:00:08.254003 addonmanager.cpp:193] Loaded addon notifications
I2024-01-19 17:00:08.254314 kimpanel.cpp:116] Kimpanel new owner: 
I2024-01-19 17:00:08.254331 virtualkeyboard.cpp:223] VirtualKeyboard new owner: 
I2024-01-19 17:00:08.254347 portalsettingmonitor.cpp:91] A new portal show up, start a new query.
E2024-01-19 17:00:08.262800 portalsettingmonitor.cpp:115] DBus call error: org.freedesktop.portal.Error.NotFound Requested setting not found
I2024-01-19 17:00:09.273620 addonmanager.cpp:193] Loaded addon punctuation
I2024-01-19 17:00:09.760561 addonmanager.cpp:193] Loaded addon pinyin
I2024-01-19 17:00:09.762594 addonmanager.cpp:193] Loaded addon cloudpinyin
I2024-01-19 17:00:51.157730 addonmanager.cpp:193] Loaded addon fullwidth
I2024-01-19 17:00:51.160281 addonmanager.cpp:193] Loaded addon chttrans
I2024-01-19 17:00:51.890119 addonmanager.cpp:193] Loaded addon spell

Not showing up in Fedora 38

I have properly setup fcitx5. Then I ran wget -q https://raw.githubusercontent.com/GaZaTu/im-emoji-picker/master/install.sh && sh install.sh -f fcitx5 -r tags/nightly-build and it successfully installed. But I can't find it in fcitx5. I also did a reboot but it didn't work either.

Screenshot_20230728_141046

[Feature request] Implement as a fcitx module instead of engine

When itโ€™s implemented as an engine, it means user have to switch to use it.

Instead , implement it as a module allows you to use it inconjunction with any other engines.

You may want to check https://github.com/fcitx/fcitx5/tree/master/src/modules/quickphrase (quickphrase already have some built in emoji, btw)

Also, while you can use your own window, it wonโ€™t work if youโ€™re using wayland.

Iโ€™d suggest you use fcitx to display instead of using your own window.

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.