2.0.0 (2025-01-31)
- feat!: update semantic release's ci (573814d)
- refactor!: rename
opts.workspace_name
->opts.workspace
(bf158f9)
Bug Fixes
IPC:is_closing
should return true if the pipe does not exist (29170fd)should_skip_update
should be checked right before the update (93636dd)- actually update the editor image (b1e5deb)
- adjust server fetching logic (c6ff458)
- allow sending same activity updates (1883ba4)
- an attempt to fix intermittent ui freezes (e53bf20)
- async: avoid including debug info on regular errors and fix error propagation (618ce39)
- automatically retry connection on
ECONNREFUSED
&ETIMEDOUT
(55452b3) - avoid joining the handles (3d478f1)
- change
cfg-if
attribute (76ecb5c) - close uv handles before exiting (1bd6bb9)
- config: correctly handle custom client ids (a4719a2)
- config: correctly replace config values (17dd6f3)
- config: do not override the given editor icon (25d31ba)
- config: ensure idle icon is set when validating the config (d5c4231)
- correct the logic responsible for falling back to defaults (b784a74)
- correctly handle curl's stdout (5b44dff)
- correctly serialize activity timestamps (6362a2c)
- correctly serialize rich presence packet (3e894ee)
- correctly set
workspace_dir
&workspace_name
(a56a856) - do not queue activity updates upon losing focus (0b8d609)
- fallback to default activity type if not provided (bebea1f)
- fetching local version should not produce errors (71ed71b)
- idle timeout check (2e3e961)
- implement event queuing for handling events registered after the handler is run (46b8de4)
- imports (9e8819e)
- include
vim.log.levels.OFF
when parsing the log level (cc9ba64) - ipc: cleanup the stale pipe if the server process was forcefully terminated (a77e86c)
- ipc: handle client disconnection on
ErrorKind::BrokenPipe
(a315118) - ipc: properly cleanup on exit (0d5c61b)
- let the updater alone handle executable spawning, or we might have two threads attempting to spawn it simultaneously (44acc10)
- log: correctly write to the client pipe (710b83e)
- manager: ensure the manager is setup only once (9f6d330)
- manager: fixed incorrect handling of timestamps (a67d435)
- manager: fixed timestamp logic (fabd09f)
- mappings: ensure that the tooltips have a minimum length of 2 (e9368fa)
- mappings: prioritize file extensions over filetypes (f09506d)
- mappings: set plugin managers' default icon to
plugin
(a2be431) - mappings: terminal check should be after the filetype check (c2950f1)
- normalize path before workspace lookup (c919c94)
- perform a nil check for usercmds interacting with the activity manager (8427bed)
- plugins.diagnostics: use correct validation function (3a683c5)
- plugins.scoped_timestamps: correctly handle idle status (acaece0)
- plugins: pass the correct configuration (7875026)
- properly handle chunked data (0b8c655)
- properly handle server shutdowns (281a93b)
- reinitialize the server if the plugin was installed with the server already present (ed60ef6)
- replace method definition with a function definition (8d6bcf9)
- resolve autocmds errors (02340b1)
- resolve event serialization issues (7ec693e)
- resolve idle timeout related issues (21d9a50)
- resolve workspace issues; handle missing hooks (4cff958)
- return if config validation fails (503371d)
- schedule cleanup logic if necessary (9aa6578)
- schedule the callbacks to maintain compatibility with Neovim 0.6.0 (35428c0)
- server: assume disconnection after receiving an error (da12d49)
- server: fetch and store the server version from the local text file (5cead48)
- server: fix logging level comparison (86f2a70)
- server: use panic-free means to write to stdout (23ba754)
- sessions: retrieve the correct session based on id instead of always returning the first available (6493da4)
- set executable permissions on unix systems (541a563)
- spawn: use an absolute path for server executable's fallback path (0ac391a)
- stop the plugin on server errors (20d0a48)
- update
last_activity
only if an actual update occurred (1dd0e20) - update server's status to
ready
on receiving the ready event (8e57129) - use
cord --version
to determine the current version of the executable and whether an update is required (5c31319) - usercmd: add input validation (33dbf7a)
- usercmd: allow calling checkhealth from user commands (2a9aac7)
- usercmd: fix broken autocompletion (49acb99)
- usercmd: handle feature user commands without args by mapping them to presence functions (c7b32e8)
- usercmds: fix argument parsing logic (2651e5d)
- windows: properly handle overlapped I/O (296e4f4)
- windows: use overlapped io for named pipes to avoid deadlocks (2f73ce8)
Features
- activity: add additional fields (ffec9cd)
- add
:checkhealth cord
to validate user configuration (ac8bf0a) - add
:Cord restart
(ff7b7cf) - add
json:Error
&msgpack:Error
(0f33af2) - add
new
function toPacket
struct (fd4b201) - add
notes
field (304d171) - add
TryFrom
impl toAssetType
(ca4d5d8) - add
vim.g.cord_is_updating
to avoid multiple simultaneous updates (166be04) - add a logger struct (d3f4fa0)
- add a macro that simplifies field deserialization (ada22e6)
- add cleanup logic (df96059)
- add dashboard support for NvDash (458a9ff)
- add explicit rich presence clearing; can be completely hidden with
force = true
(8e99c03) - add message deserialization logic (3f7fea2)
- add message handler struct (e93d9c8)
- add program entry point (f0e8727)
- add proper serialization for
LogEvent
(340c504) - add server-scoped
InitializeEvent
(5097ceb) - add support for checkhealth buffers (#182) (0706911)
- add support for LazyVim (#168) (7d0ef13)
- add the
Cord
struct which is used as the entry point (c2f67c0) - add unix implementation of the IPC server (cdc4245)
- add usercommands (8582099)
- add utility functions for building and fetching the executable (b77455b)
- add windows implementation of the IPC server (04192c5)
- allow
ActivityManager:toggle_idle
to accept aforce
parameter (f9498b5) - allow parsing
client_id
from client name (3e7f1b3) - allow the user to skip updates (381542d)
- allow users to set a custom activity (e9d388c)
- always fetch the executable if it's not present (7a18740)
- always perform the file exists check first (d94b5b8)
- async: implement Future wrappers for commonly used uv functions (62b133c)
- async: implement the concept of futures and handle async operations via coroutines (8638d30)
- automatically download the server executable if it is not present (355d63a)
- automatically load the plugin on startup without needing a
setup()
call (3a2833b) - capture build errors (64b1103)
- checkhealth: include information about required executables (72b5f9e)
- cli: add
--version
argument (1799242) - cli: implement argument parsing (b3051db)
- config: add
advanced.server.build
(bf27f76) - config: add
advanced.variables_in_functions
(6aae137) - config: add
idle.unidle_on_focus
(f4e8c93) - config: add
on_activity
hook (2695288) - config: add
on_disconnect
hook (299882d) - config: add
text.debug
option (6e72bc3) - config: add
text.diagnostics
option (f39fad7) - config: add
text.games
option (bfad8fb) - config: add
text.test
option (682c82a) - config: add support for string templates using the new
variables
option (d5ec225) - config: allow users to choose between different icon styles (3fef850)
- config: custom assets' options now support function types (2a5122c)
- config: improve validation (f60d250)
- config: introduce
idle.smart_idle
option which lets general activities take precedence over the idle ones (99e9e93) - create
Config
struct to store internal configuration and refine timeout logic (d5c179c) - create a separate module for icon-related stuff (8b83610)
- display the most recent activity in case a client disconnects; clear the status if none are connected (eedc94a)
- events: add client event implementations (fcda103)
- events: add server events (52061da)
- events: handle client connection (2e7d5d4)
- events: notify the client about errors on their side (db9a2ef)
- handle automatically moving the server executable to nvim's data directory (ae0fb6f)
- handle the activity type (0bfa07c)
- hooks: allow prioritized hooks in user configuration (1c862c6)
- icon: expose locals (15e83b3)
- implement
Default
forOverlapped
struct (83d9c4e) - implement
OnEvent
trait for all events (1675342) - implement a wrapper around
curl
(4bb65b4) - implement caching for workspace and repository entries (1dc2def)
- implement custom error type (ff80157)
- implement hooks handler (2a2b111)
- implement iterations - a maximum amount of time the server can idle without active connections (b6e8955)
- implement reconnection logic for initial connection (fef32b2)
- implement reconnection mechanism for Discord (90ba49a)
- implement sessions and session manager (312b924)
- improve cleanup logic (1b9be0c)
- introduce
PresenceContext
struct which will be used to build the rich presence (59ec145) - introduce message communication system (19ab5c6)
- introduce plugins system (b90ca4e)
- ipc: continuously read data from Discord pipe to detect sudden disconnects (807291f)
- ipc: use full pipe path (55ca5ab)
- json: add robust error handling (a6697da)
- lockfile: implement file locking mechanism (dd8fe2c)
- logger: handle cases in lua callbacks (c3ccb35)
- lua: automatically start the server (0364cfb)
- lua: call
on_workspace_change
hook if a workspace change is detected (33abe5a) - lua: initial implementation of the Lua codebase (6f72e92)
- lua: switch to event-driven architecture (e65f015)
- make server error messages clean (c097bd8)
- manager: allow disabling text categories via boolean values (7527afc)
- manager: expose more functions for interacting with rich presence and its manager (c34dea1)
- manager: handle
TermOpen
events (f4b573f) - manager: take
vim.bo.modifiable
into account when settingopts.is_read_only
(26c1390) - mappings: add
cuda
filetype (9fdd31e) - mappings: add
text.terminal
option (a7b9f25) - mappings: add a plethora of new mappings and icons (cc0affa)
- mappings: add icon for Awk language (67bc5b4)
- mappings: add icon for config files (501d2ea)
- mappings: add icon for image files (5487836)
- mappings: add icon for log files (2421524)
- mappings: add icon for odin (0df0a45)
- mappings: add icon for SVG (842fd15)
- mappings: add missing filetypes (dbfb1ad)
- mappings: add more default icons (732fd29)
- mappings: add more new icons and mappings (9b5e4fe)
- mappings: add Snacks Dashboard (e905ae3)
- mappings: add support for a plethora of plugins (0731b02)
- mappings: add support for dashboard plugins (cd04a8c)
- mappings: add support for docs (cfe563f)
- modularize the event system and add helper macros for creating messages (f302fa1)
- msgpack: add msgpack deserialization (eb2e10d)
- msgpack: add msgpack serialization (1f7c2a6)
- msgpack: add support for STR8 header (cd634ea)
- msgpack: allow serialization of Map values (9dc26b4)
- msgpack: support owned strings (0679c31)
- notify client when the workspace is found in the blacklist (ae660bd)
- notify the client when server is ready to accept connections (b27d763)
- notify the clients about the server shutdown (e987ba0)
- notify user about ongoing reconnection if any (edd237a)
- parse cwd in terminal buffers (a83e437)
- plugins.diagnostics: add plugin description (cff042a)
- plugins: add
cord.plugins.diagnostics
(a299d5c) - plugins: add
cord.plugins.local_time
(7782b46) - plugins: add
cord.plugins.scoped_timestamps
(69147c8) - plugins: add
diagnostics
plugin (f3705d7) - prepend the messages with a length header in case they get merged (264fde3)
- prioritize general activities over the idle activity (b4a837c)
- producer: allow sending a shutdown request (354e2a6)
- provide clear error message for when the connection to Discord IPC fails (4828894)
- provide clearer server error messages (34bfe12)
- provide more data when logging the error (22e9ed8)
- redesign usercommands (2eb4eaa)
- server: add local
ShutdownEvent
(3f55760) - server: improve error handling & error messages (9aea257)
- server: notify the client whether the provided client id is incorrect (edc9f5a)
- set
opts.name
independently of assets (f1b9266) - set style-specific default idle icons (c17ad89)
- specify MSRV (1b520ca)
- specify plugin version (cd8142f)
- stop any updates when connection is lost (dd1dd43)
- store os name and architecture (3f663db)
- switch to next available activity on
clear_activity
event (f05f126) - take custom executable path into account (87c9143)
- tie each client to a session (edd2141)
- trim stderr messages (4ec5de9)
- update sessions' last updated time (9968d94)
- use newly added mapping types (015f7ed)
- usercmds: add
:Cord shutdown
(607c3bb) - usercmds: add
:Cord status
(47c3d6a) - usercmds: add
:Cord update
(eba53d9) - usercmds: add
:Cord version
&:Cord check_version
(dd209d5) - util: add additional file-related utility functions (36d5031)
- validate and set
editor_image
upon initialization (d56416a)
Performance Improvements
- avoid evaluating string templates if
config.variables
is not defined (29efe00) - avoid unnecessary lookups (a4bccf4)
- avoid unnecessary lookups (b586eec)
- config: compute only necessary arguments (dbcd0b5)
- fs: switch to async filesystem ops (961ec2c)
- handle logic responsible for broadcasting the ready event more efficiently (a5c8ca3)
- json: optimize deserialization logic (02c233f)
- json: optimize serialization logic and generalize the serializer (3e7ab98)
- lua: lazy load some modules (0f1ebaa)
- lua: lazily load other modules (6313f45)
- mappings: performance optimizations (ff9c806)
- mappings: significant performance improvements (8ea0ad8)
- remove unnecessary atomics (85499cf)
BREAKING CHANGES
opts.workspace_name
is deprecated and will soon be removed- none