DEV Community

Cover image for 9 must-know open-source tools to land your dream job in 2025
Sunil Kumar Dash for Composio

Posted on

9 must-know open-source tools to land your dream job in 2025

AI is reshaping the job landscape, but not in the way the media portrays it. We need more problem solvers than ever before. New fields, new tech, and new markets are emerging rapidly.

As software developers, you’ll have to keep an eye on all this new stuff to stand out in the market. But finding what to learn can be hard.
So, I have curated a coveted list of tools that will keep you relevant and improve your chances of landing a job.

So. let’s go.

Peter nodding GIF


Composio 👑 - The integration platform for AI agents

I can bet my life (not really! but you got the point) that AI agents will be super popular. New products will be entirely operated using agents. However, to make agents actually capable, you need to connect them to external apps.

If you are creating an AI engineering agent, it must access GitHub, Liner, Jira, Slack, etc., to be truly useful. Composio does this. We let you connect over 250 apps to automate complex tasks.

We manage the authentication like OAuth, so you can build features that matter.

This is an emerging market with many activities. Learning this will instantly make your CV cooler.

Getting started with Composio is easy.

pip install composio-core
Enter fullscreen mode Exit fullscreen mode

Add a GitHub integration.

composio add github
Enter fullscreen mode Exit fullscreen mode

Composio handles user authentication and authorization on your behalf.

Here is how you can use the GitHub integration to star a repository.

from openai import OpenAI
from composio_openai import ComposioToolSet, App

openai_client = OpenAI(api_key="******OPENAIKEY******")

# Initialise the Composio Tool Set
composio_toolset = ComposioToolSet(api_key="**\\\\*\\\\***COMPOSIO_API_KEY**\\\\*\\\\***")

## Step 4
# Get GitHub tools that are pre-configured
actions = composio_toolset.get_actions(actions=[Action.GITHUB_ACTIVITY_STAR_REPO_FOR_AUTHENTICATED_USER])

## Step 5
my_task = "Star a repo ComposioHQ/composio on GitHub"

# Create a chat completion request to decide on the action
response = openai_client.chat.completions.create(
model="gpt-4-turbo",
tools=actions, # Passing actions we fetched earlier.
messages=[
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": my_task}
  ]
)

Enter fullscreen mode Exit fullscreen mode

Run this Python script to execute the given instruction using the agent.

Composio works with famous frameworks like LangChain, LlamaIndex, CrewAi, etc.

For more information, visit the official docs, and for even more complex examples, see the repository's example sections.

Composio GIF

Star the Composio repository ⭐


2. UV by Astral - The fastest Python package manager

If you write Python in any capacity, this is a must. Probably the best solution for Python’s messy package management ecosystem. It’s a single tool that replaces pippip-toolspipxpoetrypyenvtwinevirtualenv, and more.

It's written in Rust and can manage Python versions, install applications, have a cargo-like workspace, and, most importantly, be 100x times faster than pip.

Getting started with it is easy.

curl -LsSf https://astral.sh/uv/install.sh | sh
Enter fullscreen mode Exit fullscreen mode

Using pip

pip install uv
Enter fullscreen mode Exit fullscreen mode

uv manages project dependencies and environments, with support for lock files, workspaces, and more, similar to rye or poetry:

$ uv init example
Initialized project `example` at `/home/user/example`

$ cd example

$ uv add ruff
Creating virtual environment at: .venv
Resolved 2 packages in 170ms
   Built example @ file:///home/user/example
Prepared 2 packages in 627ms
Installed 2 packages in 1ms
 + example==0.1.0 (from file:///home/user/example)
 + ruff==0.5.7

$ uv run ruff check
All checks passed!
Enter fullscreen mode Exit fullscreen mode

See the project documentation to get started.

Download Python versions as needed:

$ uv venv --python 3.12.0
Using Python 3.12.0
Creating virtual environment at: .venv
Activate with: source .venv/bin/activate

$ uv run --python pypy@3.8 -- python --version
Python 3.8.16 (a9dbdca6fc3286b0addd2240f11d97d8e8de187a, Dec 29 2022, 11:45:30)
[PyPy 7.3.11 with GCC Apple LLVM 13.1.6 (clang-1316.0.21.2.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>>
Enter fullscreen mode Exit fullscreen mode

Use a specific Python version in the current directory:

$ uv python pin pypy@3.11
Pinned `.python-version` to `pypy@3.11`
Enter fullscreen mode Exit fullscreen mode

See the Python installation documentation to get started.

UV Image
Star the UV repository ⭐


3. Pydantic - Data validation using Python type hints

Oh boy! It is among the best tools I have used with Python and is responsible for keeping it relevant along with Numpy, Sklearn, etc..

Pydantic elevates Python's type hinting to a new level by providing runtime data validation and parsing based on those hints. Whether dealing with API responses, configuration files, or complex nested data, Pydantic ensures your inputs are clean and well-structured without requiring extensive boilerplate code.

You can explore Zod if you want similar things in the Javascript ecosystem.

Install it with pip or uv.

uv add pydantic
Enter fullscreen mode Exit fullscreen mode

Here’s a simple example.

from datetime import datetime
from typing import List, Optional
from pydantic import BaseModel

class User(BaseModel):
    id: int
    name: str = 'John Doe'
    signup_ts: Optional[datetime] = None
    friends: List[int] = []

external_data = {'id': '123', 'signup_ts': '2017-06-01 12:22', 'friends': [1, '2', b'3']}
user = User(**external_data)
print(user)
#> User id=123 name='John Doe' signup_ts=datetime.datetime(2017, 6, 1, 12, 22) friends=[1, 2, 3]
print(user.id)
#> 123
Enter fullscreen mode Exit fullscreen mode

Check the documentation for more.

Pydantic GIF

Explore the Pydantic repository ⭐


4. Turborepo - High-performance bundler for javascript

This is the UV equivalent in the Javascript and Typescript ecosystem for mono repos. Simillar to UV, Turborepo is also written in Rust for high performance.

Monorepos are great at many things but struggle to scale. Each workspace has its test suite, linting, and build process, and a single mono repo might have many tasks to execute.

Turborepo solves your mono repo's scaling problem. Remote Cache stores the result of all your tasks, meaning that your CI never needs to do the same work twice.

Check out the documentation for more.

Large enterprises, including companies like Vercel, Netflix, and Adobe, have widely adopted it.

Turborepo Image

Explore the Pydantic repository ⭐


5. RabbitMQ - Messaging and streaming broker

If you’re building anything that needs asynchronous communication, RabbitMQ is a no-brainer. It’s probably the most versatile solution in the message broker space, supporting multiple protocols like AMQP, MQTT, and STOMP. This makes it a perfect fit for microservices, event-driven architectures, and real-time applications.

For teams working with distributed systems, RabbitMQ is an essential tool.

Here’s a simple example of sending and receiving messages.

Install the amqplib package:

npm install amqplib
Enter fullscreen mode Exit fullscreen mode

Producer: Sending messages to a queue.

const amqp = require('amqplib');

const sendMessage = async () => {
    const queue = 'task_queue';
    const message = 'Hello, RabbitMQ!';

    try {
        // Connect to RabbitMQ
        const connection = await amqp.connect('amqp://localhost');
        const channel = await connection.createChannel();

        // Ensure the queue exists
        await channel.assertQueue(queue, { durable: true });

        // Send a message to the queue
        channel.sendToQueue(queue, Buffer.from(message), { persistent: true });
        console.log(`[x] Sent: ${message}`);

        // Close the connection
        setTimeout(() => {
            connection.close();
            process.exit(0);
        }, 500);
    } catch (error) {
        console.error('Error:', error);
    }
};

sendMessage();
Enter fullscreen mode Exit fullscreen mode

Consumer: Receiving messages from a queue.

const amqp = require('amqplib');

const receiveMessage = async () => {
    const queue = 'task_queue';

    try {
        // Connect to RabbitMQ
        const connection = await amqp.connect('amqp://localhost');
        const channel = await connection.createChannel();

        // Ensure the queue exists
        await channel.assertQueue(queue, { durable: true });

        console.log(`[x] Waiting for messages in ${queue}. To exit, press CTRL+C`);

        // Consume messages
        channel.consume(
            queue,
            (msg) => {
                if (msg !== null) {
                    console.log(`[x] Received: ${msg.content.toString()}`);
                    channel.ack(msg);
                }
            },
            { noAck: false }
        );
    } catch (error) {
        console.error('Error:', error);
    }
};

receiveMessage();
Enter fullscreen mode Exit fullscreen mode

Check out the documentation for more.

RabbitMQ GIF

Explore the RabbitMQ repository ⭐


6. Sentry - Application monitoring system

If you care about the stability of your apps, Sentry is a must-have. It’s the ultimate solution for tracking errors, performance issues, and application health in real time. Whether you’re building for the web, mobile, or desktop, Sentry integrates seamlessly to help you debug faster and wiser.

With its detailed stack traces, breadcrumbs, and user context, you get everything you need to pinpoint the root cause of issues. But it doesn’t stop there—Sentry also helps you monitor app performance with features like transaction tracing and custom metrics.

Check out the documentation to know more.

Sentry Image

Explore the Sentry repository ⭐


7. Grafana - Visualize your data like never before

If you need to monitor metrics, logs, or traces, Grafana is the go-to tool. It’s an open-source platform that turns your raw data into beautiful, interactive dashboards, making it easy to understand what’s happening in your systems.

Grafana integrates with virtually any data source—Prometheus, Elasticsearch, InfluxDB, AWS CloudWatch, and more.

It is definitely one of those tools you may find in almost all organizations.

Grafana Image

Explore the Sentry repository ⭐


8. LangGraph - Build AI agents with states

If you’ve ever wished for a better way to manage AI agents with complex workflows, LangGraph is the answer. It’s a framework for building stateful AI agents that can easily handle multi-step processes, decision-making, and context retention.

We built our own SWE agent in LangGraph, which scored 48.60% on the SWE-Bench, a benchmark for testing the efficacy of AI coding agents.

Install LangGraph.

npm install @langchain/core @langchain/langgraph @langchain/openai @langchain/community
Enter fullscreen mode Exit fullscreen mode

Add API keys for Tavily and OpenAI to environment variables.

// agent.ts

// IMPORTANT - Add your API keys here. Be careful not to publish them.
process.env.OPENAI_API_KEY = "sk-...";
process.env.TAVILY_API_KEY = "tvly-...";

import { TavilySearchResults } from "@langchain/community/tools/tavily_search";
import { ChatOpenAI } from "@langchain/openai";
import { MemorySaver } from "@langchain/langgraph";
import { HumanMessage } from "@langchain/core/messages";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

// Define the tools for the agent to use
const agentTools = [new TavilySearchResults({ maxResults: 3 })];
const agentModel = new ChatOpenAI({ temperature: 0 });

// Initialize memory to persist state between graph runs
const agentCheckpointer = new MemorySaver();
const agent = createReactAgent({
  llm: agentModel,
  tools: agentTools,
  checkpointSaver: agentCheckpointer,
});

// Now it's time to use!
const agentFinalState = await agent.invoke(
  { messages: [new HumanMessage("what is the current weather in sf")] },
  { configurable: { thread_id: "42" } },
);

console.log(
  agentFinalState.messages[agentFinalState.messages.length - 1].content,
);

const agentNextState = await agent.invoke(
  { messages: [new HumanMessage("what about ny")] },
  { configurable: { thread_id: "42" } },
);

console.log(
  agentNextState.messages[agentNextState.messages.length - 1].content,
);
Enter fullscreen mode Exit fullscreen mode

Please read this to understand the flow of the example. Also, please check out the documentation on LangGraph for more information.

LangGraph GIF

Star the LangGraph repository ⭐


9. Selenium - Browser Automation Framework

Every tech professional encounters browser automation at some point in their career. Many companies rely on Selenium for various tasks, including web automation, testing, and scraping dynamic content.

Selenium make it easy for developers to control web browsers programmatically, enabling them to simulate user interactions such as clicking buttons, filling out forms, and navigating between pages

It is available in programming languages.

Install Selenium in Python with pip.

pip install Selenium
Enter fullscreen mode Exit fullscreen mode

You must install Chrome Webdriver for Chromium-based browsers and Gecko Driver for Firefox browsers.

Here’s an example of using Selenium with ChromeDriver:

from selenium import webdriver

# Specify the path to your ChromeDriver executable
driver = webdriver.Chrome(executable_path='/path/to/chromedriver')

# Open a webpage
driver.get("<https://www.example.com>")

# Perform actions (e.g., click a button, find elements, etc.)
print(driver.title)  # Print the page title

# Close the browser
driver.quit()

For more, check the [documentation.](https://www.selenium.dev/documentation/)
Enter fullscreen mode Exit fullscreen mode

Selenium

Explore the Selenium repository ⭐


Thank you for reading. Do mention any other tools you use heavily at your workplaces.

Top comments (10)

Collapse
 
mezieb profile image
Okoro chimezie bright

Nice work thanks for sharing

Collapse
 
sunilkumrdash profile image
Sunil Kumar Dash

Thank you so much

Collapse
 
mezieb profile image
Okoro chimezie bright

We are glad to have you

Collapse
 
johncook1122 profile image
John Cook

I would've loved to add Redis but well I don't think they are OSS anymore in tru sense,Same for Terraform. It is what it is.

Collapse
 
alexhales67 profile image
Alexhales67

Agree, great software. Corporate greed.

Collapse
 
time121212 profile image
tim brandom

This is a nice list. We use Grafana with Prometheus and Kafka for streaming. We considered RabbitMQ but decided to go with Kafka.

Collapse
 
sunilkumrdash profile image
Sunil Kumar Dash

Thank you.

Collapse
 
johnywoods12 profile image
johnywoods12

nsibleNice list, I would add Kubernetes and Docker, common tool in many organizations. Must know for developers.

Collapse
 
sunilkumrdash profile image
Sunil Kumar Dash

Thanks, they sure are great.

Collapse
 
smithjohn21 profile image
smithjohn21

Came for the cover picture stayed for the content. Nice list