Powerful visual editor with definitions export

Create your application model and export its definition files just in a few clicks.

Output meets all MVC and ORM frameworks standards.

  • Entity
  • Bundle
  • Project
Skipper diagram - entity Skipper diagram - bundle Skipper diagram - project

1.Visually edit your project model.

  • Annotations
  • XML
  • YML
<?php
use Doctrine\ORM\Mapping AS ORM;

/**
 * @ORM\Entity
 * @ORM\Table(schema="ecommerce_order", options={"charset":"utf8","collate":"utf8_unicode_ci"})
 * @ORM\ChangeTrackingPolicy("DEFERRED_IMPLICIT")
 */
class EcommerceOrder
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer", length=4, options={"unsigned":true})
     * @ORM\GeneratedValue(strategy="SEQUENCE")
     */
    private $id;

    /**
     * @ORM\Column(type="datetime", nullable=true)
     */
    private $ordered_at;

    /**
     * @ORM\Column(type="string", nullable=true)
     */
    private $customer_note;

    /**
     * @ORM\Column(type="string", nullable=true)
     */
    private $internal_note;

    /**
     * @ORM\OneToOne(targetEntity="Address")
     * @ORM\JoinColumn(name="billing_address_id", referencedColumnName="id", unique=true)
     */
    private $BillingAddress;

    /**
     * @ORM\ManyToOne(targetEntity="Address")
     * @ORM\JoinColumn(name="delivery_address_id", referencedColumnName="id")
     */
    private $DeliveryAddress;
}
<?xml version="1.0"?>
<doctrine-mapping 
 xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" 
 xsi="http://www.w3.org/2001/XMLSchema-instance" 
 schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
  <entity 
     name="EcommerceOrder" 
     change-tracking-policy="DEFERRED_IMPLICIT" 
     schema="ecommerce_order" 
     repository-class="Doctrine\ORM\EntityRepository">
    <id name="id" type="integer" length="4">
      <generator strategy="SEQUENCE"/>
      <options>
        <option name="unsigned" value="true"/>
      </options>
    </id>
    <field name="ordered_at" type="datetime" nullable="true"/>
    <field name="customer_note" type="string" nullable="true" version="true"/>
    <field name="internal_note" type="string" nullable="true" version="true"/>
    <many-to-one field="DeliveryAddress" target-entity="Address">
      <join-columns>
        <join-column 
                 name="delivery_address_id" 
                 referenced-column-name="id" 
                 on-delete="CASCADE"/>
      </join-columns>
    </many-to-one>
    <one-to-one field="BillingAddress" target-entity="Address">
      <join-columns>
        <join-column 
                 name="billing_address_id" 
                 referenced-column-name="id" 
                 unique="true" 
                 on-delete="CASCADE"/>
      </join-columns>
    </one-to-one>
    <options>
      <option name="charset" value="utf8"/>
      <option name="collate" value="utf8_unicode_ci"/>
    </options>
  </entity>
</doctrine-mapping>
EcommerceOrder:
  type: entity
  changeTrackingPolicy: DEFERRED_IMPLICIT
  schema: ecommerce_order
  repositoryClass: Doctrine\ORM\EntityRepository
  fields:
    id:
      id: true
      type: integer
      length: 4
      generator:
        strategy: SEQUENCE
      options:
        unsigned: true
    ordered_at:
      type: datetime
      nullable: true
    customer_note:
      type: string
      nullable: true
      version: true
    internal_note:
      type: string
      nullable: true
      version: true
  options:
    charset: utf8
    collate: utf8_unicode_ci
  oneToOne:
    BillingAddress:
      targetEntity: Address
      joinColumns:
        billing_address_id:
          referencedColumnName: id
          unique: true
          onDelete: CASCADE
  manyToOne:
    DeliveryAddress:
      targetEntity: Address
      joinColumns:
        delivery_address_id:
          referencedColumnName: id
          onDelete: CASCADE

2.Export it to complete definition files.

Download 14-day trial version

Try Skipper for free. No credit card needed.


How Skipper helps you

There are many ways how Skipper helps its users. Here are the most important of them:

  • Skipper saves up to 70% of time spent with definitions.
  • Graphical editing improves orientation in a model.
  • With Skipper you avoid all mistypes or errors.
  • Project import allows simple take over of foreign projects.
  • Visual model replaces project documentation and eases communication.
Skipper visual ORM model

Benefits for MVC frameworks


Supported MVC frameworks

MVC Framework Suported ORM Frameworks
Symfony (and Symfony2) Propel, Doctrine, Doctrine2
Zend Framework (and Zend Fw2) Propel, Doctrine, Doctrine2
CakePHP CakePHP
Any other MVC Propel, Doctrine, Doctrine2


Almost all Skipper features are MVC independent, so it doesn't matter which MVC framework you use as long as the ORM framework is supported by Skipper. Simply choose "Without MVC" option when creating (or importing) your project.

On the other hand, Skipper includes support for the biggest MVC frameworks and there is an added value for them. For example, Skipper offers better and faster files scanning (because of knowledge of directory structure), an extension in export formats (because some MVC frameworks use slightly different naming convention), etc.


Supported ORM frameworks



Import or creation of a new project with required ORM and MVC framework is easy with Skipper wizards. In the first step you choose ORM and in the second step your MVC framework. This ensures correct output format for following definitions export.

Skipper ORM framework import (Doctrine, CakePHP, Propel)
Skipper MVC framework import (Symfony, Zend)

Over 1,000 companies use Skipper every day

It is faster and gives less errors to have Skipper create the mapping code instead of writing it myself. Later in the development process I often use the Skipper diagram as a quick reference.

Herman Peeren, Yepr

It saved us a lot of time designing and configuring complex data models. It is impressive to see what this software achieves on its own.

Michael Stoye, ColorGATE

Skipper is especially helpful in the initial data modeling phase. Exporting the data model and scaffolding makes it really easy to get a first prototype up and running in a matter of minutes.

Jörn Wagner, Explicatis

It simplifies our work because it saves us time. With features added over time like adding behaviors to Propel in Skipper it has become an unmissable tool in our organisation.

Erwin te Bos, aXtion

We use Skipper on our daily basis for ecommerce software development. It lets us visualize at a glance the data models and work on them in a simple and easy way.

Dario Schilman, IDS Soluciones Ecommerce

We have good use of the tool. It simplifies our daily work, saves us time and is simple and intuitive to use.

Thomas Somoen, Try/Apt

Skipper is a stable and easy to use schema designing tool! No documentation, just design and everything is documented!

Siebe Vos, Inform'aid

Simply put, for us, Skipper is not just a tool to master, but a mastermind that teaches us the best programming practices.

Can Berkol, Biber Ltd

More user stories