<html>
    <head>
        <title>NetBeans Partners</title>
        <meta name="description" content="List of NetBeans partners">
        <link rel="stylesheet" type="text/css" href="/styles/partners.css">
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">

    </head>

    <body>

        <p><b>NetBeans partners are companies that provide, or help provide,
                a plugin or service for NetBeans IDE to support popular 
                features, frameworks, technologies, and platforms. NetBeans 
                partners provide a value add for NetBeans developers with a 
                business model of their choosing, which could be for a fee or 
                for free.</b></p><p>This page highlights NetBeans partner offerings to the 
            NetBeans community, while the complete listing of NetBeans 
            plugins is available from the <a href="http://plugins.netbeans.org/">NetBeans Plugin Portal</a>.
        </p>
        <div class="sort-bar">
            <span class="color-blue">Display category:</span>
            <select name="category" id="categDropdown">  
                <option value="all">All</option>
                <option value="Development">Coding & Development</option>
                <option value="Deployment">Deployment</option>              
                <option value="Mobile">Mobile</option>
                <option value="Reporting">Reporting</option>                
                <option value="Testing">Testing & Debugging</option>
            </select>
            <!--&nbsp;
            <span class="color-blue">Sort:</span>
            <select name="sort" id="sortDropdown">  
                <option value="catebory">category</option>
                <option value="name">name</option>
            </select>
            -->    
        </div>
        <div id="partners">
            <div class="partner Development all">			
                <div class="detail">
                    <h2 class="color-blue">Alice 3</h2>
                    <p>
                        <a href="http://alice.org">Alice 3</a> is a 3D programming environment, freely available, designed to be a 
                        student's first exposure to object-oriented programming in Java. Alice allows 
                        students to learn fundamental programming concepts in the context of creating 
                        animated movies and simple video games. In Alice, 3-D objects (e.g., 
                        people, animals, and vehicles) populate a virtual world and students create 
                        a program to animate the objects using a drag-and-drop interface.
                    </p>
                    <p>Alice 3 provides a NetBeans plugin that allows students to import 
                        the project they started in the Alice environment into NetBeans IDE, 
                        continuing their project as they learn and expand their understanding of Java.
                    </p>
                </div>
                <div class="categ">
                    Coding & Development<br/>
                </div>		
                <div class="logo">
                    <a href="http://alice.org"><img src="/images_www/partners/nbpartner-logo-alice.png" alt="Alice"/></a>
                </div>
                <br class="clear"/>			
            </div>
            <div class="partner Development all">			
                <div class="detail">
                    <h2 class="color-blue">AngularJS</h2>
                    <p>
                        <a href="http://angularjs.org">AngularJS</a> is a structural 
                        framework for dynamic web applications. It lets you use HTML as 
                        your template language and extend HTML syntax to express 
                        your application's components clearly and succinctly. It 
                        all happens within the browser, making it a partner with 
                        any server technology, such as Java EE.
                    </p>
                    <p>
                        NetBeans IDE includes,
                        out of the box, support for AngularJS, which is developed in co-operation
                        with and based on feedback from the AngularJS team.
                    </p>
                </div>
                <div class="categ">
                    Coding & Development<br/>
                </div>		
                <div class="logo">
                    <a href="http://angularjs.org"><img src="/images_www/partners/nbpartner-logo-angularjs.png" alt="AngularJS"/></a>
                </div>
                <br class="clear"/>			
            </div>
            <div class="partner Development all">			
                <div class="detail">
                    <h2 class="color-blue">Aspose</h2>
                    <p>
                        <a href="http://www.aspose.com">Aspose</a> is a vendor of .NET, Java, and SharePoint
                        development components, 
                        as well as rendering extensions for platforms such as Microsoft SQL Server Reporting 
                        Services and JasperReports.</p>
                    <p>The Aspose plugin for NetBeans IDE lets you 
                        create new Aspose projects by downloading and 
                        referencing libraries of Aspose Java components. The plugin lets you select components 
                        from Aspose Java product lines, such as "Aspose.Cells for Java" and "Aspose.Words for Java".
                        With this plugin, you never need to check for new releases of Aspose components. 
                        Whenever a new release is published, you will be notified of updated components
                        while creating a project.
                    </p>
                </div>
                <div class="categ">
                    Coding & Development<br/>
                    <a href="http://plugins.netbeans.org/plugin/47954/aspose-project-wizard"><img src="/images_www/v7/design/nb-icon-download.png" alt="Download" title="Download"/></a>
                </div>		
                <div class="logo">
                    <a href="http://www.aspose.com"><img src="/images_www/partners/nbpartner-logo-aspose.png" alt="Aspose"/></a>
                </div>
                <br class="clear"/>			
            </div>
            <div class="partner Development all">			
                <div class="detail">
                    <h2 class="color-blue">BIS Guard</h2>
                    <p>
                        <a href="http://www.bisguard.com">BIS Guard</a> provides tools and technologies for source code protection written in 
                        Flash/Flex/AS3 and Java. Focused on simplicity and the reliability of protection, thousands of
                        hackers tried to break BIS Guard's tools, even for money, without success.</p>
                    <p>The NetBeans plugin for BIS Guard protects Java development teams against reverse engineering
                        and plagiarism. Comparable to other obfuscators, protectors, and encryptors, the BIS Guard solution
                        is simpler to use, more efficient, and based on proprietary patented technology.
                    </p>
                </div>
                <div class="categ">
                    Coding & Development<br/>
                    <a href="http://plugins.netbeans.org/plugin/51308/java-antidecompiler-8-0"><img src="/images_www/v7/design/nb-icon-download.png" alt="Download" title="Download"/></a>
                </div>		
                <div class="logo">
                    <a href="http://www.bisguard.com"><img src="/images_www/partners/nbpartner-logo-bisguard.png" alt="Aspose"/></a>
                </div>
                <br class="clear"/>			
            </div>
            <div class="partner Development all">			
                <div class="detail">
                    <h2 class="color-blue">Centigrade</h2>
                    <p>
                        <a href="http://www.centigrade.de/en">Centigrade</a> is committed to excellence in usability engineering, user 
                        interface design and user interface engineering. The company supports
                        its clients in creating software products of high usability, visual 
                        attractiveness and technical elegance.</p>
                    <p>With BizLaf, Centigrade has created a pluggable Look & Feel 
                        for Java Swing based user interfaces that converts
                        existing applications into professionally looking business 
                        applications in a very efficient manner. BizLaf also provides
                        special support for NetBeans IDE in the form of a NetBeans module 
                        that can be used to style NetBeans IDE itself as well as a NetBeans module 
                        to style NetBeans Platform applications.</p>
                </div>
                <div class="categ">
                    Coding & Development<br/>
                    <a href="http://www.centigrade.de/en/products/bizlaf-stock-look-and-feel"><img src="/images_www/v7/design/nb-icon-download.png" alt="Download" title="Download"/></a>
                </div>		
                <div class="logo">
                    <a href="http://www.centigrade.de/en"><img src="/images_www/partners/nbpartner-logo-centigrade.png" alt="Centigrade"/></a>
                </div>
                <br class="clear"/>			
            </div>
            <div class="partner Testing all">			
                <div class="detail">
                    <h2 class="color-blue">cismet</h2>
                    <p>
                        <a href="http://www.cismet.de/en/">cismet GmbH</a> develops sustainable software 
                        systems and information integration strategies. The development team
                        is focused on visualization software, having developed an in-house 
                        geospatial integration platform 
                        as a powerful tool to build sustainable information systems for
                        industry and public bodies. 
                    </p>
                    <p>The NetBeans Beanmill Logging Viewer, by cismet, lets you visualize
                        Log4J and JSR47 Logging Events in NetBeans IDE. The SQ-Belle plugin,
                        by cismet, lets you reformat your SQL Statements in the same way 
                        you reformat your Java code.
                    </p>
                </div>
                <div class="categ">
                    Testing & Debugging<br/>
                    <a href="http://plugins.netbeans.org/plugin/4702/beanmill-logging-viewer-log4j-jsr47"><img src="/images_www/v7/design/nb-icon-download.png" alt="Download" title="Download"/></a>
                </div>		
                <div class="logo">
                    <a href="http://www.cismet.de/en/"><img src="/images_www/partners/nbpartner-logo-cismet.png" alt="cismet GmbH"/></a>
                </div>
                <br class="clear"/>			
            </div>
            <div class="partner Mobile all">			
                <div class="detail">
                    <h2 class="color-blue">Codename One</h2>
                    <p>
                        <a href="http://www.codenameone.com">Codename One</a> provides tools and technologies that let you easily create native 
                        apps using Java for iOS, Android, Windows, RIM, and more. It powers more than
                        22,000,000 devices.
                    </p>
                    <p>Codename One integrates seamlessly with NetBeans IDE via the Codename One IDE plugin. 
                        The plugin simplifies and streamlines common tasks such as creating a 
                        new project, running/debugging in the simulator, and sending the application
                        to the build server.
                    </p>
                </div>
                <div class="categ">
                    Mobile<br/>
                    <a href="http://plugins.netbeans.org/plugin/42406/codename-one"><img src="/images_www/v7/design/nb-icon-download.png" alt="Download" title="Download"/></a>
                </div>		
                <div class="logo">
                    <a href="http://www.codenameone.com"><img src="/images_www/partners/nbpartner-logo-codenameone.jpg" alt="Codename One"/></a>
                </div>
                <br class="clear"/>			
            </div>
            <div class="partner Development all">			
                <div class="detail">
                    <h2 class="color-blue">Controls.js</h2>
                    <p>
                        <a href="http://controlsjs.com">Controls.js</a> is a technology for building modern web and mobile applications, while
                        providing the same user experience as standard desktop or native applications. Controls.js 
                        minimizes HTML and CSS usage, which helps to give focus to a single technology: JavaScript. 
                    </p>
                    <p>
                       The main feature of the NetBeans plugin for Controls.js is integration of the Controls.js 
                       Form Editor. Write application in Java and design the application GUI in the Controls.js 
                       Form Editor. With the help of this plugin, Java developers do not need to know anything 
                       about web technologies.
                    </p>
                </div>
                 <div class="categ">
                    Coding & Development<br/>
                    <a href="http://plugins.netbeans.org/plugin/56205/controls-js-4-java-support"><img src="/images_www/v7/design/nb-icon-download.png" alt="Download" title="Download"/></a>
                </div>		
                <div class="logo">
                    <a href="http://controlsjs.com"><img src="/images_www/partners/nbpartner-logo-controlsjs.png" alt="Controls.js"/></a>
                </div>
                <br class="clear"/>			
            </div>
            <div class="partner Testing all">			
                <div class="detail">
                    <h2 class="color-blue">ej-technologies</h2>
                    <p>
                        <a href="https://www.ej-technologies.com">ej-technologies</a> specializes in 
                        monitoring and performance tools for the JVM.
                    </p>
                    <p>
                        The JProfiler plugin for NetBeans IDE makes it easy to
                        profile Java SE and Java EE applications directly from 
                        the IDE. Source code navigation in JProfiler
                        goes back to the NetBeans editor.
                    </p>
                </div>
                <div class="categ">
                    Testing & Debugging<br/>
                    <a href="https://www.ej-technologies.com/products/jprofiler/ide-netbeans.html"><img src="/images_www/v7/design/nb-icon-download.png" alt="Download" title="Download"/></a>
                </div>		
                <div class="logo">
                    <a href="https://www.ej-technologies.com"><img src="/images_www/partners/nbpartner-logo-ejtechnologies.jpg" alt="JProfiler"/></a>
                </div>
                <br class="clear"/>			
            </div>
            <div class="partner Development all">			
                <div class="detail">
                    <h2 class="color-blue">Emmet</h2>
                    <p>
                        <a href="http://emmet.io">Emmet</a> provides
                        keyboard shortcuts, simplified syntax, snippets, and coding help 
                        for many popular text editors,
                        to assist in developing applications in HTML, JavaScript, and CSS.
                    </p>
                    <p>
                        The NetBeans Emmet plugin lets you quickly 
                        and easily use the tools that Emmet provides
                        from within NetBeans IDE editors for HTML,
                        JavaScript, and CSS.
                    </p>
                </div>
                <div class="categ">
                    Coding & Development<br/>
                    <a href="http://plugins.netbeans.org/plugin/48315/emmet"><img src="/images_www/v7/design/nb-icon-download.png" alt="Download" title="Download"/></a>
                </div>		
                <div class="logo">
                    <a href="http://emmet.io"><img src="/images_www/partners/nbpartner-logo-emmet.png" alt="Emmet"/></a>
                </div>
                <br class="clear"/>			
            </div>
            <div class="partner Development all">			
                <div class="detail">
                    <h2 class="color-blue">Everlaw</h2>
                    <p>
                        <a href="http://everlaw.com">Everlaw</a> is building the world's most advanced litigation platform. 
                        Starting with discovery&mdash;the process of finding the proverbial 
                        smoking gun among millions of documents of evidence in a large 
                        case&mdash;we're bringing the speed of Google, the ease-of-use of Apple, 
                        and the efficiency of the cloud to the process of litigation. 
                    </p>
                    <p>
                        We love NetBeans, and we love TypeScript, and so we've developed 
                        a TypeScript plugin for NetBeans that exposes its rich type 
                        information and advanced language features with a first-rate 
                        IDE experience.
                    </p>
                </div>
                <div class="categ">
                    Coding & Development<br/>
                    <a href="http://plugins.netbeans.org/plugin/60605/typescript-editor"><img src="/images_www/v7/design/nb-icon-download.png" alt="Download" title="Download"/></a>
                </div>		
                <div class="logo">
                    <a href="http://everlaw.com"><img src="/images_www/partners/nbpartner-logo-everlaw.png" alt="Emmet"/></a>
                </div>
                <br class="clear"/>			
            </div>
            <div class="partner Reporting all">			
                <div class="detail">
                    <h2 class="color-blue">IDRsolutions</h2>
                    <p>
                        <a href="http://www.idrsolutions.com">IDRsolutions</a> specializes in PDF and HTML5 solutions, while it also provides 
                        a Java PDF Reader and a PDF to HTML5 convertor that builds
                        on their existing Java technology. 
                    </p>
                    <p>
                        The NetBeans PDF viewer plugin uses JavaFX to provide a free, 
                        native PDF viewer for NetBeans IDE. The plugin also forms the 
                        basis of a series of  <a href="http://blog.idrsolutions.com/2014/01/writing-javafx-pdf-viewer-plugin-netbeans-1-introduction/">articles showing how to write a plugin for NetBeans IDE</a>.
                    </p>
                </div>
                <div class="categ">
                    Reporting<br/>
                    <a href="http://plugins.netbeans.org/plugin/52568"><img src="/images_www/v7/design/nb-icon-download.png" alt="Download" title="Download"/></a>
                </div>		
                <div class="logo">
                    <a href="http://www.idrsolutions.com"><img src="/images_www/partners/nbpartner-logo-idr.jpg" alt="IDR Solutions"/></a>
                </div>
                <br class="clear"/>			
            </div>
            <div class="partner Reporting all">			
                <div class="detail">
                    <h2 class="color-blue">JasperSoft</h2>
                    <p>
                        <a href="http://jaspersoft.com">Jaspersoft</a> provides a flexible, 
                        cost effective, and widely deployed Business Intelligence suite, 
                        enabling better decision making through highly interactive,
                        web-based reports, dashboards, and analysis.
                    </p>
                    <p>
                        The NetBeans iReport plugin, by JasperSoft, is a 
                        visual report designer for JasperReports. You can manage charts, 
                        images, subreports, and crosstabs. Data can be retrieved using JDBC, 
                        TableModels, JavaBeans, XML, Hibernate, and CSV.
                    </p>
                </div>
                <div class="categ">
                    Reporting<br/>
                    <a href="http://plugins.netbeans.org/plugin/4425/ireport"><img src="/images_www/v7/design/nb-icon-download.png" alt="Download" title="Download"/></a>
                </div>		
                <div class="logo">
                    <a href="http://www.jaspersoft.com"><img src="/images_www/partners/nbpartner-logo-jaspersoft.jpg" alt="JasperSoft"/></a>
                </div>
                <br class="clear"/>			
            </div>
            <div class="partner Deployment all">			
                <div class="detail">
                    <h2 class="color-blue">Jelastic</h2>
                    <p>
                        <a href="http://jelastic.com">Jelastic</a> provides cloud solutions 
                        via platform-as-infrastructure solutions
                        for enterprises, hosting companies, and OEMs.
                    </p>
                    <p>
                        The NetBeans Jelastic plugin lets you manage your Jelastic environments, 
                        deploy applications, get log files, and perform other operations right
                        within NetBeans IDE.
                    </p>
                </div>
                <div class="categ">
                    Deployment<br/>
                    <a href="http://plugins.netbeans.org/plugin/48045/jelastic-cloud-platform-integration"><img src="/images_www/v7/design/nb-icon-download.png" alt="Download" title="Download"/></a>
                </div>		
                <div class="logo">
                    <a href="http://www.jelastic.com"><img src="/images_www/partners/nbpartner-logo-jelastic.jpg" alt="Jelastic"/></a>
                </div>
                <br class="clear"/>			
            </div>
            <div class="partner Development all">			
                <div class="detail">
                    <h2 class="color-blue">Jindent</h2>
                    <p>
                        <a href="http://jindent.com/">Newforms - Software Development</a> develops innovative source code
                        formatting tools for various languages that satisfy industrial requirements
                        concerning functionality, stability and reliability. 
                    </p>
                    <p>
                        Jindent, by Newforms - Software Development, is a source code 
                        formatter for the Java, C, and C++ programming languages. The NetBeans Jindent plugin
                        lets you transform any Java/C/C++ source code to meet your preferred coding 
                        style or common Java code conventions. 
                    </p>
                </div>
                <div class="categ">
                    Coding & Development<br/>
                    <a href="http://plugins.netbeans.org/plugin/44468/jindent-source-code-formatter"><img src="/images_www/v7/design/nb-icon-download.png" alt="Download" title="Download"/></a>
                </div>		
                <div class="logo">
                    <a href="http://jindent.com"><img src="/images_www/partners/nbpartner-logo-jindent.png" alt="Jindent"/></a>
                </div>
                <br class="clear"/>			
            </div>
            <div class="partner Development all">			
                <div class="detail">
                    <h2 class="color-blue">M.Y. Developers</h2>
                    <p>
                        <a href="http://www.mydevelopersgames.com">M.Y. Developers LLC</a> is a software consultancy 
                        specializing in development tools, web applications, 
                        and medical software.
                    </p>
                    <p>
                        The flagship product by M.Y. Developers is the NetBeans Lua Glider plugin. It 
                        is the leading development tool for the Corona® SDK and it is considered to
                        be the most powerful Lua editor. Its features include an advanced debugger, 
                        adaptive code completion, built-in documentation, and real-time breakpoints.
                    </p>
                </div>
                <div class="categ">
                    Coding & Development<br/>
                    <a href="http://plugins.netbeans.org/plugin/52786/lua-glider-netbeans-edition"><img src="/images_www/v7/design/nb-icon-download.png" alt="Download" title="Download"/></a>
                </div>		
                <div class="logo">
                    <a href="http://jindent.com"><img src="/images_www/partners/nbpartner-logo-mypartners.png" alt="M.Y. Developers"/></a>
                </div>
                <br class="clear"/>			
            </div>
            <div class="partner Development all">			
                <div class="detail">
                    <h2 class="color-blue">Prime Technology</h2>
                    <p>
                        <a href="http://prime.com.tr">Prime Technology</a> is a software 
                        development company specialized in Java Server Faces, Java EE architecture, 
                        Agile Processes, and out sourcing.
                    </p>
                    <p>
                        Prime Technology is the company behind <a href="http://primefaces.org/">PrimeFaces</a>, 
                        the popular Java Server Faces 2.0 component library, and provides 
                        enterprise services to several Fortune 500 clients. NetBeans IDE includes,
                        out of the box, support for PrimeFaces, which is developed in close co-operation
                        with Prime Technology. Prime Technology also recommends its users
                        to develop PrimeFaces applications in NetBeans IDE and
                        the PrimeFaces development team
                        uses NetBeans IDE for the development of PrimeFaces.
                    </p>
                </div>
                <div class="categ">
                    Coding & Development<br/>
                </div>		
                <div class="logo">
                    <a href="http://prime.com.tr"><img src="/images_www/partners/nbpartner-logo-primefaces.png" alt="PrimeFaces"/></a>
                </div>
                <br class="clear"/>			
            </div>
            <div class="partner Development all">			
                <div class="detail">
                    <h2 class="color-blue">StrikeIron</h2>
                    <p>
                        <a href="http://www.strikeiron.com">StrikeIron</a> provides
                        a simple and powerful enterprise API built for business management.
                        For example, the Email Verification service can
                        help reduce your email bounce rates, improve deliverability, 
                        and enhance your lead value.
                    </p>
                    <p>
                        In co-operation with StrikeIron, StrikeIron services
                        can be accessed directly from NetBeans IDE. In the
                        Services window, StrikeIron services can
                        easily be dragged-and-dropped into your code. The seamless
                        integration between StrikeIron and NetBeans IDE helps get
                        you quickly started integrating business services into
                        your Java code.
                    </p>
                </div>
                <div class="categ">
                    Coding & Development<br/>
                </div>		
                <div class="logo">
                    <a href="http://www.strikeiron.com"><img src="/images_www/partners/nbpartner-logo-strikeiron.png" alt="StrikeIron"/></a>
                </div>
                <br class="clear"/>			
            </div>
            <div class="partner Testing all">			
                <div class="detail">
                    <h2 class="color-blue">TestFairy</h2>
                    <p>
                        <a href="http://testfairy.com">TestFairy</a> helps Android developers do painless super smart app testing.
                        When testing Android apps, whether it is your co-workers, social media friends, 
                        or paid testers, you never know what exactly was tested and what exactly
                        went wrong on the client side. TestFairy solves this problem by showing 
                        you a video of the exact test that was done, including detailed internal metrics
                        such as CPU, Memory, GPS, Network, phone reception, battery usage and a lot more.
                        The service is extremely easy to use, there is no SDK and no code to add to the
                        tested app, all changes are made in real time on the TestFairy platform.
                    </p>
                    <p>
                        The NetBeans TestFairy plugin provides a "Send to TestFairy" action
                        on APK files. When clicked, the APK file is sent to TestFairy and
                        a moment later the instrumented APK file is returned from TestFairy,
                        ready to be distributed to your testers. Then you can monitor
                        what is being tested by going to the page dedicated to your
                        APK file on TestFairy.com.
                    </p>
                </div>
                <div class="categ">
                    Testing & Debugging<br/>
                    <a href="http://plugins.netbeans.org/plugin/52087/testfairy"><img src="/images_www/v7/design/nb-icon-download.png" alt="Download" title="Download"/></a>
                </div>		
                <div class="logo">
                    <a href="http://testfairy.com"><img src="/images_www/partners/nbpartner-logo-testfairy.png" alt="TestFairy"/></a>
                </div>
                <br class="clear"/>			
            </div>
            <div class="partner Development all">			
                <div class="detail">
                    <h2 class="color-blue">Vaadin</h2>
                    <p>
                        <a href="https://vaadin.com">Vaadin</a> is a Java framework for building
                        modern web applications that look great, 
                        perform well, and make you and your users happy.
                    </p>
                    <p>
                        The NetBeans Vaadin plugin provides support for Vaadin 
                        application development, such as via wizards for project creation. 
                    </p>
                </div>
                <div class="categ">
                    Coding & Development<br/>
                    <a href="http://plugins.netbeans.org/plugin/50531/vaadin-plug-in-for-netbeans"><img src="/images_www/v7/design/nb-icon-download.png" alt="Download" title="Download"/></a>
                </div>		
                <div class="logo">
                    <a href="http://vaadin.com"><img src="/images_www/partners/nbpartner-logo-vaadin.jpg" alt="Vaadin"/></a>
                </div>
                <br class="clear"/>			
            </div>
            <div class="partner Development all">			
                <div class="detail">
                    <h2 class="color-blue">Visual Paradigm</h2>
                    <p>
                        <a href="http://www.visual-paradigm.com">Visual Paradigm</a> is a design and management tool for business IT system development. 
                        Software development teams that embrace agile development approaches can also 
                        use Visual Paradigm to manage requirements and user stories.
                    </p>
                    <p>
                        The NetBeans Visual Paradigm plugin provides the full set of UML diagrams for development
                        teams to design business IT systems. Perform round-trip engineering in NetBeans IDE to keep
                        Java source code and class models synchronized.
                    </p>
                </div>
                <div class="categ">
                    Coding & Development<br/>
                    <a href="https://www.visual-paradigm.com/tutorials/modelinginnetbeans.jsp"><img src="/images_www/v7/design/nb-icon-download.png" alt="Download" title="Download"/></a>
                </div>		
                <div class="logo">
                    <a href="http://www.visual-paradigm.com"><img src="/images_www/partners/nbpartner-logo-vparadigm.gif" alt="Visual Paradigm"/></a>
                </div>
                <br class="clear"/>			
            </div>
            <div class="partner Development all">			
                <div class="detail">
                    <h2 class="color-blue">WakaTime</h2>
                    <p>
                        <a href="http://wakatime.com">WakaTime</a> tracks time spent by developers on projects, branches, and languages, 
                        for individual developers as well as teams.
                    </p>
                    <p>
                        The NetBeans WakaTime plugin automatically tracks your changes and seamlessly uploads them to
                        the WakaTime site, where you can view and monitor the time you spend on specific areas of your work.
                    </p>
                </div>
                <div class="categ">
                    Coding & Development<br/>
                    <a href="http://plugins.netbeans.org/plugin/56647/wakatime"><img src="/images_www/v7/design/nb-icon-download.png" alt="Download" title="Download"/></a>
                </div>		
                <div class="logo">
                    <a href="http://wakatime.com"><img src="/images_www/partners/nbpartner-logo-wakatime.gif" alt="WakaTime"/></a>
                </div>
                <br class="clear"/>			
            </div>
            <div class="partner Testing all">			
                <div class="detail">
                    <h2 class="color-blue">YourKit</h2>
                    <p>
                        <a href="http://yourkit.com">YourKit</a> provides tools for
                        CPU and memory profiling to .Net and Java
                        applications.
                    </p>
                    <p>
                        The YourKit NetBeans Java Profiler plugin brings CPU and memory profiling
                        functionality to 
                        NetBeans IDE, adding the ability to profile complex 
                        Java EE and desktop applications with a single click.  
                    </p>
                </div>
                <div class="categ">
                    Testing & Debugging<br/>
                    <a href="http://www.yourkit.com/docs/java/help/netbeans.jsp"><img src="/images_www/v7/design/nb-icon-download.png" alt="Download" title="Download"/></a>
                </div>		
                <div class="logo">
                    <a href="http://yourkit.com"><img src="/images_www/partners/nbpartner-logo-yourkit.png" alt="YourKit"/></a>
                </div>
                <br class="clear"/>			
            </div>
            <div class="partner Development all">			
                <div class="detail">
                    <h2 class="color-blue">ZeroTurnaround</h2>
                    <p>
                        <a href="http://zeroturnaround.com">ZeroTurnaround</a> provides products that 
                        help Java teams improve productivity and efficiency, resulting in better code, 
                        happy developers, and more reliable releases.
                    </p>
                    <p>
                        JRebel, by ZeroTurnaround, is a small application that lets developers see
                        changes made to their code without needing to redeploy. The NetBeans JRebel plugin
                        maps NetBeans IDE projects
                        directly to a running application, so that when a developer makes a change to 
                        a class or resource in the IDE, the change is immediately reflected 
                        in the application, skipping the build and redeploy phases.
                    </p>
                </div>
                <div class="categ">
                    Coding & Development<br/>
                    <a href="http://plugins.netbeans.org/plugin/22254/jrebel-netbeans-plugin"><img src="/images_www/v7/design/nb-icon-download.png" alt="Download" title="Download"/></a>
                </div>		
                <div class="logo">
                    <a href="http://zeroturnaround.com"><img src="/images_www/partners/nbpartner-logo-zeroturnaround.png" alt="ZeroTurnaround"/></a>
                </div>
                <br class="clear"/>			
            </div>
        </div>
        <script type="text/javascript">
            $(function () {
                $('#categDropdown').change(function () {
                    var sel = $(this).val();
                    $('.partner').hide();
                    $('.' + sel).show();
                })
            })
        </script>
    </body>
</html>

