Reached 1000 installs and other cool stuff

Reached 1000 installs and other cool stuff

February 2, 2023
My perception for CodeQue changed by 180 degree since last newsletter!
A few insights regarding the Visual Studio Code extension release (my homemade marketing).
New features added to extension in last month.
Laser focus on building ESLint plugin and making the query language more powerful.

I’m happy with the traction that CodeQue get.

CodeQue reaches 1000 installs! Yeah!
notion image
If you read last newsletter post, you might have noticed it had a bit depressing vibe. It was due to lack of feedback about the hard work I put into this project.
But looks like CodeQue get some traction and positive users feedback which skyrocket my motivation and established my belief all the work I put into it make sense.
Here are some of users reviews!
notion image
notion image
notion image
notion image

How I get first 1000 installs?

If you ever published something in the internet, you know that it disappears instantly among petabytes of other data. Without active promotion across social media, no-one will know about your project. It’s a paradox of the Internet. You have access to everything, but finding anything is hard.
Btw I still keep finding years old projects similar to CodeQue that I was unable to find few months ago. My bubble changed a bit over time.
That is installs chart for last 60 days.
notion image
How I get 1000 downloads? Here is my home made marketing plan I’ve executed.
Firstly, I’ve decided to prepare a video that showcase most important extension features.
Video content is much, much more catchy than text or images. You have around 5-8 seconds to acquire viewer attention and get them interested into the topic. I have no skill in video editing, but I’ve managed to shot and edit this in couple of hours using iMovie.
And then I’ve almost immediately published that on Twitter. I’ve made 3 mistakes here:
  • I posted tweet at Saturday evening (less active users)
  • I didn’t prepare proper readme for the extension
  • I didn’t include a link to extension page 🤦‍♂️
I presume I could get more traffic with a link and more conversion with professional looking description. But it had a good side as well - users who downloaded the extension were motivated enough to do it without a clickable link (I’ve added website link at the end of video). It perhaps saved me some bad reviews from people who misunderstood the message or CodeQue concept overall.
The next day I’ve decided to share the video on other social media platforms:
  • Facebook - I’ve added a post on different facebook groups
  • Reddit - I’ve added a post a few sub-reddits
The first peek of downloads on the chart are in days when I’ve added a Tweet and posted on Reddit. Btw. most of Facebook groups are dead, posting there is perhaps waste of time.
I think most of the traffic was from Reddit, I got a lot of upvotes there. Screenshot shows stats of the best performing post. I’ve added a video into Node.js Subreddit. I’ve also posted in /r/vscode and /r/javascript
notion image
What happened next was really unexpected to my introvert soul. I’ve decided to send a message on Twitter to official @code account. I was asked to send them an email and as a result of conversation they have re-tweeted my tweet (without a clickable link to extension 🤦‍♂️) a few days later. However I’ve added a proper readme by that time. Their re-tweet caused second installs peek.
Since launch the extension get up to 10 installs per day. I have no idea how people find it, it’s probably a mix of Google search, extension search, my posts on social media still being shared from time-to-time.
I still have a few options for free promotion, which are
  • Asking tech influencers to re-tweet (I would prepare a new Tweet this time, with better video and link !)
  • Launching on Product Hunt - I would use this opportunity in future, once there will be some premium plan for CodeQue.
  • Investing time into content marketing - I should spin up blog on It’s tough one, because it’s very time consuming and long-term process. I will perhaps decide to do it once CodeQue will have premium features to offer. However the sooner I start it, the better.

New features added per user requests

Among other things, users asked for support for other programming languages and for Visual Studio Code workspaces.
I found them both relatively low hanging fruits, so I’ve decided to add both before closing extension v1.
Multiline search for any text files
It was really almost done already 😀 All I had to do was to disable file extensions filtering.
Multiline search works only for text search mode, so it’s not structural search. Support for the latter requires implementing it separately for each programming language, so that will come later on the road. Since text mode is just quite complex regular expression generated under the hood, it all sound as quick win.
As usual, I spot some bugs and I was struggling a bit with syntax highlighting and match highlighting. Unfortunately Prism highlight does not support some languages, even popular one like PHP, so it’s not perfect, but for me it’s good enough for now.
If you work on web project with some CSS and HTML files, it’s usually enough to search through.
I will have to update readmes and website to introduce CodeQue as:
“Multiline search for any programming language, structural search for JavaScript and TypeScript”.
I will do it somewhere later 😀
Here is the example of formatting agnostic search of CSS code
notion image
Support for workspaces and search UI changes
I’ve never used Visual Studio Code workspaces until a user asked if CodeQue supports them.
Turned out it does not, but I wasn’t surprised 😅.
After couple hours fo work, It is now possible to search in all workspaces, and search results are grouped in collapsible sections representing workspaces.
Additionally I’ve decided to group all results for the same file under another collapsible section. I was missing such grouping while using the CodeQue on daily basis. The UI for displaying search results for the same file might change in future as I have couple of ideas how to make it better.
In addition, workspaces, files and matches headers are sticky, so you will always see current context!
Hope you will like it as much as I do!
notion image

Laser focus on getting ESLint integration work ASAP

I see CodeQue for ESLint as a huge opportunity and amazing improvement for software engineering team workflows. I find use cases for custom ESLint plugins everyday, but implementing them in classic way consumes sooo much time. Imagine if you could create custom ESLint plugin in 10 minutes!
I will prioritise implementing MVP for ESLint, as I’m a little worried about performance comparing to the standard approach. It might turn out to be ok, but I would like to have the overview upfront, before implementing advanced query languages functionalities.
MVP would also involve adding support for ESLint TypeScript parser (CodeQue uses Babel now) which would open a way for supporting other programming languages!
Speaking of functionalities, there are a few that have to be added into query language to make it more robust:
  • Being able to refer to the same identifier wildcard within query, eg.
    • const $$_ref1 = $$$; fn($$_ref1)
  • Query builder allowing for boolean conditions, as well as performing matches within other queries, so you can narrow down the match (and have more precise code issue highlight in ESLint) eg.
    • { "query" : "try {} catch { throw new $$() }", // This query acts as a context "within" :{ query: "new $$()" // This is actual found result } }
  • Query language extension allowing for advances queries, eg. ability to perform nested searches inside function body or changing search mode for part of the query.
    • function $$() { const a = $$$ // $nested a() /* * Thanks to $nested, it would find a() also inside nested code blocks, * eg. inside anonymous function declaration. */ }


There are long coding days ahead of me, but this is what I like the most, what brings the satisfaction and I can’t wait to start it.
I’m glad I get to the point where CodeQue is now, because here is where the real challenges and party begins!
See you next time!