---
title: Goals and Philosophy
order: 4
layout: page
---

[[intro.goals]]
= Goals and Philosophy

Simply put, Vaadin's ambition is to be the best possible tool when it comes to
creating web user interfaces for business applications. It is easy to adopt, as
it is designed to support both entry-level and advanced programmers, as well as
usability experts and graphic designers.

When designing Vaadin, we have followed the philosophy inscribed in the
following rules.

== Right tool for the right purpose

Because our goals are high, the focus must be clear. Vaadin is designed for
creating web applications. It is not designed for creating websites or
advertisement demos. You may find, for example, JSP/JSF more suitable
for such purposes.


== Simplicity and maintainability

We have chosen to emphasize robustness, simplicity, and maintainability. This
involves following the well-established best practices in user interface
frameworks and ensuring that our implementation represents an ideal solution for
its purpose without clutter or bloat.


== Choice between declarative and dynamic UIs

The Web is inherently document-centered and very much bound to the declarative presentation of user interfaces.
Vaadin allows for declarative designs of views, layouts, and even entire UIs.
Vaadin Designer enables creating such designs visually.
Nevertheless, the programmatic approach by building the UIs from Java components frees the programmer from its limitations.
To create highly dynamic views, it is more natural to create them by programming.

== Tools should not limit your work

There should not be any limits on what you can do with the framework: if for
some reason the user interface components do not support what you need to
achieve, it must be easy to add new ones to your application. When you need to
create new components, the role of the framework is critical: it makes it easy
to create re-usable components that are easy to maintain.
tblit/wicket/panels/FederationProposalsPanel.html'>diff</a><a href='/gitblit.git/stats/src/main/java/com/gitblit/wicket/panels/FederationProposalsPanel.html'>stats</a></td><td class='form'><form class='right' method='get' action='/gitblit.git/log/src/main/java/com/gitblit/wicket/panels/FederationProposalsPanel.html'>
<select name='qt'>
<option value='grep'>log msg</option>
<option value='author'>author</option>
<option value='committer'>committer</option>
<option value='range'>range</option>
</select>
<input class='txt' type='search' size='10' name='q' value=''/>
<input type='submit' value='search'/>
</form>
</td></tr></table>
<div class='path'>path: <a href='/gitblit.git/tree/'>root</a>/<a href='/gitblit.git/tree/src'>src</a>/<a href='/gitblit.git/tree/src/main'>main</a>/<a href='/gitblit.git/tree/src/main/java'>java</a>/<a href='/gitblit.git/tree/src/main/java/com'>com</a>/<a href='/gitblit.git/tree/src/main/java/com/gitblit'>gitblit</a>/<a href='/gitblit.git/tree/src/main/java/com/gitblit/wicket'>wicket</a>/<a href='/gitblit.git/tree/src/main/java/com/gitblit/wicket/panels'>panels</a>/<a href='/gitblit.git/tree/src/main/java/com/gitblit/wicket/panels/FederationProposalsPanel.html'>FederationProposalsPanel.html</a></div><div class='content'>blob: 89324d5633fe8aedcb08a23996967e3ecbc62bf8 (<a href='/gitblit.git/plain/src/main/java/com/gitblit/wicket/panels/FederationProposalsPanel.html'>plain</a>)
<table summary='blob content' class='blob'>
<tr><td class='linenumbers'><pre><a id='n1' href='#n1'>1</a>
<a id='n2' href='#n2'>2</a>
<a id='n3' href='#n3'>3</a>
<a id='n4' href='#n4'>4</a>
<a id='n5' href='#n5'>5</a>
<a id='n6' href='#n6'>6</a>
<a id='n7' href='#n7'>7</a>
<a id='n8' href='#n8'>8</a>
<a id='n9' href='#n9'>9</a>
<a id='n10' href='#n10'>10</a>
<a id='n11' href='#n11'>11</a>
<a id='n12' href='#n12'>12</a>
<a id='n13' href='#n13'>13</a>
<a id='n14' href='#n14'>14</a>
<a id='n15' href='#n15'>15</a>
<a id='n16' href='#n16'>16</a>
<a id='n17' href='#n17'>17</a>
<a id='n18' href='#n18'>18</a>
<a id='n19' href='#n19'>19</a>
<a id='n20' href='#n20'>20</a>
<a id='n21' href='#n21'>21</a>
<a id='n22' href='#n22'>22</a>
<a id='n23' href='#n23'>23</a>
<a id='n24' href='#n24'>24</a>
<a id='n25' href='#n25'>25</a>
<a id='n26' href='#n26'>26</a>
<a id='n27' href='#n27'>27</a>
<a id='n28' href='#n28'>28</a>
<a id='n29' href='#n29'>29</a>
<a id='n30' href='#n30'>30</a>
<a id='n31' href='#n31'>31</a>
<a id='n32' href='#n32'>32</a>
<a id='n33' href='#n33'>33</a>
<a id='n34' href='#n34'>34</a>
</pre></td>
<td class='lines'><pre><code>