Open-source platform for interactive storytelling
Build branching narratives, visual novels, and dialogue systems on an infinite canvas.
Website | Documentation | Discord | Telegram
|
Build complex, non-linear narratives using a node-based editor on an infinite canvas. Connect scenes, add branching choices, and see your entire story structure at a glance. |
Export to JSON, HTML, Ren'Py, Dialogic (Godot), Unity, or Unreal Engine. Go from story to playable experience without manual data transfer. |
|
Manage characters, locations, items, and lore in a built-in knowledge base. Keep your story world consistent as it grows. |
Translate your stories into multiple languages with built-in localization support. Reach a global audience without leaving the editor. |
Go Flow combines visual editing, a knowledge base, and game engine integration in one open-source tool.
| Go Flow | Twine | Ren'Py | ink | Yarn Spinner | |
|---|---|---|---|---|---|
| Visual node editor | Yes | Yes | — | — | — |
| No coding required | Yes | Yes | — | — | — |
| Built-in knowledge base | Yes | — | — | — | — |
| Game engine export | Yes | — | Yes* | Yes | Yes |
| Self-hosted / open source | Yes | Yes | Yes | Yes | Yes |
| Web-based | Yes | Yes | — | — | — |
* Ren'Py is itself an engine. "—" means the feature is not built-in (may be available via plugins or workarounds).
- Docker (v20+)
- Docker Compose (v2+)
git clone https://github.com/goflowspace/goflow.git
cd goflow
./start.shThe app will be available at:
- Frontend: http://localhost:3000
- Backend API: http://localhost:3001
On first run, a default user is created automatically. Check the backend logs for credentials:
docker compose logs backend./stop.shCopy the example config and customize as needed:
cp .env.example .envKey settings in .env:
| Variable | Default | Description |
|---|---|---|
DATABASE_URL |
mongodb://mongodb:27017/goflow?replicaSet=rs0&directConnection=true |
MongoDB connection string |
FRONTEND_URL |
http://localhost:3000 |
Frontend URL (for CORS) |
NEXT_PUBLIC_API_URL |
http://localhost:3001 |
Backend API URL |
OSS_USER_PASSWORD |
auto-generated | Initial user password |
OPENAI_API_KEY |
— | Optional: enables AI features (OpenAI) |
ANTHROPIC_API_KEY |
— | Optional: enables AI features (Anthropic) |
goflow/
├── app/ # Frontend — Next.js 15, React 19, TypeScript
├── backend/ # Backend — Express, TypeScript, Prisma, MongoDB
├── docker-compose.yml
├── start.sh
└── stop.sh
- Frontend: Next.js 15, React 19, Tailwind CSS, Zustand, Socket.IO
- Backend: Express, TypeScript, Prisma ORM, MongoDB 7.0
- Real-time: WebSocket (Socket.IO)
- Infrastructure: Docker Compose
Backend:
cd backend
npm install
cp .env.example .env.development # configure DATABASE_URL
npm run devFrontend:
cd app
npm install
npm run devWe welcome contributions! Whether it's bug reports, feature requests, or pull requests — every bit helps.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes
- Push to the branch and open a Pull Request
See our Wiki for more details.
We're actively developing the OSS edition. Here's what's coming next:
- AI features for OSS — enable AI co-authoring with public providers (OpenAI, Anthropic, Google) and local models (Ollama, LM Studio) (#5)
- AI localization — verify and fix AI-powered translation of story content (#6)
Have an idea? Open an issue or join the discussion in our community channels.
- Discord — chat with the team and other creators
- Telegram Channel — news and updates
- Telegram Community — community chat
- GitHub Issues — bug reports and feature requests
Go Flow was created by Artem Slizhik and Egor Lyskov, with invaluable financial support from Dmitrii Kobzar and Ilya Saunkin.
Special thanks to the indie gamedev community — over 35 interviews with game developers, narrative designers, and writers helped shape Go Flow into what it is today.
This project is licensed under the GNU Affero General Public License v3.0.
You can freely use, modify, and distribute this software. If you run a modified version on a server and let others interact with it, you must make the source code of your modified version available to them.

