Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,15 @@ confirms the platform layer loads and constructs. What has never happened is a p
holding the key and speaking into a microphone. Describe it that way — not as "working",
not as "unfinished".

## Licence

AGPL-3.0-or-later (`LICENSE`). Every file you add here inherits it — no per-file header
is required, and none should be added unless the whole tree gets them. Before pulling in
a new dependency, check it is not GPL-incompatible and not source-available-but-not-open
(BSL, SSPL, Elastic, "free for non-commercial"): every current dependency is BSD, MIT,
Apache-2.0, ISC or OFL, and `THIRD-PARTY-NOTICES.md` is the inventory to update when that
changes. Models are downloaded at runtime, not distributed, and keep their own terms.

---

## The one rule that matters
Expand Down
661 changes: 661 additions & 0 deletions LICENSE

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,10 @@ app: build
@# script; the app falls back to a one-line equivalent when running outside a bundle.
@cp Resources/install-gws.sh "$(CONTENTS)/Resources/"
@cp Sources/SpeexEcho/LICENSE "$(CONTENTS)/Resources/SpeexDSP-LICENSE.txt"
@# The app's own licence travels inside the bundle: an AGPL binary has to be able to
@# point whoever received it at the terms it came under.
@cp LICENSE "$(CONTENTS)/Resources/LICENSE.txt"
@cp THIRD-PARTY-NOTICES.md "$(CONTENTS)/Resources/THIRD-PARTY-NOTICES.md"
@chmod +x "$(CONTENTS)/Resources/install-gws.sh"
@printf 'APPL????' > "$(CONTENTS)/PkgInfo"
@# Belt and braces: the staging dir isn't synced, but the copied binary can still carry
Expand Down
35 changes: 35 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ or follow through. A Wispr Flow-shaped native app with on-device defaults and op

![Next Notes turning a spoken false start into a finished sentence](site/public/demo-dictation.gif)

**Free software, [AGPL-3.0-or-later](LICENSE).** Read it, build it, fork it — modified
versions stay open, including ones run as a service. See [License](#license).

**Status:** the macOS app is in daily use. It supports Apple and Parakeet transcription,
deterministic or on-device LLM cleanup, per-app output formatting, personal dictionary bias
and corrections, and an opt-in voice Command Mode for editing selected text. Dictated text
Expand Down Expand Up @@ -945,3 +948,35 @@ faithfully they implement it. The implementation refuses to replace text when th
selection cannot be revalidated.

> `log` is shadowed in this shell — use `/usr/bin/log` explicitly or it returns nothing.

---

## License

Next Notes is free software under the **GNU Affero General Public License, version 3 or
later** ([`LICENSE`](LICENSE), SPDX `AGPL-3.0-or-later`). Copyright © 2026 Serge Kadjo.

Read it, build it, run it, change it, and ship your changes — the one condition is that the
changes stay as free as what they started from:

- **Using it** — privately, at work, on as many Macs as you like — costs nothing and obliges
nothing. Local use is not distribution.
- **Distributing it**, modified or not, means handing over the corresponding source under
this same licence: a DMG you hand someone, a fork you publish, a product you build on top.
- **Running a modified version as a network service** means the same thing, to the people
using that service. That is the Affero clause, and it is the reason this is AGPL rather
than plain GPL: a hosted transcription or meeting-notes product built on this code owes
its users the source, exactly as a downloadable one does.
- **Your own recordings, transcripts and notes are yours.** The licence covers the program,
never its output.

The AGPL does not require you to publish anything you never hand to anyone else, and it does
not reach the separate programs Next Notes merely talks to — a coding CLI over ACP, an MCP
server, `gws`, OpenRouter.

**Contributions** are accepted under the same licence: open a pull request and you are
licensing that work under AGPL-3.0-or-later, with copyright staying yours. No CLA.

Third-party code bundled or linked here is permissive (BSD, MIT, Apache-2.0, ISC, OFL) and
compatible in this direction — see [`THIRD-PARTY-NOTICES.md`](THIRD-PARTY-NOTICES.md).
Models are downloaded at runtime under their own terms and are not covered by this licence.
4 changes: 4 additions & 0 deletions Resources/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@
come back, and `AppIdentity` folds the old `ai.pivotstudio.speechify` defaults in. -->
<key>CFBundleIdentifier</key>
<string>ai.pivotstudio.nextnotes</string>
<!-- Shown in the About panel and in Finder's Get Info. AGPL-3.0-or-later: the full
text ships beside it as Resources/LICENSE.txt. -->
<key>NSHumanReadableCopyright</key>
<string>Copyright © 2026 Serge Kadjo. Licensed under the GNU Affero General Public License v3.0 or later.</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
Expand Down
67 changes: 67 additions & 0 deletions THIRD-PARTY-NOTICES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# Third-party notices

Next Notes is licensed under the GNU Affero General Public License v3.0 or later
(see [`LICENSE`](LICENSE)). Everything it vendors, links, or bundles is under a
permissive licence that is one-way compatible with the AGPL, so the combined work
can be — and is — distributed under the AGPL. Nothing here imposes a term the AGPL
does not already satisfy beyond the attribution notices reproduced below.

The vendored copies carry their own licence files inside the tree; those files are
authoritative and are shipped inside the built `.app`.

## Vendored source (in this repository)

| Component | Where | Licence |
|---|---|---|
| Xiph SpeexDSP (acoustic echo canceller) | `Sources/SpeexEcho/` | BSD 3-Clause — `Sources/SpeexEcho/LICENSE` |
| Thinking orbs animation (Jakub Antalik) | `Sources/NextNotes/UI/Components/ThinkingOrbs/` | MIT — that directory's `LICENSE` |
| WebRTC audio processing bridge sources | `Vendor/WebRTCAudio/NextNotesAEC.{h,cpp}` | Part of Next Notes, AGPL-3.0-or-later |

## Built and bundled at package time

`Tools/build-webrtc-audio.sh` builds these from pinned, hash-verified sources; `make app`
copies their licence files into `Next Notes.app/Contents/Resources/WebRTCAudio/`.

| Component | Licence |
|---|---|
| Freedesktop `webrtc-audio-processing` 2.1 | BSD 3-Clause — `Vendor/WebRTCAudio/WEBRTC-AUDIO-PROCESSING-LICENSE` |
| WebRTC (upstream) | BSD 3-Clause + patent grant — `Vendor/WebRTCAudio/WEBRTC-LICENSE`, `WEBRTC-PATENTS` |
| Abseil 20240722.0 | Apache-2.0 — `Vendor/WebRTCAudio/ABSEIL-LICENSE` |
| Ooura FFT and other WebRTC third-party code | see `Vendor/WebRTCAudio/THIRD-PARTY-LICENSE` |

## macOS dependencies

| Component | Licence |
|---|---|
| llama.cpp XCFramework (`ggml-org/llama.cpp`) | MIT |
| FluidAudio (`FluidInference/FluidAudio`) | Apache-2.0 |
| sherpa-onnx C API (`k2-fsa/sherpa-onnx`), dlopened at runtime | Apache-2.0 |

## Windows dependencies

| Component | Licence |
|---|---|
| Avalonia 11.3.20 | MIT |
| NAudio 2.3.0 | MIT |
| `org.k2fsa.sherpa.onnx` 1.13.5 (bundles ONNX Runtime) | Apache-2.0 |
| xunit, Shouldly, NetArchTest.Rules (test only, not shipped) | Apache-2.0 / BSD-3-Clause / MIT |

## Landing page (`site/`)

React, React DOM, Framer Motion, Tailwind CSS, PostCSS, Autoprefixer, Vite and TypeScript
are MIT; `lucide-react` is ISC; the Fontsource packages redistribute Inter and
Instrument Serif under the SIL Open Font License 1.1. The fonts keep their OFL terms when
the site is copied; the OFL's only real constraint — do not sell the fonts on their own and
do not rename them — is untouched by the AGPL.

## Models

Speech and language models (Apple's own, Parakeet TDT, Qwen, S1-mini, the wake-word model)
are **downloaded at runtime and are not distributed with this source or with the app**.
Each carries its own licence from its publisher, which the AGPL here neither extends nor
restricts. Check the model's own terms before redistributing weights.

## Cloud services

OpenRouter, Google Workspace (`gws`), Composio and any MCP server the user configures are
optional, opt-in, and reached over the network. They are services, not code in this work.
1 change: 1 addition & 0 deletions site/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"name": "nextnotes-site",
"private": true,
"license": "AGPL-3.0-or-later",
"version": "0.0.0",
"type": "module",
"scripts": {
Expand Down
6 changes: 5 additions & 1 deletion windows/Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@

<Company>Pivot Studio</Company>
<Product>Next Notes</Product>
<Copyright>Copyright © Pat Simmons</Copyright>
<Copyright>Copyright © 2026 Serge Kadjo</Copyright>

<!-- Stamped into every assembly. The repository is AGPL-3.0-or-later; a Windows
build handed to anyone has to carry the same terms as the macOS one. -->
<PackageLicenseExpression>AGPL-3.0-or-later</PackageLicenseExpression>
</PropertyGroup>
</Project>
Loading