A realistic typing simulator that pastes clipboard content by "typing" it out with human-like imperfections.
Explore the docs »
View Demo
·
Report Bug
·
Request Feature
Table of Contents
FlowState is a cross-platform typing simulator designed for intelligent humanlike autotyping. Unlike standard macro pastes that dump text instantly, FlowState simulates a human touch by incorporating:
- Natural Rhythm: Gaussian distribution for keystroke delays to avoid robotic patterns.
- Context Awareness: Faster typing on common bigrams and realistic pauses at punctuation.
- Intelligent Errors: Simulated mistakes determined by content, followed by realistic correction pauses.
- Cognitive Pauses: Random "thinking" moments and paragraph breaks.
- Per-App Profiles: Override typing settings per application (e.g., fast in Slack, careful in Google Docs).
FlowState has separate builds for Windows and macOS. Choose the method that works best for you.
Pre-built installers are available on the Releases page.
| Platform | Download | What it does |
|---|---|---|
| Windows | FlowState_Windows_Setup.exe |
Standard Windows installer (Inno Setup). Installs to Program Files, creates Start Menu & desktop shortcuts. |
| macOS | FlowState_Mac_Installer.dmg |
Standard macOS disk image. Drag FlowState.app to your Applications folder. |
Windows Note: FlowState requires Administrator to run because it uses global keyboard hooks (a Windows security requirement).
macOS Note: On first launch, macOS will ask you to grant Accessibility permission (System Settings → Privacy & Security → Accessibility). This is required for global hotkeys and is a standard Apple security prompt.
If you prefer to run from source, or you want to inspect exactly what FlowState does:
-
Clone the repo (or download the ZIP)
git clone https://github.com/hammersurf1/FlowState.git cd FlowState -
Run the setup script for your platform:
Windows:
setup_windows.bat
macOS:
chmod +x setup_mac.sh ./setup_mac.sh
The setup scripts will:
- Check that Python 3 is installed
- Create a virtual environment in
.venv/ - Install dependencies from the platform-specific requirements file
- Download the spaCy
en_core_web_mdmodel - Print clear instructions for running the app
-
Run FlowState:
Windows (run as Administrator):
.venv\Scripts\activate python src\main_win.py
macOS:
source .venv/bin/activate python3 src/main_mac.py
- Copy text to your clipboard (
Ctrl+C/Cmd+C). - Click into the target text field (in Chrome).
- Press the trigger hotkey. A 3-second countdown lets you release the hotkey before typing starts.
| Hotkey | Windows | macOS |
|---|---|---|
| Start / Pause / Resume | Ctrl+Alt+V |
⌘+⌥+V |
| Pause immediately | Esc |
Esc |
| Abort and reset | Esc (double-tap, <0.5s) |
Esc (double-tap, <0.5s) |
| Cycle through settings | Ctrl+Shift+Alt+↑/↓ |
⌘+⇧+⌥+↑/↓ |
| Adjust selected setting | Ctrl+Shift+Alt+→/← |
⌘+⇧+⌥+→/← |
FlowState can type with rich formatting (bold, italic, lists, headings, etc.) when Enable Rich Text is turned on in Settings. Use Markdown syntax in your clipboard text:
| Syntax | Result | Shortcut sent |
|---|---|---|
**text** or __text__ |
Bold | Ctrl/Cmd+B |
*text* or _text_ |
Italic | Ctrl/Cmd+I |
___text___ |
Underline | Ctrl/Cmd+U |
~~text~~ |
Alt+Shift+5 (Google Docs) | |
# Heading |
Heading 1 | Ctrl/Cmd+Alt+1 |
## Heading |
Heading 2 | Ctrl/Cmd+Alt+2 |
### Heading |
Heading 3 | Ctrl/Cmd+Alt+3 |
- item or * item |
• Bullet list | Ctrl/Cmd+Shift+8 |
1. item |
1. Numbered list | Ctrl/Cmd+Shift+7 |
- item (2 spaces) |
→ Sub-bullet | Tab indent |
\t- item (tab) |
→ Sub-bullet | Tab indent |
Example clipboard text:
# Meeting Notes
**Attendees:** Alice, Bob
## Agenda
- Intro
- Welcome
- ~~Old item~~ (cancelled)
1. Action items
1. Send reportNotes:
- Strikethrough (
~~) works best in Google Docs (uses the Docs-specific Alt+Shift+5 shortcut). - Sub-bullets and sub-numbers are created by indenting with 2 spaces or a tab.
- The target editor must support the standard Ctrl/Cmd shortcuts for formatting.
The icon gives a live status readout. It shows the active setting's short name and current value.
| Icon color | Meaning |
|---|---|
| 🔵 Blue | Idle |
| 🟢 Green | Typing / countdown |
| 🟠 Orange | Paused |
FlowState uses spaCy with the en_core_web_md model to make typing feel genuinely human. These features can be toggled individually in Settings under the Semantic Humanization section:
| Feature | What it does |
|---|---|
| Smart Revisions | Occasionally types a semantically similar word first, hesitates, backspaces, and types the correct word. Only triggers on nouns, verbs, and adjectives. |
| Semantic Speed | Adjusts typing speed based on word frequency. Common words (e.g., "the", "and") flow faster; rare words slow down slightly. |
| Entity Care | Named entities (people, companies, places) are typed with extra care — fewer typos and steadier rhythm. |
| Clause Pauses | Uses dependency parsing to insert micro-pauses at the end of subordinate clauses, not just at sentence boundaries. |
| Chunk Burst | Treats noun phrases like "the quarterly results" as a single cognitive burst, reducing hesitation inside the phrase. |
| Frequency Typos | Very common words get fewer typos; rare words get the full typo chance. |
| Deferred Corrections | Sometimes finishes the current word before backspacing a typo, just like a real person would. |
Beyond semantic understanding, FlowState models actual motor constraints:
| Feature | What it does |
|---|---|
| Same-Finger Penalty | Slightly slower when the same finger types two consecutive keys. |
| Fluency States | Alternates between "in the zone" (low variance) and "stumbling" (higher variance) periods. |
| Number / Symbol Care | Digits and symbols are typed more deliberately with fewer typos. |
| Caps Lock Realism | Delay penalty applies only to the first capital in a run, not every capital letter. |
FlowState is fully open-source and designed to be transparent about what it does:
Why does it need Administrator / Accessibility permissions?
- Windows: The
keyboardlibrary requires Administrator to register global hotkeys. This is a Windows security policy — any app that listens for keystrokes system-wide needs elevated privileges. - macOS: The
pynputlibrary requires Accessibility permission to register global hotkeys. This is Apple's standard security model — you enable it once in System Settings and it persists.
What does FlowState access?
- Your clipboard (to read the text you want typed)
- Your keyboard (to simulate keystrokes and listen for hotkeys)
- Google Chrome (connects via Chrome's debugging port to type into browser tabs)
What FlowState does NOT do:
- ❌ No network requests (except localhost to Chrome)
- ❌ No telemetry or analytics
- ❌ No data collection
- ❌ No registry/system modifications
The setup scripts echo every step they perform. The source code is MIT-licensed and fully auditable. The system is 100% local.
- Windows Support
- macOS Support
- Custom Macro Support
- Intelligent revision history w/ NLP
- Per-App Profiles
- Linux Driver Implementation
See the open issues for a full list of proposed features (and known issues).
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Distributed under the MIT License. See LICENSE for more information.