---
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
# 
# http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

layout: docpage
title: Create an Application
description: Building your first Apache Royale application
permalink: /create-an-application
---

# Create an Application

Building your first Apache Royale application

The easiest way to create an [Apache Royale](https://royale.apache.org/) application is to start with an existing one and modify it.  In the examples folder are several examples you can use as a starting point.  But if you want to know more about the underlying principles, read on.

This document is divided into several sections:

[Application Structure](create-an-application/application-structure) explains the important files that typically comprise an application and what they do.

[Application Tutorial](create-an-application/application-tutorial) is a step-by-step example of building an application.

[Migrate an Existing App](migrate-an-existing-app) provides strategies and techniques when migrating existing Flex apps to Royale, and how to switch to Royale if you already have a JavaScript application.

[Security](create-an-application/security) provides more information about making sure hackers can't use your app to be malicous and about dealing with common security restrictions when your app wants to access external resources.

[Modules](features/modules) discusses how to break your application into pieces so it doesn't have to all get downloaded at once.  Or have the whole thing compiled at once.

[Optimizations](create-an-application/optimizations) explains some of the compiler settings and in-code doc comment directives that can be used to tune the output of javascript that Royale generates.

