Releases: m-mdy-m/cdin
Release list
cdin v0.1.0-beta.5
[0.1.0-beta.5] — 2026-07-10
Overview
This release is a major architectural milestone for cdin.
The focus of this release is not a large set of user-facing features, but a complete improvement of the internal foundation: the Lua layer has been simplified, core functionality has moved behind cleaner C-powered APIs, the event bus system has been removed, and several internal systems have been redesigned for better modularity and future extensibility.
Filesystem operations, searching, Git integration, state handling, and lifecycle management are now organized around dedicated APIs and modules, creating a cleaner foundation for future plugins and editor features.
Due to the scope of these changes, some internal Lua APIs and plugin behaviors may require updates.
Breaking Changes
Event system removal
- Removed the old
eventbussystem from both C and Lua. - Plugins using
eventbus.emit(...)or depending on event bus initialization must migrate to the new architecture.
Lua structure changes
- Reorganized the
data/Lua structure. - Removed redundant modules and moved functionality into cleaner core APIs.
- Internal module paths may have changed.
Keymap changes
- Centralized default keymap registration into
core/keymaps/default.lua. - Plugins or user configurations that relied on previous startup ordering may require adjustments.
Document hooks
- Replaced document method monkey-patching with a structured hook table system.
- Plugins extending document behavior should migrate to the new hook mechanism.
New Features
Core Architecture
State and project management
- Added
core.statefor centralized runtime state management. - Added
core.projectfor project lifecycle and project-related operations. - Created a cleaner foundation for future session and workspace features.
Lifecycle system
- Added Lua initialization and lifecycle management.
- Plugins can now follow structured initialization phases instead of relying on implicit loading behavior.
Logging system
- Added a unified logger available from both C and Lua.
- Improved debugging and internal diagnostics.
Core helpers
- Added
core.active_docview()helper. - Reduced the need for plugins and internal components to manually traverse views.
- Added shared utilities such as configuration helpers and copy utilities.
Public APIs
Filesystem API
- Added a public
fsAPI exposed to Lua. - Provides unified filesystem operations and path handling.
- Reduces duplicated filesystem logic across plugins and core modules.
Search API
- Added a public
searchAPI exposed to Lua. - Search functionality is now powered by the native C search engine.
- Plugins can use the same search implementation as the editor core.
Git API
- Added centralized
core.gitAPIs. - Git operations are now shared between core components and plugins.
- Removed duplicated Git command handling from individual modules.
Search Improvements
- Reworked search around the native
search.cengine. - Improved consistency between project search and internal search functionality.
- Removed older duplicated Lua-based search logic.
- Added a cleaner API layer for future search extensions.
Git Integration
- Centralized Git status, branch, and repository operations.
- Improved Git usage across treeview, statusbar, and plugins.
- Git information is now provided through
core.git.status.
Git UI improvements
- Treeview Git badges now use centralized Git APIs.
- Status bar Git information now reads from the Git API instead of executing commands directly.
UI & Editor Improvements
Status bar
- Redesigned status bar layout.
- Added Vim mode indicator/pill.
- Git branch and status information are now integrated through the new Git API.
Project search
- Improved search result presentation.
- Added match context display.
- Added highlighted matches.
- Added progress indication during searches.
Tabs and windows
- Added tab/window command support.
- Improved tab and window management architecture.
- Removed unnecessary tab abstractions by integrating logic directly into the tab system.
Theme
- Added a new built-in theme.
Log view
- Added copy and paste support for log entries.
Vim Improvements
- Unified write/quit mappings through the
excommand system. - Improved usage of
core.active_docview(). - Reduced duplicated view lookup logic.
Configuration & Initialization
- Added dedicated configuration and event modules.
- Improved initialization order and module separation.
- Boot sequence has been simplified.
Bug Fixes
Git
- Fixed Linux Git ignored-file detection error:
git ls-files -i must be used with either -o or -c- Fixed Git subprocess handling issues on Windows.
Editor behavior
- Fixed insert mode
mkey incorrectly opening menus. - Fixed incorrect directory label rendering in empty views.
Build & Platform
- Fixed several platform-specific build issues.
- Improved consistency of Git and shell behavior across supported platforms.
Refactoring & Internal Changes
- Removed event bus dependencies from the codebase.
- Replaced document monkey-patching with hook tables.
- Removed obsolete Lua files and duplicated logic.
- Simplified core module boundaries.
- Fixed C core submodule paths.
- Updated Makefile and build structure.
- Marked required build scripts as executable through Git attributes.
- Improved internal synchronization between C and Lua layers.
Platform Notes
| Platform | Status |
|---|---|
| Linux | Supported. Native APIs and Git integration improved. |
| Windows | Supported. Git subprocess handling improved. |
| macOS | Supported. Existing release pipeline improvements continue. |
Stability Notes
This release focuses on architecture rather than major visual changes.
The main goal is creating a cleaner and more maintainable foundation for future cdin development, including:
- More powerful plugins
- Better project management
- Advanced editor automation
- Improved language tooling support
Installation
Linux (x86_64)
tar xzf cdin-v0.1.0-beta.5-linux-x86_64.tar.gz
cd cdin-v0.1.0-beta.5-linux-x86_64
bash install.sh # → ~/.local (no sudo)
# or system-wide:
sudo bash install.sh --prefix=/usr/localSDL3 runtime — needed at runtime if not already installed:
- Ubuntu 24.04+:
sudo apt install libsdl3-0- Other distros: see SDL3 releases
Windows (x86_64)
- Download
cdin-v0.1.0-beta.5-windows-x86_64.zipand extract it. - Open PowerShell inside the extracted folder and run:
.\install.ps1
# Optional:
.\install.ps1 -RegisterFileTypes # set as default for text/code files
.\install.ps1 -Prefix C:\Tools\cdin # custom locationThe installer copies
cdin.exe,SDL3.dll, and the Lua DLL into
%LOCALAPPDATA%\cdin\binand adds that folder to your user PATH.
macOS (arm64)
- Download
cdin-v0.1.0-beta.5-macos.dmgand double-click it. - Drag cdin into the Applications folder shortcut.
- Eject the disk image and open cdin from Launchpad or Spotlight.
SDL3 is bundled inside the .app — no Homebrew or extra installs needed.
Contributors (v0.1.0-beta.4 → v0.1.0-beta.5)
cdin v0.1.0-beta.4
[0.1.0-beta.4] — 2026-07-05
Features
- macOS Build: Added official macOS build support — cdin is now distributed for macOS alongside Linux and Windows. (
9a76e3e) - Menu Navigation: Navigate between options in the shell menu, fmenu (NerdTree-like file manager), and doc menu using
↑/↓arrow keys, and confirm selection withTab. (51c95a4) - Logo: Auto-generate logo backgrounds via the new
gen_logo_luascripts. (846297b)
Bug Fixes
- macOS: Fixed incorrect bash version used in macOS builds. (
5c83e07) - File Open: Fixed
Ctrl+Oshortcut not opening the file picker correctly. (900a092)
Refactoring
Installation
Linux (x86_64)
tar xzf cdin-v0.1.0-beta.4-linux-x86_64.tar.gz
cd cdin-v0.1.0-beta.4-linux-x86_64
bash install.sh # → ~/.local (no sudo)
# or system-wide:
sudo bash install.sh --prefix=/usr/localSDL3 runtime — needed at runtime if not already installed:
- Ubuntu 24.04+:
sudo apt install libsdl3-0- Other distros: see SDL3 releases
Windows (x86_64)
- Download
cdin-v0.1.0-beta.4-windows-x86_64.zipand extract it. - Open PowerShell inside the extracted folder and run:
.\install.ps1
# Optional:
.\install.ps1 -RegisterFileTypes # set as default for text/code files
.\install.ps1 -Prefix C:\Tools\cdin # custom locationThe installer copies
cdin.exe,SDL3.dll, and the Lua DLL into
%LOCALAPPDATA%\cdin\binand adds that folder to your user PATH.
macOS (arm64)
- Download
cdin-v0.1.0-beta.4-macos.dmgand double-click it. - Drag cdin into the Applications folder shortcut.
- Eject the disk image and open cdin from Launchpad or Spotlight.
SDL3 is bundled inside the .app — no Homebrew or extra installs needed.
Contributors (v0.1.0-beta.3 → v0.1.0-beta.4)
cdin v0.1.0-beta.3
[0.1.0-beta.3] — 2026-07-05
This release focuses on improving the startup experience and fixing several issues introduced during the previous internal refactor.
Features
- Added a subtle background logo to the welcome/empty view for a cleaner visual appearance.
Bug Fixes
- Fixed the Recent Files list not being displayed correctly in some situations.
- Fixed an issue where certain terminal windows appeared unexpectedly when launching cdin.
- Fixed a runtime error related to
_recent_rectsin the empty view.
Stability
Installation
Linux (x86_64)
tar xzf cdin-v0.1.0-beta.3-linux-x86_64.tar.gz
cd cdin-v0.1.0-beta.3-linux-x86_64
bash install.sh # → ~/.local (no sudo)
# or system-wide:
sudo bash install.sh --prefix=/usr/localSDL3 runtime — needed at runtime if not already installed:
- Ubuntu 24.04+:
sudo apt install libsdl3-0- Other distros: see SDL3 releases
Windows (x86_64)
- Download
cdin-v0.1.0-beta.3-windows-x86_64.zipand extract it. - Open PowerShell inside the extracted folder and run:
.\install.ps1
# Optional:
.\install.ps1 -RegisterFileTypes # set as default for text/code files
.\install.ps1 -Prefix C:\Tools\cdin # custom locationThe installer copies
cdin.exe,SDL3.dll, and the Lua DLL into
%LOCALAPPDATA%\cdin\binand adds that folder to your user PATH.
Contributors (v0.1.0-beta.2 → v0.1.0-beta.3)
cdin v0.1.0-beta.2
[0.1.0-beta.2] — 2026-07-05
This release focuses on a major internal refactor of the data layer and plugin architecture. While the user-facing behavior remains largely unchanged, the internal structure has been significantly reorganized to improve modularity, maintainability, and future extensibility.
No intentional breaking changes to core editor behavior were introduced, but due to the scope of the refactor, some instability or plugin-related regressions may occur.
Internal architecture
- Major refactor of the internal
data/structure into a cleaner, modular layout. - Improved separation of concerns across core systems without altering runtime behavior.
- Reorganized initialization and data flow to better support future plugin and feature expansion.
- Reduced coupling between subsystems for easier debugging and testing.
Stability notes
- Core editor behavior remains unchanged from
0.1.0-beta.1.
Versioning note
- This release remains within the beta cycle.
Installation
Linux (x86_64)
tar xzf cdin-v0.1.0-beta.2-linux-x86_64.tar.gz
cd cdin-v0.1.0-beta.2-linux-x86_64
bash install.sh # → ~/.local (no sudo)
# or system-wide:
sudo bash install.sh --prefix=/usr/localSDL3 runtime — needed at runtime if not already installed:
- Ubuntu 24.04+:
sudo apt install libsdl3-0- Other distros: see SDL3 releases
Windows (x86_64)
- Download
cdin-v0.1.0-beta.2-windows-x86_64.zipand extract it. - Open PowerShell inside the extracted folder and run:
.\install.ps1
# Optional:
.\install.ps1 -RegisterFileTypes # set as default for text/code files
.\install.ps1 -Prefix C:\Tools\cdin # custom locationThe installer copies
cdin.exe,SDL3.dll, and the Lua DLL into
%LOCALAPPDATA%\cdin\binand adds that folder to your user PATH.
Contributors (v0.1.0-beta.1 → v0.1.0-beta.2)
cdin v0.1.0-beta.1
[0.1.0-beta.1] — 2025-12-27
This is the first public release. It's a beta: the core editor is functional and usable day-to-day, but some things are still rough. APIs may change, a few documented features are stubs, and there are almost certainly bugs. Bug reports and patches are welcome.
Core editor
- Windowed editor built on SDL3, with a custom title bar drawn entirely in Lua. No OS window decorations — cdin draws its own minimize/maximize/close buttons and handles the drag region via SDL's hit-test API.
- Custom renderer backed by stb_truetype. Three bundled fonts: a proportional UI font, a monospace editor font, and an icon font.
- Event loop running at a configurable FPS (default 60), with coroutine-based background threads for project scanning and similar tasks.
- Document model with unlimited undo/redo (configurable cap, default 10,000 steps) and undo merging for consecutive edits within a short time window.
- Project file scanner runs in a background thread and rescans every 5 seconds. Respects
config.ignore_files(default: dot files). - Files dropped onto the window open as new documents. Directories dropped open a new editor instance.
- Unsaved-changes dialog on quit.
- On crash, dirty documents are saved to
<filename>~and a stack trace is written toerror.txt.
Vim mode
- Modal editing with three modes: Normal, Insert, Visual.
- Every buffer opens in Normal mode by default.
- Current mode shown in the status bar as
[NORMAL],[INSERT], or[VISUAL]. - Motions in Normal and Visual mode:
h j k l,w b e,0,$(viashift+4),^(viashift+6),gg,G. - Operators:
d,dd,D,yy,cc,x,p,u(undo),r(redo). - Mode transitions:
i,a,o,I,A,O,v,Escape. - Tab in Normal mode cycles to the next open tab.
- Ex command line opened with
:(orshift+;). - Ex command history navigable with Up/Down while the command line is open.
- Pending-key timeout of 600 ms for two-key sequences like
gganddd.
Ex commands
:w, :w!, :wa — save current file / save all
:q, :q!, :qa, :qa! — close / force-close / quit
:wq, :x, :wqa, :xa — save-then-close variants
:e <path>, :edit <path> — open file
:new <path> — create and open a new file
:mkdir <path> — create directory tree
:rm <path>, :delete <path> — remove file or directory
:rename <old> <new>, :copy <src> <dst>, :move <src> <dst> — file operations
:ls [path] — list directory in a scratch buffer
:pwd — print working directory
:cd <path> — change working directory
:<number> — go to line
:!<cmd> — run shell command; output appears in a new scratch buffer
:tree — focus/toggle the project tree
:help — show ex command reference in a scratch buffer
File-path arguments to :e, :new, :mkdir, :rm, :rename, :copy, :move, :cd support tab-completion.
File manager menu (m)
Pressing m in Normal mode (or via vim-fmenu:open) opens a context-sensitive action menu. The available actions depend on where focus is:
- When the tree view is focused on a file: rename, delete, copy, move, open in editor, run shell command on it.
- When the tree view is focused on a directory: new file, new directory, rename, delete, run shell command.
- When a document is active: actions apply to that document's file.
Standard keybindings (non-vim)
The full default keymap is documented in Command Reference. Highlights:
Ctrl+Shift+P — command palette
Ctrl+P — fuzzy open file from project
Ctrl+O — open file by path
Ctrl+N — new document
Ctrl+S / Ctrl+Shift+S — save / save as
Ctrl+F / Ctrl+R — find / replace
Ctrl+G — go to line
Ctrl+Z / Ctrl+Y — undo / redo
Alt+1–9 — switch to tab by index
Plugins (bundled)
- treeview — project tree panel. Shows git status markers (A/M/D/?) when
config.treeview_git_enabledis true. Polls every 2 seconds by default. Toggle hidden files withCtrl+Shift+Hor viaconfig.show_hidden_files. - autocomplete — word completion from all open documents. Shows up to 6 suggestions by default (
config.autocomplete_max_suggestions). - projectsearch — search across all project files; results open in a dedicated view.
- autoreload — detects when a file is changed on disk by another process and offers to reload it.
- trimwhitespace — strips trailing whitespace from every line on save. Runs automatically; no configuration needed.
Build system
make/make build— release buildmake debug— debug build (-O0 -g3)make run— build and runmake install— install toPREFIX(default/usr/local)make clean/make distcleanmake info— print build configuration summary- Version is derived from the nearest git tag; falls back to
0.0.0+<commit>. - Supports SDL3 (required) and Lua 5.3 or 5.4 (auto-detected via pkg-config).
- Linux, macOS, and Windows (MinGW) are all supported platforms.
Known issues and limitations
- The
docs/guides/directory in the repository contains stubs for several planned guides (configuration, plugin development, vim keybindings, API reference). This release ships those documents. - No plugin package manager. Plugins are installed by dropping Lua files into
data/plugins/. - The Windows build requires manual SDL3 setup (see Building from Source).
- No LSP integration yet.
- No multiple cursors.
- Visual mode only supports character-wise selection. Line-wise and block-wise visual modes are not implemented.
Installation
Linux (x86_64)
tar xzf cdin-v0.1.0-beta.1-linux-x86_64.tar.gz
cd cdin-v0.1.0-beta.1-linux-x86_64
bash install.sh # → ~/.local (no sudo)
# or system-wide:
sudo bash install.sh --prefix=/usr/localSDL3 runtime — needed at runtime if not already installed:
- Ubuntu 24.04+:
sudo apt install libsdl3-0- Other distros: see SDL3 releases
Windows (x86_64)
- Download
cdin-v0.1.0-beta.1-windows-x86_64.zipand extract it. - Open PowerShell inside the extracted folder and run:
.\install.ps1
# Optional:
.\install.ps1 -RegisterFileTypes # set as default for text/code files
.\install.ps1 -Prefix C:\Tools\cdin # custom locationThe installer copies
cdin.exe,SDL3.dll, and the Lua DLL into
%LOCALAPPDATA%\cdin\binand adds that folder to your user PATH.