All Projects → roozbehid → Wasmwinforms

roozbehid / Wasmwinforms

Licence: mit
C# Winforms for Webassembly

Programming Languages

csharp
926 projects

Projects that are alternatives of or similar to Wasmwinforms

Aerowizard
Library for easy creation of custom and Aero Wizards. Aero Wizard strictly follows Microsoft guidelines and uses Visual Styles to get visual theming.
Stars: ✭ 73 (-83.56%)
Mutual labels:  nuget, winforms
Realtaiizor
C# WinForm UI/UX Component Library
Stars: ✭ 109 (-75.45%)
Mutual labels:  nuget, winforms
Csla
A home for your business logic in any .NET application.
Stars: ✭ 865 (+94.82%)
Mutual labels:  webassembly, winforms
Menu
A JavaScript free menu library for Blazor and Razor Components applications.
Stars: ✭ 118 (-73.42%)
Mutual labels:  nuget, webassembly
Standard-Toolkit
An update to Component factory's krypton toolkit to support .NET Framework 4.6.2 - 4.8.1 to .NET Core/.NET
Stars: ✭ 194 (-56.31%)
Mutual labels:  nuget, winforms
SciColorMaps
Custom .NET color maps (user-defined or imported from matplotlib) for scientific visualization
Stars: ✭ 26 (-94.14%)
Mutual labels:  nuget, winforms
Krypton Net 5.470
A update to Component factory's krypton toolkit to support the .NET 4.7 framework.
Stars: ✭ 79 (-82.21%)
Mutual labels:  nuget, winforms
Assortedwidgets
OpenGL GUI library
Stars: ✭ 92 (-79.28%)
Mutual labels:  sdl, webassembly
Krypton-Toolkit-Suite-Extended-NET-5.470
An extension to the Krypton Toolkit suite of controls for .NET framework 4.7
Stars: ✭ 51 (-88.51%)
Mutual labels:  nuget, winforms
Extended-Toolkit
A companion toolkit for the standard toolkit.
Stars: ✭ 83 (-81.31%)
Mutual labels:  nuget, winforms
Magnum
Lightweight and modular C++11 graphics middleware for games and data visualization
Stars: ✭ 3,728 (+739.64%)
Mutual labels:  sdl, webassembly
Vortice.windows
.NET standard bindings for DirectX, WIC, Direct2D1, XInput, XAudio and X3DAudio
Stars: ✭ 427 (-3.83%)
Mutual labels:  nuget
Vr Dos
💾 Virtual Reality DOS 💾
Stars: ✭ 416 (-6.31%)
Mutual labels:  webassembly
Fiber2d
Cross-platform 2D Game Engine in pure Swift
Stars: ✭ 415 (-6.53%)
Mutual labels:  sdl
Ink
Parity's ink! to write smart contracts
Stars: ✭ 407 (-8.33%)
Mutual labels:  webassembly
Nukeeper
Automagically update nuget packages in .NET projects
Stars: ✭ 437 (-1.58%)
Mutual labels:  nuget
Taisei
A free and open-source Touhou Project fangame
Stars: ✭ 428 (-3.6%)
Mutual labels:  sdl
Strongbox
Strongbox is an artifact repository manager.
Stars: ✭ 412 (-7.21%)
Mutual labels:  nuget
Dotmim.sync
A brand new database synchronization framework, multi platform, multi databases, developed on top of .Net Standard 2.0. https://dotmimsync.readthedocs.io/
Stars: ✭ 406 (-8.56%)
Mutual labels:  nuget
Modal
A powerful and customizable modal implementation for Blazor applications.
Stars: ✭ 406 (-8.56%)
Mutual labels:  nuget

WasmWinforms

Build status Nuget

C# Winforms can now work in your browser! Wasm.Winforms is a nuget package that you can install and use your codes unchanged and run it on your browser!

Try it online

How to use

  • Create a Winforms application from Visual Studio. (Note: Winforms are full .Net applications)
  • Create an empty .Net Core App from Visual Studio. Add all files from full .net application directory into it. (For example, add Form1.cs,Form1.Designer.cs, Form1.resx, Program.cs .You can add those files as links too.)
  • Install latest version of Winforms.Wasm nuget from nuget.org.
  • Build your project.
  • You can debug Win32 (32bit version) of your code in Visual Studio. (Make sure you have 32bit version of dotnet installed! (it should be in Program Files (x86)\dotnet\dotnet.exe)
  • Looking at your OUTPUT DIRECTORY\dist\ you will find your index.html to run!

How it works

This project uses mono to run your C# IL code. Also coming with this distribution are System.Drawing and System.Windows.Forms dlls. Winforms implementation requires many C libraries that I was also ported into WebAssembly. You can find out about them looking into their submodules!

How to compile/build

This project uses another amazing ( :D ) project of mine: GCCBuild which enables you to use any compiler to compile Visual Studio C/C++ projects in any OS. Meaning you can have Visual Studio C/C++ project files and use them to compile both for Windows/Linux and also WebAssembly. You need to have Emscripten installed, activated and already accessible from your path. First from Visual Studio build switch to Release-x86 then build solution, then do the same for WasmRel-x86. This way you have all libraries compiled for Win32 and also WebAssembly. Then in your \Output\bin\x86\Release folder you can issue a nuget pack and use that nuget.

When you build an application using this nuget, look for dist folder which contains your index.html. Using Win32 compiled libraries are way easier to debug and run your application.

Please note that compiling mono-wasm project should only be done in WasmRel or WasmDbg targets and it would take a minute or two to complete!

Why is it so slow/buggy?

You need to download good amount of files to run it. All dlls and big .wasm and .js files have to be downloaded. File issues and submit pull request so it will be faster/less buggy! There are many many bugs and this project/product is not at all recommended for production. It is pre-alpha phase!

We have many better UI frameworks for browsers and web, why use Winforms?!

Well that is a really good question that you have to answer! For me it was a fun project. But many companies are still using old programs and they would like to use them as-is in a browser, so it would open tons of new oppurtunities for those programs!

Things to do - You can pick one and contribute!

  • Update mono Winforms to latest version
  • Update mono version being used. Mono is rapidly changing/improving their WebAssembly technology....
  • Use AOT mono
  • Find bugs in libgdiplus that causes memory leaks
  • Improvements to amazing Microwindows project and make it in-sync
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].