- 🎯 Native Integration - Seamlessly integrates into Seanime's UI with a native-style button
- ⚡ Fast Loading - Optimized to appear in ~500ms with smart retry logic
- 📺 Anime & Manga Support - Works on both anime and manga detail pages
- 🔗 Direct Links - Opens the corresponding MyAnimeList page in a new tab
- 🎨 Clean Design - Uses the official MAL logo with Seanime's styling
- 🛡️ Robust - Handles edge cases, React re-renders, and API errors gracefully
- Open Seanime → Navigate to Extensions
- Search for "MAL Button"
- Click Install
- The button will appear automatically on anime/manga pages!
- Download the latest release from GitHub
- In Seanime, go to Extensions → Development
- Click Install from URL and paste:
https://raw.githubusercontent.com/bruuhim/MAL-Button-Seanime/refs/heads/main/src/manifest.json
- Navigate to any Anime or Manga detail page in Seanime
- Look for the MAL button in the action bar (next to the AniList button)
- Click it to open the corresponding MyAnimeList page in a new tab
Note: The button only appears if the anime/manga has a MyAnimeList entry.
- Uses Seanime's
ctx.domAPI to safely inject the button - Waits for the action bar container to be ready (500ms initial delay)
- Retries every 500ms if the DOM isn't ready yet
- Removes duplicate buttons automatically
- Navigation Detection - Listens to
ctx.screen.onNavigate - Entry Fetching - Gets anime/manga data via
ctx.anime.getAnimeEntry()orctx.manga.getMangaEntry() - MAL ID Extraction - Checks if
media.idMalexists - Button Injection - Creates and injects the MAL button next to the AniList button
- Initial delay: 500ms (optimized for fast loading)
- Retry interval: 500ms (if DOM not ready)
- Button appears: Usually within 0.5-1 second
MAL-Button-Seanime/
├── src/
│ ├── MAL.ts # Main plugin logic
│ ├── manifest.json # Plugin metadata
│ ├── icon.png # Plugin icon
│ ├── app.d.ts # Seanime app type definitions
│ ├── core.d.ts # Core type definitions
│ ├── plugin.d.ts # Plugin API type definitions
│ └── system.d.ts # System type definitions
├── assets/
│ ├── Preview-01.png # Screenshot 1
│ ├── Preview-02.png # Screenshot 2
│ └── Screenshot-After.png # Main preview
├── README.md
├── LICENSE
└── package.json
This plugin is written in TypeScript and uses Seanime's plugin system. No build step is required - Seanime compiles TypeScript plugins automatically.
Contributions are welcome! Please feel free to submit a Pull Request.
- ⚡ Performance: Reduced initial delay from 2s to 500ms
- ⚡ Performance: Reduced retry increment from 2s to 500ms
- 🚀 Button now appears 4x faster!
- 🔄 Complete sync with developer's PR version
- ✅ Stable release with proper TypeScript definitions
- 🐛 Fixed handling of "GoError: no cached data available"
- 🔧 Improved robustness when switching between Anime/Manga
MIT License - See LICENSE for details
- Original concept and implementation by bruuhim
- Optimizations and improvements by nnotwen
- Built for Seanime by 5rahim
Made with ❤️ for the Seanime community
If you find this useful, please ⭐ the repo!
