Pinel banner

Pinel

41 devlogs
57h 16m 58s

Fully customizable and extensible code editor written in Rust and Iced framework!

This project uses AI

I’m nowhere close to being good at Rust and so most of my ai usage just came from trying to debug Rust warnings and errors that wouldn’t make any sense to me. I also used it for a feature like fuzzy finding because I needed to get ideas on what kind of algorithm or system I could use for fuzzy finding.

Demo Repository

Loading README...

kashsuks

The internal API for basic stuff works!! Basically i looked at how neovim uses lua to invoke its internal api and decided to implement that so i can allow scripting in Pinel! It was actually pretty easy. While vim/nvims api was written in C I was able to port over the basic infrastructure which just involves invoking those functions and logging them when the app loads. While this does increase load time it is very minimal.

I also wrote up the docs for it!

The first image is me disabling the sidebar using the script in the second image.

here is a template file you can check out to see how it works!

More functions and language supports to come soon!

Changelog

Attachment
Attachment
0
kashsuks

Pretty massive stuff! I added markdown rendering support (with hot-reloading so that any change appears instantly) and it works pretty well! I found the package frostmask yesterday while doomscrolling in bed and it turns out its pretty darn efficient. I need to figure out as to why the code editor section is choppy/slow when markdown render is active.

Some Stats:
Loading the markdown: *~ 1-1.5 seconds*
Hot-reloading: < 1 second

The image linked is a part of the codebase that is using the new active markdown render feature

Changelog

Attachment
Attachment
0
kashsuks

I mostly worked on documentation and getting the site ready! Everything has been pretty smooth so far!

I thought of an idea while in the shower. Sahil suggested i add ssh support such that i can edit the contents of a file or directory while sshed into it. VSCode has this (thats how I worked on an old project which was hosted on nest). The average user wouldn’t need access to a ssh client and edit stuff so why not make it a terminal command such as pinel connect <ssh host> where could be [email protected] and traverse and edit a directory and its contents through it

Changelog

Attachment
Attachment
1

Comments

fireentity
fireentity 2 days ago

quite tuff yap!

kashsuks

I’ve been vibecoding quite a bit to fix up some issues that i have absolutely no clue why they fail. For example I followed the LSP support guide for iced-code-editor and I still haven’t been able to understand as to why it didn’t work. It’s my priority and I just cannot figure out why. I had opus give me some code for lsp loading and i gave it back an idea to de load the server when a file is inactive.

The images in the devlog are of my activity monitor while multiple files are open as well as the autocomplete working!

Changelog

Attachment
Attachment
0
kashsuks

Okay so I wanted to add one more feature before I start using Pinel to build itself and that feature was automatic indentation. Little did i know just how much of a pain this is to implement. For starters, i have to write the logic for it by myself (which i dont mind) but the issue is that its really really weird. I tested out my code. Heres how it went:

  • Doesn’t work
  • Works in some files
  • Doesn’t work again
  • Works again in some files
  • Stops working
  • Works again in some files

I decided to put it aside for now and just deal with it later

Changelog

0
kashsuks

This is a pretty important devlog as we now have…. Integrated terminal support! I found this really cool rust crate a while ago that allows for terminal emulation using Iced in rust! It’s called iced_term. Its still in beta so I would assume it isnt perfect but its really cool! I might even consider making my own contributions to it :D

I also renamed some references in the codebase from ā€œRodeā€ and changed it to ā€œPinelā€ as a part of the new transfer

fyi the image in the devlog is the actual application showing the current state of the integrated terminal

If you plan on using it, i have tested it for mac but when a release is made it will be tested for all supported operating systems!

Changelog

Attachment
1

Comments

Capy
Capy 4 days ago

Wow! XD

I was about to tell you that it needs to be an image of the app itself, because of how good that looks! :OOOOOO
Well done brosquito! :D

kashsuks

I remade the autocomplete and it somewhat works but ill probably have to scrap that code for now since i found this that now has lsp + autocomplete support. My plan is to use that in order to have autocomplete + a bit of my own algorithm!

Also i took feedback from my last voting cycle and made a website! This will be used as a way for people to quick install as well as look at docs. Claude Opus 4.6 cooked w/ this and so did opencode! check out the site here

Changelog

Attachment
1

Comments

fireentity
fireentity 4 days ago

TUFFFFF w yap

cskartikey

Tagged your project as well cooked!

šŸ”„ cskartikey marked your project as well cooked! As a prize for your nicely cooked project, look out for a bonus prize in the mail :)

kashsuks

theres this really cool crate that i came across https://crates.io/crates/iced-code-editor and so i saw that it had native number line support. I’ve been trying to get proper number line support for the past 20 days and i just couldn’t figure out a solution and this crate had exactly that!! i tried it out and it looks so fricking peak

I also added some optimisation for file opening and tested it! Before this it would take 3-4 seconds to load an 8k file into buffer but after the optimisation changes it takes <1 second

Changelog

Attachment
0
kashsuks

So i accidentally leaked my hackatime api key in front of 20 ppl. And so i implemented api key blur! it looks kinda mid rn but thats because i just want to get it working. I’ll probably have a similar system where it prompts when you try to open a file like.env so that you don’t accidentally leak some stuff. Also i changed the codebase to use a subscription system where the app subscribes to certain features/processes (this helps me have a cleaner codebase)

Changelog

Attachment
5

Comments

fireentity
fireentity 10 days ago

can you send me your new api key so I can confirm it’s different?

fireentity
fireentity 10 days ago

WAIT THIS IS SUPER COOL THO

kashsuks
kashsuks 10 days ago

ye i gotchu!

inw
inw 10 days ago

This would be useful for certain streamers whose names start with ā€œthā€ and end with ā€œeoā€ and sometimes open .env files on stream

kashsuks
kashsuks 10 days ago

@inw real i wanna use ts when i stream but im scared ill leak my shit accidentally sob-wx

kashsuks

I tried making it into a universal DMG with proper checksums so that I can have an auto update feature inside the editor. Its going horribly because apple is weird!

Other than that I changed the theme selection to be a dropdown and it actually saves it now!

Changelog

Attachment
0
kashsuks

Switched the codebase over to used iced! ill make more optimisations in the near future but practically everyithing looks the same. I will need to revisit and see what other packages to use for optimisation but other than that ive been having an amazing expoerience with iced! Most of this stuff is ai code that was rewritten to work with iced but that will change as i refactor!

Attachment
0
kashsuks

Shipped this project!

Hours: 39.11
Cookies: šŸŖ 148
Multiplier: 13.57 cookies/hr

For this version I fixed up a ton of bugs and decided to drop some features for now. Its been pretty smooth since the last ship since ive been getting more comfortable with my stack and the structure. I added native hackatime support, theming scripts, a file navigator, fuzzy finder, settings, and a syntax highlighter!

kashsuks

I worked on the indentation feature because who codes without proper indentation. I might be stupid but im not a psycho and it sorta works. Still some tweaks because it doesnt feel right. Also new version! Thanks to shuflduf for making 0.3.2 possible :)

Changelog

Attachment
2

Comments

rupnil.codes
rupnil.codes 23 days ago

Soo good!

rupnil.codes
rupnil.codes 23 days ago

also wtf is that image??

kashsuks

I reworked the treesitter code so that highlighting follows an actually good standard unlike wtv homemade algorithm i had before. I also tried using Rode to code rode and holy shit it was horrible. Bottom 1 experience of ALL time

Uhh ok so i need to add the auto tab thing and figure out why navigation is dogshit

The syntax highlighter is supposed to be like under 1ms (1/1000) for my people who dont know what a millisecond is and uhh yeah idk how to test it but maybe later when i understand it

Changelog

Attachment
0
kashsuks

Hackatime/wakatime support works. It was surprisingly simple and yeah.

Shuflduf showed me this really cool gist they wrote for automating github release + crates release and i will be using it from now on.

Next up: optimisation + git/lazygit integration

Changelog

Attachment
1

Comments

Shuflentity
Shuflentity about 1 month ago

LETS FUCKING GO SHUFLDUF MENTIONEEDD!!!!!!!!!!!!!!!!!!! WE LOVE RISKING OUR RAINS!!!!!!!!!!!!!!!!!!!!!

kashsuks

So i added a settings section in the file navigation bar and it seems to be working pretty good. I also fixed why the autocomplete suggestion accepting wasnt working and its been fixed!

Changelog

Attachment
0
kashsuks

I readded some old features that were disabled for a stable release! they include the fuzzy finder (which now has a new keybind), and the command palette! I also worked on a startup text that shows when the user is not in a file or a directory! Kinda like what vscode has

Changelog

Attachment
Attachment
Attachment
0
kashsuks

We have auto bracket closing support my bluds thumbs-up it tweaked out for a bit because i was logging every bracket related action instead of only opening meaning that even if i backspaced an open bracket to bring it back to one line, it would append a closing bracket. I fixed this by only accounting for physical changes to the brackets! Next step is to auto tab when the user opens a bracket into a new line!

Changelog

Attachment
0
kashsuks

Some random guy commented on my github issue yesterday to show his fuzzy finding algorithm so i spent 2 hours implementing it! The algorithm is able to index and generate results in under 30 milliseconds for indexes of size ≤ 1000 and for sizes 1000 < n < 10,000 it takes 60-300 ms!

Changelog

Attachment
0
kashsuks

v1 of the treesitter works! It’s kinda hardcoded but its get the job done for most users. It has support for js, tx, rust, and python! I’ll probably integrate native LSP support next so that its easier for treesitter to detect the keywords for other languages

Changelog

Attachment
2

Comments

fireentity
fireentity about 1 month ago

heh….. ts syntax highlighting so tuff!

kashsuks
kashsuks about 1 month ago

ty cronana

kashsuks

I tried publishing rode-editor v0.1.2 and realized that the icon system just would not work and so I had to come up with a series of fixes.

In the end i realized that embedding the files into the system and then if not found using a fallback system to load them directly from the assets folder seems to work!

I’ll test out the performance and functionality trade offs of this soon tm-verified hopefully by 0.1.5 when I add treesitter support but until then thats it!

The image in the devlog is v0.1.4 of rode-editor that is opened inside of another project of mine. Used solely for showing that the icons work on the official crates.io version

Changelog

Attachment
0
kashsuks

Changelog

  • feat: basic autocomplete that kinda harcoded
    Not that many changes here but what I did is pretty significant. Rode now has a (somewhat) working autocomplete! I kinda just harcoded the keywords for rust, js/ts, and python and then some common stuff like data types. There is also a detection system to find the context of where the user is (inside a function or not) and then change the results based on that.

I had to debug some errors dealing with the HashSet library that is a part of std::collections but other than that its been going pretty well!

Attachment
0
kashsuks

Changelog

NOTE: The images I linked are of the actual file tree in its current state as well as some sample code from another project just to show what the font looks like :)

Attachment
Attachment
0
kashsuks

I played around with the fuzzy finder a bit more and readded it to the application and its pretty stable! I think theres a couple more bugs i need to fix such as the files not being opened when selected through the fuzzy finder modal but other than that its fine!

Attachment
0
kashsuks

I worked on some vim commands. vibecoded a tad bit of it but it sucks so ill probably rewrite some parts of it! The cursor works but the problem is that the actual cursor and the vim cursor are not synced. The blue block in the i

Attachment
0
kashsuks

Pretty simple devlog I wrote up some updated docs so that the shipwrights can actually use it.

Attachment
0
kashsuks

Shipped this project!

Hours: 24.84
Cookies: šŸŖ 383
Multiplier: 15.41 cookies/hr

this was one complex project so far. I had a lot of ideas (too many for a matter of fact) but I think I was able to execute them pretty well for my first real rust project (other than robotics). I got to use egui which was pretty cool. I thought that it was a much better experience than writting code for tauri. Oh also rust documentation is really nice. Other than that I would say its been pretty fun! Theres definitely a lot more updates to come to this project

kashsuks

I fixed a few issues that were stopping me from publishing my project to [crates.io](https://crates.io] and it took me a bit to fix those but the main one was like about an if statement that could’ve been a bit more efficient.

After that I spent the rest of my time just writing an actually good looking readme and I’m done! There are a LOT of issues but atleast the app is useable I’ll fix more later :pf:

Oh I also drew a logo in excalidraw

Attachment
3

Comments

chefpenguino
chefpenguino about 1 month ago

LOL fire logo

chefpenguino
chefpenguino about 1 month ago

just voted on your project btw, really nice stuff :)

kashsuks
kashsuks about 1 month ago

tysm!

kashsuks

It’s been a while since I devlogged here because I’ve been spending my time working on this project for campfire flagship but I might just submit it for flavortown. Some really MASSIVE changes i made were:

I also wanted to add a file navigation bar (similar to what VSCode has when you press [ctrl]+b and so for that I needed to add an option for the user to open a directory (or folder if you’re weird ig)

And so the actual file navigator system took me a while. I still need to figure out as to why the emojis don’t work for rust files but other than that everything seems fine!

Attachment
Attachment
0
kashsuks

I added text magnification detection. An issue i had before was that when you zoom in, the number lines zoom at a different rate than the text and that has been fixed!! Not only that but I started on the tab switching sytem. Its a bit buggy but its getting somewhere

Attachment
0
kashsuks

I worked on text highlighting for the find and replace modal. When the user tries to find a piece of something it highlights the text and moves the whole screen to that region. I also added a command such that the user can open a file from the terminal! I also added match checking so now in the find and replace modal it shows how matches there are and which one the user is currently on!

Attachment
0
kashsuks

First devlog of 2026!! I wanted to integrate a modal for Vim commands. It’s based on a Neovim plugin that I really enjoyed using and decided to integrate that into CatEditor!! I also added cursor position saving so that if you move columns and go up or down, it saves the position of that column!

Attachment
1

Comments

seifotefy75
seifotefy75 3 months ago

Bravo and thank you 😊

kashsuks

This session added quite a lot of stuff! I worked on a find and replace system where if the user pressed command + f it opens up the modal and they can find and replace text. I also fixed an issue where the line numbers would double up after they go past, like number 9. I also fixed up the command palette and made the suggestion box real. It is yet to work, but it’s getting there! Another extremely important thing i worked on was restructuring the project. I put the files into sub directories so that it’s easy to scale!

Attachment
Attachment
0
kashsuks

I spent quite a while fixing issues that Dodge suggested for the theme loader. It uses a config system that doesn’t load every second; rather, the user has to either force-reload the app or quit and reopen. Not only that, but I also started working on the command palette feature. It’s very scrappy, but I got it to a point where pressing cmd + comma makes a little box pop up, it dims the background and has a field for entering text, and then the results box. I haven’t actually gotten to work on the suggestions and make proper suggestions, but uh yeah! I really like where this is going, but tomorrow I’m going to work on cleaning up some consistency with unused vars as well as making sure my project structure is scalable!

Attachment
3

Comments

Shuflentity
Shuflentity 3 months ago

RAHHHH WE LOVE CATPPUCCIN AND RUST

dodge1
dodge1 3 months ago

⌘+, is for settings 😭
⌘+p or smth

kashsuks
kashsuks 3 months ago

oh shi dodge i might change that hollup

kashsuks

I spent quite a while working on fixing more cursor issues since it kept bugging out 50% of the time. After that was fixed, I worked on integrating catppuccin into the editor as the native colour scheme! I plan on making a scripting language or just editing source files so that the user can have their own themes in the future.

Attachment
0
kashsuks

I wrote up the code for the vim movement motions (which took up wayyyyyyyyyy too much time) and I also added cursor that is visible in the different modes (insert, normal, etc)! The app is also in full screen by default!

Attachment
1

Comments

Sebastian Wu
Sebastian Wu 3 months ago

this is so tuff

kashsuks

I started working on the project. I used egui in rust in order to first render a box and then kept iterating it. I got number lines, a top menu bar, some vim motions, a cleaned up ui, and fullscreen. It’s still very buggy but its somewhat useable

Attachment
0