Notos is a high-performance, lightweight text editor built with Rust and egui. It combines the minimalist philosophy of classic editors like Notepad with modern, developer-centric features including independent text zooming, smart line numbering, native OS clipboard integration, and a dynamic plugin architecture.
- Extreme Binary Size Optimization: Release binary compiles down to ~1.8 MB through custom runtime font loading, symbol stripping, and dependency trimming (
opt-level = "z",lto = "fat"). - Dynamic Plugin System: Modular architecture using
notos_sdkto load dynamic libraries (.dllon Windows,.soon Linux,.dylibon macOS) at runtime without recompiling the core application. - System Clipboard & Context Menu: Full host OS clipboard integration via
eframeandarboard. Supports Cut (Ctrl+X), Copy (Ctrl+C), Paste (Ctrl+V), Undo (Ctrl+Z), Redo (Ctrl+Y), and Select All (Ctrl+A) across keyboard shortcuts, the main Edit menu, and the editor's right-click context menu. - High-Contrast Text Selection: Carefully calibrated text selection styling in both Dark and Light themes ensuring selected glyphs remain crisp and readable without being obscured by background highlight fills.
- URL Detection: Interactive URL detection plugin. Hold
Ctrlto underline and highlight detected links, andCtrl+Clickto open them directly in your default browser. - System Font Loader: Dynamically loads fonts from the host operating system (e.g., Segoe UI, Consolas, Segoe UI Symbol/Emoji on Windows) ensuring full UTF-8 glyph and symbol support without embedding heavy font binaries into the executable.
- Zero Data Loss: Automatically persists session state (opened tabs, active tab, file paths, editor content, cursor positions, and undo history) across application restarts.
- Tabbed Workflow: Clean tab management supporting multiple open files with dirty tracking indicators (
*). - Independent Editor Zoom: Scale editor font size (
Ctrl + Scroll,Ctrl + +,Ctrl + -,Ctrl + 0) independently of the UI scale. - Smart Line Numbering: Line numbers correspond to logical file lines; wrapped soft-lines display empty gutter space for clear reading alignment.
- Dual Themes: Custom-tuned "Bit Grey" Dark Mode designed to reduce eye strain, alongside a high-contrast Light Mode.
- Flexible Word Wrap: Toggle word wrapping dynamically per session.
- Comprehensive Status Bar: Real-time display of cursor position (Line / Column), selection character count, total document length, and line ending mode (CRLF / LF).
- Whole-Word Undo System: Undo and redo operations group changes by words, typing pauses, and block replacements with accurate cursor position restoration.
| Action | Shortcut |
|---|---|
| New Tab | Ctrl + N or Ctrl + T |
| Open File | Ctrl + O |
| Save File | Ctrl + S |
| Save As | Ctrl + Shift + S |
| Close Tab | Ctrl + W |
| Cut | Ctrl + X |
| Copy | Ctrl + C |
| Paste | Ctrl + V |
| Select All | Ctrl + A |
| Undo | Ctrl + Z |
| Redo | Ctrl + Y |
| Find | Ctrl + F |
| Replace | Ctrl + H |
| Go To Line | Ctrl + G |
| Zoom In | Ctrl + Mouse Wheel Up or Ctrl + + / Ctrl + = |
| Zoom Out | Ctrl + Mouse Wheel Down or Ctrl + - |
| Reset Zoom | Ctrl + 0 (Defaults to 14pt) |
| Insert Date / Time | F5 |
| Open URL | Ctrl + Click on detected URL |
Notos ships with a suite of dynamic plugins located in the plugins/ directory:
| Plugin | Description | Integration Points |
|---|---|---|
| Base64 Tool | Encode and decode selected text or entire document with Base64. | Plugins Menu, Right-Click Context Menu |
| JSON Formatter | Format (pretty-print) or minify JSON text. | Plugins Menu |
| URL Detector | Highlights URLs on Ctrl hover and opens links in the system browser on Ctrl+Click. |
Real-time Editor Overlay, Plugins Menu |
| About Notos | Displays application version, build metadata, and system environment info. | Help / Plugins Menu |
| Case Transformer | Convert text or selection between UPPERCASE, lowercase, Title Case, camelCase, snake_case, and kebab-case. | Plugins Menu, Right-Click Context Menu |
| Date/Time Stamping | Insert customizable timestamps including ISO 8601, RFC 2822, and Unix epoch. | Plugins Menu, Edit Menu (F5) |
| Hex Viewer | Dual-pane hexadecimal and ASCII file inspection with byte offsets. | Plugins Menu |
| Web Tools | Minify JavaScript and CSS, or format stylesheets. | Plugins Menu |
| Markdown Preview | Real-time split-view Markdown preview supporting CommonMark and Mermaid diagrams. | Plugins Menu |
Plugins are dynamically scanned and loaded on startup from:
- The directory containing
rust-notos.exe. - A
plugins/subdirectory relative to the executable.
- Rust toolchain (1.75+ recommended, 2021 edition)
The repository provides build.ps1 to build the workspace and automatically deploy all plugin DLLs adjacent to the executable:
# Build release binary and bundle plugins
powershell -ExecutionPolicy Bypass -File .\build.ps1 -Release
# Build and immediately launch Notos
powershell -ExecutionPolicy Bypass -File .\build.ps1 -Release -Run
# Clean previous build artifacts and rebuild
powershell -ExecutionPolicy Bypass -File .\build.ps1 -Release -CleanThe resulting binaries will be placed in target\release\:
rust-notos.exenotos_plugin_*.dll
You can also build using standard Cargo commands:
# Clone the repository
git clone https://github.com/appsjuragan/Notos
cd Notos
# Build the main executable and all plugins
cargo build --release --workspaceAfter building with Cargo, copy the generated plugin DLLs from target/release/deps/notos_plugin_*.dll into target/release/ (or into a target/release/plugins/ directory) so Notos can discover them at startup.
cargo test --workspaceNotos uses a decoupled workspace layout:
rust-notos/
├── Cargo.toml # Workspace definition and root dependencies
├── build.ps1 # Windows automated build and packaging script
├── notos_sdk/ # Public Rust SDK defining the plugin interface
│ ├── Cargo.toml
│ └── src/lib.rs # NotosPlugin trait, EditorContext, PluginAction
├── plugins/ # Built-in dynamic plugins
│ ├── notos_plugin_about/
│ ├── notos_plugin_base64/
│ ├── notos_plugin_case_transformer/
│ ├── notos_plugin_datetime/
│ ├── notos_plugin_hex_viewer/
│ ├── notos_plugin_json_format/
│ ├── notos_plugin_markdown_preview/
│ ├── notos_plugin_url_detector/
│ └── notos_plugin_web_tools/
└── src/ # Core editor application
├── main.rs # Application entrypoint and CLI parsing
├── app.rs # Main eframe application state
├── app/ # Application modules (actions, editor_panel, style, etc.)
├── editor.rs # EditorTab and document buffers
├── plugin.rs # Dynamic library loader and plugin manager
└── ui/ # Menus, status bar, and dialog components
For information on creating custom plugins, refer to the notos_sdk documentation.
Contributions are welcome. To contribute:
- Fork the repository.
- Create your feature branch (
git checkout -b feature/my-feature). - Ensure formatting and tests pass (
cargo test --workspace). - Commit your changes (
git commit -m 'Add my feature'). - Push to the branch (
git push origin feature/my-feature). - Open a Pull Request.
Distributed under the MIT License. See LICENSE for more information.
Developed and maintained by appsjuragan.