Wonderous: a Flutter reference app that doubles as a rendering test bed
A showcase app for the Flutter SDK. Wonderous will educate and entertain as you uncover information about some of the most famous structures in the world.
At a glance
- What is it?
- gskinner's MIT-licensed app for the famous structures of the world doubles as a reference for Impeller, CanvasKit and SKWASM on Flutter Web, which is where its real value sits.
- Who is it for?
- Wonderous earns a place in a Flutter project for what it documents rather than what it does. If you are shipping Flutter Web with WASM, or deciding whether Impeller is worth adopting on iOS, its query parameters and rendering defaults are a working reference that took someone else's tuning effort to arrive at.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 38 days ago.
- What is it written in?
- Mainly Dart, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What the app is, stated plainly by its author
The repository description sets the scope without hedging: Wonderous will educate and entertain as you uncover information about some of the most famous structures in the world. The README phrases the ambition as navigating the intersection of history, art and culture.
The authorship matters for how you read the code. Wonderous was built by gskinner in partnership with the Flutter team, and the README says it deliberately pushes visual fidelity, effects and transitions to demonstrate what Flutter is capable of on modern mobile hardware. That single sentence reframes the whole repository. It is not a general-purpose app foundation, it is an argument about what the framework can draw, expressed as an application.
The distribution is real rather than theoretical. The README links Google Play and the Apple App Store listings and a live web build at wonderous.app/web/, so you can see what the code produces before you clone anything. A separate companion website at wonderous.app carries more information than the repository does.
The licence is MIT and the README is unusually direct about what that permits: you can use the code for any purpose, including commercial projects.
Getting it running on a device
The install path assumes Flutter is already set up, and the README says so by linking the official setup instructions rather than reproducing them. Once the SDK is installed, move to the stable channel and upgrade:
flutter channel stable
flutter upgradeThen run it against a connected device or a simulator, choosing the target explicitly:
flutter run -d ios
flutter run -d androidThat is the entire quick start, and it is short enough to be worth reading closely for what it implies. There is no code generation step, no backend to start, no asset pipeline to warm up. The repository tree backs this up: lib/ for the Dart code, assets/ for the images and animations the app is built around, and the platform folders android/, ios/, macos/, web/ and windows/ checked in as ordinary Flutter targets.
So the barrier to reading this code is low, which matters given what the app is for. You can clone it, run it, and then use a debugger on a real device to see how a transition is built. That is a different proposition from reading documentation about the same effect.
The web build and its WASM query parameters
This is where the repository earns its keep beyond the visuals. Wonderous is deployed using the Web Assembly target for Flutter Web, and to test it locally you run:
flutter run -d chrome --wasmMore useful is the set of URL query parameters the web bootstrap in `web/index.html` understands, because that file is the part you would copy into your own project. `wasm=1` or `wasm=true` opts in to WASM allowlisting for Safari on WebKit and Firefox on Gecko. By default those two browsers are not allowlisted, while Chromium browsers continue using the default Flutter behaviour. `mode=canvaskit` forces the CanvasKit renderer, `mode=wimp` enables WIMP mode, and `mode=skwasm-st` forces the single-threaded SKWASM build.
The README gives worked combinations, including `/?wasm=1`, `/?wasm=1&mode=canvaskit` and `/?wasm=true&mode=skwasm-st`. Being able to switch renderer and threading model from the URL is exactly what you want when a rendering bug reproduces on only one browser, and having that documented in a shipped app saves you from reconstructing it.
Worth noting that allowlisting is opt-in rather than automatic. If you deploy WASM to Safari without setting the parameter, users on that browser do not get the WebAssembly path, and you will be debugging a different renderer than the one you tested.
Impeller on iOS, and what the repository does not contain
The README states that the app uses the new Impeller Runtime by default on iOS, linking the Flutter performance documentation. Impeller replaces the older Skia-based renderer on Apple platforms, and shipping it as the default in a demo app is a statement about its maturity.
Then there is what is missing, which is equally informative. The repository has no GitHub releases, so there is no changelog to read and no version history to learn from. There is no test directory in the tree, which is striking for an app of this visual ambition. There is no CI or issue template configuration beyond a .github/ entry, and no documentation directory.
Some of that absence is explained by the project's purpose. A rendering demo is not the place to accumulate a test suite, and its release notes live in the app store listings rather than in the repository. There is a `release_notes.txt` and a `py/` directory at the root, which suggests the content is generated rather than hand-written, and a tools/ directory that likely holds whatever does that generation.
So read this repository for its rendering configuration and for its animation and transition code, and do not read it as an example of how to structure a production Flutter project. It is not one.
Localization, analysis and the small files that reveal intent
Two configuration files describe the project's discipline better than any amount of prose. `l10n.yaml` at the root indicates that localization is set up properly through Flutter's gen_l10n workflow rather than by hand-maintaining translation maps, and `analysis_options.yaml` means the lints the analyzer applies are configured in the repository rather than left at defaults.
`flutter_native_splash.yaml` is present too, which is the newer declarative approach to the native splash screen across platforms. Its presence suggests the team cared about the launch experience, which is the kind of detail that separates a finished product from a demo.
The Dart version is pinned implicitly by pubspec.lock, and .metadata records the Flutter version the project was last migrated with. Neither is readable from the README, so if you are forking this, those two files are where the actual version constraints live.
What you will not find is an architecture to copy. There is no feature-folder listing, no dependency injection setup and no state management pattern described anywhere. The app is a designed experience, and the code is arranged to serve that experience rather than to demonstrate a scalable project structure.
When a reference app is the wrong starting point
The honest reason not to start from Wonderous is that its complexity is not the complexity you have. The visuals are custom: transitions, effects and animation sequences built for specific pieces of content. A new application with a login screen and a list of records does not need any of that, and inheriting it means carrying an asset pipeline, a generated content pipeline and a large `assets/` directory you will mostly delete.
The other case where it is wrong is licensing-adjacent confusion about what you are copying. The MIT licence permits commercial use and the README says so directly, which removes that concern entirely. The concern is instead about attribution of the content itself. The app presents information about real structures and ships as a finished product on two app stores, so the content carries obligations that a code licence does not describe.
Compare it instead with starting from the Flutter application template, which gives you a minimal counter app with platform folders wired up and nothing else. Wonderous is a far better reference for the rendering questions Flutter developers keep asking, and a far worse skeleton for a new product. Those are different jobs, and confusing them is how projects end up with a two thousand file codebase before the first feature ships.
Editorial conclusion
Wonderous earns a place in a Flutter project for what it documents rather than what it does. If you are shipping Flutter Web with WASM, or deciding whether Impeller is worth adopting on iOS, its query parameters and rendering defaults are a working reference that took someone else's tuning effort to arrive at. As a starting point for your own app it is a weak foundation, since a tourism app with custom transitions, an asset pipeline and generated content is not a neutral starting skeleton. Fork it to learn the rendering setup, and start a new project from the Flutter template if you are building something.
Frequently asked questions
What is the Flutter Wonderous app used for?
The repository describes it as a showcase app for the Flutter SDK that educates and entertains while presenting information about famous structures around the world. It was built by gskinner with the Flutter team and deliberately pushes visual fidelity, effects and transitions.
Can I use the Wonderous source code in a commercial app?
The code is released under the MIT licence, and the README states you can use it for any purpose, including commercial projects. A separate LICENSE file is included in the repository.
How do I run Wonderous with WebAssembly locally?
The README documents `flutter run -d chrome --wasm` for local WASM testing. The web bootstrap in web/index.html also accepts query parameters such as wasm=1 to opt in to WASM allowlisting for Safari and Firefox, mode=canvaskit to force CanvasKit, and mode=skwasm-st for single-threaded SKWASM.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/gskinnerteam-flutter-wonderous-app)