You are currently viewing the new Anvil Editor Docs.
Switch to the Classic Editor Docs
You are currently viewing the Classic Editor Docs.
Switch to the new Anvil Editor Docs main page


Each Anvil app is represented by a Git repository. If you click the Clone with Git button in the Version History dialog, you will be able to clone your Anvil app onto your own machine.

The Clone With Git dialog, with a box to copy your SSH public key into.

When cloned, the Git repository will be placed in a directory named using the app name. You can safely rename the directory to whatever you like.

Structure of the Git repository

The files in the repository are everything Anvil uses to represent an app - there are no hidden configuration files that don’t get cloned.

The Git repository for your app contains:

  • anvil.yaml: The configuration relating to your app as a whole.
  • Sets the Python path for the app
  • client_code: This is an ordinary Python source tree containing the code and config for your client-side Forms and Modules.
    • <form name>: Each Form, by default, is a Python package; a directory containing an file (plus a config file defining the design layout). The Python code for each Form is in a separate file.
      • The Python code for each Form is in this file. This is exactly the code you see in the Code View of the Editor.
      • form_template.yaml: This file defines the Form’s template, its properties, its components and their properties. It is a representation of what the visual designer knows about that Form.
  • server_code: This is an ordinary Python source tree containing the code for your Server Modules.
    • <server module name>: The Python code for each Server Module is in this file. This is exactly the code you see in your Server Modules in the Editor.
  • theme: This contains the configuration files relating to the functionality found in the Theme section of the App Browser.
    • assets: The files contained in the Assets part of the Theme section.

You can edit the files in the repo and make commits. You can then push these commits back to Anvil and you will see them in the Editor. If you have made changes in the Anvil Editor as well, you can pull these and merge or rebase, as you normally would when collaborating on a project using Git. That way, you can use the drag-and-drop Anvil Editor and modify the code in a local IDE - there should rarely be merge conflicts if you do this.

The master branch represents the version of the app in the Anvil Editor. If a published version is selected, this is represented by the published branch.


To authenticate your local Git with Anvil, you can either use your Anvil username and password, or copy an SSH public key into the Clone With Git dialog. This must be the SSH key you’re using with Git.

If you’re using two factor authentication you must use SSH rather than username and password.

Do you still have questions?

Our Community Forum is full of helpful information and Anvil experts.