Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Noo
A fast, native Nextcloud client built with Flutter and Material 3.
Noo is a clean, modern way to browse and manage the files on your own Nextcloud server: files, photos, shares, activity, and trash in one app, themed to match your device and laid out for both phones and tablets.
Website: https://noo.ayushya.dev
Noo is an independent, unofficial client. It is not affiliated with or endorsed by Nextcloud GmbH.
Features
- Files: browse, upload, move, copy, rename, delete, and favorite files and folders; sort and filter per folder; list or grid view
- Photos: a media gallery with a full-screen viewer for images and video
- Viewer: images, video, PDF (pinch to zoom), Markdown and text, with a pull-up details panel (info, activity, sharing)
- Shares, Recent, Favorites, Activity, Trash: see and manage what you have shared, what changed, and what you deleted
- Search across your server
- Offline and sync: keep files available offline and sync chosen folders in the background
- Multiple accounts: switch between saved accounts from the avatar menu
- App lock: optionally require device authentication to open the app, switch accounts, or reveal hidden files
- Share to Noo: upload from any app's share sheet
- Make it yours: Material You dynamic color, five accent colors, light/dark/AMOLED, attached or floating bottom bar, hamburger or avatar navigation, adjustable upload button, and a tablet layout with a sidebar
- Secure sign-in: authenticates through Nextcloud's Login Flow v2. You sign in through your browser, and Noo never sees or stores your password, only a scoped app password
Getting started
Prerequisites:
- Flutter (SDK
^3.12.2) - An Android device or emulator, an iOS device, or Windows
- A Nextcloud server with Login Flow v2 enabled (on by default since Nextcloud 15)
flutter pub get
flutter run
On first launch, enter your server's address. Noo opens your browser to finish signing in.
Building
flutter build apk # Android (debug-signed unless you configure a key)
flutter build ios # iOS
flutter build windows # Windows
Release builds read signing details from android/key.properties or from
RELEASE_KEYSTORE_* environment variables (see android/app/build.gradle.kts).
Neither the keystore nor key.properties is, or should ever be, committed.
Without them, release builds fall back to debug signing.
Tech stack
Flutter with Material 3, provider for
state management, and http/dio talking directly to Nextcloud's WebDAV and
OCS APIs, with no bundled Nextcloud SDK. Android has native workers for
transfers and background sync.
Contributing
Contributions are welcome. Please read CONTRIBUTING.md
first. In short:
flutter test # run tests
flutter analyze # static analysis / lints
Architecture, server integration, styling conventions, and code standards are
documented in CLAUDE.md and .claude/context/, written for
both human and AI contributors.
Privacy
Noo talks only to the Nextcloud server you point it at. It has no analytics and no third-party tracking. Read the full privacy policy.
Acknowledgements
Typefaces Instrument Sans and Schibsted Grotesk are bundled under the SIL Open Font License, and icons are from Lucide. Those keep their own licenses; the license below covers Noo's own code and assets.
License
Noo is source-available under the PolyForm Shield License 1.0.0. In plain terms: you may read, build, run, and modify the code, and contribute changes back, but you may not use it to make a product or service that competes with Noo. Please do not republish it as your own app.
Contributions are welcome under the terms in
CONTRIBUTING.md.
Why PolyForm Shield?
I want the code to be open to read, learn from, build, and improve, while keeping anyone from lifting it and shipping a competing copy of the app. Permissive licenses (MIT, Apache) allow exactly that, and copyleft ones (GPL) still allow a rebranded fork. PolyForm Shield sits in between: it is not an OSI "open source" license, and I'm not claiming it is, but it keeps the code available while protecting the project.
Where development happens
The source of truth is a self-hosted Gitea instance, and this GitHub
repository is a read-only mirror plus the public issue tracker. I keep it
that way so that I own my hosting, builds, and release credentials rather
than depending on a third party for them. You don't have to use Gitea:
open issues and pull requests here as usual. Open PRs are imported to my
instance, reviewed and merged there, and main is mirrored back here, so a
merged PR may show as closed with a link to the commit instead of "Merged".
See CONTRIBUTING.md for details.