Skip to content

Impeller font rendering issue: thinner and more jagged #190391

Closed

Description

@filiph

Steps to reproduce

  1. Create app using Work Sans (variable weight font): https://fonts.google.com/specimen/Work+Sans?preview.script=Latn
  2. Use the font at its w100 weight (this is where the effect is most visible)
  3. Try running with impeller disabled, then enabled

Expected results

Flutter without impeller renders this:

Image

Actual results

Flutter with impeller enabled renders this:

Image

Code sample

Code sample

https://github.com/filiph/impeller_windows_render_bug

Needs the google_fonts package but obviously you can avoid it if you just download the font and use it from pubspec.yaml assets.

import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(home: const MyHomePage());
  }
}

class MyHomePage extends StatelessWidget {
  const MyHomePage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.black,

      body: SizedBox.expand(
        child: Column(
          mainAxisAlignment: .center,
          children: [
            Column(
              children: [
                Text(
                  'This is some text.',
                  style: GoogleFonts.workSans(
                    color: Colors.white,
                    fontSize: 24,
                    fontWeight: .w100,
                  ),
                ),
              ],
            ),
          ],
        ),
      ),
    );
  }
}

Screenshots or Video

Screenshots / Video demonstration

without impeller
Image

with impeller
Image

Notice how, with impeller, some of the smaller text is a lot harder to read.

Logs

Logs
Resolving dependencies... 
Downloading packages... 
  hooks 2.0.2 (2.1.0 available)
> matcher 0.12.20 (was 0.12.19)
> meta 1.19.0 (was 1.18.0)
  record_use 0.6.0 (1.0.0 available)
> test_api 0.7.12 (was 0.7.11) (0.7.13 available)
> vector_math 2.4.2 (was 2.2.0)
Changed 4 dependencies!
3 packages have newer versions incompatible with dependency constraints.
Try `flutter pub outdated` for more information.
Upgrading analysis_options.yaml to exclude build and platform directories.
Launching lib\main.dart on Windows in debug mode...
Building Windows application...                                    25.0s
√ Built build\windows\x64\runner\Debug\impeller_windows_render_bug.exe
[IMPORTANT:flutter/shell/platform/embedder/embedder_surface_gl_impeller.cc(126)] Using the Impeller rendering backend (OpenGLESSDF).
Syncing files to device Windows...                                 136ms

Flutter run key commands.
r Hot reload. 
R Hot restart.
h List all available interactive commands.
d Detach (terminate "flutter run" but leave application running).
c Clear the screen
q Quit (terminate the application on the device).

A Dart VM Service on Windows is available at: http://127.0.0.1:63891/DsOKwqMovi8=/
The Flutter DevTools debugger and profiler on Windows is available at:
http://127.0.0.1:63891/DsOKwqMovi8=/devtools/?uri=ws://127.0.0.1:63891/DsOKwqMovi8=/ws

Application finished.

Flutter Doctor output

Doctor output
[√] Flutter (Channel beta, 3.47.0-0.3.pre, on Microsoft Windows [Version 10.0.26200.8894], locale en-US)
    [273ms]
    • Flutter version 3.47.0-0.3.pre on channel beta at C:\src\flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 7c7929adb0 (2 days ago), 2026-07-29 21:46:53 -0700
    • Engine revision effb186f31
    • Dart version 3.13.0 (build 3.13.0-282.3.beta)
    • DevTools version 2.59.0
    • Feature flags: enable-web, enable-linux-desktop, enable-macos-desktop, enable-windows-desktop,
      enable-android, enable-ios, cli-animations, enable-native-assets, enable-record-use,
      enable-swift-package-manager, omit-legacy-version-file, enable-lldb-debugging,
      enable-uiscene-migration

[√] Windows Version (11 Pro 64-bit, 25H2, 2009) [830ms]

[!] Android toolchain - develop for Android devices (Android SDK version 34.0.0) [2.2s]
    • Android SDK at C:\Users\filip\AppData\Local\Android\sdk
    • Emulator version 32.1.15.0 (build_id 10696886) (CL:N/A)
    X Flutter requires Android SDK 36 and the Android BuildTools 28.0.3
      To update the Android SDK visit https://flutter.dev/to/windows-android-setup for detailed
      instructions.
    ! Some Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses

[√] Chrome - develop for the web [110ms]
    • Chrome at C:\Program Files (x86)\Google\Chrome\Application\chrome.exe

[√] Visual Studio - develop Windows apps (Visual Studio Build Tools 2022 17.12.3) [109ms]
    • Visual Studio at C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools
    • Visual Studio Build Tools 2022 version 17.12.35527.113
    • Windows 10 SDK version 10.0.19041.0

[√] Connected device (3 available) [152ms]
    • Windows (desktop) • windows • windows-x64    • Microsoft Windows [Version 10.0.26200.8894]
    • Chrome (web)      • chrome  • web-javascript • Google Chrome 150.0.7871.114
    • Edge (web)        • edge    • web-javascript • Microsoft Edge 150.0.4078.48

[√] Network resources [567ms]
    • All expected network resources are available.

! Doctor found issues in 1 category.

Activity

  1. changed the title [-][Windows] Impeller font rendering issue: thinner and more jagged[/-] [+]Impeller font rendering issue: thinner and more jagged[/+] on Aug 1, 2026
  2. filiph commented on Aug 1, 2026

    @filiph
    ContributorAuthor

    I initially thought this was just a Windows bug, but I can reproduce on macOS as well.

    No-impeller:

    Image

    Impeller:

    Image
  3. Razorex001 commented on Aug 1, 2026

    @Razorex001

    I'm able to reproduce this issue with the code sample that you provided on windows 10.

    See comment, which references similar Impeller font weight differences.

    Skia:

    Image

    Impeller:
    [IMPORTANT:flutter/shell/platform/embedder/embedder_surface_gl_impeller.cc(127)] Using the Impeller rendering backend (OpenGLESSDF).

    Image
    flutter doctor -v
    [√] Flutter (Channel master, 3.47.0-1.0.pre-322, on Microsoft Windows [Version 10.0.19045.7548], locale it-IT) [2,7s]
        • Flutter version 3.47.0-1.0.pre-322 on channel master at C:\src\flutter
        • Upstream repository https://github.com/flutter/flutter.git
        • Framework revision cda25ea220 (14 hours ago), 2026-07-31 20:43:58 -0400
        • Engine revision cda25ea220
        • Dart version 3.14.0 (build 3.14.0-82.0.dev)
        • DevTools version 2.61.0-dev.0
        • Feature flags: enable-web, enable-linux-desktop, enable-macos-desktop, enable-windows-desktop, enable-android, enable-ios, cli-animations, enable-native-assets,
          enable-record-use, enable-swift-package-manager, omit-legacy-version-file, enable-windowing, enable-lldb-debugging, enable-uiscene-migration, enable-riscv64
    
    [√] Windows Version (10 Pro 64-bit, 22H2, 2009) [3,0s]
    
    [√] Android toolchain - develop for Android devices (Android SDK version 36.1.0) [3,5s]
        • Android SDK at C:\Users\moret\AppData\Local\Android\sdk
        • Emulator version 36.6.11.0 (build_id 15507667) (CL:N/A)
        • Platform android-36.1, build-tools 36.1.0
        • Java binary at: C:\Program Files\Android\Android Studio\jbr\bin\java
          This is the JDK bundled with the latest Android Studio installation on this machine.
          To manually set the JDK path, use: `flutter config --jdk-dir="path/to/jdk"`.
        • Java version OpenJDK Runtime Environment (build 21.0.10+-14961533-b1163.108)
        • All Android licenses accepted.
    
    [√] Chrome - develop for the web [124ms]
        • Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe
    
    [√] Visual Studio - develop Windows apps (Visual Studio Community 2022 17.14.36) [123ms]
        • Visual Studio at C:\Program Files\Microsoft Visual Studio\2022\Community
        • Visual Studio Community 2022 version 17.14.37502.11
        • Windows 10 SDK version 10.0.26100.0
    
    [√] Connected device (3 available) [297ms]
        • Windows (desktop) • windows • windows-x64    • Microsoft Windows [Version 10.0.19045.7548]
        • Chrome (web)      • chrome  • web-javascript • Google Chrome 150.0.7871.187
        • Edge (web)        • edge    • web-javascript • Microsoft Edge 150.0.4078.105
    
    [√] Network resources [687ms]
        • All expected network resources are available.
    
    • No issues found!
    
  4. filiph commented on Aug 1, 2026

    @filiph
    ContributorAuthor
  5. Hari-07 commented on Aug 1, 2026

    @Hari-07
    Member

    Could you try on master? Trying on macos on master with the given code sample the difference seen in the screenshots wasn't apparent in skia vs impeller

  6. Razorex001 commented on Aug 1, 2026

    @Razorex001

    Could you try on master? Trying on macos on master with the given code sample the difference seen in the screenshots wasn't apparent in skia vs impeller

    Note that my test was done on master, but on windows 10, and on my end I was able to reproduce the issue (also see screenshots that I posted). Not sure about macos, as I don't have apple devices to test it on. Maybe @filiph can do the macos test with latest master.

  7. filiph commented on Aug 1, 2026

    @filiph
    ContributorAuthor

    I'm not able to run the example on master due to this error:

    <unknown>:0: error: file '/Users/filiph/dev/impeller_windows_render_bug/build/macos/Build/Products/Debug/FlutterMacOS.framework/Headers/FlutterPluginRegistrarMacOS.h' has been modified since the module file '/Users/filiph/dev/impeller_windows_render_bug/build/macos/Build/Intermediates.noindex/SwiftExplicitPrecompiledModules/FlutterMacOS-EB2I1X8OEY51SORFFEHAHR5XK.pcm' was built: size changed (was 6038, now 6403) ** BUILD FAILED **

  8. filiph commented on Aug 1, 2026

    @filiph
    ContributorAuthor

    Ok, sorry, it just needed a flutter clean and now the build succeeds.

    macOS master without impeller

    Image

    macOS master with impeller

    Image

    Conclusion

    As far as I can tell, impeller on macOS on the master channel doesn't have this issue.

    Image

    So, to summarize:

    • issue is visible on current beta on macOS
    • issue is fixed on current master on macOS
    • issue is visible on both beta and master on Windows
  9. puneetkukreja98 commented on Aug 3, 2026

    @puneetkukreja98
    Contributor

    @filiph Thanks for reporting this issue. I was able to reproduce it on windows and android on the latest master channel.

    Findings:

    Windows:
    Impeller-enabled:

    Image

    Impeller-disabled:

    Image

    Android:
    Impeller-enabled:

    Image

    Impeller-disabled:

    Image

    Flutter doctor -v:

    PS C:\developer\flutter> flutter doctor -v
    [√] Flutter (Channel master, 3.47.0-1.0.pre-331, on Microsoft Windows [Version 10.0.26200.8037], locale en-IN) [1,968ms]
        • Flutter version 3.47.0-1.0.pre-331 on channel master at C:\Developer\flutter
        • Upstream repository https://github.com/flutter/flutter.git
        • Framework revision 272fe23e0e (2 hours ago), 2026-08-03 17:20:32 +0900
        • Engine revision 272fe23e0e
        • Dart version 3.14.0 (build 3.14.0-82.0.dev)
        • DevTools version 2.61.0-dev.0
        • Feature flags: enable-web, enable-linux-desktop, enable-macos-desktop, enable-windows-desktop, enable-android, enable-ios,
          cli-animations, enable-native-assets, enable-record-use, enable-swift-package-manager, omit-legacy-version-file,
          enable-windowing, enable-lldb-debugging, enable-uiscene-migration, enable-riscv64
    
    [√] Windows Version (Windows 11 or higher, 25H2, 2009) [2.3s]
    
    [√] Android toolchain - develop for Android devices (Android SDK version 37.0.0) [2.6s]
        • Android SDK at C:\Users\Puneet\AppData\Local\Android\sdk
        • Emulator version 36.6.11.0 (build_id 15507667) (CL:N/A)
        • Platform android-37.1, build-tools 37.0.0
        • Java binary at: C:\Program Files\Android\Android Studio1\jbr\bin\java
          This is the JDK bundled with the latest Android Studio installation on this machine.
          To manually set the JDK path, use: `flutter config --jdk-dir="path/to/jdk"`.
        • Java version OpenJDK Runtime Environment (build 21.0.10+-14961533-b1163.108)
        • All Android licenses accepted.
    
    [√] Chrome - develop for the web [95ms]
        • Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe
    
    [√] Visual Studio - develop Windows apps (Visual Studio Community 2026 18.3.2) [94ms]
        • Visual Studio at C:\Program Files\Microsoft Visual Studio\18\Community
        • Visual Studio Community 2026 version 18.3.11520.95
        • Windows 10 SDK version 10.0.26100.0
    
    [√] Connected device (3 available) [452ms]
        • Windows (desktop) • windows • windows-x64    • Microsoft Windows [Version 10.0.26200.8037]
        • Chrome (web)      • chrome  • web-javascript • Google Chrome 150.0.7871.187
        • Edge (web)        • edge    • web-javascript • Microsoft Edge 150.0.4078.105
    
    [√] Network resources [546ms]
        • All expected network resources are available.
    
    • No issues found!
  10. puneetkukreja98 commented on Aug 3, 2026

    @puneetkukreja98
    Contributor
  11. added
    platform-androidAndroid applications specifically
    engineflutter/engine related. See also e: labels.
    platform-windowsBuilding on or for Windows specifically
    e: impellerImpeller rendering backend issues and features requests
    and removed
    in triagePresently being triaged by the triage team
    on Aug 3, 2026
  12. filiph commented on Aug 3, 2026

    @filiph
    ContributorAuthor

    Thanks for the validation and the research! Let me know if there's a canonical issue for this and we can close this in favor of that one.

    The closest general one seems to be the one by @jonahwilliams . But I'll say that the way that one is titled makes it sound less important than it really is (is it truly is the same issue). I don't think anyone is too upset of their bold font is a tiny bit less bold, but I definitely care of my already thin font becomes so thin it's hard to read. Work Sans w100 looks amazing in Skia but even the tiny, sub-pixel thinking makes it almost unreadable in smaller don't sizes.

  13. gaaclarke commented on Aug 3, 2026

    @gaaclarke
    Member

    We did some work to fix the wispiness of text previously. I'll double check windows, the before after on linux looks good but the windows patch didn't include a before/after:

  14. gaaclarke commented on Aug 3, 2026

    @gaaclarke
    Member

    The patch in #187871 did help the test case we were using. The top is "after", and the bottom is "before". Looks like this repro is running into a different case.

    Image
  15. added
    P1High-priority issues at the top of the work list
    on Aug 3, 2026
  16. self-assigned this
    on Aug 3, 2026
  17. gaaclarke commented on Aug 3, 2026

    @gaaclarke
    Member

    The gamma correction has a constant value in text_contents.cc. We might have been a bit cautious with windows, here is skia vs impeller with it cranked up to 2.0. We'll have to do some research to make sure we got the right value, and if it's the same value for linux like we have now.

    Image
  18. github-actions commented on Aug 18, 2026

    @github-actions

    This thread has been automatically locked since there has not been any recent activity after it was closed. If you are still experiencing a similar issue, please open a new bug, including the output of flutter doctor -v and a minimal reproduction of the issue.

  19. locked as resolved and limited conversation to collaborators on Aug 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

P1High-priority issues at the top of the work liste: impellerImpeller rendering backend issues and features requestsengineflutter/engine related. See also e: labels.platform-androidAndroid applications specificallyplatform-windowsBuilding on or for Windows specificallyteam-engineOwned by Engine teamtriaged-engineTriaged by Engine team

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions