Skip to content
appsjuraganPublic

About

When you are annoyed by Microsoft messed up simple-yet-powerful Notepad, use this instead

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

66 Commits

Folders and files

Repository files navigation

Notos

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.


Key Features

  • 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_sdk to load dynamic libraries (.dll on Windows, .so on Linux, .dylib on macOS) at runtime without recompiling the core application.
  • System Clipboard & Context Menu: Full host OS clipboard integration via eframe and arboard. 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 Ctrl to underline and highlight detected links, and Ctrl+Click to 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.

Keyboard Shortcuts

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

Built-In Plugins

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:

  1. The directory containing rust-notos.exe.
  2. A plugins/ subdirectory relative to the executable.

Installation & Building

Prerequisites

Windows (Automated Build Script)

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 -Clean

The resulting binaries will be placed in target\release\:

  • rust-notos.exe
  • notos_plugin_*.dll

Direct Cargo Build

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 --workspace

After 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.

Running Tests

cargo test --workspace

Architecture

Notos 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.


Contributing

Contributions are welcome. To contribute:

  1. Fork the repository.
  2. Create your feature branch (git checkout -b feature/my-feature).
  3. Ensure formatting and tests pass (cargo test --workspace).
  4. Commit your changes (git commit -m 'Add my feature').
  5. Push to the branch (git push origin feature/my-feature).
  6. Open a Pull Request.

License

Distributed under the MIT License. See LICENSE for more information.


Credits

Developed and maintained by appsjuragan.

About

When you are annoyed by Microsoft messed up simple-yet-powerful Notepad, use this instead

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages