diff --git a/README.md b/README.md
index 2744d769e3..2d4067d9b1 100644
--- a/README.md
+++ b/README.md
@@ -289,7 +289,7 @@ V comes with a version of mbedtls, which should work on all systems. If you find
use OpenSSL instead, you will need to make sure that it is installed on your system, then
use the `-d use_openssl` switch when you compile.
-Note: Mbed-TLS is smaller and easier to install on windows too (V comes with it), but if you
+Note: Mbed-TLS is smaller and easier to install on windows too (V comes with it), but if you
write programs, that do lots of http requests to HTTPS/SSL servers, in most cases, it is *best*
to compile with `-d use_openssl`, and do so on a system, where you do have OpenSSL installed
(see below). Mbed-TLS is slower, and can have more issues, especially when you are doing parallel
@@ -363,7 +363,7 @@ With V's `vab` tool, building V UI and graphical apps for Android can become as
## Developing web applications
Check out the
-[Building a simple web blog](https://github.com/vlang/v/blob/master/tutorials/building_a_simple_web_blog_with_vweb/README.md)
+[Building a simple web blog](https://github.com/vlang/v/blob/master/tutorials/building_a_simple_web_blog_with_veb/README.md)
tutorial and Gitly, a light and fast alternative to GitHub/GitLab:
https://github.com/vlang/gitly
diff --git a/ci/linux_ci.vsh b/ci/linux_ci.vsh
index d7d23554d0..206a1d7b46 100644
--- a/ci/linux_ci.vsh
+++ b/ci/linux_ci.vsh
@@ -115,7 +115,7 @@ fn run_vsh_script_tcc() {
}
fn test_v_tutorials_tcc() {
- exec('v tutorials/building_a_simple_web_blog_with_vweb/code/blog')
+ exec('v tutorials/building_a_simple_web_blog_with_veb/code/blog')
}
fn build_fast_tcc() {
@@ -228,7 +228,7 @@ fn build_tetris_autofree_gcc() {
}
fn build_blog_autofree_gcc() {
- exec('v -autofree -o blog tutorials/building_a_simple_web_blog_with_vweb/code/blog')
+ exec('v -autofree -o blog tutorials/building_a_simple_web_blog_with_veb/code/blog')
}
fn build_option_test_autofree_gcc() {
diff --git a/ci/macos_ci.vsh b/ci/macos_ci.vsh
index 7d00034e01..3944accc69 100644
--- a/ci/macos_ci.vsh
+++ b/ci/macos_ci.vsh
@@ -76,7 +76,7 @@ fn build_tetris_autofree() {
}
fn build_blog_autofree() {
- exec('v -autofree -o blog tutorials/building_a_simple_web_blog_with_vweb/code/blog')
+ exec('v -autofree -o blog tutorials/building_a_simple_web_blog_with_veb/code/blog')
}
fn build_examples_prod() {
diff --git a/examples/veb/file_upload/file_uploading.v b/examples/veb/file_upload/file_uploading.v
new file mode 100644
index 0000000000..38d741fb26
--- /dev/null
+++ b/examples/veb/file_upload/file_uploading.v
@@ -0,0 +1,40 @@
+module main
+
+import veb
+
+const port = 8082
+
+struct App {
+}
+
+struct Context {
+ veb.Context
+}
+
+fn main() {
+ mut app := &App{}
+ veb.run[App, Context](mut app, port)
+}
+
+pub fn (mut app App) index() veb.Result {
+ return $veb.html()
+}
+
+@['/upload'; post]
+pub fn (mut app App) upload() veb.Result {
+ dump(ctx.form)
+ dump(ctx.files)
+ fdata := ctx.files['upfile']
+ mut files := []veb.RawHtml{}
+ for d in fdata {
+ files << d.data.replace_each(['\n', '
', '\n\r', '
', '\t', ' ', ' ', ' '])
+ }
+ return $veb.html()
+}
+
+@['/submit'; post]
+pub fn (mut app App) submit() veb.Result {
+ dump(ctx.form)
+ form_data := ctx.form.clone()
+ return $veb.html()
+}
diff --git a/examples/vweb/file_upload/index.html b/examples/veb/file_upload/index.html
similarity index 100%
rename from examples/vweb/file_upload/index.html
rename to examples/veb/file_upload/index.html
diff --git a/examples/vweb/file_upload/submit.html b/examples/veb/file_upload/submit.html
similarity index 100%
rename from examples/vweb/file_upload/submit.html
rename to examples/veb/file_upload/submit.html
diff --git a/examples/vweb/file_upload/upload.html b/examples/veb/file_upload/upload.html
similarity index 100%
rename from examples/vweb/file_upload/upload.html
rename to examples/veb/file_upload/upload.html
diff --git a/examples/vweb/middleware/templates/base.html b/examples/veb/middleware/templates/base.html
similarity index 100%
rename from examples/vweb/middleware/templates/base.html
rename to examples/veb/middleware/templates/base.html
diff --git a/examples/vweb/middleware/templates/early.html b/examples/veb/middleware/templates/early.html
similarity index 100%
rename from examples/vweb/middleware/templates/early.html
rename to examples/veb/middleware/templates/early.html
diff --git a/examples/vweb/middleware/templates/index.html b/examples/veb/middleware/templates/index.html
similarity index 100%
rename from examples/vweb/middleware/templates/index.html
rename to examples/veb/middleware/templates/index.html
diff --git a/examples/vweb/middleware/templates/secret.html b/examples/veb/middleware/templates/secret.html
similarity index 100%
rename from examples/vweb/middleware/templates/secret.html
rename to examples/veb/middleware/templates/secret.html
diff --git a/examples/vweb/middleware/using_middleware.v b/examples/veb/middleware/using_middleware.v
similarity index 100%
rename from examples/vweb/middleware/using_middleware.v
rename to examples/veb/middleware/using_middleware.v
diff --git a/examples/vweb/server_sent_events/assets/site.css b/examples/veb/server_sent_events/assets/site.css
similarity index 100%
rename from examples/vweb/server_sent_events/assets/site.css
rename to examples/veb/server_sent_events/assets/site.css
diff --git a/examples/vweb/server_sent_events/assets/v-logo.svg b/examples/veb/server_sent_events/assets/v-logo.svg
similarity index 100%
rename from examples/vweb/server_sent_events/assets/v-logo.svg
rename to examples/veb/server_sent_events/assets/v-logo.svg
diff --git a/examples/vweb/server_sent_events/favicon.ico b/examples/veb/server_sent_events/favicon.ico
similarity index 100%
rename from examples/vweb/server_sent_events/favicon.ico
rename to examples/veb/server_sent_events/favicon.ico
diff --git a/examples/vweb/server_sent_events/index.html b/examples/veb/server_sent_events/index.html
similarity index 100%
rename from examples/vweb/server_sent_events/index.html
rename to examples/veb/server_sent_events/index.html
diff --git a/examples/veb/server_sent_events/server.v b/examples/veb/server_sent_events/server.v
new file mode 100644
index 0000000000..40988e696f
--- /dev/null
+++ b/examples/veb/server_sent_events/server.v
@@ -0,0 +1,44 @@
+module main
+
+import os
+import rand
+import time
+import veb
+import veb.sse
+
+struct App {
+ veb.StaticHandler
+}
+
+struct Context {
+ veb.Context
+}
+
+fn main() {
+ mut app := &App{}
+ app.serve_static('/favicon.ico', 'favicon.ico')!
+ app.mount_static_folder_at(os.resource_abs_path('.'), '/')!
+ veb.run[App, Context](mut app, 8081)
+}
+
+// XTODO template broken (@)
+pub fn (mut app App) index() veb.Result {
+ title := 'SSE Example'
+ return $veb.html()
+}
+
+fn (mut app App) sse() veb.Result {
+ mut session := sse.start_connection(mut ctx.Context)
+ // Note: you can setup session.write_timeout and session.headers here
+ // session.start() or { return app.server_error(501) }
+ session.send_message(data: 'ok') or { return ctx.server_error_with_status(.not_implemented) }
+ for {
+ data := '{"time": "${time.now().str()}", "random_id": "${rand.ulid()}"}'
+ session.send_message(event: 'ping', data: data) or {
+ return ctx.server_error_with_status(.not_implemented)
+ }
+ println('> sent event: ${data}')
+ time.sleep(1 * time.second)
+ }
+ return ctx.server_error_with_status(.not_implemented)
+}
diff --git a/examples/vweb/file_upload/file_uploading.v b/examples/vweb/file_upload/file_uploading.v
deleted file mode 100644
index ea1c73a82e..0000000000
--- a/examples/vweb/file_upload/file_uploading.v
+++ /dev/null
@@ -1,37 +0,0 @@
-module main
-
-import vweb
-
-const port = 8082
-
-struct App {
- vweb.Context
-}
-
-fn main() {
- vweb.run(&App{}, port)
-}
-
-pub fn (mut app App) index() vweb.Result {
- return $vweb.html()
-}
-
-@['/upload'; post]
-pub fn (mut app App) upload() vweb.Result {
- dump(app.form)
- dump(app.files)
- fdata := app.files['upfile']
- mut files := []vweb.RawHtml{}
- for d in fdata {
- files << d.data.replace_each(['\n', '
', '\n\r', '
', '\t', ' ', ' ', ' '])
- }
-
- return $vweb.html()
-}
-
-@['/submit'; post]
-pub fn (mut app App) submit() vweb.Result {
- dump(app.form)
- form_data := app.form.clone()
- return $vweb.html()
-}
diff --git a/examples/vweb/server_sent_events/server.v b/examples/vweb/server_sent_events/server.v
deleted file mode 100644
index 6585e56778..0000000000
--- a/examples/vweb/server_sent_events/server.v
+++ /dev/null
@@ -1,37 +0,0 @@
-module main
-
-import os
-import rand
-import time
-import vweb
-import vweb.sse
-
-struct App {
- vweb.Context
-}
-
-fn main() {
- mut app := &App{}
- app.serve_static('/favicon.ico', 'favicon.ico')
- app.mount_static_folder_at(os.resource_abs_path('.'), '/')
- vweb.run(app, 8081)
-}
-
-pub fn (mut app App) index() vweb.Result {
- title := 'SSE Example'
- return $vweb.html()
-}
-
-fn (mut app App) sse() vweb.Result {
- mut session := sse.new_connection(app.conn)
- // Note: you can setup session.write_timeout and session.headers here
- session.start() or { return app.server_error(501) }
- session.send_message(data: 'ok') or { return app.server_error(501) }
- for {
- data := '{"time": "${time.now().str()}", "random_id": "${rand.ulid()}"}'
- session.send_message(event: 'ping', data: data) or { return app.server_error(501) }
- println('> sent event: ${data}')
- time.sleep(1 * time.second)
- }
- return app.server_error(501)
-}
diff --git a/examples/vweb/vweb_websocket/assets/websocket_client.js b/examples/vweb/vweb_websocket/assets/websocket_client.js
deleted file mode 100644
index 629d036ac9..0000000000
--- a/examples/vweb/vweb_websocket/assets/websocket_client.js
+++ /dev/null
@@ -1,22 +0,0 @@
-const messageList = document.getElementById('message-list');
-const protocol = location.protocol === 'https:' ? 'wss' : 'ws';
-const socket = new WebSocket(`${protocol}://${location.host}/ws`);
-let i = 0;
-
-function send(message) {
- messageList.innerHTML += `