GithubHelp home page GithubHelp logo

miriway's Introduction

Miriway

Introducing Miriway

Miriway is a starting point for creating a Wayland based desktop environment using Mir.

At the core of Miriway is miriway-shell, a Mir based Wayland compositor that provides:

  • A "floating windows" window managament policy;
  • Support for Wayland (and via Xwayland) X11 applications;
  • Dynamic workspaces;
  • Additional Wayland support for "shell components" such as panels and docs; and,
  • Configurable shortcuts for launching standard apps such as launcher and terminal emulator.

In addition to miriway-shell, Miriway has:

  • A "terminal emulator finder" script miriway-terminal, that works with most terminal emulators;
  • A launch script miriway to simplify starting Miriway;
  • A default configuration file miriway-shell.config; and,
  • A greeter configuration miriway.desktop so Miriway can be selected at login

Miriway has been tested with shell components from several desktop environments and there are notes on enabling these in miriway-shell.config.

In development

Miriway uses the latest version of Mir available from the mir-team "release" PPA:

sudo apt-add-repository ppa:mir-team/release

Dependencies

Build dependencies:

sudo apt install libmiral-dev

Additional runtime dependencies:

sudo apt install mir-graphics-drivers-desktop

The default install is minimal and provides a basic shell and a default Ctrl-Alt-T command that tries to find a terminal emulator (by using miriway-terminal). If you don't already have a terminal emulator installed, then sudo apt install xfce4-terminal is a simple option.

Building and Installing

mkdir build
cd build
cmake ..
cmake --build .

Installing

sudo cmake --build . -- install

Now you can run with miriway, or select "Miriway" from the login screen.

Keyboard shortcuts using Meta and Ctrl-Alt can be added or amended

These shortcuts are the defaults provided:

Modifiers Key Function Action
Ctrl-Alt T miriway-terminal Terminal emulator
meta Left @dock-left Dock app left
meta Right @dock-right Dock app right
meta Space @toggle-maximized Toggle app maximized
meta Home @workspace-begin First workspace ("Shift" to bring app)
meta End @workspace-end Last workspace ("Shift" to bring app)
meta Page_Up @workspace-up Previous workspace ("Shift" to bring app)
meta Page_Down @workspace-down Next workspace ("Shift" to bring app)
ctrl-alt BackSpace @exit Exit ("Shift" to force if apps are open)

These (and other) defaults are specified in (/usr/local/etc/xdg/xdg-miriway/miriway-shell.config but can be overridden in ~/.config/miriway-shell.config. You should typically copy and edit the default config file. It provides some examples using components from existing desktop environments. (And the corresponding apt install commands)

The "@" commands are internal to miriway-shell, others are commands that could be executed from a terminal.

Example configurations

I've provided an example-configs subdirectory to hold scripts to set up example configurations.

In particular, I've added example-configs/miriway-config-alan_g.bash which sets up some options I've been trying. The script works fine on Ubuntu 23.04, but isn't portable (it uses apt and assumes packages are in the archive). If you have an alternative configuration, please share!

miriway's People

Contributors

alangriffiths avatar mattkae avatar opna2608 avatar raof avatar saviq 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

Watchers

 avatar  avatar  avatar  avatar

miriway's Issues

Facility to customise privileged Wayland extensions

Currently there's a hard-coded list of extensions that are enabled for "shell components", this should be configurable.

For example, when testing new privileged extensions in Mir it would be useful add them without changing Miriway.

(See also #17 - which is different, but related)

[snap] eglstream-kms platform fails to probe

On my crazy desktop (which Mir will happily run NVIDIA/AMD hybrid on Miriway when installed outside the snap):

May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.839765] <information> mirserver: Starting
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.841321] < - debug - > mirserver: Discovered object path for current session = /org/freedesktop/login1/session/_341
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.842330] < - debug - > mirserver: Using logind for session management
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.842402] <information> mircommon: Loading modules from: /snap/miriway/3976/usr/lib/x86_64-linux-gnu/mir/server-platform
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.842431] <information> mircommon: Loading module: /snap/miriway/3976/usr/lib/x86_64-linux-gnu/mir/server-platform/graphics-eglstream-kms.so.22
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.842444] <information> mircommon: Loading module: /snap/miriway/3976/usr/lib/x86_64-linux-gnu/mir/server-platform/graphics-gbm-kms.so.22
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.842450] <information> mircommon: Loading module: /snap/miriway/3976/usr/lib/x86_64-linux-gnu/mir/server-platform/graphics-wayland.so.22
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.842456] <information> mircommon: Loading module: /snap/miriway/3976/usr/lib/x86_64-linux-gnu/mir/server-platform/renderer-egl-generic.so.22
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.842461] <information> mircommon: Loading module: /snap/miriway/3976/usr/lib/x86_64-linux-gnu/mir/server-platform/server-virtual.so.22
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.842465] <information> mircommon: Loading module: /snap/miriway/3976/usr/lib/x86_64-linux-gnu/mir/server-platform/server-x11.so.22
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.842470] <information> mircommon: Loading module: /snap/miriway/3976/usr/lib/x86_64-linux-gnu/mir/server-platform/input-evdev.so.9
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.843137] <information> mirserver: Found display driver: mir:x11 (version 2.17.0)
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.843158] <information> mirserver: (Unsupported by system environment)
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.843166] <information> mirserver: Found display driver: mir:egl-generic (version 2.17.0)
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.843186] <information> mirserver: Found display driver: mir:wayland (version 2.17.0)
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.843191] <information> mirserver: (Unsupported by system environment)
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.843195] <information> mirserver: Found display driver: mir:gbm-kms (version 2.17.0)
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.846387] < - debug - > gbm-kms: Quirks: checking device with devnode: /dev/dri/card1, driver amdgpu
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.873952] < - debug - > gbm-kms: Quirks: checking device with devnode: (null), driver
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.874069] < - debug - > gbm-kms: Quirks: checking device with devnode: (null), driver
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.874162] < - debug - > gbm-kms: Quirks: checking device with devnode: (null), driver
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.874253] < - debug - > gbm-kms: Quirks: checking device with devnode: (null), driver
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.874343] < - debug - > gbm-kms: Quirks: checking device with devnode: (null), driver
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.874479] < - debug - > gbm-kms: Quirks: checking device with devnode: /dev/dri/card0, driver nvidia
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.874484] <information> gbm-kms: Quirks: skipping device /dev/dri/card0 (matches driver quirk nvidia)
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.874489] <information> gbm-kms: Not probing device /dev/dri/card0 due to specified quirk
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.874594] < - debug - > gbm-kms: Quirks: checking device with devnode: (null), driver
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.874705] < - debug - > gbm-kms: Quirks: checking device with devnode: (null), driver
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.874814] < - debug - > gbm-kms: Quirks: checking device with devnode: (null), driver
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.874919] < - debug - > gbm-kms: Quirks: checking device with devnode: (null), driver
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.875014] < - debug - > gbm-kms: Quirks: checking device with devnode: /dev/dri/card2, driver amdgpu
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.889236] < - debug - > gbm-kms: Quirks: checking device with devnode: (null), driver
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.889339] < - debug - > gbm-kms: Quirks: checking device with devnode: (null), driver
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.889437] < - debug - > gbm-kms: Quirks: checking device with devnode: (null), driver
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.889468] <information> mirserver: Driver supports:
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.889475] <information> mirserver:         /devices/pci0000:00/0000:00:01.1/0000:01:00.0/0000:02:00.0/0000:03:00.0/drm/card1 (priority 256)
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.889480] <information> mirserver:         /devices/pci0000:00/0000:00:08.1/0000:13:00.0/drm/card2 (priority 256)
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.889495] <information> mirserver: Found display driver: mir:eglstream-kms (version 2.17.0)
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.891216] < - debug - > eglstream: Found EGLDeviceEXT with device extensions: EGL_EXT_device_drm EGL_EXT_device_drm_render_node
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: libEGL warning: egl: failed to create dri2 screen
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: libEGL warning: egl: failed to create dri2 screen
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: libEGL warning: egl: failed to create dri2 screen
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.901522] < - debug - > eglstream: Failed to initialise EGL: EGL_NOT_INITIALIZED (0x3001)
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.915402] < - debug - > eglstream: Found EGLDeviceEXT with device extensions: EGL_EXT_device_drm EGL_EXT_device_drm_render_node
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.928986] < -warning- > eglstream: Failed to create EGL context: no EGL_STREAM_BIT_KHR configs supported
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.930232] < - debug - > eglstream: Found EGLDeviceEXT with device extensions: EGL_EXT_device_drm EGL_EXT_device_drm_render_node
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.942666] < -warning- > eglstream: Failed to create EGL context: no EGL_STREAM_BIT_KHR configs supported
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.943929] < - debug - > eglstream: Found EGLDeviceEXT with device extensions: EGL_MESA_device_software EGL_EXT_device_drm_render_node
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.943973] <information> eglstream: Failed to query DRM node for EGLDevice: Failed to determine DRM device node path from EGLDevice: EGL_BAD_PARAMETER (0x300>
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.943982] <information> mirserver: Driver supports:
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.943987] <information> mirserver:         /devices/pci0000:00/0000:00:02.1/0000:05:00.0/0000:06:08.0/0000:08:00.0/0000:09:00.0/0000:0a:00.0/drm/card0 (prio>
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.943992] <information> mirserver:         /devices/pci0000:00/0000:00:01.1/0000:01:00.0/0000:02:00.0/0000:03:00.0/drm/card1 (priority 0)
May 06 13:07:27 Etna /usr/libexec/gdm-wayland-session[94972]: [2024-05-06 13:07:27.943998] <information> mirserver:         /devices/pci0000:00/0000:00:08.1/0000:13:00.0/drm/card2 (priority 0)

It's unclear what's happening here. There's nothing in dmesg (that would indicate a userspace/kernel driver version mismatch), it seems it just fails with EGL_NOT_INITIALIZED).

Build succeeded, but error when execute binary

Hello, I have been able to build all the 3 binary files by cmake:
miriway, miriway-shell, miriway-terminal
But when executing miriway-shell under my ubuntu 22.04, following error occured:

ubuntu@ubuntu-2204:~/Miriway/build$ ./miriway-shell
[2023-02-08 19:35:28.146228] mirserver: Starting
[2023-02-08 19:35:28.149397] < - debug - > mirserver: Not trying logind: "DISPLAY" is set and X need not have claimed the VT
[2023-02-08 19:35:28.151078] < - debug - > mirserver: Not using Linux VT subsystem for session management: Failed to find the current VT
[2023-02-08 19:35:28.151251] < - debug - > mirserver: No session management supported
[2023-02-08 19:35:28.152483] VT switch key handler: No VT switching support available: MinimalConsoleServices does not support VT switching
[2023-02-08 19:35:28.153029] mircommon: Loading modules from: /usr/lib/x86_64-linux-gnu/mir/server-platform
[2023-02-08 19:35:28.153105] mircommon: Loading module: /usr/lib/x86_64-linux-gnu/mir/server-platform/server-x11.so.19
[2023-02-08 19:35:28.153829] mircommon: Loading module: /usr/lib/x86_64-linux-gnu/mir/server-platform/graphics-wayland.so.19
[2023-02-08 19:35:28.155538] mircommon: Loading module: /usr/lib/x86_64-linux-gnu/mir/server-platform/graphics-gbm-kms.so.19
[2023-02-08 19:35:28.155819] mircommon: Loading module: /usr/lib/x86_64-linux-gnu/mir/server-platform/input-evdev.so.8
ERROR: ./src/server/graphics/default_configuration.cpp(233): Throw in function virtual const std::vector<std::shared_ptrmir::graphics::DisplayPlatform >& mir::DefaultServerConfiguration::the_display_platforms()
Dynamic exception type: boost::wrapexceptstd::runtime_error
std::exception::what: Exception while creating graphics platform
ERROR: ./src/server/graphics/platform_probe.cpp(190): Throw in function std::vector<std::pair<mir::graphics::SupportedDevice, std::shared_ptrmir::SharedLibrary > > {anonymous}::modules_for_device({anonymous}::ModuleType, const std::vector<std::shared_ptrmir::SharedLibrary >&, const mir::options::ProgramOption&, const std::shared_ptrmir::ConsoleServices&)
Dynamic exception type: boost::wrapexceptstd::runtime_error
std::exception::what: Failed to find any platforms for current system

Seems problem is unable to creating graphics platform, what could cause above error?(Have been able to successfully execute using WAYLAND=wayland-99 miriway)

`DISPLAY` selection racing with `shell-component`s

#2 worked for me on a slower machine, but now it gets set to empty:

$ cat /proc/$( pidof xdg-desktop-portal )/environ | tr '\0' '\n' | grep DISPLAY
DISPLAY=

(NB: the portal is DBus-activated)

It looks like DISPLAY isn't set yet when shell-components are launched.

Theming Issues and Cursor too big in terminal

Hey there i came from the discourse, i am using miriway alongside lxqt, and using qterminal v1.2.0, the cursor size is abnormally big inside the terminal but outside its normal how do i fix that, and is theming of qt and gtk apps a expected feature, i mean in sway one can theme qt and gtk apps, i will look this and maybe even help implement theming

Synapse plugins help buttons are broken (ADV pages)

Originally reported on discourse:

  1. Open Synapse
  2. Go to the preference window
  3. Go to the Plugin tab
  4. Select a plugin (e.g. System Management) and press the circle button “About this plugin”
  5. The uBlock Origin browser plugin blocks the page because it’s in the “Easy list” adv list. If you continue, it brings you to a iyfbodn[dot]com page.

This may not be an issue if this is just “for testing purposes”, but I point it out because I found it.

Snapped swaybg has dependencies on the host system

Running on a test container (which lacks pixbuf loaders in the host):

2023-05-23 09:55:10 - [background-image.c:30] Failed to load background image (Couldn’t recognize the image file format for file “/usr/share/backgrounds/tiles/wood.png”).
2023-05-23 09:55:10 - [main.c:438] Failed to load image: /usr/share/backgrounds/tiles/wood.png

Lock on idle timeout

Miriway properly disables the screens on idle timeout, but remains unlocked. That's kind of worse than not turning the screens off at all :)

Need to trigger the lock on self when the idle timeout is upon us.

The order of things matters some (lock before turning the screens off) to avoid showing session contents on wakeup.

Stop respawning `lockscreen-app` un unlock

If the lockscreen app happens to have a problem and crashes on startup (but after it's able to acquire the screen lock), Miriway will continue respawning it even after the session is unlocked through logind.

This means the session becomes unusable, as unlocking it just triggers another lock with the respawned app.

Miriway causes hang when it's killed.

I'm trying miriway on debian sid, I use Mir palace from ubuntu lunar. It works great, but when I kill it using "killall miriway-shell" or using Ctrl + alt + backspace, my laptop get hung and the fan spins fastly. I even kill the user I used to login but miriway still hang. I dualboot with ubuntu and never face something like that. Any clue ?
Maybe using Mir from ubuntu instead of from debian itself is bad idea ?
Thanks.

Z-order changes when changing workspace

Open an application with multiple fullscreen windows (I've seen this with Firefox and CLion)

Meta-End to go to new workspace
Meta-PgUp to return to previous workspace

Expect: same window on top
Actual: another window on top

(I've not seen this switching to workspaces that have something in them)

Problems running Python GTK

I'm seeing errors that I don't see with GNOME:

  File "/home/alan/CLionProjects/mir-ci/frame/clients/drag_and_drop_demo.py", line 84, in add_item
    pixbuf = Gtk.IconTheme.get_default().load_icon(icon_name, 16, 0)
gi.repository.GLib.GError: gtk-icon-theme-error-quark: Icon 'help-about' not present in theme Adwaita (0)

Missing header.

Hello, When I'm trying to build Miriway, I get this error :

: miral/toolkit_event.h: No such file or directory
   23 | #include <miral/toolkit_event.h>
      |          ^~~~~~~~~~~~~~~~~~~~~~~

What's the possible package that provide that header ? Thanks.

miral/configuration_option.h missing

Hello, I get miral/configuration_option.h no such file or directory error when build this source code,
I used sudo apt install libmiral-dev to install miral, and the version is 3.4, is there anything I have missed
which is mandatory to build source code?

`miriway-unsnap` takes a long time

$ time snap run --shell miriway -x /snap/miriway/52/bin/miriway-unsnap      
+ set -e
+ unset __EGL_VENDOR_LIBRARY_DIRS
+ unset LIBGL_DRIVERS_PATH
+ unset LIBINPUT_QUIRKS_DIR
+ shopt -s extglob
+ export PATH=/home/michal/.pyenv/plugins/pyenv-virtualenv/shims:/home/michal/.pyenv/shims:/home/michal/.pyenv/bin:/usr/lib/ccache:/home/michal/.local/bin:/home/michal/.pyenv/shims:/home/michal/.pyenv/bin:/usr/lib/ccache:/home/michal/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin
+ PATH=/home/michal/.pyenv/plugins/pyenv-virtualenv/shims:/home/michal/.pyenv/shims:/home/michal/.pyenv/bin:/usr/lib/ccache:/home/michal/.local/bin:/home/michal/.pyenv/shims:/home/michal/.pyenv/bin:/usr/lib/ccache:/home/michal/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin
+ exec
snap run --shell miriway -x /snap/miriway/52/bin/miriway-unsnap  9,22s user 0,05s system 100% cpu 9,249 total

Makes it unsuitable for any of the keyboard shortcuts. It's the shopt that takes most of the time here.

Miriway can't find boch-drm_dri.so file

I'm trying to launch miriway in a Qemu virtual machine, but it shows an error saying that it can't find boch-drm_dri.so file. Where is that library available?

Logind logout does not clean up properly

Log in to a Miriway session in GDM, then, in a terminal:

$ busctl call \
  org.freedesktop.login1 \
  /org/freedesktop/login1/session/auto 
  org.freedesktop.login1.Session Terminate

Expected:

  • back to GDM

Current:

  • left on splashscreen / text console until Ctrl+Alt+F1

Ctrl+Alt+Backspace works just fine

Tap to click support and other protocols support.

Hello, it will be nice if tap to click support is added, also does miriway support some protocols so panel, and other wayland-related tool work ?

  • I try waybar but it's not launch, same for other bar (yambar).
  • grimshot screenshot tool not work.
  • mate panel is opened at center of the screen, and it's said that the compositor has no layer-shell support.

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.