Skip to content

Chipmunk 4 Native Desktop with egui#2559

Merged
AmmarAbouZor merged 236 commits into
masterfrom
native-ui
May 22, 2026
Merged

Chipmunk 4 Native Desktop with egui#2559
AmmarAbouZor merged 236 commits into
masterfrom
native-ui

Conversation

@AmmarAbouZor
Copy link
Copy Markdown
Member

This PR Introduces the new version Chipmunk 4!

Chipmunk 4 is native Desktop Application built completely with Rust using egui and we will not depend on electron anymore!

Almost all features are ported here making the app in beta stage but still not in stable release state. We are planning to continue working toward the stable release after merging it.

Also, this PR will not remove the current electron code and will not change the repo structure & main docs

* Create the app crate to be run point for Chipmunk native desktop
  application.
* Set unified version and rust edition in workspace and make all other
  crates follow it.
* Add dependencies for native app.
* Add support for parsing CLI arguments
* Support for basic logging.
* Hello world from native UI
* Specify the paths for internal crates in indexer workspace instead of
  having to specify their paths in each project.
* Apply those changes on all internal crates withing indexer directory
* Rename crate to application
* Define UI & Core & Service and State modules.
* Define communication types (commands and events) for both general app
  and sessions.
* Define communication channels for general app
* Render Menu with one command to close the app.
+ Ignore errors in repaint watcher since we will get and error once the
  states sender channel is dropped.
* Use two main modules for the app (host and session) and have each
  modules containing its UI, services, data and core modules as
  sub-modules.
* This change will make it easier in the future to split the two main
  modules into separated crates.
* Create the UI for rendering the content of the sessions using the
  communication channels.
* Spawn a task for each session to make the communication for each
  session locally.
* UI will just read the file and render it's content as lines.
* Channels communication still need some thinking because we are tight
  to the render loop to receive the events.
Change the mechanism for waking up the UI on events to include egui
context in all senders and call it explicitly on each send.
* Wire up close session command adding and ID for each session.
* Improve notifications adding additional items and cleaning up the
  implementation in UI.
* Log send errors in one function and embedded it in all senders
* Create a struct to be passed through UI components to be able to send
  notifications and check for shared UI state across all UI components.
* Use this struct to send command encapsulating the error handling.
* New error type for UI.
* Rename to UiComponents to HostUI
* Move receivers and notification handling to host UI completely.
* Use the table provided by the crate egui_table to show the logs.
* Current implementation still primitive without using functionality in
  chipmunk core.
We need the UI for each session to have it's own unique ID to avoid
its owned controls from having ID clashes. We had this problem with
tables from different sessions sharing their scroll state.
* Bind session from rust core libraries in the native UI.
* Currently we can establish a session and deliver the number of lines
  that has been read.
* UI needs to request for lines so it can display them in the table.
Building system to display logs in table (WIP): We load all logs
without cleaning up the logs aren't needed.
* Better way to check for data need to be fetched.
* Encapsulate logic for getting log entries inside MainTable struct
* This approach avoids having to load existing logs but is complex and
  is based on assumptions that the logs are sequenced and sorted.
* Implement showing a window of logs simply using a map with indexes
  avoiding the complexity of keeping track on the existing logs.
* Request discard rendering frame when new logs needed to be fetched to
  avoid rendering the rows where we don't have data.
Tables use the ID of their direct parent, therefor we need to assign
an ID for that part and it's not enough to assign an ID for the
session root UI as it solved in previous commit
* Create the bottom panel with the tab control + Add tabs types
* Create components for each tab and render the initial content for each
  one of them.
* Input controls follow the functionality and look if the current one.
* It provides extra functionality for handling Ctrl+Backspace.
* Wire filter callback to keeping filter info in session data state.
* Implement search status in search bar
* Introduce entity to keep track for long running process.
* Cancel search operation safely.
* Cancel running operations on session closing.
* TODOs and notes
* Implement table for search results adding the needed structs and
  commands to UI, data state and the services.
* Keep offset for search results because we need for mouse scrolling.
* Fix layouts making sure panels don't shrink to fit their content.
* Add ID for search table to avoid ID clashing between scroll states.
* Add check before opening new recent session to ensure session is still
  valid while application is running then show a modal prompt to remove
  item for recent sessions.
* This can happen if file is removed while chipmunk is running as
  sanitizing happen on startup only.
* Keyboard control to select items in recent session listing to enable
  starting a recent session with keyboard only
* We avoided creating caches as the number of recent sessions isn't
  expected to be more than 100
Wait until the output file is written before applying search filters in
recent session to avoid race conditions when search is applied before
output file is written
Avoid adding UI signals inside recent session restore as it's not
running in UI rendering scope. Change make the function arguments
simpler without avoiding UI related arguments passing
* File explorer supports sub folders with scanning with depth of 5.
* Service will scan files and folders and send the data to the UI
* Search will run on all favorite and their sub-folders
* Search will be cached
* Add persist functionality for UI state used for UI lightweight changes
  like panels visibility
* Group host UI preferences in one struct and move panels visibility to
  it.
* Render log row numbers with weak leading zero padding so row numbers
  stay aligned as the log count grows.
* Ensure log row columns has always the minimum size to show maximum log
  number and the bookmark indicator to avoid cases where search table
  log numbers are cramped
* Show hovering banner on notifications with fading animations.
* Add proper display implementation for native errors.
* Move display to formatting and enable it on all features to avoid
  compiler errors.
* Add plugins service, state and communication commands.
* Plugins load will run asynchronously.
* Define one Channel and Event for asynchronous work in host service to
  avoid each service defining its own channels
* Add plugins manger to tabs and menu
* Basic implementation for plugins manager listing
* General confirm modal to be used globally in app when needed
* Build Plugins Manger UI
* Render readme markdown files in plugins manger.

Side Quests:
* Refactoring: Group modals in one module and banners in one module.
* Control visibility of side panel in multiple files session setup view
* Menu item to open stream with plugins.
* Select plugins in the session setup.
* Start & restore session with plugins.
* Add plugins configuration schema rendering to plugins side view
* Use grid to give logs table like view
* Color errors and warnings logs
* Improve source code in details view
Make colors used for notifications and plugins inspect logs different
according to the current theme.
* Implement logs schema for plugins with changes on code to deliver
  plugins render options to the logs schema
* Export & Import helper functions to avoid duplications
* Change export with empty columns + delimiter meaning to export
  all columns instead of export none of them
* Support for opening text files with plugins by adding menu entry for
  them while keeping the exiting behavior by using text parser directly
  unchanged.
* Support for attaching sources with plugins replacing a todo in code
* Support for restoring sessions with plugins
* Add validation for plugins before starting recent sessions
* Make notification centered.
* Remove plugins manager info notifications
* Update readme
* Quick actions palette to find chose between recent sessions and files
  in favorite directories
* Extend matchers to highlight the matched parts
* Add throttle to file tree + match on whole path.
* Extend throttle to ensure it will be applied on first letter to avoid
  the eager behavior, and apply it in quick open and file tree views.
* Close quick open on mouse clicks outside of the window.
* Add command palette to run commands from keyboard.
* Introduce fuzzy matcher.
* Move shared functionality for search pickers to their own module
* Move shared file picker functionality to their own module
* Move matchers to their own module
* Render Body of the latest release where we but normally the changelogs
  on first time the app is opened after getting updated.
* Write down the latest shown version in app storage
* Add settings for checking for updates
* Settings added in storage service & state
* Setting tab in UI
* Refactor + Fixes in code and prepare for the bigger upcoming
  refactoring in Host
* Move tabs from host state into host tabs struct
* The tabs will hold the content of each tab themselves without the need
  to extra maps or keeping track on stale UI structs
* Cleanup the code and remove code smells
* Fix stale request IDs on plugins manager as the struct doesn't live
  forever anymore.
Select the next tab on to the right on active tab is closed instead of
selecting home tab blindly
Scope row widget IDs by edit/display mode to prevent egui from reusing
transient button state after applying a filter edit.
* Labels in DLT/SomeIP follow plugins
* Plugins Add buttons follows DLT
@AmmarAbouZor AmmarAbouZor merged commit 09db73c into master May 22, 2026
1 of 2 checks passed
@AmmarAbouZor AmmarAbouZor deleted the native-ui branch May 22, 2026 10:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants