September is an assistive communication app for people with ALS, MND, or other speech and motor difficulties. It helps a user express a full thought with fewer keystrokes.
The screenshots on this page show the browser app with sample data.
September contains three applications:
apps/webis the browser application.apps/desktopis the Tauri application for macOS.apps/keyboardis the native floating keyboard for macOS.
The web and desktop applications import the same rules, autocomplete engine,
design system, and application screens from the root workspace packages. Each
app keeps its own route bootstrap and platform services. The web app also has a
public landing page at /.
The web app stores data and its bounded speech cache in one IndexedDB database. The desktop app stores domain data in SQLite and provider keys in the macOS Keychain.
- Talk spaces combine saved phrases, word suggestions, and a text composer.
- A suggestion row can start with the typed words or contain them. The Mac app shows Talk in one panel that floats above other apps.
- Each space has an Agent that can read its context and propose approved changes to its setup, notes, phrases, and Talk transcript.
- System and ElevenLabs voices speak Talk messages and notes.
- The ElevenLabs Dialogue voice reads audio tags such as
[laughs]. Five mood keys set the tone of the suggestions. - Notes store prepared long-form text inside a space.
- A note presents full-screen in the user's voice, and exports as text, audio, or a captioned video.
- Phrase codes expand short input into a full phrase.
- Local usage reports show saved keystrokes and provider use.
- AI Assistance uses one provider. Suggestions have their own model. The agent and phrases share a second model.
- Separate switches control automatic AI suggestions, phrase generation, and the agent. AI suggestions wait for a space or punctuation.
- A portable JSON backup moves settings and data between the browser and Mac apps.
- ElevenLabs can create a cloned voice from browser or desktop recordings.
- Help groups step-by-step guidance by task, searches the shared guide catalog, and labels each guide for the browser, Mac app, or Mac keyboard.
Help remains available before setup is complete. The setup screen opens its
guide inline, while /help and each stable guide link open the full Help
screen.
A note holds prepared long-form text inside a space. The same words read aloud, present, or export.
Present fills the screen with one chunk of the note at a time and speaks it in the user's voice.
Today reports the typing the app saved and what the services cost. The numbers stay on the device.
- Node.js 20 or later
- pnpm
- Rust and the Tauri system requirements for desktop builds
- Swift 6 and Xcode command-line tools for the native keyboard
Install the JavaScript workspace from the repository root:
pnpm installThe web app does not use environment variables for provider keys. Add OpenRouter or ElevenLabs keys in the application settings.
Start the browser application:
make devThe application opens at http://localhost:3009.
Start the desktop application:
make desktop-devStart the native keyboard:
make mac-runBuild its signed app bundle or installable DMG:
make mac-app
make keyboard-dmgThe keyboard uses the bundle identifier com.september.keyboard. The DMG is
written to apps/keyboard/.build/release/Keyboard.dmg.
Store the Apple signing values in the ignored root .envrc file:
export APPLE_TEAM_ID=...
export APPLE_SIGNING_IDENTITY=...
export APPLE_PROVISIONING_PROFILE=...
export APPLE_API_ISSUER=...
export APPLE_API_KEY=...
export APPLE_API_KEY_PATH=...Create the signed desktop installer from the repository root:
make desktop-releaseThe command builds the app and DMG, submits both to Apple, staples the tickets, checks the DMG with Gatekeeper, and prints its path and SHA-256 checksum.
september/
├── apps/
│ ├── web/ Vite browser SPA and native IndexedDB repository
│ ├── desktop/ Vite UI, Tauri shell, Rust commands, and SQLite
│ └── keyboard/ Native macOS floating keyboard
├── packages/
│ ├── core/ Pure rules and autocomplete
│ ├── ui/ Shared tokens and generic UI primitives
│ └── app-ui/ Shared layouts, blocks, and application screens
└── docs/ concepts, plans, research, notes, and screenshots
Read the instruction file in an application directory before you change that application. JavaScript dependencies use the root lockfile. Commands can still run from an app directory.
The web app deploys to Vercel through .github/workflows/production.yaml.
The former server module and its Makefile deployment commands have been removed.
Removing local code does not decommission previously deployed infrastructure.
The public /privacy-policy and /terms-of-service pages cover the supplied
applications. They describe September as a personal open-source project in
India. The terms follow the MIT License, and the privacy notice explains the
actual data flows. See apps/web/src/pages/legal.tsx and
docs/research/2026-09-05-india-legal-review.md.
The browser app imports the old web databases one time. It validates the imported rows before it removes the old databases and local-storage keys.
If another tab blocks database removal, close the old tab and start September again. The next start retries removal without another import.
Run the checks from the application directory:
pnpm -C apps/web test
pnpm -C apps/web lint
pnpm -C apps/web build
pnpm -C apps/desktop test
pnpm -C apps/desktop build
make mac-testTests cover current behavior at module boundaries. They do not pin page copy, visual styling, or the absence of retired code.
September uses the MIT License. See LICENSE.



