{"id":14965113,"url":"https://github.com/reactiveui/reactivemvvm","last_synced_at":"2025-04-04T15:07:52.411Z","repository":{"id":41150716,"uuid":"124766393","full_name":"reactiveui/ReactiveMvvm","owner":"reactiveui","description":"Cross-platform ReactiveUI sample app built for a talk at MSK .NET conf.","archived":false,"fork":false,"pushed_at":"2024-10-23T00:33:18.000Z","size":643,"stargazers_count":180,"open_issues_count":12,"forks_count":13,"subscribers_count":18,"default_branch":"main","last_synced_at":"2024-10-29T14:36:03.304Z","etag":null,"topics":["android","avalonia","avaloniaui","cross-platform","fody","linux","mvvm","reactiveui","uwp","winforms","wpf","xamarin","xamarin-forms"],"latest_commit_sha":null,"homepage":"https://reactiveui.net","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/reactiveui.png","metadata":{"funding":{"github":["reactivemarbles"]},"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-03-11T14:46:02.000Z","updated_at":"2024-10-25T01:59:22.000Z","dependencies_parsed_at":"2024-11-05T23:34:41.639Z","dependency_job_id":null,"html_url":"https://github.com/reactiveui/ReactiveMvvm","commit_stats":{"total_commits":109,"total_committers":7,"mean_commits":"15.571428571428571","dds":0.6055045871559632,"last_synced_commit":"9475af9fed3ef28669be19b9e0aa06f8427b93f3"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reactiveui%2FReactiveMvvm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reactiveui%2FReactiveMvvm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reactiveui%2FReactiveMvvm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reactiveui%2FReactiveMvvm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/reactiveui","download_url":"https://codeload.github.com/reactiveui/ReactiveMvvm/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247198451,"owners_count":20900080,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","avalonia","avaloniaui","cross-platform","fody","linux","mvvm","reactiveui","uwp","winforms","wpf","xamarin","xamarin-forms"],"created_at":"2024-09-24T13:34:14.369Z","updated_at":"2025-04-04T15:07:52.388Z","avatar_url":"https://github.com/reactiveui.png","language":"C#","readme":"[![Build Status](https://worldbeater.visualstudio.com/Camelotia/_apis/build/status/ReactiveMvvm-CI)](https://worldbeater.visualstudio.com/Camelotia/_build/latest?definitionId=4) [![Pull Requests](https://img.shields.io/github/issues-pr/worldbeater/reactivemvvm.svg)](https://github.com/worldbeater/reactivemvvm/pulls) [![Issues](https://img.shields.io/github/issues/worldbeater/reactivemvvm.svg)](https://github.com/worldbeater/reactivemvvm/issues) ![License](https://img.shields.io/github/license/worldbeater/reactivemvvm.svg) ![Size](https://img.shields.io/github/repo-size/worldbeater/reactivemvvm.svg) [![Code Coverage](https://img.shields.io/azure-devops/coverage/worldbeater/camelotia/4.svg)](https://worldbeater.visualstudio.com/Camelotia/_build/latest?definitionId=4)\n\n# ReactiveMvvm\n\nA  truly cross-platform app example created using the \u003ca href=\"https://reactiveui.net\"\u003eReactiveUI .NET MVVM framework\u003c/a\u003e, \u003ca href=\"https://www.reactiveui.net/docs/handbook/view-models/boilerplate-code\"\u003eReactiveUI.Fody\u003c/a\u003e and most popular XAML UI frameworks. The app implements the MVVM architecture extended with \u003ca href=\"https://medium.com/@worldbeater/reactive-mvvm-for-net-platform-175dc69cfc82\"\u003ereactive programming and assembly weaving\u003c/a\u003e. It was built to demonstrate how to avoid writing boilerplate code when working with the `INotifyPropertyChanged` interface and how to create portable and maintainable view models. Article on Medium: https://medium.com/@worldbeater/reactive-ui-fody-cross-platform-forms-7b501d79f46b\n\n| \u003ca href=\"https://github.com/AvaloniaUI/Avalonia\"\u003eAvaloniaUI\u003c/a\u003e | \u003ca href=\"https://docs.microsoft.com/ru-ru/xamarin/xamarin-forms/\"\u003eXamarin.Forms\u003c/a\u003e | \u003ca href=\"https://docs.microsoft.com/ru-ru/windows/uwp/get-started/universal-application-platform-guide\"\u003eUniversal Windows Platform\u003c/a\u003e |\n| --------------- | --------- | -------------- |\n| \u003ca href=\"https://medium.com/@worldbeater/reactive-ui-fody-cross-platform-forms-7b501d79f46b\"\u003e\u003cimg width=\"800\" src=\"https://cdn-images-1.medium.com/max/675/1*JPlUC1YoAuE2eFng29LpaQ.png\"\u003e\u003c/a\u003e | \u003ca href=\"https://medium.com/@worldbeater/reactive-ui-fody-cross-platform-forms-7b501d79f46b\"\u003e\u003cimg src=\"https://cdn-images-1.medium.com/max/1500/1*d1oeBQF9ilZ5h_IIhYktPQ.png\" width=\"800\"\u003e\u003c/a\u003e | \u003ca href=\"https://medium.com/@worldbeater/reactive-ui-fody-cross-platform-forms-7b501d79f46b\"\u003e\u003cimg width=\"800\" src=\"https://cdn-images-1.medium.com/max/900/1*EsqN0dFMCUknKc-4wuIanA.png\"\u003e\u003c/a\u003e | \n\n| \u003ca href=\"https://github.com/dotnet/wpf\"\u003eWPF\u003c/a\u003e | \u003ca href=\"https://github.com/dotnet/winforms\"\u003eWindows Forms\u003c/a\u003e | \u003ca href=\"https://github.com/migueldeicaza/gui.cs\"\u003eTerminal.Gui\u003c/a\u003e |\n| --------------- | --------- | -------------- |\n| \u003ca href=\"https://medium.com/@worldbeater/reactive-ui-fody-cross-platform-forms-7b501d79f46b\"\u003e\u003cimg width=\"780\" src=\"https://user-images.githubusercontent.com/6759207/94264350-38409300-ff3f-11ea-9e78-852ee9bc8ae7.png\"\u003e\u003c/a\u003e | \u003ca href=\"https://medium.com/@worldbeater/reactive-ui-fody-cross-platform-forms-7b501d79f46b\"\u003e\u003cimg src=\"https://miro.medium.com/max/493/1*GGwXG5-u_Gc-yMCj8Q1tqQ.png\" width=\"700\"\u003e\u003c/a\u003e | \u003ca href=\"https://medium.com/@worldbeater/reactive-ui-fody-cross-platform-forms-7b501d79f46b\"\u003e\u003cimg width=\"820\" src=\"https://user-images.githubusercontent.com/6759207/94263920-80ab8100-ff3e-11ea-91f7-9614d6a1c1ae.png\"\u003e\u003c/a\u003e | \n\n| ASP .NET Core via \u003ca href=\"https://github.com/worldbeater/ReactiveMvvm/tree/main/src/reactivemvvm.blazor.server\"\u003eBlazor\u003c/a\u003e or \u003ca href=\"https://github.com/worldbeater/ReactiveMvvm/tree/main/src/reactivemvvm.blazor.wasm\"\u003eBlazor.Wasm\u003c/a\u003e | \n| --------------- | \n| \u003ca href=\"https://medium.com/@worldbeater/reactive-ui-fody-cross-platform-forms-7b501d79f46b\"\u003e\u003cimg width=\"420\" src=\"https://user-images.githubusercontent.com/6759207/94431677-44765b80-019e-11eb-9ebd-7e15b51a8255.png\"\u003e\u003c/a\u003e | \n\n## Technologies and Tools Used\n- \u003ca href=\"https://reactiveui.net/\"\u003eReactiveUI\u003c/a\u003e modern MVVM framework\n- \u003ca href=\"http://reactivex.io/\"\u003eReactive Extensions\u003c/a\u003e for the \u003ca href=\"https://github.com/Reactive-Extensions/Rx.NET\"\u003e.NET platform\u003c/a\u003e\n- \u003ca href=\"https://www.reactiveui.net/docs/handbook/view-models/boilerplate-code\"\u003eReactiveUI.Fody\u003c/a\u003e for `INotifyPropertyChanged` injections\n- \u003ca href=\"http://xunit.github.io/\"\u003exUnit\u003c/a\u003e tests on \u003ca href=\"https://www.microsoft.com/net/core\"\u003e.NET Core\u003c/a\u003e\n- \u003ca href=\"https://github.com/fluentassertions/fluentassertions\"\u003eFluentAssertions\u003c/a\u003e to improve tests readability\n- \u003ca href=\"https://github.com/nsubstitute/NSubstitute\"\u003eNSubstitute\u003c/a\u003e for stubs and mocks\n- \u003ca href=\"https://github.com/nuke-build/nuke\"\u003eNukeBuild\u003c/a\u003e for building cross-platform .NET projects using C#\n- \u003ca href=\"https://github.com/AvaloniaUI/Avalonia\"\u003eAvaloniaUI\u003c/a\u003e for Linux and MacOS\n- \u003ca href=\"https://github.com/worldbeater/Citrus.Avalonia\"\u003eCitrus\u003c/a\u003e bright and modern AvaloniaUI theme\n- \u003ca href=\"https://www.xamarin.com/\"\u003eXamarin.Forms\u003c/a\u003e for Android, iOS and Tizen\n- \u003ca href=\"https://docs.microsoft.com/en-us/windows/uwp/index\"\u003eUniversal Windows Platform\u003c/a\u003e for Windows 10\n- \u003ca href=\"https://dotnet.microsoft.com/apps/aspnet/web-apps/blazor\"\u003eASP .NET Core Blazor\u003c/a\u003e bringing ReactiveUI to the Web\n- \u003ca href=\"https://msdn.microsoft.com/ru-ru/library/aa970268(v=vs.100).aspx\"\u003eWindows Presentation Foundation\u003c/a\u003e\n- \u003ca href=\"https://docs.microsoft.com/ru-ru/dotnet/framework/winforms/windows-forms-overview\"\u003eWindows Forms\u003c/a\u003e\n- \u003ca href=\"https://www.jetbrains.com/rider/\"\u003eJetBrains Rider\u003c/a\u003e and \u003ca href=\"https://visualstudio.microsoft.com/\"\u003eMicrosoft Visual Studio 2019\u003c/a\u003e IDEs\n","funding_links":["https://github.com/sponsors/reactivemarbles"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freactiveui%2Freactivemvvm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Freactiveui%2Freactivemvvm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freactiveui%2Freactivemvvm/lists"}