Home

Awesome

Diamond

DONATE OS LOC Dub version License

Diamond is a powerful full-stack web-framework written in the D Programming Language.

Diamond can be used to write powerful websites, webapis or as stand-alone as a template parser.

Website: https://diamondmvc.org/

Key-Features

Key features of Diamond

Goals

Dependencies

PackageVersionDescription
vibe.d0.8.3Used as the backend for Diamond's web applications. From 3.0.0 vibe.d will be an optional dependency.
DMD/Phobos2.072.2 - 2.077.0The standard library of D and thus a required dependency.
Mysql-native2.2.1A native wrapper for Mysql. It's a dependency, because of the MySql ORM.
ddbcX.X.XA database wrapper in D to a lot of database systems. Diamond will be using it for PostgreSQL, Sqlite and MSSQL.

Example (2.X.X)

View

Layout:

@<doctype>
<html>
<head>
  <title>Website - @<title></title>
</head>
<body>
  @<view>
</body>
</html>

View:

@[
  layout:
    layout
---
  route:
    home
---
  model:
    Home
---
  controller:
    HomeController
---
  placeholders:
    [
      "title": "Home"
    ]
]

<p>Hello @=model.name;!</p>

Controller

module controllers.homecontroller;

import diamond.controllers;

final class HomeController(TView) : Controller!TView
{
  this(TView view)
  {
    super(view);
  }
  
  /// / || /home
  @HttpDefault Status defaultAction()
  {
    view.model = new Home("World!");
    
    return Status.success;
  }
  
  /// /home/setname/{name}
  @HttpAction(HttpPost) Status setName()
  {
    auto name = this.getByIndex!string(0);
    view.model = new Home(name);
    
    return Status.success;
  }
}

Model

module models.home;

final class Home
{
  private:
  string _name;
  
  public:
  final:
  this(string name)
  {
    _name = name;
  }
  
  @property
  {
    string name() { return _name; }
  }
}

Example (3.X.X)

View

Layout:

@(doctype)
<html>
<head>
  <title>Website - @(title)</title>
</head>
<body>
  @(view)
</body>
</html>

View:

@[
  layout:
    layout
---
  route:
    home
---
  model:
    Home
---
  controller:
    HomeController
---
  placeholders:
    [
      "title": "Home"
    ]
]

<p>Hello @=model.name;!</p>

Controller (View)

module controllers.homecontroller;

import diamond.controllers;

final class HomeController(TView) : WebController!TView
{
  this(TView view)
  {
    super(view);
  }
  
  /// / || /home
  @HttpDefault Status defaultAction()
  {
    view.model = new Home("World!");
    
    return Status.success;
  }
  
  /// /home/setname/{name}
  @HttpAction(HttpPost) Status setName(string name)
  {
    view.model = new Home(name);
    
    return Status.success;
  }
}

Controller (Api)

module controllers.usercontroller;

import diamond.controllers;

final class UserController : ApiController
{
  this(HttpClient client)
  {
    super(client);
  }
  
  /// /user/update
  @HttpAction(HttpPost) Status update(UserModel user)
  {
    // Do stuff ...
    
    return Status.success;
  }
}

Model

module models.home;

final class Home
{
  private:
  string _name;
  
  public:
  final:
  this(string name)
  {
    _name = name;
  }
  
  @property
  {
    string name() { return _name; }
  }
}

...

module models.user;

final class User
{
  public:
  string name;
  int age;
}

FAQ

See: https://diamondmvc.org/faq

Are there any syntax guide-lines?

See: https://diamondmvc.org/docs/views/#syntax

Installing (Web)

See: https://diamondmvc.org/download

Installing (Standalone)

Not supported since 3.0.0

Contributing

See: https://diamondmvc.org/contribute

Version & Branch Support

Diamond only supports up to the 3 latest minor versions of itself, including pre-release versions.

If a version is not supported its working branch is deleted.

Anything below 2.10.0 is no longer supported, because earlier versions are not adviced to use unless necessary.

2.10.0+ is generally backward compatible, but 3.0.0 is not.

Currently supported versions: 2.10.0 - 3.0.0

No longer supported (Only available in release.): < 2.10.0

Note: 3.0.0 is not yet supported, but the master branch is 3.0.0