{"id":37032624,"url":"https://github.com/matt-goldman/flagstone-ui","last_synced_at":"2026-01-14T04:00:00.924Z","repository":{"id":324285201,"uuid":"1055241898","full_name":"matt-goldman/flagstone-ui","owner":"matt-goldman","description":"FlagstoneUI gives .NET MAUI true cross-platform UI: one control surface, consistent behaviour on every platform, no platform code.","archived":false,"fork":false,"pushed_at":"2026-01-11T17:56:04.000Z","size":10554,"stargazers_count":6,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-01-11T20:32:12.080Z","etag":null,"topics":["ai-friendly","cross-platform","design-tokens","dotnet","dotnetmaui","stlye","styling","theming","ui","xaml"],"latest_commit_sha":null,"homepage":"","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/matt-goldman.png","metadata":{"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":"docs/roadmap.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-12T01:38:10.000Z","updated_at":"2026-01-11T17:56:08.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/matt-goldman/flagstone-ui","commit_stats":null,"previous_names":["matt-goldman/flagstone-ui"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/matt-goldman/flagstone-ui","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matt-goldman%2Fflagstone-ui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matt-goldman%2Fflagstone-ui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matt-goldman%2Fflagstone-ui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matt-goldman%2Fflagstone-ui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/matt-goldman","download_url":"https://codeload.github.com/matt-goldman/flagstone-ui/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matt-goldman%2Fflagstone-ui/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28408947,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T01:52:23.358Z","status":"online","status_checked_at":"2026-01-14T02:00:06.678Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["ai-friendly","cross-platform","design-tokens","dotnet","dotnetmaui","stlye","styling","theming","ui","xaml"],"created_at":"2026-01-14T04:00:00.340Z","updated_at":"2026-01-14T04:00:00.917Z","avatar_url":"https://github.com/matt-goldman.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FlagstoneUI\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"assets/logov1.svg\" alt=\"FlagstoneUI Logo\" width=\"200\" height=\"200\" /\u003e\n  \u003ch1\u003eFlagstoneUI\u003c/h1\u003e\n  \u003ch3\u003eTrue cross‑platform UI for .NET MAUI — one control surface, consistent behaviour everywhere, no platform code.\u003c/h3\u003e\n\u003c/div\u003e\n\nFlagstoneUI removes the last barrier to building visually consistent .NET MAUI apps.    \n\n.NET MAUI gets you most of the way there, but as soon as you need a custom border, corner radius, or background on a text input, you fall through a gap, and end up in platform handlers for iOS, Android, and Windows.\n\n**FlagstoneUI closes those gaps.**\nIt gives you enhanced, neutral controls designed for full visual control from shared code. No renderers. No handlers. No platform quirks. Just the UI your app is meant to have, working the same on every device.\n\n\u003e **⚠️ Early experimental project.**\n\u003e Functional and ready for testing, but evolving quickly.\n\n## What’s Available Now\n\n* Core controls: `FsButton`, `FsEntry`, `FsCard`, `FsEditor`\n* Token‑based theming system (colour, spacing, shapes, typography)\n* Material theme (NuGet) + example themes in the sample app\n* Community Toolkit integrations:\n\n  * `ValidationBehaviorAdapter` for reuse of existing validators\n  * Optional animated border behaviour for `FsEditor`\n\nThemes are standard resource dictionaries — copy, customise, extend, or publish your own.\n\n![Demo Video](assets/Flagstone-UI.gif)\n\n## Why FlagstoneUI?\n\n### The gap in .NET MAUI\n\n.NET MAUI’s default controls look native, and _relatively_ consistent, but many visual properties simply aren't exposed.\n\n```xml\n\u003cEntry Placeholder=\"Email\" /\u003e\n```\n\nLooks simple. But here's an example of how an `Entry` is rendered on each platform:\n\n![The default Entry control looks slightly different on each platform](assets/xplat-entry.png)\n\nNow imagine your designer specifies:\n\n* CornerRadius: 8\n* BorderWidth: 2\n* BorderColor: #2196F3\n\nTo implement that in .NET MAUI, you'll need **custom handler code for iOS, Android, and Windows**, and you'll maintain that code forever — including variants:\n\n- Write a handler to modify `UITextField` for iOS and macOS (and understand what that means)\n- Write a separate handler to modify `EditText` for Android (and understand _that_ platform's APIs)\n- Write yet another handler to modify `TextBox` for Windows (and learn _those_ platform-specific details)\n- Create variants for different styles (primary, secondary, different input purposes) _in each handler_\n- Create variants for different states (focused, disabled, valid, invalid, error) _in each handler_\n- Maintain all three handlers, forever, as platforms evolve and APIs change\n\n### FlagstoneUI’s approach\n\nFlagstoneUI gives you controls designed for full visual control from shared code.\n\n```xml\n\u003cFsEntry\n    Placeholder=\"Email\"\n    CornerRadius=\"8\"\n    BorderColor=\"#2196F3\"\n    BorderWidth=\"2\" /\u003e\n```\n\nAnd you can use [explicit styles](https://learn.microsoft.com/dotnet/maui/user-interface/styles/xaml?view=net-maui-10.0#explicit-styles) for your variants and states, or [Visual State Manager](https://learn.microsoft.com/dotnet/maui/user-interface/visual-states?view=net-maui-10.0), all in .NET MAUI, without touching platform code.\n\nOne place. One API. Same behaviour everywhere.\n\nThis is the layer that makes .NET MAUI feel complete: define your visual system once, and your entire app uses it.\n\n## Quick Start\n\n**📚 [Documentation](docs/README.md)** | **🚀 [Quickstart](docs/quickstart.md)**\n\n### Build from Source\n\n```bash\n# Clone and explore\ngit clone https://github.com/matt-goldman/flagstone-ui.git\ncd flagstone-ui\n\ndotnet build\n\n# Run sample app\ndotnet run --project samples/FlagstoneUI.SampleApp\n```\n\nOr reference `FlagstoneUI.Core` in your MAUI project.\n\n### Install via NuGet (Preview)\n\n```bash\ndotnet add package FlagstoneUI.Core --version 0.0.1-preview1\n\ndotnet add package FlagstoneUI.Integrations.MCT --version 0.0.1-preview1\n\ndotnet add package FlagstoneUI.Themes.Material --version 0.0.1-preview1\n```\n\n## What Does It Look Like?\n\n```xml\n\u003c!-- Consistent themed button --\u003e\n\u003cFsButton\n    Text=\"Click Me\"\n    BackgroundColor=\"{DynamicResource Color.Primary}\"\n    CornerRadius=\"{DynamicResource Shape.CornerRadius.Medium}\" /\u003e\n\n\u003c!-- Themed entry with Community Toolkit validation --\u003e\n\u003cFsEntry Placeholder=\"Enter email\"\n         BackgroundColor=\"{DynamicResource Color.Surface}\"\n         BorderColor=\"{DynamicResource Color.Border}\"\u003e\n    \u003cFsEntry.Behaviors\u003e\n        \u003cValidationBehaviorAdapter\n            ValidStyle=\"{StaticResource ValidStyle}\"\n            InvalidStyle=\"{StaticResource InvalidStyle}\"\n            Behavior=\"{EmailValidationBehavior}\"\n            Flags=\"ValidateOnValueChanged\" /\u003e\n    \u003c/FsEntry.Behaviors\u003e\n\u003c/FsEntry\u003e\n\n\u003c!-- Card container using tokens --\u003e\n\u003cFsCard\n    BackgroundColor=\"{DynamicResource Color.Surface}\"\n    CornerRadius=\"{DynamicResource Shape.CornerRadius.Large}\"\n    Padding=\"{DynamicResource Spacing.Medium}\"\u003e\n    \u003cLabel Text=\"Card Content\" /\u003e\n\u003c/FsCard\u003e\n```\n\nIf not using implicit/global namespaces, prefix controls as:\n`\u003cfs:FsButton\u003e...\u003c/fs:FsButton\u003e`\n\n## How It Works\n\n1. **Enhanced Controls**\n   Purpose‑built replacements that expose full visual control.\n\n2. **Design Tokens**\n   Central definition of colour, spacing, typography, shapes.\n\n3. **Themes**\n   Resource dictionaries that apply consistent design across the app.\n\n4. **Swap or Create Themes**\n   Change the entire feel of your app by replacing one file.\n\n## Development Status\n\n### Available\n\n* `FsButton`, `FsEntry`, `FsCard`, `FsEditor`\n* Token engine\n* Material theme\n* Sample app with multiple theme examples\n* Community Toolkit integration\n* Full documentation\n\n### Coming Soon\n\n* Additional controls (labels, lists, navigation)\n* Theme conversion tools\n* AI‑assisted theme creation\n\nSee the [roadmap](docs/roadmap.md).\n\n## Project Structure\n\n```text\nflagstone-ui/\n├── src/\n│   ├── FlagstoneUI.Core/              # Core controls + tokens\n│   ├── FlagstoneUI.Themes.Material/   # Material theme\n│   └── FlagstoneUI.Blocks/            # Planned: reusable UI building blocks\n├── samples/\n│   ├── FlagstoneUI.SampleApp/         # Showcase\n│   └── FlagstoneUI.ThemePlayground/   # Theme experimentation\n├── docs/                              # Documentation\n└── tools/                             # Converters, AI tools\n```\n\nThe **Blocks** project (planned) will offer prebuilt forms, layouts, and workflows — optional extensions built on the same token system.\n\n## Contributing\n\nThis project is still early — **your feedback genuinely shapes its direction**.\n\nMost important of all:\n**Tell me whether this is useful, or if you think the entire idea is misguided.**\nHonest critique is just as valuable as enthusiasm.\n\n### Ways to help\n\n* Try the sample apps and share what worked (or didn’t)\n* Tell me *why* you would or wouldn’t use this\n* Report bugs or suggest features\n* Submit PRs\n* Create and publish themes\n* Improve documentation\n\nOpen a [Discussion](../../discussions) or reach out to [@matt-goldman](https://github.com/matt-goldman).\n\n**License:** MIT\n**Status:** Experimental\n**Compatibility:** .NET 10 + MAUI\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatt-goldman%2Fflagstone-ui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmatt-goldman%2Fflagstone-ui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatt-goldman%2Fflagstone-ui/lists"}