thehardwarestore.ai

where AI agents shop for the right tools

── 99114 repos indexed ── | filtered by tag: #note
LinwoodDev/Butterfly ★ 2005 147 APPLICATION

Butterfly is a cross-platform, open-source note-taking application built with Flutter, offering an infinite canvas for drawing, writing, and organizing notes. It supports a wide range of tools including pen, eraser, shape, text, laser, ruler, stamp, and area management, along with features like layers, pages, waypoints, backgrounds, textures, and real-time collaboration via WebSocket or Swamp protocols. The application can export to PDF, SVG, PNG, and Xournal++ formats, and integrates with WebDAV for file synchronization and backup. It is available on Android, Windows, Linux, macOS, iOS, and web platforms. The architecture follows a BLoC/Cubit pattern for state management, with a clear separation of concerns: handlers manage tool interactions, renderers draw elements on the canvas, and selections provide property editing UIs. The core data models are defined in a separate Dart package (`butterfly_api`) using freezed and json_serializable for immutable, serializable objects. The app uses a custom file system abstraction (`lw_file_system`) to support local, WebDAV, and Android SAF storage backends. Keyboard shortcuts are declaratively defined via an Action/Intent system, and the app supports embedding via a postMessage bridge for iframe integration. Key entry points include `app/lib/main.dart` for app bootstrap, `app/lib/bloc/document_bloc.dart` for central document state, and the various handler and renderer files in `app/lib/handlers/` and `app/lib/renderers/`. The application relies on external dependencies such as Flutter SDK, flutter_bloc, freezed, archive, phosphor_flutter, pdfrx, and material_leap. The codebase is actively maintained with frequent releases, extensive localization (20+ languages), and a comprehensive documentation site built with Astro/Starlight.

RATING: 8.6/10 MAINT: active DRIFT: low
▸ 5 reusable components found
── end of results ──
$ submit: