Files
noo/README.md

5.0 KiB

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.