-
1
codebeat
codequest
Effortlessly enhance code quality and collaboration in teams.
Begin utilizing codebeat to effortlessly track every quality alteration in your GitHub, Bitbucket, GitLab, or self-hosted repositories. With codebeat, you gain the advantage of automated code assessments that support a diverse array of programming languages. This tool not only aids in prioritizing issues but also helps you identify quick wins for your web and mobile applications. Furthermore, codebeat offers a robust team management system designed for both organizations and open-source contributors. You can assign different access levels and quickly reassign team members across projects, making it a perfect fit for teams of any size, whether they are small startups or larger enterprises. By incorporating codebeat into your workflow, you can significantly improve collaboration and optimize your development processes, ultimately leading to better software quality. Embracing this tool can also foster a culture of continuous improvement within your team.
-
2
Seerene
Seerene
Transforming software development with insights for greater efficiency.
Seerene’s Digital Engineering Platform provides sophisticated software analytics and process mining functionalities that analyze and visualize the software development processes within your organization. By pinpointing areas of inefficiency, this platform transforms your business into a more streamlined operation, facilitating software delivery that is not only swift and high-quality but also economical. It empowers leaders with vital insights needed to guide their teams toward achieving exceptional software standards. The platform is capable of identifying code segments that are likely to harbor defects, which can hinder developer productivity, while also recognizing high-performing teams so that their successful practices can be implemented throughout the organization. Furthermore, it assesses potential defect threats in release candidates by meticulously reviewing code, pinpointing development hotspots, and evaluating testing strategies. It also reveals areas where there is a mismatch between the effort expended by developers and the value produced for users, along with identifying code that remains unused by end-users, leading to unnecessary maintenance costs. In essence, Seerene not only helps organizations enhance their software development lifecycle but also significantly boosts overall productivity and effectiveness across teams. This comprehensive approach ensures that companies remain competitive and adaptive in a fast-paced technological landscape.
-
3
Identify and address security vulnerabilities early on with the highest precision in the industry. The OpenText™ Fortify™ Static Code Analyzer effectively detects security flaws, prioritizes the most critical issues, and offers comprehensive guidance on how to resolve them. A centralized security management tool accelerates the resolution process for developers, supporting an extensive framework that includes 1,657 vulnerability categories across over 33 programming languages and more than a million APIs. Fortify's integration platform enables seamless incorporation of security measures into the application development tools you already use. The Audit Assistant feature allows users to manage the speed and accuracy of SAST scans by adjusting their depth, which helps reduce false-positive results. Additionally, you can dynamically scale SAST scans according to the evolving requirements of the CI/CD pipeline. This robust solution facilitates shift-left security for cloud-native applications, encompassing everything from infrastructure as code to serverless architectures, ensuring comprehensive protection throughout the development lifecycle. Embracing such proactive security measures not only enhances the overall integrity of applications but also fosters a culture of security awareness within development teams.
-
4
Embold
Embold Technologies
Transform your software health with insightful evaluations and visuals.
Gain a comprehensive understanding of your software with Embold's in-depth evaluation and accessible visual representations. These user-friendly graphics allow you to easily discern the size and quality of each component, fostering a quick understanding of your software's overall health. Investigate issues at the component level through detailed annotations that identify their precise locations within your codebase. Uncover the intricate web of dependencies among your software components, revealing how they interact and influence one another. Our cutting-edge partitioning algorithms empower you to swiftly spot chances for refactoring and simplifying complex components. The EMBOLD SCORE, which is calculated based on four crucial dimensions, emphasizes components that have a significant impact on overall quality, indicating which should be prioritized for resolution. Additionally, evaluate your code’s structural soundness with our unique collection of anti-patterns, applicable at various tiers such as class, function, and method levels. Embold also integrates a range of metrics, including cyclomatic complexity and coupling between objects, to provide a thorough assessment of your software systems' quality. This comprehensive strategy guarantees that you are well-equipped with the essential resources for upholding high-quality code and continuously improving your software development practices. With Embold, you can take proactive steps to enhance your codebase effectively.
-
5
PT Application Inspector
Positive Technologies
Enhancing security collaboration through advanced, automated vulnerability detection.
PT Application Inspector is distinguished as the only source code analyzer that combines superior analysis with effective tools for the automatic verification of vulnerabilities, significantly speeding up the report handling process and fostering improved collaboration between security professionals and developers. By merging static, dynamic, and interactive application security testing methods (SAST + DAST + IAST), it delivers industry-leading results. This tool is dedicated solely to identifying real vulnerabilities, enabling users to focus on the most pressing issues that require immediate attention. Its unique characteristics—such as accurate detection, automatic vulnerability confirmation, filtering options, incremental scanning, and an interactive data flow diagram (DFD) for each detected vulnerability—greatly enhance the remediation process. Moreover, by reducing the number of vulnerabilities in the final product, it lowers the associated costs of repair. Additionally, it allows for security analysis to take place during the early stages of software development, emphasizing the importance of security from the outset. This forward-thinking strategy not only optimizes the development process but also improves the overall quality and security of applications, ultimately leading to more robust software solutions. By ensuring that security measures are integrated early, organizations can foster a culture of security awareness throughout the development lifecycle.
-
6
Splint
University of Virginia
Empowering developers with reliable, secure programming tools.
The Secure Programming Group within the Department of Computer Science at the University of Virginia is charged with both the creation and continual enhancement of Splint, a static analysis tool. Leading this initiative is David Evans, who is also the primary developer of the project. The initial concept of memory bounds checking was introduced by David Larochelle, while University of Virginia students such as Chris Barker, David Friedman, Mike Lanouette, and Hien Phan made notable contributions to the project's advancement. Splint is essentially an evolution of LCLint, a tool that emerged from a collaborative research project involving the Massachusetts Institute of Technology and Digital Equipment Corporation's System Research Center. David Evans also played a pivotal role as the chief designer and developer of LCLint. The foundational idea for a static checking tool that could pinpoint inconsistencies between LCL specifications and their C implementations was conceived by John Guttag and Jim Horning. Their expertise and innovative ideas were instrumental in shaping both LCLint and its successor, Splint, thereby establishing a strong framework for developing tools that significantly improve software reliability and security. This collaborative effort highlights the importance of interdisciplinary teamwork in addressing complex programming challenges.
-
7
bugScout
bugScout
Empowering secure coding standards for a safer digital future.
bugScout is a specialized platform aimed at uncovering security vulnerabilities and evaluating the quality of software code. Founded in 2010, its primary goal is to improve global application security through meticulous auditing and the incorporation of DevOps practices. By promoting a secure development culture, bugScout helps protect organizations' data, assets, and reputations. Designed by ethical hackers and esteemed security experts, bugScout® complies with international security standards and proactively addresses emerging cyber threats to secure clients' applications. The platform uniquely integrates security with quality assurance, achieving the lowest false positive rates in the industry while providing swift analysis. As the most lightweight solution available, it integrates effortlessly with SonarQube. Moreover, bugScout employs both Static Application Security Testing (SAST) and Interactive Application Security Testing (IAST), offering a thorough and flexible review of source code that identifies application security flaws, thereby ensuring a strong security foundation for organizations. This cutting-edge strategy not only safeguards critical assets but also improves overall software development practices, creating a safer digital environment. Ultimately, bugScout empowers organizations to embrace secure coding standards while enhancing their software lifecycle.
-
8
JProfiler
ej-technologies GmbH
Streamline performance troubleshooting with user-friendly profiling solutions.
When it comes to profiling, it's crucial to find a tool that is both effective and not overly complex to learn. JProfiler provides an ideal solution, offering a combination of user-friendliness and robust functionality. The process of setting up sessions is straightforward, and its seamless integration with other tools allows for a quick start, all while presenting profiling data clearly. Every aspect of JProfiler has been designed with precision to help you tackle your issues efficiently. A common source of performance problems in business applications is related to database interactions, and JProfiler's specialized probes for JDBC, JPA/Hibernate, and NoSQL databases like MongoDB, Cassandra, and HBase effectively identify the root causes of slow database access and determine how your code triggers these sluggish statements. With its JDBC timeline view detailing connections and their activities, a hot spots view that showcases the slowest statements, multiple telemetry perspectives, and a comprehensive breakdown of individual events, JProfiler enhances your ability to troubleshoot effectively. By leveraging the capabilities of JProfiler, you can greatly simplify and expedite the task of pinpointing and rectifying performance bottlenecks in your applications, ensuring smoother operational efficiency overall. This makes it an invaluable asset for developers seeking to optimize their applications.
-
9
RuboCop
RuboCop
Elevate your Ruby coding with customizable linting and formatting!
RuboCop functions as both a linter and a formatter specifically designed for Ruby, following the widely accepted Ruby Style Guide embraced by the community. Its extensive customization options empower users to adjust numerous features via configuration settings. In practical terms, RuboCop supports almost every conceivable coding style. In addition to pinpointing problems within your code, it can also autonomously resolve certain issues. RuboCop comes loaded with features that surpass standard linter capabilities, establishing itself as a robust tool for developers working in Ruby. It is compatible with all primary Ruby versions and is able to automatically correct many detected coding errors. Furthermore, it offers advanced code formatting options, multiple output formats suitable for both interactive environments and integration with various tools, and the ability to set different configurations for distinct parts of your codebase. Users can also opt to disable specific checks for certain files or sections, significantly improving its practicality. The blend of versatility and comprehensive functionality solidifies RuboCop's role as an essential resource for ensuring high code quality in Ruby projects, making it a preferred choice among developers.
-
10
C-STAT
IAR Systems
Enhance code quality effortlessly with comprehensive static analysis.
Static analysis serves as a crucial method for uncovering potential issues within your code by evaluating it directly at the source code level. C-STAT provides an impressive array of nearly 700 distinct checks, many of which align with the standards set forth in MISRA C:2012, MISRA C++:2008, and MISRA C:2004, alongside over 250 checks that address vulnerabilities defined by CWE. In addition to this, it evaluates compliance with the CERT C coding standard, emphasizing safe coding practices. C-STAT functions quickly and generates thorough and detailed error reports, which significantly aid in troubleshooting efforts. There’s no need to worry about intricate tool configurations or the complexities of language support and build system issues. Fully integrated into the IAR Embedded Workbench IDE, C-STAT allows for seamless maintenance of code quality throughout your development activities. This tool is designed to work with a broad spectrum of IAR Embedded Workbench products. By implementing static analysis, not only can you identify potential coding flaws, but it also supports adherence to recognized industry coding standards, thereby fostering improved software reliability and maintainability. Consequently, using C-STAT enables developers to focus more on innovation while ensuring that their code remains robust and compliant.
-
11
As the demand for high-quality, dependable, and secure software grows in the face of increasingly intricate code structures, traditional debugging and testing techniques are becoming less effective. Automated tools like static source code analyzers are particularly adept at detecting flaws that might result in serious problems, such as buffer overflows, resource leaks, and other security vulnerabilities that often remain hidden from standard compilers during routine builds, runtime assessments, or normal operating scenarios. These often-overlooked defects highlight the shortcomings of conventional approaches. In contrast to other isolated source code analyzers, DoubleCheck distinguishes itself as a cohesive static analysis tool integrated within the Green Hills C/C++ compiler. It employs sophisticated and efficient analysis algorithms that have been meticulously honed and validated through over thirty years of experience in creating embedded tools. By utilizing DoubleCheck, developers can perform compilation and defect analysis simultaneously in a single process, which not only optimizes their workflow but also significantly bolsters the integrity of the code. This comprehensive method not only streamlines the development process but also enhances the ability to identify potential issues before they escalate. Ultimately, the integration of such advanced tools is crucial for maintaining high standards of software quality in today’s complex programming landscape.
-
12
SEA Manager
Neperia
Unlock software insights, streamline management, and boost efficiency.
The Software Environment Analyzer, commonly referred to as the SEA Manager, serves as a highly effective tool for software analysis, offering users an extensive overview of all applications within an organization along with their interrelationships. As a key element of various services provided by Neperia Group, the SEA Manager presents numerous opportunities for clients to gain insights, manage, and improve their software assets. When combined with Neperia’s KPS Portal, a platform dedicated to software insights, the SEA Manager equips businesses with unmatched visibility over every software component critical to their functioning. This tool functions independently, providing users with swift, comprehensive, and unbiased information. The analysis it conducts greatly reduces the time, costs, and risks linked to projects such as knowledge reconstruction, migration, porting, and re-engineering. No matter the intricacy of your software systems, Neperia’s SEA Manager offers a plethora of advantages. Additionally, it generates both functional and technical documentation in MS Office formats, complete with graphic visualizations customized to meet each client's unique needs. Ultimately, the SEA Manager is a vital asset for companies that seek to refine their software management strategies while also enabling them to make informed decisions based on clear data analysis. This enhanced decision-making capability can ultimately lead to improved operational efficiency and greater overall success.
-
13
CodeSee
CodeSee
Visualize, navigate, and streamline your codebase effortlessly.
You can easily spot cross-code dependencies and move seamlessly between different files and directories. This tool enhances your comprehension of the codebase and aids in planning, reviewing, and onboarding processes. It features software architecture diagrams that automatically synchronize with the codebase, allowing you to visualize how files and folders interrelate and how a modification integrates into the broader architecture. CodeSee Maps are generated automatically upon merging code changes, eliminating the need for manual refreshes of your Map. This enables you to quickly identify the most active segments within the codebase. Additionally, you can access detailed information about each file and folder, including their age and line count. Furthermore, Tour Alerts assist you in keeping your Tours current by enabling the creation of visual walkthroughs of your code, enhancing your overall understanding and navigation capabilities. By utilizing these features, you can significantly improve your workflow and collaboration within your team.
-
14
vFunction
vFunction
Accelerate cloud migration and modernize your applications effortlessly.
vFunction breathes new life into Java applications, facilitating a smoother migration to the cloud. It allows for the rapid and automatic extraction of effective microservices from complex monolithic architectures. The platform provides a cohesive interface that manages and tracks extensive cloud migration and modernization projects across an entire suite of applications. Its modernization dashboard governs the entire migration process, aiding in critical decisions regarding whether to refactor, retain, retire, replatform, or rewrite specific applications. Despite the ongoing cloud transformation efforts, there are still hurdles to overcome in the realm of application modernization. It is crucial to support teams in navigating these challenges and speeding up their advancement. As the urgency for modernization grows, relying merely on lift and shift methods proves inadequate. These older applications pose significant challenges for refactoring; however, by harnessing automation and analytics, even the most complex applications can be modernized with greater ease. Seize the chance to confidently tackle more sophisticated projects, assured that you possess the necessary tools to succeed and drive innovation within your organization. Ultimately, embracing this approach not only enhances efficiency but also positions your applications for future growth and adaptability.
-
15
IDA Pro
Hex-Rays
Unleash powerful insights with advanced binary analysis capabilities.
IDA Pro is a sophisticated disassembler that creates execution maps, portraying the processor's binary instructions in a symbolic form, particularly in assembly language. By utilizing cutting-edge methodologies, IDA Pro can convert machine-executable code into assembly language source code, which improves the clarity of complex programming constructs. Its debugging capabilities include dynamic analysis features that allow it to accommodate a variety of debugging targets and efficiently handle remote applications. The tool's cross-platform debugging functionality enables seamless debugging processes, ensuring straightforward connections to both local and remote systems while supporting 64-bit architectures and multiple connection types. Moreover, IDA Pro enhances the user experience by allowing analysts to modify its automatic decisions or provide guidance, which promotes a more intuitive and effective process for binary code analysis. This adaptability not only increases the analyst's engagement with the disassembler but also significantly streamlines the overall task of dissecting intricate binaries, paving the way for more insightful explorations of software behavior. Ultimately, IDA Pro stands out as an indispensable tool for professionals engaged in reverse engineering and security analysis.
-
16
Parasoft dotTEST
Parasoft
Early issue detection for high-quality, compliant software development.
Identifying and resolving issues at an early stage can lead to significant savings in both time and costs. By tackling problems sooner, you can circumvent the complexities and expenses associated with delivering high-quality software later in the development cycle. It is crucial to ensure that your C# and VB.NET code adheres to various safety and security industry regulations, which includes maintaining the necessary documentation and traceability for verification processes. Parasoft's tool, Parasoft dotTEST, automates numerous software quality practices, effectively assisting in your C# or VB.NET development projects. The tool's in-depth code analysis helps reveal potential reliability and security vulnerabilities. Furthermore, features like automated compliance reporting, requirement traceability, and code coverage are essential components for meeting the compliance standards required in safety-critical industries. The integration of these practices not only enhances the quality of your software but also streamlines the development process, ultimately leading to higher customer satisfaction and trust.
-
17
SpotBugs
SpotBugs
Uncover hidden bugs and enhance your Java code!
SpotBugs is a community-driven open-source tool that has emerged from the discontinued FindBugs project and operates under the GNU Lesser General Public License. For detailed insights and guidance, users are encouraged to consult the official documentation. The software requires at least JRE (or JDK) version 1.8.0 to run, yet it can effectively analyze applications coded in any Java version from 1.0 through 1.9. SpotBugs is equipped to detect more than 400 unique bug patterns, serving as an essential resource for developers looking to improve the quality of their code. The continuous updates and improvements show the community's dedication to upholding high standards in software development practices. Moreover, its ability to adapt to various Java versions makes it a flexible solution for developers working across different projects.
-
18
PMD
PMD
Streamline your code quality with powerful analysis insights.
PMD functions as a source code analysis tool that detects common coding problems, including unused variables, empty catch blocks, and the instantiation of superfluous objects, among other concerns. This capability enables developers to uphold cleaner and more effective codebases, ultimately enhancing the overall quality of their projects. Additionally, the insights provided by PMD can lead to more maintainable software in the long run.
-
19
Offensive 360
Offensive 360
Unmatched security innovation, affordable protection for every organization.
After years of focused innovation and development, we have successfully launched a comprehensive product that is affordable for organizations of all sizes while maintaining unmatched quality in the SAST sector. Our all-in-one solution is crafted to be easily accessible without sacrificing the high standards we have established. O’360 conducts a thorough examination of source code, efficiently identifying vulnerabilities within the open-source components that your project relies on. In addition, it includes malware and licensing assessments, along with Infrastructure as Code (IaC) evaluations, all driven by our sophisticated "brain" technology. Unlike many of our competitors, Offensive 360 is developed by cybersecurity professionals rather than investors, which ensures that our priorities are centered on security rather than financial gain. Our unlimited model distinguishes us from others; we do not charge based on the number of lines of code, projects, or users, allowing for greater flexibility. Additionally, O360 is equipped to uncover vulnerabilities that are frequently missed by traditional SAST tools, making it an essential resource for meeting the security requirements of any organization. This robust capability renders our solution not only practical but also indispensable in the evolving landscape of cybersecurity today, where threats are constantly emerging and evolving.
-
20
Polyspace Code Prover functions as a static analysis tool designed to guarantee the absence of critical runtime errors in C and C++ programming without having to execute the code. Utilizing formal methods, it meticulously assesses every possible code path and input scenario to identify potential issues like overflows, division by zero, and out-of-bounds accesses. This tool provides essential insights into variable ranges and points out unreachable code, thereby assisting developers in improving software performance and ensuring quality. Furthermore, Polyspace Code Prover complies with stringent safety standards such as IEC 61508, ISO 26262, and DO-178C, making it a preferred option for sectors that require rigorous software certification. With its in-depth analysis capabilities, teams can confidently produce dependable and resilient software solutions, ultimately enhancing their overall development processes.
-
21
Zenity
Zenity
Empower your team with innovative, secure low-code solutions.
The emergence of enterprise copilots and low-code/no-code platforms has transformed the landscape of creating powerful business AI applications and bots, accelerating the development process and making it more user-friendly. Generative AI has opened doors for individuals across varying technical expertise to drive innovation, optimize repetitive tasks, and craft efficient workflows effortlessly. However, similar to the public cloud, these AI and low-code frameworks provide a safety net for the underlying infrastructure but do not extend that protection to the data and resources built upon it. As an increasing number of applications, automations, and copilots are launched, the potential risks from prompt injection, RAG poisoning, and data breaches become more pronounced. Unlike conventional software development, the integration of copilots and low-code platforms frequently neglects essential stages such as thorough testing, security assessments, and performance checks. By equipping both seasoned and novice developers, organizations can create customized solutions that remain compliant with security protocols. We encourage you to explore how your team can leverage the capabilities of copilots and low-code development to propel your business toward greater success. This partnership has the potential to yield innovative outcomes that not only fulfill your requirements but also significantly boost overall operational efficacy, positioning your organization for future growth.
-
22
ESLint
ESLint
Enhance JavaScript quality effortlessly with customizable, automated linting.
ESLint is a static analysis tool that helps identify problematic patterns in JavaScript code. It allows developers to establish rules and create their own, effectively addressing issues related to code quality and style. The tool is aligned with the latest ECMAScript standards and can also accommodate experimental syntax from future drafts. Furthermore, ESLint supports code written in JSX or TypeScript, as long as the necessary plugins or transpilers are used. This tool integrates effortlessly with most text editors and can be included in continuous integration workflows to automatically identify and fix issues. Its popularity is underscored by its status as the leading JavaScript linter based on npm downloads, with major companies like Microsoft, Airbnb, Netflix, and Facebook relying on it. Developers have the option to preprocess their code, use custom parsers, and create their own rules that work alongside ESLint's default settings. Customizing ESLint to align with project requirements is a simple process, ensuring it functions exactly as needed. A notable feature of ESLint is its ability to automatically resolve a significant portion of identified issues, and these fixes are syntax-aware, minimizing the risk of introducing new errors during the resolution process. This combination of customization and automation makes ESLint an essential asset in contemporary JavaScript development, enabling teams to maintain high standards in their codebases. As a result, developers can focus more on building features while reducing the time spent on debugging and code maintenance.
-
23
Biome
Biome
Streamline your coding process with unmatched speed and flexibility.
Biome is a powerful toolchain designed specifically for web development, offering outstanding performance in formatting and linting across numerous programming languages, including JavaScript, TypeScript, JSX, TSX, JSON, CSS, and GraphQL. With a formatter that achieves a remarkable 97% compatibility with Prettier, it ensures quick and efficient code formatting that effectively handles flawed code structures in real time across various editors. The integrated linter features over 270 rules derived from ESLint, TypeScript ESLint, and other sources, delivering comprehensive and contextual diagnostics that assist developers in enhancing code quality and adhering to best practices. Built using Rust, Biome promises exceptional speed and efficiency, enabling it to format extensive codebases significantly faster than comparable tools on the market. Additionally, it is designed for seamless integration into diverse development environments, providing a unified solution for code formatting and linting without the need for complex configurations. This flexibility makes it suitable for projects of any scope, allowing developers to concentrate on enhancing their products rather than grappling with their tools. Ultimately, Biome's goal is to simplify the development workflow and boost overall productivity, making it an invaluable asset for modern software development. Moreover, its user-friendly design encourages developers to adopt it easily, further enhancing its appeal.
-
24
Checkmarx
Checkmarx
Revolutionize your code security with flexible, powerful solutions.
The Checkmarx Software Security Platform acts as a centralized resource for overseeing a broad spectrum of software security solutions, which include Static Application Security Testing (SAST), Interactive Application Security Testing (IAST), Software Composition Analysis (SCA), and training for application security skills. Tailored to fulfill the varied needs of different organizations, this platform provides a multitude of deployment options, such as private cloud and on-premises setups. By offering diverse implementation strategies, clients are able to start securing their code immediately, thus bypassing the extensive modifications typically required by a singular method. The Checkmarx Software Security Platform sets a new standard for secure application development, presenting a powerful tool equipped with superior capabilities that distinguish it within the marketplace. Furthermore, its adaptable features combined with an intuitive interface enable organizations to significantly boost their security posture in a streamlined and effective manner. Ultimately, this platform not only enhances security but also fosters a culture of continuous improvement in software development practices.
-
25
CodePatrol
Claranet
Automated security scans ensure robust code, enhancing collaboration.
CodePatrol has made security-focused automated code reviews a tangible option by performing thorough SAST scans on your project's source code to identify security issues early on. Endorsed by the proficiency of Claranet and Checkmarx, CodePatrol accommodates a wide variety of programming languages and employs several SAST engines to improve the precision of its scans. Through automated notifications and customizable filtering options, you can stay updated on the latest security vulnerabilities affecting your project. By harnessing the advanced SAST tools from Checkmarx, combined with the cybersecurity expertise of Claranet, CodePatrol successfully pinpoints new threat vectors. Routine scans from different code analysis engines deliver extensive insights into your project, guaranteeing a meticulous evaluation. You can easily access CodePatrol at your convenience to examine the aggregated scan findings, allowing you to swiftly tackle any security challenges in your project and boost its overall robustness. The importance of ongoing monitoring and proactive scanning cannot be overstated, as they are crucial for upholding a secure coding atmosphere. In addition, the ability to integrate CodePatrol into your development workflow enhances collaboration and ensures that every team member is aware of the security posture of the codebase.