KPD closed beta Sign inRequest access

Project files and folders

A KPD project is a set of plain, readable files. Export it as a zip to keep a copy, review it or share it.

The project folder

inclined-labs/
├── project.kpdproj     project settings and shared definitions
├── pipelines/*.kpd     one file per pipeline
├── storyboards/        storyboards (.kpdstory), in folders if you like
├── schemas/            Avro (.avsc), JSON Schema (.json) and Protobuf (.proto), in subfolders if you like
├── sql/                Flink SQL kept in its own files (.sql), in subfolders if you like
├── exports/            PNG, Markdown and CSV written by KPD
│   └── terraform/      the Terraform export
└── .gitignore           keeps workspace files out of Git if you put the project in a repository
FileWhat it holds
project.kpdprojThe project's name and client; shared assets; clusters, service accounts and role bindings; compute pools; governance tags and business metadata definitions; contract rules; the shading key; and any project naming rule.
pipelines/<name>.kpdA pipeline: its assets and the properties you set (defaults come from the palette), its connections, layout, groups, notes, decisions and assumptions, and the cluster it runs on.
storyboards/…/<name>.kpdstoryA storyboard: its items, links, layout, groups and notes. Step numbers and the story are worked out when it opens, never saved. A pipeline that implements it holds its id in a storyboard field, so renaming or moving a storyboard never breaks the link.
schemas/…Schema files, exactly as Schema Registry would take them.
sql/…/<name>.sqlFlink SQL that statements keep in its own file, as plain SQL text. A statement holds the file’s path in kpd.sqlFile.

All of these are JSON, schema or SQL text with stable ordering, so a change to a design shows as a small, readable difference, and the files can go into Git or a code review if your team keeps designs there.

What a project can hold

A project holds only KPD’s own files, in their folders: the project file, pipelines, storyboards, schemas, SQL files, KPD’s exports (pictures, design documents, technical exports and the Terraform module) and Markdown notes next to the project file. Each must really be what its name says: a .kpd must be KPD’s JSON, a .png a picture, a .md plain text. KPD refuses to save anything else, and an import leaves out any file that doesn’t qualify and tells you which.

That keeps a project to the design, and stops it being used to store or pass on other files, which matters in the beta where every project is shared. The beta also limits an import to 25 MB and 1,000 files once unpacked, and each file to 10 MB. Real projects are far smaller: the Inclined Labs sample, pictures and all, is about 2 MB. On your own machine the limits are 200 MB, 5,000 files and 25 MB, and whoever runs KPD can change them (KPD_IMPORT_MAX_MB, KPD_IMPORT_MAX_FILES, KPD_MAX_FILE_MB). See also the terms of use.

Saving safely

KPD writes each file to a temporary file and renames it into place, so a crash never leaves half a file, and it keeps the previous version as <file>.bak. File and folder names Windows can't store are refused, so a project made on a Mac always opens on Windows.

Where projects live

In the beta, projects are kept in a shared repository on the server. Everyone in the beta can open every project, and the beta keeps a backup of them every night.

Keep client work outBecause everyone in the beta can see every project, don’t put confidential client material in it. Use made-up names, or the sample projects.

Opening, exporting and importing

Two people, one pipeline

The last save wins. If someone else has a pipeline you have open, KPD shows a card saying so; agree who saves before you both edit. If your save lands on top of someone else’s newer one, you’re both told, and the other person can reopen the pipeline from the explorer to see your version.