hAudiotagger
Rust-powered audio metadata for Flutter
Read, write, and edit audio metadata across Android, iOS, Linux, macOS, Windows, and Web. Built on lofty via flutter_rust_bridge.

Install
dependencies:
haudiotagger: ^1.3.5
Quick Start
import 'package:haudiotagger/haudiotagger.dart';
// Read
final tag = await Haudiotagger.read('/path/to/song.mp3');
print(tag?.title);
// Write
await Haudiotagger.write('/path/to/song.mp3', Tag(
title: 'My Song',
artist: 'Artist',
album: 'Album',
));
// Update (preserves other fields)
await Haudiotagger.update('/path/to/song.mp3', TagChanges(
album: 'New Album',
));
// Batch
final result = await Haudiotagger.batchWrite(paths, tag);
Features
| Feature | Platforms |
|---|---|
| Read / write metadata (title, artist, album, art, lyrics...) | All |
| Partial updates — change one field without touching others | All |
| Batch operations with progress callbacks | All |
| Custom tags (TXXX, Vorbis) | All |
| ID3v2 version control (v2.3 / v2.4) | All |
| Audio properties (duration, bitrate, codec...) | All |
| Validate & normalize metadata | All |
| Copy / merge tags with configurable strategy | All |
| ReplayGain (track/album gain/peak) | All |
| Chapters (ID3v2 CHAP frames for MP3) | All |
| Extended metadata (MusicBrainz, AcoustID, ISRC, 60+ fields) | All |
Read single field (readField — faster than full read) |
All |
Read pictures (all or by type, without full read) |
All |
| TagPipeline — 56-rule transformation engine | All |
| Format & rename files from metadata | All |
Supported Formats
| Format | Read | Write | Tags |
|---|---|---|---|
| MP3 | Yes | Yes | ID3v2, ID3v1, APE |
| FLAC | Yes | Yes | Vorbis Comments, ID3v2* |
| MP4 / M4A | Yes | Yes | iTunes ilst |
| Ogg Vorbis | Yes | Yes | Vorbis Comments |
| Opus | Yes | Yes | Vorbis Comments |
| AAC | Yes | Yes | ID3v2, ID3v1 |
| WAV | Yes | Yes | ID3v2, RIFF INFO |
| AIFF | Yes | Yes | ID3v2, Text Chunks |
| APE | Yes | Yes | APE, ID3v2*, ID3v1 |
| WavPack | Yes | Yes | APE, ID3v1 |
* Read only due to lack of official support
Performance
| Operation | 1 File | 100 Files |
|---|---|---|
| Read | 500 f/s | 1,282 f/s |
| Batch Write | 29 f/s | 197 f/s |
| Batch Update | 25 f/s | 197 f/s |
Note
Native file-path API with rayon parallelism. Benchmarked on Linux with 100 distinct MP3 files (~8 MB each).
Documentation
View Full Documentation →
| Page | Description |
|---|---|
| Getting Started | Installation, setup, web configuration |
| Examples | Real-world use cases with code |
| API Reference | Complete method & type documentation |
| Extended Metadata | MusicBrainz, ISRC, 60+ fields |
| Chapters | Podcast & audiobook chapter support |
| TagPipeline | 56-rule transformation engine |
| Web Setup | Cross-origin isolation & WASM config |
| Platform Notes | Platform-specific considerations |
| FAQ | Common questions & troubleshooting |
Live Demo
Try hAudiotagger in your browser — no install required:
Note
On the web, use *FromBytes variants (e.g. readFromBytes, writeToBytes). See Web Setup for details.
Requirements
- Flutter >= 3.0.0
- Dart SDK >= 3.6.0
License
hAudiotagger is open-source software licensed under the MIT License.
See the LICENSE file for more information.
❤️ Support
hAudiotagger is open-source software licensed under the MIT License.
If hAudiotagger helps you build something cool, consider:
- ⭐ Starring the repository
- 🐛 Reporting bugs
- 💡 Suggesting improvements
- 🤝 Contributing code
- 📦 Sharing the package with other Flutter developers
Every bit of support helps keep the project moving forward.
Made with ❤️ and 🦀 by Hirdaya Shrestha