Developer Hub

Build on TechAppForce. Extend it. Integrate it. Own it.

A developer platform for building business applications and multi-tenant SaaS products with APIs, SDKs, real code, custom front ends and a professional IDE.

  • TAF Studio
  • TAFI
  • APIs
  • SDKs
  • Real code
  1. Learn
  2. Build
  3. Extend
  4. Integrate
  5. Share
TAF Studio with an entity open in the designer, a C# script below it and TAFI proposing a plan in the side panel
POST/api/v1/records/insert
$ curl -X POST https://your-data-host/api/v1/records/insert \
  -H "Authorization: Bearer $TAF_TOKEN" \
  -d '{"EntityName":"Vendor","Fields":[...]}'
200 OK  record created, audit stamped

You are on the TechAppForce website. Learn about the platform, TAF Studio, TAFI, the documentation and resources here.

techappforce.io is the product. Sign in there to build applications, manage your apps and use TechAppForce.

Documentation, APIs and SDKs

Documentation

Concepts, development guides, TAF Studio and TAFI, with a page for every platform feature.

  • Getting started
  • Platform fundamentals
  • Development
  • TAF Studio and TAFI
Read the documentation

API reference

Every service's REST API, searchable by service, method and resource, with samples in cURL, TypeScript and C#.

  • Identity, Metadata, Data
  • Workflow, Notification, Reports, Files
  • Virtual URLs and the TAFI gateway
Explore the API reference

SDKs

A TypeScript client SDK for your own front ends, .NET SDKs for services and hooks, and the screen extension SDK.

  • Angular components and React hooks
  • .NET service clients and contracts
  • @techextensor/tab-sdk 0.0.74
Explore SDKs

TAF Studio

Build with TAF Studio

A professional IDE for metadata-driven applications, on the VS Code engine.

  • Visual designers
  • Source files
  • Diffs
  • Script diagnostics
  • Debug harness
  • Change journal
  • Environment comparison
  • Release authoring
TAF Studio showing the Customer entity in the designer, its properties, and an OnSave C# script in the editor

Extend with code

Real code, run by your team, at four seams.

Server

Business rules on every data operation

  • C# validation hooks
  • Pre and post hooks
  • Workflow actions
  • Transition validators

Client

Behaviour on platform screens

  • TypeScript screen extensions
  • Custom components
  • Screen and tenant CSS

Front end

Your own branded application

  • TypeScript client SDK
  • Angular components
  • React hooks

Platform

New services on the same foundation

  • .NET SDKs
  • Custom services
  • REST and OpenAPI
TAF platformData engineAccess rulesLifecycles and approvalsEvents and automationTenants and environments

TAFI

Build with TAFI

AI-assisted development through the platform's tool gateway. Every change is previewed, confirmed and attributed to you before it is applied.

  • Ask, Plan and Agent modes
  • About 50 gateway tools
  • Preview, confirm, apply
  • In Studio and Claude Code
TAFI proposing a five-step plan for a vendor approval process, with a change plan of four metadata changes and a Confirm and Apply button

Examples and recipes

Problem, solution, code and result, ready to copy.

CRUD

Create a record over REST

Problem
An external system needs to add vendors to your app.
Solution
Call the Data API's insert endpoint with the entity name and field values.
cURL
curl -X POST "https://your-data-host/api/v1/records/insert" \
  -H "Authorization: Bearer $TAF_TOKEN" \
  -H "TenantId: $TENANT_ID" -H "AppId: $APP_ID" -H "EnvironmentId: $ENVIRONMENT_ID" \
  -H "Content-Type: application/json" \
  -d '{ "EntityName": "Vendor",
        "Fields": [ { "FieldName": "Name", "Value": "Northwind Traders" } ] }'

Result The record is created with owner, audit and tenant fields stamped by the platform, and any triggers on Vendor fire.

CRUD

Query with grouped conditions

Problem
You need open tickets that are either high priority or overdue.
Solution
Use numbered filters and a FilterLogic expression in a select query.
POST /api/v1/queries/select
{
  "EntityName": "Ticket",
  "SelectedFields": ["Id", "Title", "Priority", "DueDate"],
  "WhereClause": {
    "Filters": [
      { "FieldName": "Status",   "Operator": 8, "Value": "Resolved", "Sequence": 1 },
      { "FieldName": "Priority", "Operator": 3, "Value": "High",     "Sequence": 2 },
      { "FieldName": "DueDate",  "Operator": 2, "Value": "2026-10-01", "Sequence": 3 }
    ],
    "FilterLogic": "1 AND (2 OR 3)"
  },
  "Sort": [ { "FieldName": "DueDate", "Direction": 1 } ],
  "Pager": { "PageNumber": 1, "PageSize": 50 }
}

Result The database does the filtering and paging, and rows outside the caller's read scope are excluded.

Permissions

Own records for staff, team records for managers

Problem
Sales staff should see their own opportunities; managers should see their team's.
Solution
Set the Read scope per role on the entity. Team follows the reporting hierarchy.
Object permissions: Opportunity
Role            Read   Create  Update  Delete
Sales           Own    Own     Own     None
Sales manager   Team   Team    Team    Own
Administrator   All    All     All     All

Result Grids, reports, APIs and TAFI all return the same rows for the same user, because the data engine applies the scope.

Lifecycles

Move a record by status name

Problem
Your front end should approve a vendor without knowing status ids.
Solution
Use the client SDK's transitionTo, which refuses moves the lifecycle does not allow.
vendor.service.ts
import { inject } from '@angular/core';
import { TAF_WORKFLOW } from 'taf-client-angular';

const workflow = inject(TAF_WORKFLOW);

// Throws a TRANSITION error when the lifecycle does not allow the move
await workflow.transitionTo('Vendor', vendorId, 'Approved');

Result The transition is validated, recorded in history, and any after-transition workflows run.

All examples

Community and marketplace

Discussions, a showcase and events for developers building on TechAppForce, and a marketplace for reusable components and templates.

Coming soon

The community forum, showcase and marketplace are being prepared. Tell us you want in and we will invite you when they open.

Latest changes

These are development updates merged into the platform's shared development branches, listed by date. Formal versioned release notes are coming soon; where a package has a real version number it is shown.

Development updatePlatformAPI

Approval configuration fixes

Fixed

  • Approver resolution by role now respects the environment the request belongs to.
  • Corrections to how approval processes are configured.

Breaking changes

None.

Development updatePlatformAPI

Virtual URL runtime, lifecycle creation route and clearer errors

New

  • Virtual URL runtime: call your no-code endpoints at /vu/..., pin a call to a release with X-Release-Id, and download the app's OpenAPI 3.1 document.
  • POST /api/v1/blueprints creates a lifecycle with its statuses and transitions in one call.
  • POST /api/v1/appobject/flags turns entity features on or off after registration.

Improved

  • Requests for an entity that does not exist now return 404 Not Found.
  • Token refresh is bound to a tenant the user belongs to.
  • Screen definitions carry their names; SQL Server column defaults are handled when tables are created.

Breaking changes

None.

Development updateStudioTAFISDK

Studio fixes, TAFI knowledge base in the gateway, client SDK slices

Improved

  • TAF Studio: fixes from end-to-end testing against real applications.
  • TAFI gateway: the knowledge base ships with the gateway, and notifications can target roles.
  • Client SDK: generic data, identity, workflow and other slices merged to the main branch (0.x).

Breaking changes

None.

Full changelog

Stay current with TechAppForce development

One email when something changes that developers should know about.

  • New APIs
  • SDK updates
  • TAF Studio releases
  • TAFI updates
  • Tutorials
  • Developer events

Idea, docs, API, code, release. All in one place.

Low-code, real code, APIs, SDKs, a professional IDE and governed AI, on one platform.