Create Code App logo

Create Code App

Organization
microsoft
create-code-app

Creates Power Apps code apps using React and Vite. Use when building code apps, scaffolding projects, or deploying to Power Platform.

Overview

Publishermicrosoft
Repositorypower-platform-skills
Skill namecreate-code-app
Stars
895
Forks
182
Bundled files
2
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 2 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by microsoft on GitHub. Read the source before you install it.

Installation

Install the Create Code App AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/microsoft/power-platform-skills.git /tmp/power-platform-skills
mkdir -p .claude/skills
cp -r /tmp/power-platform-skills/plugins/code-apps/skills/create-code-app .claude/skills/create-code-app
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Create Code App in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Create Code App on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Create Code App is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

📋 Shared Instructions: shared-instructions.md - Cross-cutting concerns.

References:

Create Power Apps Code App

Workflow

  1. Prerequisites → 2. Gather Requirements → 3. Plan → 4. Scaffold → 5. Initialize → 6. Build & Deploy (baseline) → 7. Add Data Sources → 8. Implement App → 9. Final Build & Deploy → 10. Summary

Step 0: Check Memory Bank

Check for memory-bank.md per shared-instructions.md. Skip completed steps.

Step 1: Validate Prerequisites

Run prerequisite checks first -- no point gathering requirements if the environment isn't ready. See prerequisites-reference.md for details.

Check Node.js and Git (runs natively in bash):

bash
node --version   # Must be v22+
git --version    # Optional but recommended
  • Missing Node.js: Report "Install Node.js v22+ from https://nodejs.org/" and STOP.
  • Node.js below v22: Report "Node.js 22+ is required. Please upgrade or switch with nvm use 22." and STOP.
  • Missing Git: Report "Recommended but optional." Continue if approved.
  • All present: Report versions and proceed.

Step 2: Gather Requirements

Skip questions the user already answered in their initial instruction.

If the user has not described what they want to build (i.e., /create-code-app was invoked with no arguments or a vague prompt), start with a single open-ended question before asking anything else:

"What would you like to build? Describe it in your own words — what it does, who uses it, and what problem it solves."

Wait for their answer. Use it to frame all follow-up questions. Do NOT present a multiple-choice list of app types before the user has described their idea.

Once you have their description:

  1. Confirm the app name and clarify the purpose if needed
  2. Ask about data -- focus on what the app needs to do, not specific technologies:
    • "What data does your app need to work with?" (e.g., company emails, project tasks, custom business records)
    • "Does your app need to search existing information, manage its own data, or both?"
    • Based on their answers, recommend the best approach:
      • Store and manage custom business data (tables, forms, CRUD) → Dataverse (/add-dataverse)
      • Interact with specific services (send emails, post messages, manage files) → the appropriate connector
      • Search M365 data or get AI-powered answers (emails, files, people, company knowledge) → Work IQ (/add-workiq)
    • If they mention existing Dataverse tables, SharePoint lists, or connectors by name, use those directly
  3. Ask about UI requirements: key screens, layout, interactions, theme preference
  4. Ask any clarifying questions now -- resolve all ambiguity before entering plan mode

Step 3: Plan

  1. Enter plan mode with EnterPlanMode
  2. Design the full implementation approach:
    • Which /add-* skills to run for data sources
    • App architecture: components, pages, state management
    • Feature list with priority order
  3. Present plan for approval, include allowedPrompts from prerequisites-reference.md
  4. Exit plan mode with ExitPlanMode when approved

Step 4: Scaffold

Ask the user for a folder name. Default to powerapps-{app-name-slugified}-{timestamp} if they don't have a preference.

IMPORTANT: Use npx degit to download the template. Do NOT use git clone, do NOT manually create files, do NOT download from GitHub UI. degit downloads the template without git history.

bash
npx degit microsoft/PowerAppsCodeApps/templates/vite {folder} --force
cd {folder}
npm install

Notes:

  • Use --force to overwrite if the directory already has files (e.g., .claude from a planning session)
  • If targeting an existing directory, use . as the folder name: npx degit microsoft/PowerAppsCodeApps/templates/vite . --force
  • If npx degit fails (network issues, npm not found), retry once, then ask the user to run manually

Verify: package.json exists, node_modules/ created.

Step 5: Initialize

Resolve the CLI first (see cli-binary.md): run as $PA app init … (npx --no-install pa …), never a bare pa. On power-apps-only projects, translate to power-apps init … (the init verb and its -n/-e flags are unchanged on both binaries).

bash
pa app init -n '{user-provided-app-name}' -e <environment-id>

Finding the environment ID: It's the GUID in the make.powerapps.com URL: https://make.powerapps.com/environments/<env-id>/home. If you don't pass -e, the CLI will prompt for it interactively.

Authentication: On first run, a browser window opens for Microsoft sign-in. Complete the login and the command continues. No separate auth setup is needed.

See preferred-environment.md for environment selection details.

pa app init failure:

  • Non-zero exit: Report the exact output and STOP. Do not continue to Step 6.
  • "environmentId not found" or environment validation error: Verify the environment ID is correct and the user has maker permissions in that environment, then retry.
  • Example: "The pa app init command failed: [error text]. Please check that environment ID 32a51012-... is correct and that you have maker permissions in that environment."

Critical: Read power.config.json after init and verify environmentId is set correctly.

Step 6: Build & Deploy (baseline)

Pre-approved: This baseline deploy is part of the scaffold flow and does not require a separate confirmation prompt.

Build and deploy the bare template to verify the pipeline works before adding data sources.

bash
npm run build

Verify dist/ folder created with index.html and assets/.

Deploy via the resolved CLI: $PA app push on pa, or power-apps push on power-apps-only projects (see cli-binary.md).

bash
pa app push

Capture app URL from output: https://apps.powerapps.com/play/e/{env-id}/app/{app-id}

Common deploy errors: See troubleshooting.md.

Create or update memory-bank.md in the project root now -- don't wait until the end. Include:

  • Project path, app name, environment ID, app URL
  • Completed steps: scaffold, init, baseline deploy
  • Data sources planned (from Step 2)

This ensures progress is saved even if the session ends unexpectedly.

Step 7: Add Data Sources

Invoke the /add-* skills identified in the plan (Step 3). Run each in sequence. Pass context as arguments so sub-skills skip redundant questions (project path, connector name, etc.):

App needs to...Invoke
Store/manage custom business data/add-dataverse
Track work items, bugs, pipelines/add-azuredevops
Send or read Teams messages/add-teams
Read/write Excel spreadsheet data/add-excel
Upload, download, or manage files/add-onedrive
Work with SharePoint lists or docs/add-sharepoint
Send emails, read inbox, manage calendar/add-office365
Invoke a Copilot Studio agent/add-mcscopilot
Search M365 data or get AI-powered answers/add-workiq
Connect to another service/add-connector

Each /add-* skill runs npm run build to catch errors. Do NOT deploy yet.

If no data sources needed: Skip to Step 8.

Step 8: Implement App

This is the core step. Build the actual app features described in the plan from Step 3.

  1. Review generated services: Use Grep to find methods in generated service files (they can be very large -- see connector-reference.md). Do NOT read entire generated files.
  2. Build components: Create React components for each screen/feature in the plan
  3. Connect data: Wire components to generated services (use *Service.getAll(), *Service.create(), etc.)
  4. Apply theme: Use the user's theme preference (default: dark theme per development standards)
  5. Iterate with user: Show progress, ask for feedback, adjust as needed

Key rules:

  • Use generated services for all data access -- never use fetch/axios directly
  • Read dataverse-reference.md if working with Dataverse (picklist fields, virtual fields, lookups have critical gotchas)
  • Remove unused imports before building (TS6133 strict mode)
  • Don't edit files in src/generated/ unless fixing known issues

Step 9: Final Build & Deploy

bash
npm run build

Fix any TypeScript errors. Verify dist/ contains the updated app.

Ask the user: "Ready to deploy to [environment name]? This will update the live app." Wait for explicit confirmation before proceeding.

bash
pa app push

Step 10: Summary

Provide:

  • App name, environment, app URL, project location
  • What was built: features, data sources, components
  • Next steps: how to iterate (npm run build && pa app push), how to add more data sources
  • Suggest what else the app could do:
    • /add-datasource -- add another data source (describe what you need, and the plugin will recommend the best approach)
    • /add-dataverse -- store and manage custom business data
    • /add-azuredevops -- track work items, bugs, and pipelines
    • /add-teams -- send and read Teams messages
    • /add-sharepoint -- work with SharePoint lists or documents
    • /add-office365 -- send emails, manage calendar
    • /add-workiq -- search M365 data or get AI-powered answers about company info
    • /add-connector -- connect to any other service
  • Manage at https://make.powerapps.com/environments//home

Update Memory Bank

Update the memory bank (created in Step 6) with final state:

  • All completed steps (scaffold, data sources, implementation, deploy)
  • Features implemented and components created
  • Data sources connected
  • Suggested next steps

Example Walkthroughs

These walkthroughs show the full sequence from user request to final output — commands run, files changed, and the verbatim summary format the assistant should use.


Example 1: Create a Task Tracker App with Dataverse

User request:

"Build me a simple task tracker that stores tasks in Dataverse. I want to add tasks, mark them complete, and see a list."

Commands run (in order):

bash
# Step 1: Prerequisites
node --version   # → v22.4.0

# Step 4: Scaffold
npx degit microsoft/PowerAppsCodeApps/templates/vite powerapps-task-tracker-20260302 --force
cd powerapps-task-tracker-20260302
npm install

# Step 5: Initialize (browser login prompt on first run; CLI prompts for env ID if -e omitted)
pa app init -n 'Task Tracker' -e <environment-id>

# Step 6: Baseline deploy (pre-approved as part of scaffold flow)
npm run build
pa app push
# → App URL: https://apps.powerapps.com/play/e/32a51012-.../app/<app-id>

# Step 7: Add Dataverse (via /add-dataverse)
pa app add data-source --connector dataverse --table cr123_task
npm run build   # verify connector — no deploy yet

# Step 9: Final deploy (requires user confirmation)
npm run build
pa app push

Files changed:

FileChange
power.config.jsonCreated by pa app init — contains environmentId
src/generated/models/Cr123_taskModel.tsGenerated by pa app add data-source
src/generated/services/Cr123_taskService.tsGenerated by pa app add data-source
src/components/TaskList.tsxCreated — renders task list with status filter
src/components/AddTaskForm.tsxCreated — form to add new tasks
src/App.tsxUpdated — wires components to Cr123_taskService
memory-bank.mdCreated in Step 7, updated in Step 11

Final assistant summary (verbatim format):

Task Tracker is live.

App: Task Tracker
Environment: <your-environment-name> (<environment-id>)
URL: https://apps.powerapps.com/play/e/<environment-id>/app/<app-id>
Project: ~/powerapps-task-tracker-20260302/

What was built:
- Task list view with Active / Completed filter
- Add task form (title, description, due date)
- Mark complete / delete actions
- Dataverse table `cr123_task` (Title, Description, DueDate, IsComplete)

To redeploy: npm run build && pa app push (from the project folder)

What you can add next:
- /add-teams — post task updates to a Teams channel
- /add-office365 — send email notifications on completion

What to record in memory-bank.md:

markdown
# Task Tracker — Memory Bank

## Project

- Path: ~/powerapps-task-tracker-20260302/
- App name: Task Tracker
- Environment: <your-environment-name> (<environment-id>)
- App URL: https://apps.powerapps.com/play/e/<environment-id>/app/<app-id>

## Completed Steps

- [x] Step 1: Prerequisites validated
- [x] Step 4: Scaffold (npx degit)
- [x] Step 5: Initialize (pa app init)
- [x] Step 6: Baseline deploy
- [x] Step 7: Add Dataverse (cr123_task)
- [x] Step 8: Implement app (TaskList, AddTaskForm)
- [x] Step 9: Final deploy

## Data Sources

- Dataverse: cr123_task (Title, Description, DueDate, IsComplete)

## Components

- TaskList.tsx — filtered list, mark complete, delete
- AddTaskForm.tsx — create new tasks

## Next Steps

- Consider /add-teams for task assignment notifications

Example 2: Add SharePoint Connector to an Existing App

User request:

"My app already exists. Add SharePoint so I can read items from a list called 'Project Milestones'."

Commands run (in order):

bash
# Step 6: Get connection ID (via /list-connections)
pa connection list
# → ConnectionId: conn-sp-xyz789  (SharePoint Online)

# Step 7: Discover sites
pa connector list-datasets --connector sharepointonline -c conn-sp-xyz789
# → https://contoso.sharepoint.com/sites/Projects

# Step 8: Discover tables
pa connector list-tables --connector sharepointonline -c conn-sp-xyz789 -d 'https://contoso.sharepoint.com/sites/Projects'
# → Project Milestones, Documents, Team Wiki

# Step 9: Add connector
pa app add data-source --connector sharepointonline -c conn-sp-xyz789 -d 'https://contoso.sharepoint.com/sites/Projects' --table 'Project Milestones'

# Step 11: Build to verify
npm run build   # → success

Files changed:

FileChange
src/generated/services/SharePointOnlineService.tsGenerated — contains GetItems, PostItem, etc.
src/generated/models/SharePointOnlineModel.tsGenerated — TypeScript interfaces
.power/schemas/sharepointonline/Generated schema files
memory-bank.mdUpdated — connector recorded

Final assistant summary (verbatim format):

SharePoint Online connector added.

Connector: SharePoint Online
Site: https://contoso.sharepoint.com/sites/Projects
List: Project Milestones
Build: Passed ✓

Usage:
  const result = await SharePointOnlineService.GetItems({
    dataset: "https://contoso.sharepoint.com/sites/Projects",
    table: "Project Milestones"
  });
  const milestones = result.data?.value || [];

Next: Implement your UI components using the generated service, then run /deploy when ready.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Create Code App AI skill do?

Creates Power Apps code apps using React and Vite. Use when building code apps, scaffolding projects, or deploying to Power Platform.

Why use Create Code App on TypingMind?

Because you install it once and use it with any model. Create Code App is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Create Code App in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/microsoft/power-platform-skills/tree/main/plugins/code-apps/skills/create-code-app. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Create Code App?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Create Code App?

As many as you like. As long as a model supports skills, you can use Create Code App with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Create Code App AI skill free?

Yes. It is published on GitHub by microsoft under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇