Skip to content

Khizarshah01/writeSimply

Repository files navigation

writeSimply

A minimal, distraction-free desktop writing app, offline-first, no accounts, no subscriptions.

Cross-platform (Linux · macOS · Windows) desktop app built with Tauri + React + TypeScript, with a native Rust backend for local file storage and audio playback.

Stars License

writeSimply

Overview

writeSimply is a lightweight desktop writing environment for people who just want to write. Notes live on your machine as local files, it works fully offline, opens instantly, and stays out of your way.

Because it's built on Tauri, the app ships as a small native binary

Loved by the community: 43+ GitHub stars and support from real users through Buy Me a Coffee.

Screenshots

Features

  • Distraction-free rich-text editor — built on Meta's Lexical with a custom toolbar (bold, italic, and more)
  • Local file tree — organise writing into folders and notes, stored as JSON on disk
  • Fully offline — no account, no cloud, no telemetry; your writing never leaves your machine
  • Customisation — font family, font size, and theme (with an animated theme toggler)
  • Writing timer — simple session timer to keep you focused
  • Built-in music player — play local audio while you write, powered natively by the Rust backend
  • Smooth UX — intro animation and motion transitions
  • Cross-platform — one codebase for Linux, macOS, and Windows

Tech Stack

Layer Technology
Desktop shell Tauri 2
Native backend Rust (serde, serde_json, std::fs, std::process)
Frontend React 19, TypeScript, Vite 7
Editor Lexical (@lexical/react)
Styling Tailwind CSS 4, Radix UI, class-variance-authority
Animation Motion (Framer Motion)
Testing Vitest

Design highlights

  • Typed IPC contract — a shared WritingFile struct (name, text, font, font size, theme) is serialised with serde on the Rust side and mirrored in TypeScript, so data crosses the boundary type-safely.
  • Local persistence — notes are written as JSON into the platform-specific app data directory; folders map directly to real directories, and list_files walks them recursively.
  • Native audio with shared state — playback shells out to the platform's native player (ffplay on Linux, afplay on macOS, PowerShell on Windows) selected via #[cfg(target_os = ...)]. The current process is tracked behind a Mutex<AudioState> so play/stop/is-playing stay consistent across calls.

Getting Started

Prerequisites

Development

git clone https://github.com/Khizarshah01/writeSimply.git
cd writeSimply

# install frontend deps
npm install

# run the app in dev mode
npm run tauri dev

Build a release binary

npm run tauri build

The packaged installer/binary is emitted under src-tauri/target/release/.

Contributing

Ideas and PRs are welcome, if there's a feature that would help other writers, open an issue or a pull request.

Support

If writeSimply helps you write, you can support development here:

Buy Me A Coffee

License

See LICENSE.

About

writeSimply is a minimal desktop app where you can write freely, no subscriptions, no clutter, just pure writing

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages