NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #313 most downloaded on pub.dev
A reusable Dart logger used by the Mason CLI (package:mason_cli).
Last release 22 days ago
15 Sep 2026
Release timing varies
gaps range from 2 weeks to 13 months
Nearly every release is documented
notes for 29 of 29 stable releases
1 version withdrawn
withdrawn after publishing
5 years old
44 releases · first in 2021
One column per quarter.
feat(mason_logger): bump win32 support by @felangel in #1684
revert: upgrade pkg:win32 to ^6.0.0
pkg:win32 to ^6.0.0
deps: upgrade pkg:win32 to ^6.0.0
deps: upgrade pkg:win32 to ^5.11.0
pkg:win32 to ^5.11.0 (#1537)fix: link should depend on ansi escape support
link should depend on ansi escape support (#1505)chore: add platforms to pubspec.yaml
platforms to pubspec.yaml (#1420)feat: add interval to ProgressAnimation
fix: Logger.progress spams terminal on overflow
Logger.progress spams terminal on overflowfunding to pubspec.yamlrefactor: upgrade pkg:win32 to ^0.5.4
pkg:win32 to ^0.5.4 (#1300)
3.3.0fix: `The getter 'STD_HANDLE' isn't defined for the class 'WindowsTerminal'
refactor: remove deprecated methods in WindowsTerminal
feat: add trailing to ProgressOptions
trailing to ProgressOptions (#1247)chore: fix missing closing doc template
pkg:io (#1099)- fix: exit on Ctrl+C
chore(deps): upgrade dependencies
dart fix --applyfix: confirm gracefully handles utf8 decode errors
confirm gracefully handles utf8 decode errorspubspec.yaml```dart final logger = Logger();
feat: add promptAny to Logger
final logger = Logger();
// Prompt for a dynamic list of values.
final List<String> languages = logger.promptAny(
'What are your favorite programming languages?',
);
if (languages.contains('dart')) {
logger.info('Nice, I like dart too! 🎯');
}
fix: chooseAny renders selected results using display when specified
fix: chooseAny renders selected results using display when specified
feat: add LogStyle and LogTheme
// Create a custom `LogTheme` by overriding zero or more log styles.
final customTheme = LogTheme(
detail: (m) => darkGray.wrap(m),
info: (m) => m,
success: (m) => lightGreen.wrap(m),
warn: (m) => yellow.wrap(m),
err: (m) => lightRed.wrap(m),
alert: (m) => backgroundRed.wrap(white.wrap(m)),
);
// Create a logger with the custom theme
final logger = Logger(theme: customTheme);
// Use the logger
logger.info('hello world');
// Perform a one-off override
String? myCustomStyle(String? m) => lightCyan.wrap(m);
logger.info('custom style', style: myCustomStyle);
deps: upgrade to Dart >=2.19 and very_good_analysis ^4.0.0
Dart >=2.19 and very_good_analysis ^4.0.0fix: warn with an empty tag should not include []
warn with an empty tag should not include []Dart >=2.17 and very_good_analysis ^3.1.0fix: windows progress animation
fix: only animate progress on terminals
fix: improve clear line mechanism for Progress API
BREAKING feat: add generic support to chooseOne and chooseAny
BREAKING feat: add generic support to chooseOne and chooseAny
enum Shape { square, circle, triangle}
void main() {
final logger = Logger();
final shape = logger.chooseOne<Shape>(
'What is your favorite shape?',
choices: Shape.values,
display: (shape) => '${shape.name}',
);
logger.info('You chose: $shape');
final shapes = logger.chooseAny<Shape>(
'Or did you want to choose multiples?',
choices: Shape.values,
defaultValues: [shape],
display: (shape) => '${shape.name}',
);
logger.info('You chose: $shapes');
}
```dart import 'package:mason_logger/mason_logger.dart';
feat: add ProgressOptions API
import 'package:mason_logger/mason_logger.dart';
Future<void> main() async {
// 1. ✨ Create a custom ProgressOptions.
const progressOptions = ProgressOptions(
animation: ProgressAnimation(
frames: ['🌑', '🌒', '🌓', '🌔', '🌕', '🌖', '🌗', '🌘'],
),
);
// 2. 💉 Inject `progressOptions` into your Logger.
final logger = Logger(progressOptions: progressOptions);
// 3. 🤤 Admire your custom progress animation.
final progress = logger.progress('Calculating');
await Future.delayed(const Duration(seconds: 3));
progress.complete('Done!');
}
`dart final logger = Logger(); final repoLink = link( message: 'GitHub Repository', uri: Uri.parse('https://github.com/felangel/mason'), ); logger.inf
feat: add link API
final logger = Logger();
final repoLink = link(
message: 'GitHub Repository',
uri: Uri.parse('https://github.com/felangel/mason'),
);
logger.info('To learn more, visit the $repoLink.');
feat: render milliseconds on progress duration
package:metaIOOverridesrefactor(deps): remove pkg:universal_io
pkg:universal_ioREADME snippetBREAKING: remove deprecated Progress.call(...) (use Progress.complete instead).
Level is Level.info)Progress() as @internalalert writes to stderr instead of stdoutProgress.fail(...) writes to stdout instead of stderrProgress.call(...) (use Progress.complete instead).feat: Progress.update `dart final progress = logger.progress('Calculating'); await Future .delayed(const Duration(milliseconds: 500)); progress.update
Progress.updatefinal progress = logger.progress('Calculating');
await Future<void>.delayed(const Duration(milliseconds: 500));
progress.update('Halfway!');
await Future<void>.delayed(const Duration(milliseconds: 500));
progress.complete('Done!');
fix: correct J and K key mappings
fix: chooseOne API windows compatibility
chooseOne API windows compatibilitychooseAny/// Ask user to choose zero or more options.
final desserts = logger.chooseAny(
'Which desserts do you like?',
choices: ['🍦', '🍪', '🍩'],
);
fix: write errors and warnings to stderr
stderr
Logger().err(...)Logger().warn(...)Logger().progress(...).fail(...)`dart final favoriteColor = logger.chooseOne( 'What is your favorite color?', choices: ['red', 'green', 'blue'], defaultValue: 'blue', ); `
feat: chooseOne API
final favoriteColor = logger.chooseOne(
'What is your favorite color?',
choices: ['red', 'green', 'blue'],
defaultValue: 'blue',
);
feat: progress API enhancements `dart final progress = Logger().progress('calculating'); try { await _performCalculation(); // Complete progress succe
progress API enhancementsfinal progress = Logger().progress('calculating');
try {
await _performCalculation();
// Complete progress successfully.
progress.complete();
} catch (error, stackTrace) {
// Terminate progress unsuccessfully.
progress.fail();
}
fix: single line prompts are overwritten
confirm and promptfix: multiline prompts are outputting twice
confirm and prompt- feat: add write
writefeat: add hidden flag to prompt
hidden flag to promptfix: progress string truncation
progress string truncationconfirmdefaultValue to promptprogress time styleREADME- feat: add tag to warn call
tag to warn calldocs: README updates to include usage
chore: initial package (🚧 under construction 🚧)
Dev Release
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →