diff --git a/doc/userdoc.org b/doc/userdoc.org
index fd14d7803047e26db1e982842b1a04deb57f6aaf..4d8c90f29e5c996b8ab9591bca45cf88cf06a30c 100644
--- a/doc/userdoc.org
+++ b/doc/userdoc.org
@@ -1975,9 +1975,35 @@ However, to ease the reading, it is probably better to write
 It gives also
 #+results: do-while-block
 
-*** TODO while loops
+*** ~while~ loops
+
+The last kind of loops that is allowed in ~pugs~ language is the ~while~
+loop.
+#+BEGIN_SRC pugs :exports code
+  while (condition) statement
+#+END_SRC
+The ~statement~ is either a single instruction or a block of
+instructions. The ~condition~ is an expression of boolean value (type
+~B~).
+
+This time is the ~condition~ is never satisfied (never ~true~), the
+~statment~ is not executed.
+
+
+An example of the ~while~ loop is the following.
+#+NAME: while-block
+#+BEGIN_SRC pugs :exports both :results output
+  let sum:N, sum = 0;
+  let i:N, i = 1;
+  while (sum<=10) {
+    sum += i;
+    ++i;
+  }
+  cout << "sum = " << sum << "\n";
+#+END_SRC
+The result is
+#+results: while-block
 
-*** TODO break/continue
 
 ** TODO Functions<<functions>>