Finding My AI Coding Assistant: Why Codeium Wins Over Copilot
Disclaimer: I have no affiliation with Codeium and this is not a paid advertisement, just my honest opinion.
So, I am on holiday before I start a new job, and in my previous job they offered both Google Gemini and Github Copilot coding assistants. They were a game changer, especially Copilot, which I ended up using permanently in my job.
However, I have now lost the benefit of being able to use Copilot for free since leaving my previous job, and it has become torture to code without it.

I could feel my productivity grinding to a halt.
I tried desperately to get used to coding without an assistant again, but after just a few days I couldn't stand it.
Surely there's something I can use out there? For free?
So, I went on a search for a new Coding assistant with the following criteria in mind:
- It needs to work on Visual Studio (VS) Code. I'm an avid fan of this IDE and I do all of my coding through it.
- It's needs to be free. I don't want to pay for yet another monthly subscription when the entire digital industry is forcing us to subscribe, subscribe, subscribe.
- It needs to work without the hassle of setting up API keys or registering something etc. I just want to install it onto VSCode and get going as quickly as possible.
- It needs to perform on-par with Google Gemini/Github Copilot. I've become used to their performance so anything less will make my coding experience that much more painful.
- Supports the languages I use, such as Python and SQL.
Introducing Codeium
So, in search of a replacement for Copilot, I went onto the VSCode Extensions Marketplace and typed in ‘ai' in the search box, not being really sure what I'll find.
And to be honest, I just happened to stumble upon the extension Codeium by sheer luck. But having used it for over a month now, I am confident to say that I actually feel it is so much better than both Github Copilot and Google Gemini.
Why? Well…
I give you my four reasons for using Codeium, with examples to show how to use its unique functionalities and to demonstrate their usefulness.
1. Quick Installation
The best thing about Codeium is that you click install, sign in (I used my google account), and then you're good to go. No fuss, no subscriptions, no bespoke configs – I was ready and coding in less than a minute.

2. Codeium's Commitment to Providing a Truly Free Service
We're used to the idea that something free is never actually free. So naturally I looked into what traps Codeium had in place to tease money out of my wallet.
However, according to their page dedicated to answering exactly this, they are actually committed to providing a free tier forever, providing unlimited Autocomplete, Chat, and Command with no strings attached.
This means that:
- I can use this extension however much I like without being capped or rate limited, which seems to be a common method other providers use to persuade users to pay for premium tiers.
- Plus, they explicitly mention that they don't sell user data to train models.
To be honest, as I am using this at an individual capacity, I don't really mind if point 2 turns out to be a big fat lie.
In the end, the fact that there are no unknown traps they will spring on me whilst using this extension is a very compelling advantage over other providers.
I can use it however much I want, with no sudden pauses in service or constant alerts to upgrade.
Note: The free offering is available under MIT License.
3. Context-Aware Suggestions and Chat
Functionality wise, context awareness is a must for any code assistant to be truly useful. There's nothing more annoying than for a code suggestion to be random pieces of code that other people have written that is completely irrelevant to me.
Codeium boasts (as per this page) both:
- Opened files context
- Repo wide context
Let's look at an example demonstrating this feature.
Code Suggestion Example
I have a GitHub Repo dedicated to any code related to my Medium articles here:
GitHub – bl3e967/medium-articles: The accompanying code to my medium articles.
and a decent number of them are related to visualising network graphs using Python.
A common function I use across all of my graph related content is a function to generate a random networkx
graph consisting of some number of nodes specified by an input argument num_nodes
.
But currently, it's defined multiple times in different Jupyter Notebooks when it can be declared in a common python file to be imported. So…
Task: Let's say I want to create a Python file that contains this function that I can import into all of my Jupyter notebooks.
I create a new file called test_graph_generator.py
, import networkx
, and type def
to declare a function. I then let Codeium suggest what should come next, whilst having one of the Jupyter notebooks that defines this function open in a tab.

So, we can see that Codeium has clocked onto my intention, and have suggested the correct function in full and also identified by itself that the num_nodes
parameter needs to be specified.
The above screenshot demonstrates Opened File Context awareness.
When I reload VSCode and close down all open files:

You can see that the code suggestions are still able to suggest the correct function even without the relevant files being open, which demonstrates Repo Wide Context awareness.
It's not the most precise or accurate method of measuring performance, but you get the gist. It does the job.
Command Example
This time, we use the Command feature to instruct Codeium to write this file for me. I intentionally give it a very vague prompt: Add functions to generate a networkx graph
.

Note that I use ‘functions' in plural, because I know that I actually have two different versions of the graph generation function defined in different Jupyter Notebooks, nested within sub-directories in my repo:
get_new_test_graph
def get_new_test_graph():
NUM_NODES = 50
p = 0.5
seed = 1
test_graph = nx.dual_barabasi_albert_graph(n=NUM_NODES, p=p, seed=seed, m1=2, m2=1)
# append node properties
nx.set_node_attributes(test_graph, dict(test_graph.degree()), name='degree')
nx.set_node_attributes(test_graph, nx.betweenness_centrality(test_graph), name='betweenness_centrality')
for node, data in test_graph.nodes(data=True):
data['node_identifier'] = str(uuid.uuid4())
data['feature1'] = np.random.random()
data['feature2'] = np.random.randint(0, high=100)
data['feature3'] = 1 if np.random.random() > 0.5 else 0
# append edge properties
for _, _, data in test_graph.edges(data=True):
data['feature1'] = np.random.random()
data['feature2'] = np.random.randint(0, high=100)
return test_graph
get_new_test_digraph
def get_new_test_digraph(num_nodes:int=50):
test_graph = nx.scale_free_graph(n=num_nodes, seed=0, alpha=0.5, beta=0.2, gamma=0.3)
# append node properties
nx.set_node_attributes(test_graph, dict(test_graph.degree()), name='degree')
nx.set_node_attributes(test_graph, nx.betweenness_centrality(test_graph), name='betweenness_centrality')
for node, data in test_graph.nodes(data=True):
data['node_type'] = 0 if node < 25 else 1
data['node_identifier'] = str(uuid.uuid4())
data['feature1'] = np.random.random()
data['feature2'] = np.random.randint(0, high=100)
data['feature3'] = 1 if np.random.random() > 0.5 else 0
# append edge properties
for _, _, data in test_graph.edges(data=True):
data['feature1'] = np.random.random()
data['feature2'] = np.random.randint(0, high=100)
return test_graph
Ideally, I would like Codeium to notice this and to add both functions into this file at once.
And voila, it succeeds:

It has identified the two different versions:
- one from ‘Enhance Your Network Visualisations with the Power of a Graph DB'

- and the other from ‘The New Best Python Package for Visualising Network Graphs'

4. @ Mentions
I personally love this feature.
By using the @
operator, you can specifically reference particular files, diffs, directories, repos, and even terminal outputs to be more accurate in your intentions when using the chat functionality.

Example 1
Here, I've told it to search through my entire medium-articles
repo @.
to look for any functions that generate test networkx
graphs.

Example 2
Here, I've told it to summarise the diffs for the test_graph_generator.py
file:

Example 3
You can even reference publicly available repos to ask questions:

This is seriously useful in my opinion that saves a lot of time looking up stuff on StackOverflow.

Some Limitations
Now, I've gone on for a while about all the best functionalities that I am enjoying for free.
However, there are some points I should make you aware of – these are not dealbreakers but I feel obliged to let you guys know so that you have the full picture of what Codeium offers.
1. Context Awareness Limits
I mentioned that the Free Tier gives unlimited usage of autocomplete, in-editor chats, command instructions, which is great.
However, the free tier apparently has limits to the context awareness that can be extended with their monthly subscriptions. They seem to have opted for unlimited use, whilst limiting their proprietary context awareness to entice users onto a premium plan.
I personally have been using Codeium without issue and I regard even the basic context awareness functionality as a big plus. But one to be aware of, as it is not a ‘everyone-gets-everything-for-free' situation.
2. Model Limits
One more thing to be aware of is that the Free Tier only provides access to their Base Model, which is based on Meta's Llama 3.1 70B.
If you want to use other models, including GPT-4o, Claude 3.5 Sonnett, or Codeium's Premier model, you will need to be on their paid subscription.
3. Price
If you were to opt for a Codeium premium subscription, then let's compare costs with Copilot.
Copilot Individual: $10/month vs Codeium Individual: Free
Copilot Individual: $10 vs Codeium pro: $10
Copilot Business: $19/month vs Codeium Teams: $24
Copilot Enterprise: $39 vs Codeium Enterprise: Need to talk to Sales
It seems like for the individual, Codeium wins in terms of price. But if you were to go for a Business/Enterprise offering, potentially Codeium is more expensive. One to think about, whether it is worth it to go for a business subscription.
In Summary
To conclude, the following reasons are why I choose Codeium as my coding assistant:
- Simple setup – get going without fuss.
- Free and will continue to be free, with no compromise to functionality.
- Very good context awareness.
- Very useful
@
mentioning functionality for tailored querying.
There are also functionalities that I haven't mentioned in this article…
- Context Pinning: Similar to the
@
mentioning functionality, pin particular context for code suggestions and commands. - Custom Chat Instructions: Add starting **** Instructions to all of your chat prompts. e.g.
your answer should be within two sentences
orLet's think step by step
so you don't need to write it every time.

…which I will just mention here so you can explore these functionalities yourself. I won't attempt to explain their usefulness as I have not felt the need to use them much.
Lastly, the above demonstrations are not the most accurate method of measuring performance of a coding assistant, and the reader should be aware that the above is subject to my own biases and particularities in how I generated the examples.
However, the examples I provide shows that Codeium does what it says on the tin, full stop. It does the job, and there's nothing much to fuss about.
Enjoy.
I hope you enjoyed this article.
If you found it helpful, please leave a clap (you can do up to 50 at a time if you really liked it) and any questions please leave a comment.
If you are interested in any of the articles I mentioned above, you can find them here:
An Interactive Visualisation for your Graph Neural Network Explanations
and more can be found in my profile: