The Wicket community is not only supported by volunteers but several
individuals and companies provide professional support for Wicket
application development in many countries around the world.

### Finding a Wicket Service Provider

The linked page below lists all companies that provide commercial
services for Wicket which ranges from training courses, consultancy and
even project development.

<div class="button-bar">
    <a class="button" href="https://cwiki.apache.org/confluence/display/WICKET/Companies+that+provide+services">
        <i class="fa fa-group"></i><br>
        Go to the wiki
    </a>
    <a class="button invisible" href="https://cwiki.apache.org/confluence/display/WICKET/Companies+that+provide+services">
        <i class="fa fa-group"></i><br>
    </a>
    <a class="button hidden" href="">
        <i class="fa fa-group"></i><br>
    </a>
</div>

Being mentioned here is not an indication of official "endorsement" by
the Apache Software Foundation, but is instead provided as a public
service. This list is in no way a complete listing of the many
organizations providing either free or for cost support for ASF
projects. If you would like to be added to this list, or removed, sign
up for the wiki and add yourself to the list.

### Registering as a Wicket Service Provider

If you are a service provider specializing in Wicket
application development you are welcome to add yourself to this wiki
page (a registered account is required).

We reserve the right to remove your listing if it is deemed
inappropriate.
