{"id":19989612,"url":"https://github.com/wavesoft/web-ng","last_synced_at":"2026-06-13T09:32:48.324Z","repository":{"id":4022829,"uuid":"5122737","full_name":"wavesoft/web-ng","owner":"wavesoft","description":"A workbench on how the new generation of the web could be","archived":false,"fork":false,"pushed_at":"2014-03-26T20:15:40.000Z","size":21452,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-01T20:02:12.630Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wavesoft.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-07-20T12:08:37.000Z","updated_at":"2014-03-26T20:15:41.000Z","dependencies_parsed_at":"2022-09-11T19:51:49.117Z","dependency_job_id":null,"html_url":"https://github.com/wavesoft/web-ng","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wavesoft%2Fweb-ng","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wavesoft%2Fweb-ng/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wavesoft%2Fweb-ng/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wavesoft%2Fweb-ng/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wavesoft","download_url":"https://codeload.github.com/wavesoft/web-ng/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241430321,"owners_count":19961635,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-13T04:48:44.486Z","updated_at":"2025-11-26T09:01:55.619Z","avatar_url":"https://github.com/wavesoft.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"web-ng\n======\n\nAn attempt to create a better information browsing on the internet, by redefining most\nof the components of the current system. That's the New Generation of the web.\n\nHere is what's around:\n\n* The folder **browser/** contains the sources of the WebNG.\n* The folder **browser/dist/** contains the latest jar of the browser.\n* The folder **browser/app/** contains binary packages of the latest build.\n* The folder **webng-demo/** contains the sources of the **gr.wavesoft.demo.hello** hello world view.\n* The folder **documentation/** contains various documents and thoughts for the project.\n\nIf you just want to get started, check the *browser/app/* folder if there are builds for your OS, otherwise\ndownload the entire *browser/dist* folder and run the *browser.jar*.\n\nDescription\n-----------\n\nThis project consists of creating a new data representation language and a web browser that can render it. \nThis new language contains only pure data and some hinting attributes that will define how the data are presented. \nIn short, this project aims to **separate the data from the view**.\n\nComponents\n==========\n\nWebNL YAML Language\n-------------------\n\nWebNG fetches it's content over HTTP/HTTPS like a regular web browser. The data in the new web have no strict syntax \nbut are structured. I picked YAML (Yet Another Markup Language) for this purpose, because it's human-readable yet fast \nin parsing. This gives a big bonus on the development side.\n\nHere is an example of a small blog:\n\n```yaml\n~view    : gr.wavesoft.views.blog\nposts    :\n    - Title: New website\n      Date: 2001-11-23 15:03:17 -5\n      Body: |\n          This is a demonstration on how easy you can create websites using\n          the new generation of the web!\n          \n    - Title: Testing\n      Date: 2001-11-23 15:03:17 -5\n      Body: |\n          Proof that \u003cb\u003eHTML\u003c/b\u003e can still be used! \u003cimg src=\"test\" style=\"float: right\" /\u003e\n```\n\nStraight-forward right? Anyone can write (and even maintain by hand) this blog!\n\nAdditionally YAML provides node referencing and other cool features in the data language itself.\nAnd of course, remote referencing of nodes is also possible:\n\n```yaml\n~view    : gr.wavesoft.themes.personal\ntitle    : Welcome to my personal homepage\nsections :\n    \n    - section: Blog\n      ~src  : blog.yml\n      \n    - section: About\n      ~view \t: gr.wavesoft.views.about\n      name      : Ioannis Charalampidis\n      contact   : \u003cnospam\u003e@mailserver.com\nphoto     : images/profile.jpg\n    \n    - section: Big data\n      ~src: big.yml\n```\n\nOk, what about the view for this data set?\n\nWebNG Views\n-----------\n\nEach data node, defined by the WebNG YAML Language is renderable. The author can pick any third-party rendering view available\non the internet to render it's node. It is not required to download or host that view!\n\nWebNG Views are Java panels (Swing or JavaFX) that are referenced by their Fully-Qualified class name. I call them *Universal Views*\nbecause they can be located and fetched no matter where they are if you know their name.\n\nHere are some details...\n\n### Introduction - Reasoning\n\nThe biggest problem with HTML is that it merged data and view in a problematic way. Even though there are revisions over\nrevisions, we still haven't seen the Web of semantics widely spread. Additionally, the aesthetics of the world has changed\nso much that the simple HTML is not enough. That's why we have HTML5 right? CSS3 is indeed an awesome tool, Javascript with \nHTML5 has amazing new features... why then we have so many Javascript-assisting libraries? Why do we have boilerplates and\nCSS themes just to get started? \n\nAdditionally more and more people ask for security in the code and fast-executing javascript code. Yet we are still sending\nplaintext javascript *source* code to the client.\n\nIn my opinion all of these problems, plus many more can be solved with what I call *Universal Views*.\n\n### Universal Views\n\nUniversal Views are nothing more than Java Swing or JavaFX panels. That's it! We have a structured, visual representation of \ndata with a technology that is already out there that has all the advantages we are asking for:\n\n * *Execution speed* - Java is compiled bytecode. It is transferred quickly and executed fast by the JVM.\n * *Code security* - We are transmitting bytecode. Reverse engineering (even if it is still possible) is now much more difficult.\n * *Browsing speed* - Downloading bytecode is much faster than downloading source code and compiling it.\n * *Powerful control over the view* - Forget about all the nasty javascript that you are using right now, just to make an image fade out. You now have full control over your view.\n * *Code security* - Java provides already sandboxing and protection over privileged code execution.\n\nNow think the following: You have deployed your own Wordpress portal and you are maintaining your own blog. What about updates?\nThe *Universal Views* are meant not to be stored in the same server with the data. This means that they are maintained and updated\nindependently. This automatically means that the user is now (almost) free of security/server updates! (Almost means that the user\nmust still update the CMS back-end - if he is using any)\n\n\nData Structure\n--------------\n\nSince the language is not strictly-structured, The data layout depends on the view used. \nHowever, as a good practice it is recommended to define an abstract set of rules that the views will use.\n\nFor example, there might be many blog implementations. However the core syntax of all of them is the same:\n\n    /posts = ARRAY[\n\t\t/title\n\t\t/body\n\t\t/comments = ARRAY[\n\t\t\t\t/author\n\t\t\t\t/text\n\t\t\t]\n\t]\n\nOther implementations might add additional nodes, but all of them must implement these basic rules.\n\nThe language for this ruleset is not yet defined. \nYou are free to submit your own ideas! :)\n\nLicense\n=======\n\nThis project is licensed under GNU General Public License 3\nFor more details see here: http://www.gnu.org/licenses/\n\nAuthor\n======\n\nMain author and developer of this project is *Ioannis Charalampidis*\nContact me via Github if you have any suggestion or recommendation :)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwavesoft%2Fweb-ng","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwavesoft%2Fweb-ng","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwavesoft%2Fweb-ng/lists"}