Skip to content

Create a Project

Create a project from the sidebar + menu (New Project dropdown).

UI labelWhat it does
Git RepoClone from a git URL
Open FolderConnect a local directory
From ZipImport a ZIP archive
New AppScaffold from a template
Blank StarterEmpty workspace folder
  1. Choose Git Repo from the + menu.
  2. Paste the git URL of the repository (HTTPS or SSH). For example:
    https://github.com/your-org/your-repo.git
    [email protected]:your-org/your-repo.git
  3. Click Create Project.

Tarsk clones the repository into its data directory. This can take a few seconds for large repositories. Once cloned, the project appears on the projects home grid.

After cloning, Tarsk scans the repository for package.json files, including subdirectories. For each one it picks an install command from the neighboring lockfile: yarn.lock means yarn install, bun.lock means bun install, pnpm-lock.yaml means pnpm install, and no lockfile means npm install.

If Tarsk finds any, a dialog titled Install dependencies? lists each package with its install command. Click Install All (N) to run the install commands in the project directory, or No to skip. Installing prepares dependencies so that workspaces are ready to use immediately after creation.

You can also configure or change the setup script later on the project’s Setup settings page.


Create a blank project folder inside the Tarsk workspace:

  1. Click + on the projects home screen and choose Blank Starter.
  2. Enter a folder name and confirm.

Tarsk creates an empty directory under its data path, initializes a git repository with an initial commit, and registers it as a project. Use this when you want a clean workspace before adding files.


If you already have a project directory on your machine, connect it directly without cloning:

  1. Choose Open Folder from the + menu.
  2. Select the directory in the file picker dialog.
  3. Tarsk registers the directory as a project.

Tarsk uses the selected folder for the project’s initial thread, without cloning or copying it. If the folder has no git repository, Tarsk initializes one there. Additional workspaces use a separate clone or copy: Tarsk uses the remote URL when available, with a local copy-on-write path on macOS, or copies the project directory when no valid remote URL exists.

This is useful for:

  • Projects you are already working on locally
  • Monorepos or worktrees you want to connect without re-cloning
  • Directories without a git remote (local-only projects)

Import a ZIP archive as a new project. This is how you bring in the Source Code export of a project shared from another machine’s Share dialog.

  1. Choose From Zip from the New Project menu.
  2. Pick a .zip file. Tarsk names the project from the archive’s plugin.json manifest, or from the file name when the archive has no manifest.
  3. Tarsk extracts the source into a new folder under its data directory, initializes git with an initial commit, and opens a new thread for you.

The project starts on the Direct Commits method; change it in Project Settings.

A Source Code export ({name}-source-code.zip) nests the project under src/. Tarsk extracts that layout correctly and keeps the original project name.

When the picked file looks like a Source Code export for a project you already have, Tarsk asks before replacing it. The Replace existing project? dialog warns that importing will replace the source code, threads, and in-progress work, and that this cannot be undone. Click Replace project to continue, or Cancel to import the zip as a new project instead.


  1. Choose New App from the + menu.
  2. Choose a template from the list.
  3. Choose a package manager: bun, npm, yarn, or pnpm.
  4. Give the project a name and click Create Project.

Tarsk runs the appropriate scaffold command, initialises a git repository, and registers the project so it’s immediately ready for workspaces and the AI agent.

Templates cover React, Next.js, Vue, Nuxt, Svelte, Solid, Angular, Astro, Capacitor, and more. See Project Templates for the full list.


Once a project exists: