Giter Club home page Giter Club logo

winuiex's Introduction

WinUIEx

WinUI Extensions

image

A set of extension methods and classes to fill some gaps in WinUI 3, mostly around windowing, authentication and helpers to simplify code.

Watch WinUIEx covered in the On .NET Live show:

Watch the video

NuGet Package:

Features

And more to come...

Example of WinUIEx production apps

Functional Test App

winuiex_demo.mp4

Custom Backdrops:

custom_backdrop_demo.mp4

winuiex's People

Contributors

bartcubbins avatar d2dyno1 avatar dotmorten avatar jay-o-way avatar kmgallahan avatar mysterious-dev avatar r-o-b-o-t-o 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  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

winuiex's Issues

Window Transparency

Thanks for creating this incredibly useful project

A really useful feature missing from WinUI 3 is window background transparency. It would be very useful if you could add support for this.
Perhaps similar to Backdrop.Mica & Backdrop.Acrylic --> Backdrop.Transparent

While not officially supported someone has managed to do it here, however it is ridiculously over complicated.
Official support tracked on Productboard and Github but i doubt it will occur any time soon.

Please provide option to add additional icons buttons to task bar

Dear Morten,

I am using your library in my project and it is of great help. It would be good to add a feature where you can add additional icons to task bar like Change Theme, User Feedback, etc. (Similar to Visual Studio Installer Screen).

Let me know your thoughts. If you need help, I am willing to support it in WinUIEx.

-Munish

WinUIEx 1.3.0 DPI handling causing a crash when moving a window between monitors

After having successfully used WinUIEx in a WinUI 3 app with earlier versions I updated to v1.3.0. At first everything worked smooth and moving the app window between monitors worked as expected. However a got reports from a fellow developer that this version was causing crashes when moving the app windows between monitors. I also tested the app with a different set of monitors and then I got the crash behavior when moving between windows. There seems to be some edge case in these situations. We are using Windows 11.

I made an app with the Blank App, Packaged (WinUI 3 in Desktop) template. Spent 5 minutes adding a nuget package reference to WinUIEx 1.3.0. Also changed the MainWindow to use the WindowEx class instead of the Window class. Then I got this same behavior with this minimal app.

I posted this test app on my GitHub account:
https://github.com/FinnurHrafn/AppWinUIExTest

Make AppWindow functionality more discoverable and usable by providing more passthrough APIs on WindowEx

Per microsoft/TemplateStudio#4529 (comment), when comparing WindowEx vs. Window extensions, it appeared that WindowEx on its own was less capable than the extensions. Intellisense and the documentation didn't help me discover that the AppWindow property had many equivalents to what the extensions provide.

If the guidance is to use WindowEx or the extension methods but not both, it would be more discoverable and usable to promote more of AppWindow's functionality on WindowEx itself. You already provide some convenience passthrough APIs like

/// <summary>
/// Gets or sets a value indicating whether this window is shown in task switchers.
/// </summary>
public bool IsShownInSwitchers
{
get => _manager.AppWindow.IsShownInSwitchers;
set => _manager.AppWindow.IsShownInSwitchers = value;
}
and
/// <summary>
/// Gets the presenter for the current window
/// </summary>
/// <seealso cref="PresenterKind"/>
/// <seealso cref="PresenterChanged"/>
public Microsoft.UI.Windowing.AppWindowPresenter Presenter
{
get => _manager.AppWindow.Presenter;
}
.

Have you considered exposing other basics like Show, Hide, Resize, Id, Icon, etc. directly on WindowEx as well to improve discoverability and usability? I would expect these would be simple passthroughs as you've done already with the above APIs.

Extend documentation on how to change window base class in XAML

I got the following error after changing the base class to WindowEx in the code-behind:

error CS0263: Partial declarations of 'MainWindow' must not specify different base classes

Took me a few minutes to figure out that I would need to change the tag name in XAML, as well:

<winuiex:WindowEx
    xmlns:winuiex="using:WinUIEx">
</winuiex:WindowEx>

I suggest to extend the documentation by mentioning this fact and ideally including some sample code to make this clearer to users.

Using WebAuthenticator on Google shows "response_type is missing" error

Using WebAuthenticator on Google shows "response_type is missing" error.

My codes is shown below.

const string authorizationURI = "https://accounts.google.com/o/oauth2/v2/auth";
const string callBackURI = "xxxxxx://loggedin";
WebAuthenticatorResult result = await WinUIEx.WebAuthenticator.AuthenticateAsync(new Uri(authorizationURI), new Uri(callBackURI));

Error message in web browser(MS Edge version 101.0.1210.32 64 bit)

Authorization Error
Error 400: invalid_request
Required parameter is missing: response_type

IsFullScreen

It would be nice to have an additional extension, to check if the current view IsFullScreen.
This would compensate the lack of ApplicationView in WinUI desktop apps.

Would it be possible to have a Maui splash screen sample?

Hi!

I started learning a bit of Maui and got stuck with the idea of creating a splash screen worth start debugging. Alas it seem to be a bit complicated to start from that route, and so found this library of yours.

I read https://dotmorten.github.io/WinUIEx/concepts/Maui.html but I'm not sure how could I use it to create https://github.com/dotMorten/WinUIEx/blob/main/docs/concepts/Splashscreen.md on a Maui app (any page for static, video, lottie whatever example, what there is).

Would it be possible to have a sample for this? Regardless, sponsored coffee for the the benefit of the larger community. :)

Exception at startup

First, thank you for sharing. It was working great!

So I had an issue with VS2022, which involved me having to re-install and fall back to 17.0.2 (could not create WinUI 3 projects in 17.0.4).

Anyway, I rolled back, got everything working again, but your extension methods throw exceptions now.

Call Stack:
`

<title>Document</title>
ย  Name Value Type
ย  StackTrace " at WinRT.Platform.RoGetActivationFactory(IntPtr runtimeClassId, Guid& iid, IntPtr* factory)\r\n at WinRT.WinrtModule.GetActivationFactory(IntPtr hstrRuntimeClassId)\r\n at WinRT.WinrtModule.GetActivationFactory(String runtimeClassId)\r\n at WinRT.BaseActivationFactory..ctor(String typeNamespace, String typeFullName)\r\n at Microsoft.UI.Windowing.AppWindow._IAppWindowStatics..ctor()\r\n at System.RuntimeType.CreateInstanceOfT()" string
` I lost most of today dealing with getting VS2022 working again (requiring lots of reinstallations of other components), so I don't have much more to offer.

Thanks!

Support WindowEx Persistence in unpackaged apps

Setting WindowEx.PersistenceId in an MSIX app preserves window size and position. This isn't currently supported for unpackaged apps, though.

Would be great if we could support this in unpackaged apps as well that don't use MSIX. I understand that the implementation of Persistence today relies on the ApplicationData API which is only available to packaged apps. How could we support unpackaged apps as well?

Splash Screen Request Feature to Defer Activating Window

Hi dotMorten,

First, we greatly appreciate the SplashScreen feature of this project.

We wanted to know if it's possible to suppress Activating the window from the splash screen. There's some styling that occurs in the window and when the window is activated too early some of that styling causes considerable flicker.

Perhaps there can be a flag to indicate whether to Activate the window?

private async void Content_Loaded(object sender, RoutedEventArgs e)
{
    if (IsAlwaysOnTop)
        this.SetIsAlwaysOnTop(true);
    else
        WindowExtensions.SetForegroundWindow(this);
    double h = Height;
    double w = Width;
    if (Content is FrameworkElement f)
    {
        if (double.IsNaN(Width) && f.DesiredSize.Width > 0)
            w = f.DesiredSize.Width;
        if (double.IsNaN(Height) && f.DesiredSize.Height > 0)
            h = f.DesiredSize.Height;
    }
    if (double.IsNaN(w))
        w = 640;
    if (double.IsNaN(h))
        h = 480;

    this.CenterOnScreen(w, h);
    await OnLoading();
    if (_windowType != null)
        _window = Activator.CreateInstance(_windowType) as Window;
    _window?.Activate(); // Is it possible to suppress / defer this?
    this.Close();
    _window?.SetForegroundWindow();
    Completed?.Invoke(this, _window);
    _window = null;
}

Latest "Microsoft.Windows.CsWin32" causes compile errors

Hi, will you be updating this to support the latest release of Microsoft.Windows.CsWin32 as it no longer compiles due to breaking changes in the API (Microsoft.Windows.CsWin32 vs 0.1.506-beta NuGet package causes this).

Also, can you make it available as a NuGet package ?

Thanks

Invalid State errror on using with OidcClient

I tried using the WebAuthenticator class with OidcClient library as a replacement for Microsoft.Maui.Authentication.WebAuthenticator in a Maui desktop application. Unlike the latter, the web browser opens now and on receiving the credentials, redirects back to the application. But the when the returned WebAuthenticatorResult object causes Invalid State error in OidcClient library.

If I instead, use the WinUIEx.WebAuthenticatorResult class too, I get Malformed Callback Url error.

The code works perfectly when used on Android with Maui's WebAuthenticator. On closer inspection, the value for the "state" key in the returned WebAuthenticatorResult.Properties dictionary (from AuthenticateAsync() method) seems quite different from what is received on a similar android project.

The relevant piece of code which calls the method of this class is here:-

internal class WebAuthenticatorBrowser : IdentityModel.OidcClient.Browser.IBrowser
    {
        private readonly string _callbackUrl;

        public WebAuthenticatorBrowser(string callbackUrl = null)
        {
            _callbackUrl = callbackUrl ?? null;
        }
        public async Task<BrowserResult> InvokeAsync(BrowserOptions options, CancellationToken cancellationToken = default)
        {
            try
            {
                var callbackUrl = string.IsNullOrEmpty(_callbackUrl) ? options.EndUrl : _callbackUrl;

#if WINDOWS
               // THIS IS WHERE THE DIFFERENCE IS WITH ANDROID. Here, authResult.Properties dictionary contains
               // a key "state" whose value seems very different from that in case of android
                var authResult =
                    await WinUIEx.WebAuthenticator.AuthenticateAsync(new Uri(options.StartUrl), new Uri(callbackUrl));
#else
                // Executed in android
                WebAuthenticatorResult authResult =
                    await WebAuthenticator.AuthenticateAsync(new Uri(options.StartUrl), new Uri(callbackUrl));
#endif
                var authorizeResponse = ToRawIdentityUrl(options.EndUrl, authResult);
                
                return new BrowserResult
                {
                    Response = authorizeResponse
                };
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
                return new BrowserResult()
                {
                    ResultType = BrowserResultType.UnknownError,
                    Error = ex.ToString()
                };
            }
        }

        public string ToRawIdentityUrl(string redirectUrl, WebAuthenticatorResult result)
        {
            IEnumerable<string> parameters = result.Properties.Select(pair => $"{pair.Key}={pair.Value}");
            var values = string.Join("&", parameters);

            return $"{redirectUrl}#{values}";
        }

#if WINDOWS
        public string ToRawIdentityUrl(string redirectUrl, WinUIEx.WebAuthenticatorResult result)
        {
            IEnumerable<string> parameters = result.Properties.Select(pair => $"{pair.Key}={pair.Value}");
            var values = string.Join("&", parameters);

            return $"{redirectUrl}#{values}";
        }
#endif
    }

Browser tab does not close after authentication in some cases

I am using WinUiEx.WebAuthenticator with OidcClient library for authentication in my MAUI app.
Here, the web browser does not close after a redirect to the app (on clicking "Open in MAUI app") if the user was not already logged in on that browser.

On the other hand, if I log in on the browser manually beforehand and then try logging in using the desktop app, then the browser opens but you don't have to re-enter your credentials and closes after you click "Open in MAUI app" button in the browser.

This issue occurs in both Chrome and Edge.

The relevant piece of code which calls the method of this class is here:-

internal class WebAuthenticatorBrowser : IdentityModel.OidcClient.Browser.IBrowser
    {
        private readonly string _callbackUrl;

        public WebAuthenticatorBrowser(string callbackUrl = null)
        {
            _callbackUrl = callbackUrl ?? null;
        }
        public async Task<BrowserResult> InvokeAsync(BrowserOptions options, CancellationToken cancellationToken = default)
        {
            try
            {
                var callbackUrl = string.IsNullOrEmpty(_callbackUrl) ? options.EndUrl : _callbackUrl;

                var authResult =
                    await WinUIEx.WebAuthenticator.AuthenticateAsync(new Uri(options.StartUrl), new Uri(callbackUrl));
                var authorizeResponse = ToRawIdentityUrl(options.EndUrl, authResult);
                
                return new BrowserResult
                {
                    Response = authorizeResponse
                };
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
                return new BrowserResult()
                {
                    ResultType = BrowserResultType.UnknownError,
                    Error = ex.ToString()
                };
            }
        }

Using TrayIcon with ShellFile Thumbnails causes System.ExecutionEngineException

When using a TrayIcon with the thumbnails gathered from https://github.com/contre/Windows-API-Code-Pack-1.1, closing a window causes System.ExecutionEngineException. Interestingly, loading the image itself is not enough, it only occurs when the image is displayed and then closed.

I'm setting up a tray icon like this:

Icon icon = Icon.FromFile("(Path to the file)");
tray = new TrayIcon(icon, "(Name)");
tray.TrayIconLeftMouseDown += Tray_TrayIconLeftMouseDown;

And loading the icons into an image via binding and:

public BitmapImage Image { //Using(?) https://stackoverflow.com/questions/26260654/wpf-converting-bitmap-to-imagesource
            get
            {
                if (_Image == null)
                {
                    ShellFile shellFile = ShellFile.FromFilePath(Path);
                    Bitmap bitmap = shellFile.Thumbnail.SmallBitmap;
                    
                    //bitmap = (Bitmap)Bitmap.FromFile("(path to a file)"); //If you do this, the issue no longer occurs, even if you still load the bitmap from the line above.

                    MemoryStream ms = new MemoryStream();
                    bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
                    
                    bitmap.Dispose();
                    shellFile.Dispose();

                    ms.Seek(0, SeekOrigin.Begin);  //Magic line I randomly guessed.

                    _Image = new BitmapImage();
                    _Image.ImageFailed += (s, e) =>
                    {
                        Debug.WriteLine(e.ErrorMessage);
                    };
                    _Image.SetSourceAsync(ms.AsRandomAccessStream()).Completed += (s, e) =>
                    {
                        ms.Dispose();
                    };
                }
                return _Image;
            } 
        }

The issue only occurs if both the shell icons and the tray icon are used, there is no issue if only one is used.

I understand that this is probably not a fault of this project, but any help would be appreciated.

DataContext not found.

I'm trying to develop with this library in MVVM architecture using Prism or CommunityToolkit.Mvvm, but in MainWindow.xaml.cs I get an error that DataContext is not an attachable property.

I'm not very familiar with MVVM, but if I want to make the following code into ViewModel, how should I set it on the View side?

namespace WinUIExSample.ViewModels
{
    using CommunityToolkit.Mvvm.ComponentModel;
    using CommunityToolkit.Mvvm.Input;
    using Microsoft.UI.Xaml;

    public class MainWindowViewModel : ObservableObject
    {
        public IRelayCommand ExitCommand { get; }

        public MainWindowViewModel()
        {
            ExitCommand = new RelayCommand(ExecuteExitCommand);
        }

        private void ExecuteExitCommand()
        {
            Application.Current.Exit();
        }
    }
}

WindowMessageMonitor.NewWindowProc returns wrong results

There are window messages where '0' means the message was handled, where you treat '0' as not handled and call DefSubclassProc(). For example if you do this with 'WM_DPICHANGED' you can crash the application.

A better way would be to introduce a boolean property Handled on WindowMessageEventArgs and only return the result when this is set to true.

Titlebar Backround color

I added button "Change Background color". On the click event, I call the this.SetTitleBarBackgroundColors(Microsoft.UI.Colors.Black);
And the color near the icon does not change
Background

[Proposal] Use WinRT Component instead of C# class library

Currently WinUIEx is a C# class library, meaning that it can only be consumed by .NET WinUI 3 applications. Would appreciate if you could move the library to become a WinRT Component, which allows all WinUI 3 applications to consume the library.

Double click to Tray Icon exception

image

Repro:

  1. Click image
  2. Double click Tray Icon
  3. Repeat if no exception(race condition)

Although this is the Example side exception, it is worth taking care of users who copy this.

Problems with content stretching in WindowEx

Hi Morten.

Really cool you made this available via NuGet. ๐Ÿ’ช

I just tried it out and believe there is a problem to the WindowsEx and content stretching. Try this very simple standard WinUi Window. This shows a window with completely purple background.

<Window
    x:Class="WinUIExTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="Purple">
        <StackPanel
            HorizontalAlignment="Center"
            VerticalAlignment="Center"
            Orientation="Horizontal">
            <Button x:Name="myButton" Click="myButton_Click">Click Me</Button>
        </StackPanel>
    </Grid>
</Window>

If you change Window to WindowEx you get this:

image

Is ShowInTaskbar = false Possible?

Is adding in a ShowInTaskbar property like the one in WPF possible? I see in your demo that the taskbar icon goes away when minimizing to tray. This is perfect for my application. The only part I need to add is to have it not show the taskbar icon when the window is showing.

Thanks,
Tide

Remove Backdrop fallback workaround

In 1.2, WinAppSDK is going to provide the fallback for background when mica/acrylic isn't supported: microsoft/WindowsAppSDK#2637

This means WinUIEx can remove the workaround for that once 1.2 ships:

if (!m_backdrop.IsSupported)
{
var rootElement = _window.Content as FrameworkElement;
if (rootElement is not null)
{
// Initial state.
_fallbackBackdrop = new Microsoft.UI.Xaml.Media.SolidColorBrush(rootElement.ActualTheme == ElementTheme.Dark ? m_backdrop.DarkFallbackColor : m_backdrop.LightFallbackColor);
if (rootElement is Microsoft.UI.Xaml.Controls.Control control && control.Background is null)
{
control.Background = _fallbackBackdrop;
}
else if (rootElement is Microsoft.UI.Xaml.Controls.Panel panel && panel.Background is null)
{
panel.Background = _fallbackBackdrop;
}
else
{
_fallbackBackdrop = null;
return;
}
// This should probably be weak in the rare event the root content changes
// Unfortunately there's no good event to detect changes though.
rootElement.ActualThemeChanged += (s, e) =>
{
bool isDark = s.ActualTheme == ElementTheme.Dark;
if (_fallbackBackdrop != null && m_backdrop != null)
{
_fallbackBackdrop.Color = isDark ? m_backdrop.DarkFallbackColor : m_backdrop.LightFallbackColor;
}
};
}
return;
}

Set default values for Mica fallback colors

WinUI designers have said that Background="{ThemeResource SolidBackgroundFillColorBaseBrush}" is the recommended fallback background for when Mica isn't available. We should default the fallback colors in WinUIEx to the equivalent values so everyone gets the recommended fallback colors by default.

Looking at the definition for that resource in VS in Generic.xaml, the value for Dark is 0x202020 and Light is 0xF3F3F3.

Error that class is not registered

I cloned it and tried to run it locally, but I get the error System.Reflection.TargetInvocationException: 'Exception has been thrown by the target of an invocation.'.

image
The source has not changed. Is there anything missing?

Transparent background

Hello,

it's a great tool but I'm missing a key feature - window transparency. It should work in the newest Win App SDK.

Will you add window transparency?

Have a great day,
Peter

Controls in Custom Titlebar aren't interactive

The custom titlebar works for textblocks/images, but not for interactive content.

example of titlebar not being interactive
None of the usercontrol buttons or textbox work or respond, but the titlebar is still dragable.

2nd Issue, if custom content is too wide, the min/max/close buttons are covered up and unusable.
Example of Image covering up titlebar buttons

Edit: On further testing, controls are ONLY interactive if they have a min/max/close button behind them (eg, when the window is very narrow), but become unresponsive after window is widened. Draggability is inconsistent, sometimes it works, sometimes it doesn't.
the controls work

Calling Activate on window hidden through Hide extension function can crash

We observed that on some machines, calling Activate on a window hidden through the Hide extension function can occasionally crash with the following error message:
System.Runtime.InteropServices.COMException: 'The operation identifier is not valid. (0x800710DD)'

The debug output shows an error message along the lines of Cannot activate a closed or disposed window.

Backdrop opacity/brush adjustment

Is it possible to add the option to adjust the opacity/transparency level or brush of the backdrop?

It is hard to read texts with acrylic:
Screenshot 2022-06-06 102008

Mica is too subtle:
Screenshot 2022-06-06 104310

Super Helpful

This extension is awesome. Why don't you create a Nuget for these handy extension methods.

Backdrop stops working after window is hidden using Closed event

Bug:
Mica/Acrylic backdrop stops working when Window is hidden then shown again using Closed event.

Use case:
Application runs UI as a separate WinUI program and has the option to hide the program instead of closing when not in use.

Example to reproduce:

//Closed is closing. 
//ref: https://github.com/microsoft/microsoft-ui-xaml/issues/5454
this.Closed += (s, e) =>
{
    e.Handled = true;
    this.Hide();
};
...
await Task.Delay(2000);
this.Close();
await Task.Delay(2000);
this.Show(); //no backdrop.
await Task.Delay(2000);
this.Hide();
await Task.Delay(2000);
this.Show(); //backdrop 

Backdrop is not applied at all

Using Win11, WindowsAppSdk 1.1.3, WinUIEx 1.8.0, Windows 'Transparency effects' ON.

Am I doing something wrong?

I check for MainWindow's Backdrop in runtime and it is Mica like I wanted. But neither Mica nor Acryllic is applied to the window.

image

TaskBarIcon is blurry compared to AppWindow.SetIcon

With a 256x256 .ico, AppWindow.SetIcon results in a sharp taskbar icon while setting TaskBarIcon in XAML or with Icon.FromFile results in a blurry icon.

Could the 16x16 dimensions provided below be to blame?

var handle = PInvoke.LoadImage(null, filename, GDI_IMAGE_TYPE.IMAGE_ICON, 16, 16, Windows.Win32.UI.Controls.IMAGE_FLAGS.LR_LOADFROMFILE);

Improve window resizing when using WindowEx Persistence

Is there any way we could resize the window before it's shown to the user? Right now on app launch, I see the window flash at its default size, then the window is resized with a solid background, then the window content loads, which is a bit clunky and jarring. Not sure currently if this is a library issue or if there's something we can do in the app to improve the experience.

We are getting error after updating WinUIEx package 1.1.0 to 1.4.3

Error description

Assembly 'WinUIEx' with identity 'WinUIEx, Version=1.4.3.0, Culture=neutral,
PublicKeyToken=null' uses 'WinRT.Runtime, Version=1.6.0.0, Culture=neutral,
PublicKeyToken=99ea127f02d97709' which has a higher version than referenced assembly 'WinRT.Runtime' with identity 'WinRT.Runtime, Version=1.5.0.0, Culture=neutral, PublicKeyToken=99ea127f02d97709'

Change log for each nuget release

Dear Moten,

Thanks for making the useful extension for Window. Its really helpful. It could be more helpful if you can release short change log or release notes with every new nuget release, so that we can know the changes or breaking changes in API.

-Munish

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.