{"id":27149145,"url":"https://github.com/bethropolis/tide","last_synced_at":"2026-01-21T03:02:24.359Z","repository":{"id":285856801,"uuid":"959575984","full_name":"bethropolis/tide","owner":"bethropolis","description":"a terminal-based text editor written purely in Go.","archived":false,"fork":false,"pushed_at":"2025-04-11T03:18:25.000Z","size":295,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-11T03:18:52.933Z","etag":null,"topics":["go","golang","plugin-system","terminal-editor","text-editor","themes","tui"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bethropolis.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-04-03T02:25:54.000Z","updated_at":"2025-04-09T08:50:23.000Z","dependencies_parsed_at":null,"dependency_job_id":"af34bf13-db4a-4084-abf7-1d866aa49557","html_url":"https://github.com/bethropolis/tide","commit_stats":null,"previous_names":["bethropolis/tide"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/bethropolis/tide","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bethropolis%2Ftide","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bethropolis%2Ftide/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bethropolis%2Ftide/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bethropolis%2Ftide/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bethropolis","download_url":"https://codeload.github.com/bethropolis/tide/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bethropolis%2Ftide/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28624341,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-21T02:47:06.670Z","status":"ssl_error","status_checked_at":"2026-01-21T02:45:44.886Z","response_time":86,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["go","golang","plugin-system","terminal-editor","text-editor","themes","tui"],"created_at":"2025-04-08T12:36:09.482Z","updated_at":"2026-01-21T03:02:24.353Z","avatar_url":"https://github.com/bethropolis.png","language":"Go","readme":"# 🌊 Tide - A Terminal Editor in Go\n\n[![Go Report Card](https://goreportcard.com/badge/github.com/bethropolis/tide)](https://goreportcard.com/report/github.com/bethropolis/tide)\n[![GitHub release (latest by date)](https://img.shields.io/github/v/release/bethropolis/tide?style=flat-square\u0026labelColor=1e1e2e\u0026color=89b4fa)](https://github.com/bethropolis/tide/releases/latest)\n[![GitHub license](https://img.shields.io/github/license/bethropolis/tide?style=flat-square\u0026labelColor=1e1e2e\u0026color=cba6f7)](https://github.com/bethropolis/tide/blob/main/LICENSE)\n[![Release Go Binaries](https://github.com/bethropolis/tide/actions/workflows/release.yml/badge.svg)](https://github.com/bethropolis/tide/actions/workflows/release.yml)\n[![Go Version](https://img.shields.io/badge/Go-1.21+-a6e3a1?style=flat-square\u0026logo=go\u0026labelColor=1e1e2e)](https://golang.org/doc/go1.21)\n[![GitHub stars](https://img.shields.io/github/stars/bethropolis/tide?style=flat-square\u0026labelColor=1e1e2e\u0026color=f9e2af)](https://github.com/bethropolis/tide/stargazers)\n[![GitHub issues](https://img.shields.io/github/issues/bethropolis/tide?style=flat-square\u0026labelColor=1e1e2e\u0026color=f38ba8)](https://github.com/bethropolis/tide/issues)\n\nTide is a modern, extensible terminal-based text editor written purely in Go. It features efficient syntax highlighting powered by Tree-sitter and is built with a focus on clean, modular code for stability and future growth.\n\n\n\u003cdiv align=\"center\"\u003e\n    \u003cimg src=\"docs/assets/tide.png\" alt=\"Tide Logo\" max-width=\"600\" /\u003e\n\u003c/div\u003e\n\n\n---\n\n## ✨ Features\n\n*   🚀 **Fast, Async Syntax Highlighting:** Uses Tree-sitter for accurate, performant highlighting that updates dynamically via debounced, incremental parsing.\n*   🎨 **Theming Engine:**\n    *   Load custom themes from TOML files in `~/.config/tide/themes/`.\n    *   Set the active theme via `~/.config/tide/theme.toml`.\n    *   Live theme switching with the `:theme \u003cname\u003e` command.\n    *   Supports True Color hex codes (`#RRGGBB`).\n    *   Includes a comfortable built-in default dark theme (\"Dark comfort\").\n*   🌐 **Multi-Language Support:** Built-in support for Go, Python, JavaScript, JSON, and Rust. Easily extensible for more languages.\n*   ✏️ **Core Editing:**\n    *   Modal editing (Normal, Command, Find modes).\n    *   Text insertion, deletion, line handling.\n    *   Undo/Redo stack.\n    *   Yank (Copy) / Paste (Internal register or optional System Clipboard).\n    *   Find (`/`, `n`, `N`) with match highlighting.\n    *   Replace (`:s/pattern/replacement/[g]` on current line).\n    *   Auto Indentation.\n    *   Line numbering.\n    *   Configurable tab width rendering.\n*   ⚙️ **Configuration:**\n    *   Load settings (editor, logger) from `~/.config/tide/config.toml`.\n    *   Command-line flag overrides for key settings.\n    *   Advanced, filterable logging system (`slog` based).\n*   🧩 **Modular \u0026 Extensible:** Clean architecture with a basic plugin system (example: Word Count).\n\n---\n\n## 🚀 Getting Started\n\n### Installation\n\nEnsure you have **Go 1.21+** installed.\n\n```bash\n# Install latest release\ngo install github.com/bethropolis/tide/cmd/tide@latest\n\n# Or, build from source:\n# git clone https://github.com/bethropolis/tide.git\n# cd tide\n# go build ./cmd/tide/\n# ./tide --help # See available flags\n```\n\n\u003e Make sure `$GOPATH/bin` (usually `~/go/bin`) is in your system's `$PATH`.\n \n### Basic Usage\n\n```bash\n# Open a file\ntide path/to/your/file.go\n\n# Start with an empty buffer\ntide\n\n# Use flags to override config (see details below)\ntide --loglevel debug --config config.toml main.rs\n```\n\n---\n\n## 🔧 Configuration\n\nTide uses TOML files located in `~/.config/tide/`.\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003e1. Main Configuration (`config.toml`)\u003c/strong\u003e\u003c/summary\u003e\n\n  \u003e Controls editor behavior and logger settings.\n  \u003e Placed at `~/.config/tide/config.toml`.\n\n  ```toml\n  # Example config.toml\n\n  [logger]\n  log_level = \"info\"           # \"debug\", \"info\", \"warn\", \"error\"\n  log_file_path = \"tide.log\"   # Path relative to CWD, absolute path, \"\" for default (~/.config/tide/tide.log), or \"-\" for stderr\n  # Filtering (optional - see logger docs/code for more):\n  # enabled_tags = [\"core\", \"find\"]\n  disabled_tags = [\"theme\", \"highlight\", \"event\"] # Hide noisy logs\n  # enabled_packages = [\"app\", \"core\"]\n  # disabled_packages = [\"buffer\"]\n\n  [editor]\n  tab_width = 4\n  scroll_off = 3\n  system_clipboard = false # Set true to use system clipboard\n  # status_bar_height = 1 # Currently fixed at 1\n  ```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003e2. Active Theme (`theme.toml`)\u003c/strong\u003e\u003c/summary\u003e\n\n  \u003e Defines the currently active theme.\n  \u003e Placed at `~/.config/tide/theme.toml`.\n  \u003e This file is **overwritten** when you use the `:theme \u003cname\u003e` command.\n  \u003e If missing, the default built-in theme is saved here on first run.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003e3. Theme Files (`themes/*.toml`)\u003c/strong\u003e\u003c/summary\u003e\n\n  \u003e Place custom `.toml` theme files in `~/.config/tide/themes/`.\n  \u003e Tide scans this directory for available themes to be used with the `:theme` command.\n\n  *Example Theme File (`mytheme.toml`):*\n  ```toml\n  name = \"My Custom Theme\"\n  is_dark = true\n\n  [styles]\n    Default = { fg = \"#CDD6F4\", bg = \"#1E1E2E\" } # Base background/foreground\n    LineNumber = { fg = \"#494D64\", bg = \"#1E1E2E\" }\n    StatusBar = { fg = \"#CDD6F4\", bg = \"#181825\" }\n    StatusBarModified = { fg = \"#F9E2AF\" } # Inherits StatusBar BG\n    Selection = { reverse = true }\n    SearchHighlight = { fg = \"#1E1E2E\", bg = \"#F9E2AF\" }\n\n    keyword = { fg = \"#CBA6F7\", bold = true }\n    string = { fg = \"#A6E3A1\" }\n    comment = { fg = \"#6C7086\", italic = true }\n    # ... etc ...\n  ```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003e4. Command-Line Flags\u003c/strong\u003e\u003c/summary\u003e\n\n  \u003e Flags override settings from `config.toml`. Run `tide --help` for a full list.\n\n  *   `-config \u003cpath\u003e`: Specify config file path.\n  *   `-loglevel \u003clevel\u003e`: Set log level (`debug`, `info`, `warn`, `error`).\n  *   `-logfile \u003cpath\u003e`: Set log file path (`-` for stderr).\n  *   `-tabwidth \u003cnum\u003e`: Set tab width.\n  *   `-scrolloff \u003cnum\u003e`: Set scroll-off lines.\n  *   `-system-clipboard`: Use system clipboard (sets to `true`).\n  *   `-debug-log`: Enable verbose logging for the logger's filtering system.\n  *   `-[log-*]` flags: Control detailed logger filtering (e.g., `-log-disable-packages=theme,buffer`).\n\u003c/details\u003e\n\n---\n\n## ⌨️ Keybindings (Default - Normal Mode)\n\n\u003cdetails\u003e\n  \u003csummary\u003eShow Default Keybindings\u003c/summary\u003e\n\n  | Key(s)                | Action                   | Description                                  |\n  | :-------------------- | :----------------------- | :------------------------------------------- |\n  | `Up`                  | Move Up                  | Move cursor up one line                      |\n  | `Down`                | Move Down                | Move cursor down one line                    |\n  | `Left`                | Move Left                | Move cursor left one column/rune             |\n  | `Right`               | Move Right               | Move cursor right one column/rune            |\n  | `PageUp`              | Page Up                  | Move viewport and cursor up one page         |\n  | `PageDown`            | Page Down                | Move viewport and cursor down one page       |\n  | `Home`                | Home                     | Move cursor to beginning of line             |\n  | `End`                 | End                      | Move cursor to end of line                   |\n  | `TAB`                 | Insert Tab               | Insert a tab character                       |\n  | `Backspace`           | Delete Backward          | Delete character before cursor               |\n  | `Delete`              | Delete Forward           | Delete character under/after cursor          |\n  | `ESC`, `Ctrl+C`       | Quit / Clear Highlights  | Quit if unmodified, else prompt/clear search |\n  | `Ctrl+Q`              | Force Quit               | Quit unconditionally                         |\n  | `Ctrl+S`              | Save                     | Save the current buffer                      |\n  | `Ctrl+Z`              | Undo                     | Undo the last change                         |\n  | `Ctrl+R`, `\u003cleader\u003er` | Redo                     | Redo the last undone change                  |\n  | `Ctrl+X`, `\u003cleader\u003ex` | Yank (Copy)              | Copy selection to clipboard                  |\n  | `Ctrl+V`, `\u003cleader\u003ep` | Paste                    | Paste from clipboard                         |\n  | `\u003cleader\u003e/`           | Enter Find Mode          | Start searching                              |\n  | `\u003cleader\u003e:`           | Enter Command Mode       | Start entering a command                     |\n  | `\u003cleader\u003en`           | Find Next                | Find next search match                       |\n  | `\u003cleader\u003eN`           | Find Previous            | Find previous search match                   |\n  | `\u003cleader\u003ew`           | Save                     | Alias for save                               |\n  | `\u003cleader\u003eq`           | Quit                     | Alias for quit                               |\n\n\n  *(Note: `\u003cleader\u003e` defaults to `,`. Timeout is 500ms)*\n\u003c/details\u003e\n\n---\n\n## 📜 Commands (in Command Mode `:`)\n\n\u003cdetails\u003e\n  \u003csummary\u003eShow Commands\u003c/summary\u003e\n\n  *   `:q` - Quit if buffer is unmodified. Shows warning if modified.\n  *   `:wq` - Write buffer then quit. Fails if write fails.\n  *   `:q!` - Force quit, discarding any unsaved changes.\n  *   `:theme \u003ctheme_name\u003e` - Switch to the specified theme (case-insensitive). Theme must exist in the themes directory or be built-in. Overwrites `~/.config/tide/theme.toml`.\n  *   `:themes` - List available theme names in the status bar.\n  *   `:s/pattern/replacement/[g]` - Replace first (`g` omitted) or all (`g` included) occurrences of `pattern` with `replacement` on the *current line*.\n  *   `:w [filename]` - Write buffer to current file or `[filename]`.\n  *   `:wc` - (From WordCount plugin) Display line, word, and byte count.\n\u003c/details\u003e\n\n---\n\n## 🚧 Known Limitations / Future Plans\n\n*   **Terminal Mouse Selection:** Native terminal selection includes line numbers. Use internal Yank/Paste (`Ctrl+X`/`Ctrl+V`) for code. Full mouse support is planned.\n*   **Undo for Global Replace/Complex Ops:** Undo works for single changes but not yet reliably for global replaces or potentially some plugin actions.\n*   **Limited Replace Scope:** `:s` only operates on the current line. Range support (`:%s`, `:'\u003c,'\u003es`) is planned.\n*   **Basic Modes:** Primarily Normal mode exists. no Insert/Visual modes are planned.\n*   **Performance:** Untested on very large files (\u003e 100MB).\n*   **Configuration:** Limited configuration options currently. More planned (keybindings, etc.).\n*   **Status Bar Styling:** Segments like `[Modified]` aren't individually styled yet.\n\n---\n\n## 🤝 Contributing\n\nContributions are welcome! Please open an issue or submit a pull request.\n\n## 📜 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbethropolis%2Ftide","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbethropolis%2Ftide","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbethropolis%2Ftide/lists"}