Git Product home page Git Product logo

webgme's Introduction

license Build status Version Downloads

WebGME - Web-based Generic Modeling Environment

Note that this repository contains the full webgme app including a highly extendable graphical user interface and is the typical dependency a webgme app will depend on. To use the webgme framework without a packaged GUI - check out webgme-engine.

Create your own Domain Specific Modeling Languages (DSML) right in the browser. Specify modeling concepts, their relationships, attributes, and aspects by drawing a UML class diagram-based metamodel and WebGME automatically configures itself to support the DSML.

WebGME promotes collaboration where each change is translated into a micro-commit broadcast to all connected users. A lightweight branching scheme is transparently supported by the infrastructure. Code generators and externals tools can work on consistent snapshots (specific commits) while users can continue editing the models.

WebGME provides a variety of extension points for you to customize your application. See below for a list and explainations. All these can be neatly generated, shared and imported using a command line interface.

WebGME-User-Interface

Getting started

Dependencies

Server

  • NodeJS (version >= 14, CI tests are performed on versions 16.x, 18.x and LTS is recommended).
  • MongoDB (2.6 <= version).
  • Git (must be available in PATH).
  • Redis Note that this is only needed if you intend on running multiple webgme nodes behind a reverse proxy.

Browser

We aim to support all the major modern browsers. However we recommend using Chrome for two reasons: manual testing is mostly done using chrome and all performance profiling is done against the V8 JavaScript Engine.

Tutorials

  • Step by step tutorial - Explains meta-modeling in webgme and builds up a small application for Electrical Circuits.
  • Tutorial from seminar 2015 - Shows development techniques in webgme and builds up a Finite State Machine domain. This tutorial requires familiarity with meta-modeling.

Using WebGME

You can always try out webgme at our public deployment at webgme.org. After a certain point you probably want to host your own server with custom running code and visualization. At this point follow the instructions at 1.

  1. webgme-cli. This is the preferred way of using webgme as it allows you to:
  • Automatically generate boilerplate code for extensions (w/o manually configuring paths etc.).
  • Reuse components from other users.
  • Publish and share your work with others.
  • Updating to newer webgme releases only requires a npm install webgme and won't cause any conflicts.
  • Note that if cloning an existing repository constructed with webgme-cli, it is only necessary to install webgme-cli if you intend to create/import new components.
  1. For webgme developers, clone this repo.
  • install packages with npm npm install
  • launch mongod locally, e.g.
docker run --name my-mongo -d -p 27017:27017 mongo:4.4
  • start the server npm start

After the webgme server is up and there are no error messages in the console. Open a valid webgme address in the browser. The default is http://127.0.0.1:8888/, you should see all valid addresses in the console where you started webgme. To view the available documentation visit <host>/api.

Command line interface

The webgme-engine provides a range of bin scripts, see here for list of all.

Extensions

  • Plugins - Model interpretation for e.g. code generation.
  • Executor - Job execution framework over multiple worker nodes.
  • Rest Routers - Add custom REST API routes with access to gme-auth and storage APIs.
  • Constraints - Add custom constraints based on meta-types.
  • AddOns - Continuous model interpretation for e.g. constraint evaluation.
  • Webhooks - External event emitting based on changes in storage/models.
  • Layouts - Configure the layout of the generic UI.
  • Visualizers - Add complete visualizers to the generic UI.
  • Decorators - Add custom decoration to the nodes in the model editor.

See gme-config for available configuration parameters.

Change log

See CHANGELOG

Contributing

See CONTRIBUTING

License

See the LICENSE file.

webgme's People

Contributors

acoglio avatar brollb avatar dependabot[bot] avatar finger563 avatar ghemingway avatar hakantunc avatar kecso avatar ksmyth avatar lattmann avatar mmaroti avatar nabana avatar pmeijer avatar rkereskenyi avatar umesh-timalsina avatar volgy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

webgme's Issues

Resize bugs

  • canvas should not be red
  • reset to base class value icon is not snapped to property value field

Self containment issue

Models with self containment enabled in the meta are not allowed to be created.

See screen below.

screen shot 2014-04-16 at 12 46 02 pm

Requesting html template from client while WebGME is initializing crashes server

In UI header/footer redesign effort I am planning to externalize the html segments found in FooterControlPanel.js into a stand-alone template file and load it with require.js but the loading of the template.html results in an exception on the server-side which is not handled and the server stops. See screenshot.

This technique is used at other places but not right in the initialization process.

headers_already_sent

Tree-browser string handling

The tree-browser currently doesn't show some names with some special characters (although those names are visible elsewhere like in the composer or property editor).

example: "<"example">"

Create documentation for v1.0.0 release

JSDoc

Identify all public APIs.

  • Configuration - Patrik
  • Storage APIs (db/project/etc.) - Patrik
  • Core - Tamas
  • Plugin - Patrik
  • Blob - Zsolt
  • Executor - Zsolt
  • Bin scripts
    • apply - Tamas
    • diff- Tamas
    • export - Tamas
    • import - Tamas
    • merge - Tamas
    • run_plugin - Patrik
    • start_server - Patrik
    • usermanger - Zsolt
  • Rest APIs
    • users - Zsolt
    • projects - Zsolt
    • organizations - Patrik
    • plugin - Patrik
    • executor - Zsolt
    • blob - Zsolt
  • WebSocket API - post-pone.

The readme file should contain:

Plugin

  • Requirements
  • Conceptual design
  • Class descriptions
  • Code has to be reviewed and comments cleaned up. (e.g. meta-type, META type, etc.)

Simple Meta and Library update tool

A standalone tool might provide a short-term solution for doing one-way meta and library udates.
The meta (and library) will have to reside in a dedicated containment tree with incoming relations (pointers) only.

Multiselection copy is faulty

If you lasso select multiple objects and then try to CTRL+Lclick copy them, the object you made your final click will be missing from the selection...

Easy way to clone a project

This would be useful for testing plugins. The only way to do this right now seems to be to export the project and import it again.

Go to the previous page(s)

It would be easier to navigate the projects. The browsers might support this functionality if the full REST URIs are updated in the address bar.

Downloading CyPhyLight crashes WebGME

WebGME version [email protected]

Using the mongo at zsolt-ws.isis.vanderbilt.edu (maybe Zsolt can give you a copy of the data files, or you can connect to it)

Trying to "Export Project... " CyPhyLight, i.e. GETing
http://localhost:8888/rest/etf?project=CyPhyLight&root=%238282dcbc609c855a1c0eb204820a862370450666&path=&output=CyPhyLight_master

Results in this stack:

C:\Users\kevin\Documents\webgme-domain-tools\node_modules\webgme\util\assert.js:17
                        throw error;
                              ^
Error: ASSERT failed
    at assert (C:\Users\kevin\Documents\webgme-domain-tools\node_modules\webgme\util\assert.js:12:16)
    at Object.core.getAttribute (C:\Users\kevin\Documents\webgme-domain-tools\node_modules\webgme\core\coretype.js:257:4)
    at Object._core.getMiddleGuid (C:\Users\kevin\Documents\webgme-domain-tools\node_modules\webgme\core\guidcore.js:87:51)
    at Object._core.getGuid (C:\Users\kevin\Documents\webgme-domain-tools\node_modules\webgme\core\guidcore.js:94:32)
    at UnwrapListener.callback (C:\Users\kevin\Documents\webgme-domain-tools\node_modules\webgme\coreclient\tojson.js:320:65)
    at UnwrapListener.onResolved (C:\Users\kevin\Documents\webgme-domain-tools\node_modules\webgme\core\tasync.js:502:8)
    at Future.resolve (C:\Users\kevin\Documents\webgme-domain-tools\node_modules\webgme\core\tasync.js:51:17)
    at tasync_trace_start [as onResolved] (C:\Users\kevin\Documents\webgme-domain-tools\node_modules\webgme\core\tasync.js:379:9)
    at Future.resolve (C:\Users\kevin\Documents\webgme-domain-tools\node_modules\webgme\core\tasync.js:51:17)
    at tasync_trace_start [as onResolved] (C:\Users\kevin\Documents\webgme-domain-tools\node_modules\webgme\core\tasync.js:379:9)
    at Future.resolve (C:\Users\kevin\Documents\webgme-domain-tools\node_modules\webgme\core\tasync.js:51:17)
    at tasync_trace_start [as onResolved] (C:\Users\kevin\Documents\webgme-domain-tools\node_modules\webgme\core\tasync.js:379:9)
    at Future.resolve (C:\Users\kevin\Documents\webgme-domain-tools\node_modules\webgme\core\tasync.js:51:17)

When meta sheet is deleted, prompt the user what they like to do

Using the project from the tutorial. If you delete the meta sheet, you cannot create new models until the models are dragged back onto a meta sheet. The meta information is maintained in the models themselves and being on a sheet should not affect behavior.

Before the deletion of the meta sheet.
screen shot 2014-04-16 at 1 15 55 pm

After the deletion of the meta sheet.
screen shot 2014-04-16 at 1 16 15 pm

Asset Browser

A generic-enough solution for browsing assets, most importantly icons and maybe replacing the project browser interface.

Connection reset kills server

If a connection is closed by the OS (because the client process exited), WebGME crashes.

Running this:

C:\Users\kevin\Documents\blob-testing>type close_conn.js
var net = require('net');
var socket = net.createConnection(8888, 'localhost');
socket.on('data', function(data) {
  console.log('RESPONSE: ' + data);
}).on('connect', function() {
  // Manually write an HTTP request.
  socket.write("GET / HTTP/1.0\r\n\r\n");
  throw ""; // this kills the process
});

Results in this:

C:\Users\kevin\Documents\webgme-domain-tools>node app.js
   info  - socket.io started
worker 6984 is ready for tasks

http.js:689
    throw new Error('Can\'t set headers after they are sent.');
          ^
Error: Can't set headers after they are sent.
    at ServerResponse.OutgoingMessage.setHeader (http.js:689:11)
    at ServerResponse.res.setHeader (C:\Users\kevin\Documents\webgme-domain-tools\node_modules\webgme\node_modules\express\node_modules\connect\lib\patch.js:59:22)
    at SendStream.setHeader (C:\Users\kevin\Documents\webgme-domain-tools\node_modules\webgme\node_modules\express\node_modules\send\lib\send.js:469:44)
    at SendStream.send (C:\Users\kevin\Documents\webgme-domain-tools\node_modules\webgme\node_modules\express\node_modules\send\lib\send.js:345:8)
    at C:\Users\kevin\Documents\webgme-domain-tools\node_modules\webgme\node_modules\express\node_modules\send\lib\send.js:323:10
    at Object.oncomplete (fs.js:107:15)

Sometimes the mongo object is null and it stops the webserver

We have seen this on Mac and Windows. We do not know how to reproduce it. We have seen it when the webserver was running from 'home' and connected to a mongodb, which is located at 'work'.

/Users/zsolt/GitHub/webgme-domain-tools/node_modules/webgme/storage/mongo.js:145
                        mongo.collectionNames(function (err, collections) {
                              ^
TypeError: Cannot call method 'collectionNames' of null
    at Object.getProjectNames (/Users/zsolt/GitHub/webgme-domain-tools/node_modules/webgme/storage/mongo.js:145:10)

"Bad Request" on Export

If you try to export a project without have an active project, you get a black screen with "Bad Request" in the top left. It should probably fail more gracefully.

I attached a screenshot of the error screen.
bad_request

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.