diff --git a/docs/.gitbook/assets/C coming soon (1).png b/docs/.gitbook/assets/C coming soon (1).png new file mode 100644 index 0000000..465dad0 Binary files /dev/null and b/docs/.gitbook/assets/C coming soon (1).png differ diff --git a/docs/.gitbook/assets/C coming soon dark.png b/docs/.gitbook/assets/C coming soon dark.png new file mode 100644 index 0000000..bc6210d Binary files /dev/null and b/docs/.gitbook/assets/C coming soon dark.png differ diff --git a/docs/.gitbook/assets/C coming soon.png b/docs/.gitbook/assets/C coming soon.png new file mode 100644 index 0000000..492d18f Binary files /dev/null and b/docs/.gitbook/assets/C coming soon.png differ diff --git a/docs/.gitbook/assets/Dart_logo.png b/docs/.gitbook/assets/Dart_logo.png new file mode 100644 index 0000000..d091c28 Binary files /dev/null and b/docs/.gitbook/assets/Dart_logo.png differ diff --git a/docs/.gitbook/assets/Frame 109.svg b/docs/.gitbook/assets/Frame 109.svg new file mode 100644 index 0000000..ab569d3 --- /dev/null +++ b/docs/.gitbook/assets/Frame 109.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/docs/.gitbook/assets/Frame 23.svg b/docs/.gitbook/assets/Frame 23.svg new file mode 100644 index 0000000..5d5c55c --- /dev/null +++ b/docs/.gitbook/assets/Frame 23.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/.gitbook/assets/Frame 51355.svg b/docs/.gitbook/assets/Frame 51355.svg new file mode 100644 index 0000000..7b7f317 --- /dev/null +++ b/docs/.gitbook/assets/Frame 51355.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/.gitbook/assets/Java coming soon dark.png b/docs/.gitbook/assets/Java coming soon dark.png new file mode 100644 index 0000000..3cd2892 Binary files /dev/null and b/docs/.gitbook/assets/Java coming soon dark.png differ diff --git a/docs/.gitbook/assets/Java coming soon.png b/docs/.gitbook/assets/Java coming soon.png new file mode 100644 index 0000000..b73f404 Binary files /dev/null and b/docs/.gitbook/assets/Java coming soon.png differ diff --git "a/docs/.gitbook/assets/Screenshot 2026-04-10 at 7.29.16\342\200\257PM.png" "b/docs/.gitbook/assets/Screenshot 2026-04-10 at 7.29.16\342\200\257PM.png" new file mode 100644 index 0000000..ad546c2 Binary files /dev/null and "b/docs/.gitbook/assets/Screenshot 2026-04-10 at 7.29.16\342\200\257PM.png" differ diff --git "a/docs/.gitbook/assets/Screenshot 2026-04-10 at 7.29.32\342\200\257PM.png" "b/docs/.gitbook/assets/Screenshot 2026-04-10 at 7.29.32\342\200\257PM.png" new file mode 100644 index 0000000..a811a58 Binary files /dev/null and "b/docs/.gitbook/assets/Screenshot 2026-04-10 at 7.29.32\342\200\257PM.png" differ diff --git "a/docs/.gitbook/assets/Screenshot 2026-04-14 at 7.44.39\342\200\257PM.png" "b/docs/.gitbook/assets/Screenshot 2026-04-14 at 7.44.39\342\200\257PM.png" new file mode 100644 index 0000000..d1350a5 Binary files /dev/null and "b/docs/.gitbook/assets/Screenshot 2026-04-14 at 7.44.39\342\200\257PM.png" differ diff --git "a/docs/.gitbook/assets/Screenshot 2026-04-27 at 4.24.27\342\200\257PM.png" "b/docs/.gitbook/assets/Screenshot 2026-04-27 at 4.24.27\342\200\257PM.png" new file mode 100644 index 0000000..76b9778 Binary files /dev/null and "b/docs/.gitbook/assets/Screenshot 2026-04-27 at 4.24.27\342\200\257PM.png" differ diff --git "a/docs/.gitbook/assets/Screenshot 2026-04-27 at 4.25.34\342\200\257PM.png" "b/docs/.gitbook/assets/Screenshot 2026-04-27 at 4.25.34\342\200\257PM.png" new file mode 100644 index 0000000..36eafd0 Binary files /dev/null and "b/docs/.gitbook/assets/Screenshot 2026-04-27 at 4.25.34\342\200\257PM.png" differ diff --git "a/docs/.gitbook/assets/Screenshot 2026-04-27 at 4.25.49\342\200\257PM.png" "b/docs/.gitbook/assets/Screenshot 2026-04-27 at 4.25.49\342\200\257PM.png" new file mode 100644 index 0000000..67a51e9 Binary files /dev/null and "b/docs/.gitbook/assets/Screenshot 2026-04-27 at 4.25.49\342\200\257PM.png" differ diff --git "a/docs/.gitbook/assets/Screenshot 2026-04-27 at 4.26.31\342\200\257PM.png" "b/docs/.gitbook/assets/Screenshot 2026-04-27 at 4.26.31\342\200\257PM.png" new file mode 100644 index 0000000..8b48b34 Binary files /dev/null and "b/docs/.gitbook/assets/Screenshot 2026-04-27 at 4.26.31\342\200\257PM.png" differ diff --git a/docs/.gitbook/assets/Untitled (1).png b/docs/.gitbook/assets/Untitled (1).png new file mode 100644 index 0000000..a37a4e4 Binary files /dev/null and b/docs/.gitbook/assets/Untitled (1).png differ diff --git a/docs/.gitbook/assets/Untitled (2).png b/docs/.gitbook/assets/Untitled (2).png new file mode 100644 index 0000000..0f7333a Binary files /dev/null and b/docs/.gitbook/assets/Untitled (2).png differ diff --git a/docs/.gitbook/assets/Untitled (3).png b/docs/.gitbook/assets/Untitled (3).png new file mode 100644 index 0000000..b516a5e Binary files /dev/null and b/docs/.gitbook/assets/Untitled (3).png differ diff --git a/docs/.gitbook/assets/Untitled.png b/docs/.gitbook/assets/Untitled.png new file mode 100644 index 0000000..5a95fbf Binary files /dev/null and b/docs/.gitbook/assets/Untitled.png differ diff --git a/docs/README.md b/docs/README.md index 67ea9ea..062e7bd 100644 --- a/docs/README.md +++ b/docs/README.md @@ -9,8 +9,28 @@ coverHeight: 333 # Welcome -### New to Atsign? +### Atsign Documentation -Start exploring by choosing a topic below or browse the Table of Contents. +Welcome to the Atsign documentation. Here you’ll find everything you need to understand the atPlatform, explore its core technologies, and start building secure, private applications and workflows. Choose a topic below to begin. -
Cover imageCover image (dark)
AI Architect WalkthroughThis tutorial guides you through creating, loading, and exporting an app blueprint using AI Architect, then using that blueprint to generate and run an atPlatform app in your IDE.atArchitect.svgHero - atarchitect - dark.svghttps://docs.atsign.com/tutorials/ai-architect-walkthrough
Core TechnologyHigh-level tour of the atPlatform: how Atsigns, the atPlatform Protocol, and atServers work together.Core Technology.svgCore Technology-dark.svghttps://docs.atsign.com/~/revisions/kPoFwMVlM1fLY2MMGYLD/core
atSDKsA practical introduction to the atSDK. Everything you need to build, authenticate, and exchange data across apps, devices, and environments.atSDK.svgatSDK-dark.svghttps://docs.atsign.com/~/revisions/kPoFwMVlM1fLY2MMGYLD/sdk
NoPortsTMSee how NoPorts applies the atPlatform to deliver secure, zero-trust connectivity without open ports or VPNs.NoPorts.svgNoPorts-dark.svghttps://www.noports.com/
GitHub ↗See how the atPlatform is built and join the development on our GitHub.GitHub.svgGitHub-dark.svghttps://github.com/atsign-foundation
atsign.com ↗Learn more about the technology behind secure, private communications between people, entity, and things.atsign.svgatsign-dark.svghttps://atsign.com/
+
Cover imageCover image (dark)
AI ArchitectTMExplore how to visually map out secure apps and workflows and export a LLM prompts that generate apps on the atPlatform.atArchitect.svgHero - atarchitect - dark.svgai-architect-overview
Core TechnologyHigh-level tour of the atPlatform: how Atsigns, the atPlatform Protocol, and atServers work together.Core Technology.svgCore Technology-dark.svgcore
atSDKA practical introduction to the atSDK. Everything you need to build, authenticate, and exchange data across apps, devices, and environments.atSDK.svgatSDK-dark.svgsdk
NoPorts TMSee how NoPorts applies the atPlatform to deliver secure, zero-trust connectivity without open ports or VPNs.NoPorts.svgNoPorts-dark.svghttps://docs.noports.com/
GitHub ↗See how the atPlatform is built and join the development on our GitHub.GitHub.svgGitHub-dark.svghttps://github.com/atsign-foundation
atsign.com ↗Learn more about the technology behind secure, private communications between people, entity, and things.atsign.svgatsign-dark.svghttps://atsign.com/
+ +### Need Help? + +
+ +via Email + +Send us an email: [support.team@atsign.com](mailto:support.team@atsign.com) + +Monday - Friday, 6am - 6pm (PT) + +
+ +
+ +via Discord + +[Join our Discord](https://discord.gg/atsign-778383211214536722) for technical support. Our team and community are here to help! + +
diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index c82d014..8481332 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -1,32 +1,44 @@ # Table of contents * [Welcome](README.md) -* [atPlatform](learn/core/README.md) - * [Atsign](learn/core/atsign.md) - * [atRecord](learn/core/atrecord.md) -* [atSDK](learn/sdk/README.md) - * [Get Started](sdk/get-started.md) - * [Authentication](learn/sdk/onboarding.md) - * [atKey Reference](learn/sdk/atid-reference.md) - * [CRUD Operations](learn/sdk/crud-operations.md) - * [Notifications](learn/sdk/events.md) - * [Additional Features](sdk/synchronization/README.md) - * [Synchronization](sdk/synchronization/synchronization.md) - * [Connection Hooks](sdk/synchronization/connection-hooks.md) -* [Infrastructure](infrastructure.md) - -## Tutorials - -* [Dart atSDK Walkthrough](tutorials/atsdk-tutorial/README.md) - * [Using the atSDK with Dart](tutorials/atsdk-tutorial/using-the-atsdk-with-dart.md) - * [Get sample code](tutorials/atsdk-tutorial/get-sample-code.md) - * [Cutting your Atsign keys](tutorials/atsdk-tutorial/cutting-your-atsigns-keys.md) - * [Put and Get data asynchronously](tutorials/atsdk-tutorial/put-and-get-data-asynchronously.md) - * [Send and Receive data synchronously](tutorials/atsdk-tutorial/send-and-receive-data-synchronously.md) - * [Remote Procedure Calls (RPC)](tutorials/atsdk-tutorial/rpc.md) - * [atTalk - Encrypted chat client](tutorials/atsdk-tutorial/attalk.md) -* [AI Architect Walkthrough](tutorials/ai-architect-walkthrough/README.md) - * [Nodes and Connections](tutorials/ai-architect-walkthrough/nodes-and-connections.md) + +## ATPlatform + +* [atPlatform Overview](atplatform/core/README.md) + * [Frequently Asked Questions](atplatform/core/frequently-asked-questions.md) +* [Atsign](atplatform/atsign.md) +* [atRecord](atplatform/atrecord.md) +* [Infrastructure](atplatform/infrastructure.md) + +## atSDK + +* [atSDK Overview](atsdk/sdk/README.md) + * [Get Started](atsdk/sdk/get-started.md) + * [Authentication](atsdk/sdk/onboarding.md) + * [atKey Reference](atsdk/sdk/atid-reference.md) + * [CRUD Operations](atsdk/sdk/crud-operations.md) + * [Notifications](atsdk/sdk/events.md) + * [Additional Features](atsdk/sdk/synchronization/README.md) + * [Synchronization](atsdk/sdk/synchronization/synchronization.md) + * [Connection Hooks](atsdk/sdk/synchronization/connection-hooks.md) +* [atSDK Walkthroughs](atsdk/atsdk-walkthroughs/README.md) + * [Dart atSDK Walkthrough](atsdk/atsdk-walkthroughs/atsdk-tutorial/README.md) + * [Using the atSDK with Dart](atsdk/atsdk-walkthroughs/atsdk-tutorial/using-the-atsdk-with-dart.md) + * [Get sample code](atsdk/atsdk-walkthroughs/atsdk-tutorial/get-sample-code.md) + * [Cutting your Atsign keys](atsdk/atsdk-walkthroughs/atsdk-tutorial/cutting-your-atsigns-keys.md) + * [Put and Get data asynchronously](atsdk/atsdk-walkthroughs/atsdk-tutorial/put-and-get-data-asynchronously.md) + * [Send and Receive data synchronously](atsdk/atsdk-walkthroughs/atsdk-tutorial/send-and-receive-data-synchronously.md) + * [Remote Procedure Calls (RPC)](atsdk/atsdk-walkthroughs/atsdk-tutorial/rpc.md) + * [atTalk - Encrypted chat client](atsdk/atsdk-walkthroughs/atsdk-tutorial/attalk.md) + +## AI Architect + +* [AI Architect Overview](ai-architect/ai-architect-overview/README.md) + * [Nodes and Connections](ai-architect/ai-architect-overview/nodes-and-connections.md) +* [AI Architect Walkthroughs](ai-architect/ai-architect-walkthroughs/README.md) + * [Getting Started with AI Architect](ai-architect/ai-architect-walkthroughs/getting-started-with-ai-architect.md) + * [How to Think When Creating a Blueprint](ai-architect/ai-architect-walkthroughs/how-to-think-when-creating-a-blueprint.md) +* [Release Notes](ai-architect/release-notes.md) ## Important links diff --git a/docs/ai-architect/ai-architect-overview/README.md b/docs/ai-architect/ai-architect-overview/README.md new file mode 100644 index 0000000..e2a1dbf --- /dev/null +++ b/docs/ai-architect/ai-architect-overview/README.md @@ -0,0 +1,21 @@ +--- +description: An overview of AI Architect +icon: diagram-project +--- + +# AI Architect Overview + +## TL;DR + +AI architect is a visual blueprinting tool for designing secure apps and workflows. It interprets nodes, data flows, and agent relationships, then produces a prompt, which when run through an LLM, generates Dart/Flutter projects, atPlatform boilerplate, namespaces, key conventions, and multi‑agent patterns automatically.\ +\ +The tool enforces best practices from the atPlatform SDKs, including secure data storage, encrypted communication, and backend‑less architecture. Developers can iterate quickly by updating diagrams and regenerating code, ensuring consistency across teams and environments. AI Architect accelerates prototyping, reduces integration errors, and provides a repeatable, standards‑driven workflow for building distributed, privacy‑preserving applications. + + + +{% embed url="https://vimeo.com/1167932458?fe=ci&fl=sv&share=copy" %} + +For a deeper look at how AI Architect interprets your diagrams, see the [Nodes and Connections](nodes-and-connections.md) guide, which explains how components and data flows are defined in the canvas and how they map into the generated LLM prompt. + + + diff --git a/docs/ai-architect/ai-architect-overview/nodes-and-connections.md b/docs/ai-architect/ai-architect-overview/nodes-and-connections.md new file mode 100644 index 0000000..d8cbc3f --- /dev/null +++ b/docs/ai-architect/ai-architect-overview/nodes-and-connections.md @@ -0,0 +1,18 @@ +--- +description: 'Not sure when to use what? Here are a few quick guidelines to help you choose:' +icon: ballot-check +--- + +# Nodes and Connections + +## Node Palette + +These nodes map your workflow visually. Each one represents an actor in your app or agentic system. + +
NodeDescriptionWhen to useExample

:user: Person
People or

stakeholders

You want to model people's actions, permissions, or decision points.A person logging into an admin dashboard, approving a workflow, or sending a secure message.

:head-side-circuit: AI Agent
AI Agent
You want to model automated reasoning, decision-making, or actions performed by an AI system.An AI agent triaging support tickets, summarizing documents, or autonomously executing a multi-step workflow

:diamond: Entity

Businesses, groups of people, etc.

You need access for companies, tenants, departments, identity domains.A healthcare provider, an insurance company, or a tenant account applying its own access rules.

:cube: Thing

Physical or digital objects/devices

You’re modelling hardware, IoT devices, sensors, servers, or edge components.A smart meter sending readings, a kiosk receiving updates, or a server reporting health status.
:gear: Process
Anything that processes, runs, or executes: an app, service, or workflow
You want to show business logic, transformations, or background tasks.A data validation step, a policy enforcement engine, or a message-routing workflow.
:rectangle: API
External systems or platform integrations
You’re integrating with third-party services or exposing functionality programmatically.A payment processor API, mapping service, or internal microservice endpoint.
:plus: Other
Custom node type for anything else
You need to include concepts like storage, policies, models, or abstract systems.A policy store, encryption module, AI model, or logging system.
+ +## Connection Types + +These define how the nodes communicate with each other. + +
ConnectionDescriptionWhen to useExample

Default

Unsure?

Let the LLM decide.

You're unsure which communication pattern fits, or the interaction doesn't clearly map to a specific type.The LLM infers the best pattern based on context and intent

Async Comms

Asynchronous, non-blocking communication where the sender does not wait for a response and the receiver does not need to be online.

Uses Get/Put semantics.
Read more here.

Really handy if you cannot guarantee both the sender/ receiver will be online at the same time.A device uploads data that is processed later, or a message is delivered when the recipient comes online.

Sync Comms

Synchronous communication where the sender waits for an immediate response.

Uses Notification (Read more here) semantics and/or Get/Put (Read more here) semantics.

You need real-time interaction or confirmation.A user request that must return a result immediately, like fetching account details.

Notifications

One-way signals used to alert or inform.

Uses Notification semantics Read more here.


You need to notify without requiring a response.
Push notifications, system alerts, or status updates sent to users or services.

RPC

Structured request/response interactions between systems.
Ideal for complex operations where the other party may not be online at the time of execution (especially useful for policy-driven workflows).

Supported in the SDK semantics.
Read more here.

You want function-like calls across services with clear inputs and outputs.Calling a billing service to calculate charges or a policy engine to validate access.

Data Stream

Ideal for long-running processes (such as LLM generation) where completion time is uncertain and results may need to stream incrementally.

Uses the stream (Read more here) semantics
or notifications (Read more here) semantics.
You’re handling live, ongoing data rather than discrete messagesTelemetry feeds, sensor data, logs, or real-time analytics pipelines.

TCP

Low-level, persistent network connections that enable lower latency communication (e.g., NoPorts SSH, MCP servers).


Uses Noports_Core (Read more here) semantics.

You need a fast end-to-end encrypted TCP connection with raw network speed.A custom protocol, legacy integration, or long-lived secure connection.
diff --git a/docs/ai-architect/ai-architect-walkthroughs/README.md b/docs/ai-architect/ai-architect-walkthroughs/README.md new file mode 100644 index 0000000..5ca3e54 --- /dev/null +++ b/docs/ai-architect/ai-architect-walkthroughs/README.md @@ -0,0 +1,14 @@ +--- +description: >- + Choose a walkthrough to learn how to design, structure, and generate LLM‑ready + prompts using AI Architect. +icon: readme +--- + +# AI Architect Walkthroughs + + + + + +
Cover image
Getting Started with AI Architect
Secure Messaging App

A quick walkthrough showing how to open the tool, load a sample blueprint, generate a prompt, and use it to build your first app end‑to‑end.
Untitled (3).pnggetting-started-with-ai-architect.md
How to Think When Creating a Blueprint
Grocery List App

A focused guide that starts with a sample blueprint and expands it, detailing you how to map your own blueprint so the LLM builds the app you intend.
Untitled (2).pnghow-to-think-when-creating-a-blueprint.md
diff --git a/docs/tutorials/ai-architect-walkthrough/README.md b/docs/ai-architect/ai-architect-walkthroughs/getting-started-with-ai-architect.md similarity index 64% rename from docs/tutorials/ai-architect-walkthrough/README.md rename to docs/ai-architect/ai-architect-walkthroughs/getting-started-with-ai-architect.md index 2468ba4..93b6551 100644 --- a/docs/tutorials/ai-architect-walkthrough/README.md +++ b/docs/ai-architect/ai-architect-walkthroughs/getting-started-with-ai-architect.md @@ -6,50 +6,41 @@ description: >- icon: arrow-progress --- -# AI Architect Walkthrough - -{% embed url="https://vimeo.com/1167932458" %} - -### Pre-requisite - Get Your Starter Pack Atsigns - -Before building or testing any atPlatform app, you need two Atsigns. These act as the identities your app will use during testing and development. - -1. Visit [**my.atsign.com/starterpack**](https://my.atsign.com/starterpack)**.** -2. Verify your email and claim your two free starter-pack Atsigns. - -If you already have Atsigns, you can log into [**my.atsign.com/login**](https://my.atsign.com/login) to access them. - -{% hint style="info" %} -These Atsigns will be used later when you run your generated app to test authentication and secure communication. -{% endhint %} +# Getting Started with AI Architect {% stepper %} {% step %} -### [Open AI Architect and Load the Example Blueprint](./#open-ai-architect) +### [Open AI Architect and Load the Example Blueprint](getting-started-with-ai-architect.md#open-ai-architect) Load the example so you can see how a Blueprint is structured. {% endstep %} {% step %} -### [Export the Prompt](./#id-2.-export-the-prompt) +### [Export the Prompt](getting-started-with-ai-architect.md#id-2.-export-the-prompt) Export the prompt that will be used to tell you LLM exactly what to build. {% endstep %} {% step %} -### [Open Your IDE, Plan and Code your App](./#id-3.-open-your-ide-plan-and-code-your-app) +### [Open Your IDE, Plan and Code your App](getting-started-with-ai-architect.md#id-3.-open-your-ide-plan-and-code-your-app) Open your IDE, set your LLM to plan, and once happy, let it generate the code. {% endstep %} {% step %} -### [Build and Run the App](./#id-4.-build-and-run-the-app) +### [Build and Run the App](getting-started-with-ai-architect.md#id-4.-build-and-run-the-app) Run the app to make sure everything works as expected. {% endstep %} {% step %} -### [Create your own Blueprint](./#id-5.-create-your-own-blueprint) +### [Test the App with Your Atsigns](getting-started-with-ai-architect.md#test-the-app-with-your-atsigns) + +Authenticate using your Atsigns and test the functionality +{% endstep %} + +{% step %} +### [Create Your Own Blueprint](getting-started-with-ai-architect.md#id-5.-create-your-own-blueprint) Make a Blueprint for your own idea and repeat the process. {% endstep %} @@ -61,8 +52,8 @@ Make a Blueprint for your own idea and repeat the process. AI Architect is the visual blueprinting tool used to design your app’s structure before generating the LLM prompt. -1. Go to [**aiarchitect.atsign.com**](https://aiarchitect.atsign.com/). This opens the workspace where you create or load a Blueprint. The Blueprint you create here becomes the input for your LLM-powered code generation. -2. Click on **Start with Demo Blueprint** to load our prebuilt example Blueprint. AI Architect will populate the canvas. +1. Go to [**aiarchitect.atsign.com**](https://aiarchitect.atsign.com/) and enter your email to sign in or sign up. You’ll receive a magic link in your inbox. Click it to access the tool. Once you're in, the workspace will open where you can create a new Blueprint or load an existing one. +2. Click on **Start with Example Blueprint** and select the Secure Messaging Blueprint to load our prebuilt example Blueprint. AI Architect will populate the canvas. {% hint style="info" %} A Blueprint is a visual map of your application. Each box represents a node. This could be a person, a process, an AI agent, a service, or any other entity involved in your system. The lines between nodes show how information flows from one part of the system to another. @@ -78,7 +69,7 @@ A clear Blueprint gives the LLM the structure it needs to build your application ### 2. Export the Prompt -Once the blueprint is loaded: +Once the blueprint is ready: 1. Select **Export Prompt.** 2. Copy the generated prompt to your clipboard. @@ -108,7 +99,6 @@ You can use any IDE you like but we recommend [Visual Studio Code](https://code. * Claude Sonnet 4.5+ * Claude Opus 4.5+ -* Gemini 3 {% endhint %} Visual Studio Code gives you the flexibility to work with a variety of LLMs, not just one. Depending on the extensions you install, you can choose from models like OpenAI, Gemini, Claude and others. @@ -117,7 +107,7 @@ To get started, you’ll need to create a new empty folder and set your LLM to * 1. Paste the exported prompt directly into the chat window. It will plan the project and present the plan to you. When you are happy, Proceed with implementation and it will create files, and set up the app. 2. You will be asked to confirm certain actions (file creation, folder setup, dependency installation). -3. The LLM may build the application in stages, allowing you to test each step and provide additional instructions. It will continue refining and completing the app based on your original prompt as you guide it through each iteration. +3. The LLM will build a [**Dart and Flutter app**](https://docs.flutter.dev/learn/pathway/quick-install). It may build the application in stages, allowing you to test each step and provide additional instructions. It will continue refining and completing the app based on your original prompt as you guide it through each iteration. {% hint style="info" %} The LLM will: @@ -136,8 +126,17 @@ Once the code generation is complete: 1. Follow the build instructions created by your LLM. 2. Run the app on two separate devices/simulators/emulators. -3. When prompted, activate or sign into the app using your two starter-pack Atsigns, one for each device. If you need to access them, log into your [**Atsign Dashboard**](https://my.atsign.com/login). -4. Test sending messages between the two Atsigns. + +### 5. Test the App with your Atsigns + +To test your app, you’ll need two atSigns. These serve as the identities your app uses during testing. When prompted in your app, you can claim your free starter pack Atsigns either inside the app or through your browser. + +1. Visit [**my.atsign.com/starterpack**](https://my.atsign.com/starterpack). If you already have a starter pack, you can log into [**my.atsign.com/login**](https://my.atsign.com/login) to access the Atsigns. +2. Verify your email and claim your two free Atsigns. +3. In your app, go to the authentication screen and choose to activate or create a new Atsign. +4. You’ll receive a one‑time password by email to complete activation. +5. After activation, you’ll be asked to save your atKeys (your cryptographic keys). +6. Try the app by sending messgaes from one device to another. {% hint style="info" %} This validates: @@ -147,7 +146,7 @@ This validates: * Encrypted messaging {% endhint %} -### 5. Create your own Blueprint +### 6. Create your own Blueprint Once you’ve explored the example Blueprint, you’re ready to create your own. Start Simple. A Blueprint doesn’t need to be perfect on the first pass. Its purpose is to help you think clearly about how your application works and to get you to working code quickly and securely. @@ -157,8 +156,10 @@ When designing your Blueprint, focus on three core questions: 2. What does each node do? 3. How does information move between them? -These three decisions form the foundation of your application’s architecture and guide the LLM as it builds and refines your app. +These three decisions form the foundation of your application’s architecture and guide the LLM as it builds and refines your app. + +For help with this follow our walkthrough on [**How to Think When Creating a Blueprint**](how-to-think-when-creating-a-blueprint.md)**.** ### Support and Further Help -_If you run into issues, have questions about any step, or want to go deeper into building with the atPlatform, the Atsign team can help. Contact support@atsign.com._ +_If you run into issues, have questions about any step, or want to go deeper into building with the atPlatform, the Atsign team can help. Contact support.team@atsign.com._ diff --git a/docs/ai-architect/ai-architect-walkthroughs/how-to-think-when-creating-a-blueprint.md b/docs/ai-architect/ai-architect-walkthroughs/how-to-think-when-creating-a-blueprint.md new file mode 100644 index 0000000..8d26763 --- /dev/null +++ b/docs/ai-architect/ai-architect-walkthroughs/how-to-think-when-creating-a-blueprint.md @@ -0,0 +1,368 @@ +--- +description: >- + This tutorial walks you through growing a simple grocery list app into + something useful with AI Architect. +icon: clipboard-list-check +--- + +# How to Think When Creating a Blueprint + +### Introduction + +When you open this starter blueprint in AI Architect, you’re looking at something intentionally simple: Two people share a grocery list. One adds items, and the other sees them. + +While this works as a basic concept, a blueprint needs more depth to generate high-quality functional code. This tutorial teaches you how to look at a simple blueprint and extend it in a way that improves the **data flows**, **actor responsibilities**, and **system behaviors**. These are the three things AI Architect relies on most when generating applications. + +#### Perspective shift + +Before you begin, it is helpful to shift your focus from adding _features_ to identifying the **behaviors** required by your app's data flows. + +### What you’ll learn + +* What to consider when thinking about actors, data, and flows +* How to extend a blueprint in a way that AI Architect can make use of +* How to identify missing behaviors, not just missing features + +### Starter blueprint + +To get started, go to [**aiarchitect.atsign.com**](https://www.aiarchitect.atsign.com/). From the home screen, select **Start with an Example Blueprint**, then choose the **Grocery List App** blueprint to load the example. + +Page 1, is the starting point. Before you change anything, let's take a moment to understand the actors, data, and flows. + +{% tabs %} +{% tab title="Starter Blueprint" %} +
+{% endtab %} +{% endtabs %} + +### 1. Start with the people (actors) + +At the core of this app are two actors: the **creator** (who adds items) and the **viewer** (who sees them). + +{% hint style="success" %} +**Goal**\ +\ +Understand the roles before adding complexity. +{% endhint %} + +{% hint style="info" %} +**Consider** + +* Who creates data? +* Who consumes it? +* Does each actor have a clear purpose? +{% endhint %} + +{% hint style="warning" icon="comments-question-check" %} +**Why it matters**\ +\ +AI Architect is actor-driven. If an actor doesn’t meaningfully create, transform, or act on data, the generated application will feel passive or incomplete. +{% endhint %} + +### 2. Understand the data + +The core data objects are the **grocery list** and the **list item**. These are the “source of truth” for the entire app. + +{% hint style="success" %} +**Goal**\ +\ +Map the data that exists independently of the UI. +{% endhint %} + +{% hint style="info" %} +**Consider** + +* What data would exist even without a screen? +* What data connects actors to each other? +{% endhint %} + +{% hint style="warning" icon="comments-question-check" %} +**Why it matters**\ +\ +AI Architect depends on clear, well‑defined data objects. If the core data objects aren’t clearly defined, the generated application may not behave the way you expect. +{% endhint %} + +### 3. Follow the flow + +Right now the flow is linear: + +Creator → List item → Grocery list → Viewer + +{% hint style="success" %} +**Goal**\ +\ +Establish your baseline. +{% endhint %} + +{% hint style="info" %} +**Consider** + +* What happens first, next, and last? +* Where does the app stop being helpful to the actors? +{% endhint %} + +{% hint style="warning" icon="comments-question-check" %} +**Why it matters**\ +\ +Seeing the sequence helps you spot where the chain of communication breaks. When you understand how information moves, it's easier to identify missing behaviors and data flows. +{% endhint %} + +### 4. Make the app more responsive + +At this stage, the viewer has to check the app manually to see updates. That’s friction we want to remove. + +{% hint style="success" %} +**Goal** + +* Turn a static display into a proactive system. +{% endhint %} + +{% hint style="danger" icon="message-check" %} +**Action** + +* Add a **notification node** +* Create a flow: Grocery List → Notification → Viewer +{% endhint %} + +{% hint style="info" %} +**Consider** + +* Where is the person doing unnecessary work? +* What should the app proactively communicate? +{% endhint %} + +{% hint style="warning" icon="comments-question-check" %} +**Why it matters**\ +\ +AI Architect needs to know when the app should act on its own. Specifying that certain changes should trigger actions allows you to generate a responsive app instead of something static. +{% endhint %} + +### 5. Turn observers into participants + +The viewer can see the list but can’t interact with it. Let's give them a more active role. + +{% hint style="success" %} +**Goal** + +* Enable interaction for every actor on the canvas. +{% endhint %} + +{% hint style="danger" icon="message-check" %} +**Action** + +* Add **item status** to the notes section of the **list item** node. +* Update the viewer and creator notes to include the ability to update the status of an item in the list or mark it as completed. +{% endhint %} + +{% hint style="info" %} +**Consider** + +* What data should this actor be allowed to update? +* Who, if anyone, should grant them permission to update data? +{% endhint %} + +{% hint style="warning" icon="comments-question-check" %} +**Why it matters**\ +\ +AI Architect needs to know how each actor meaningfully interacts with the data. When someone only observes information, the app has no behavior to generate around them. Turning an observer into a participant, like letting the Viewer update item status, is a concrete example of using the existing data to extend functionality. By giving the actor a real action on the data, you unlock new flows, richer behavior, and a more complete application. +{% endhint %} + +### 6. Introduce intelligence + +Once the core flows are solid, you can add intelligence to transform data into something more useful. + +{% hint style="success" %} +**Goal** + +* Provide a structured home for AI logic. +{% endhint %} + +{% hint style="danger" icon="message-check" %} +**Action** + +* Add a **suggestion agent** and **suggested items** + * Flow: Grocery List App → Suggested items → Suggestion Agent + * You can also add Suggested Items → Notification for reminders and alerts if you'd like +{% endhint %} + +{% hint style="info" %} +**Consider** + +* Is there a pattern in the data? +* Would a human naturally make suggestions here? +* What other parts of the app need to feed into this data flow for it to be complete? +{% endhint %} + +{% hint style="warning" icon="comments-question-check" %} +**Why it matters**\ +\ +Adding an agent isn’t just about making the app “smarter"; it’s about giving the system a clear place to transform data into something more useful. When you introduce intelligence, like a Personal AI agent and suggested items, you’re showing how the app can use existing data to extend functionality in a purposeful, predictable way. Without this structure, the LLM has nothing reliable to build intelligent behavior around. +{% endhint %} + +### 7. Add descriptions + +Think of the description section as the node's job description. This is the most critical step for code generation. + +{% hint style="success" %} +**Goal** + +Provide the manual for the LLM to follow. +{% endhint %} + +{% hint style="danger" icon="message-check" %} +**Action** + +For each node: + +* Write its purpose, what data it can access, and how it interacts with other nodes + * Use natural language or bullet points, as if you were explaining to a developer exactly what you expect this node to do. +{% endhint %} + +{% hint style="info" %} +**Consider** + +* What data does this node own? +* Who can read or write it? +* What else is it used for in the app? +{% endhint %} + +{% hint style="warning" icon="comments-question-check" %} +**Why it matters**\ +\ +AI Architect depends heavily on the description. Descriptions tell us what the node knows, what data it owns, and how it behaves. Without clear descriptions, the blueprint may look complete, but the generated app won’t know what to do. This can lead to missing logic or incorrect flows. Adding descriptions is how you turn a diagram into a blueprint that an LLM can actually build from. +{% endhint %} + +### 8. Define connection types + +Now, define how the nodes interact to complete the loop. + +{% hint style="success" %} +**Goal** + +Tell the system the speed and method of communication. To learn more about the various connection types, see the [Nodes & Connections](../ai-architect-overview/nodes-and-connections.md) page. +{% endhint %} + +{% hint style="danger" icon="message-check" %} +**Action** + +Connect each of the nodes so that data can flow through the system in a complete loop. Every component should participate in the app’s behavior, and no node should be left without at least one incoming or outgoing connection. + +\ +Add/Modify the following connections as: + +* Grocery List App > Notification (Notifications) +* Notification > Viewer (Notifications) +* Notification > Creator (Notifications) +* Notification > Suggestion Agent (Notifications) +{% endhint %} + +{% hint style="info" %} +**Consider**\ +\ +Is this interaction immediate, background, or interruptive? If you are unsure, you can set it to **data stream**. +{% endhint %} + +{% hint style="warning" icon="comments-question-check" %} +**Why it matters**\ +\ +AI Architect relies on connection types to understand _how_ data should move through the system. These labels tell the platform whether something happens immediately, in the background, or as a notification. If you’re unsure which one to choose, it’s completely fine to use the **default** connection type. The default connection type simply says, “this data may update over time,” and lets the LLM decide how to handle it, which is a safe, flexible choice. You can refine the connection later, but starting with a default connection ensures the system behaves reliably even when the exact timing isn’t clear yet. +{% endhint %} + +### Final Blueprint + +That's it! The completed blueprint should represent a full loop of interaction where every component participates in the app's behavior. If you go to page 2 of the Grocery List App blueprint, you will see the final blueprint. + +{% tabs %} +{% tab title="Final Blueprint" %} +
+{% endtab %} + +{% tab title="Starter Blueprint" %} +
+{% endtab %} +{% endtabs %} + +### App Prototype + +Now that your blueprint is complete, you’re ready to generate your app prototype using an LLM. To do that, follow the instructions on the [Getting Started with AI Architect](https://docs.atsign.com/tutorials/ai-architect-walkthrough#id-2.-export-the-prompt) page, starting from **Step 2**. + +{% tabs %} +{% tab title="App Screenshots" %} + ![](../../.gitbook/assets/Untitled.png) +{% endtab %} +{% endtabs %} + +### Common Mistakes + +
+ +Adding actors who don’t actually do anything + +If an actor has no meaningful actions on the data, the system becomes passive and AI Architect has nothing to generate around them. + +
+ +
+ +Skipping the data layer + +People jump straight to features or agents without defining the core data objects. Without clear data, the entire blueprint becomes unstable. + +
+ +
+ +Treating all data as one blob + +Not separating structures, like a Grocery List vs. List Item, leads to vague flows and confusing behavior. + +
+ +
+ +Ignoring the flow of information + +If you don’t map out who sends what to whom, the system feels unpredictable. AI Architect needs explicit flows to generate correct behavior. + +
+ +
+ +Forgetting to make the system responsive + +If nothing triggers actions, notifications, updates, or background work, the app may feel static and unhelpful and these will have to be added in later. + +
+ +
+ +Leaving observers as observers + +When someone only views data, the system stays limited. In some instances this is okay but using the data to extend functionality (like letting the Viewer update item status) unlocks richer behavior + +
+ +
+ +Writing vague or empty notes + +Nodes without notes force AI Architect to guess. Notes define purpose, ownership, and behavior. + +
+ +
+ +Not labeling connection types + +If you don’t specify sync, async, or notification, the system can’t generate the right timing or behavior. (And yes, if you’re unsure, defaulting to a data stream is perfectly fine.) + +
+ +
+ +Over‑engineering the blueprint + +Too many nodes, too many agents, too many flows. Complexity without purpose makes the system harder to understand and harder for AI Architect to generate. + +
+ diff --git a/docs/ai-architect/release-notes.md b/docs/ai-architect/release-notes.md new file mode 100644 index 0000000..485d132 --- /dev/null +++ b/docs/ai-architect/release-notes.md @@ -0,0 +1,59 @@ +--- +description: >- + This page summarizes the latest features and bug fixes to help you understand + what has changed in each release. +icon: clipboard-list-check +--- + +# Release Notes + +*** + +{% updates format="full" %} +{% update date="2026-05-06" tags="2.0.1" %} +## More ways to build, less friction + +v2.0.0 + +**New nodes, smarter flows** + +* Introducing the **AI Agent node**, giving you more flexibility to design intelligent workflows +* Let the LLM take the lead with **default connections**, so you can focus on mapping your blueprint instead of configuring every step + +**Account Experience** + +* Added a **magic link flow** for a seamless account access +* New **sign‑up and sign‑in flow**, added as the first step toward a more secure, personalized experience +* Subscribe to email updates under **Account Details** to stay up to date with the latest improvements + +**Get Started Quicker** + +* Reduced early friction by allowing you to sign up and receive your test Atsigns to the end of the flow, only once your app is built. + +{% hint style="info" icon="lightbulb" %} +_New example blueprint!_ + +Jump into the [**Grocery List blueprint**](ai-architect-walkthroughs/how-to-think-when-creating-a-blueprint.md) to quickly see how to structure and connect your ideas. +{% endhint %} +{% endupdate %} + +{% update date="2026-04-06" tags="1.0.12" %} +## More room to build + +v1.1.3 + +**More canvas, less menu** + +* The side navigation now collapses to make the canvas center stage +* You can also hide the mini-map to maximize your workspace + +**Just connect, change later** + +* Connectors now default to **data stream** out of the box +* You can update the connector type at any time after the initial connection + +{% hint style="info" icon="lightbulb" %} +_Not sure what a button does? Hover over it for a hint._ +{% endhint %} +{% endupdate %} +{% endupdates %} diff --git a/docs/learn/core/atrecord.md b/docs/atplatform/atrecord.md similarity index 98% rename from docs/learn/core/atrecord.md rename to docs/atplatform/atrecord.md index b80018c..4251d12 100644 --- a/docs/learn/core/atrecord.md +++ b/docs/atplatform/atrecord.md @@ -57,7 +57,7 @@ The owner (i.e. creator's) Atsign for that particular atRecord. The shared by At i.e entity must follow the notation: `.` 5. Cached atKeys should have a different owner than the current Atsign 6. Visibility scope and owner cannot be the same for a shared atKey -7. Reserved atKeys cannot be [modified](../sdk/crud-operations.md) or [notified](../sdk/events.md) +7. Reserved atKeys cannot be [modified](../atsdk/sdk/crud-operations.md) or [notified](../atsdk/sdk/events.md) 8. For newly created atKeys, the owner must match the current Atsign diff --git a/docs/learn/core/atsign.md b/docs/atplatform/atsign.md similarity index 100% rename from docs/learn/core/atsign.md rename to docs/atplatform/atsign.md diff --git a/docs/learn/core/README.md b/docs/atplatform/core/README.md similarity index 89% rename from docs/learn/core/README.md rename to docs/atplatform/core/README.md index f4b7980..26db786 100644 --- a/docs/learn/core/README.md +++ b/docs/atplatform/core/README.md @@ -3,7 +3,7 @@ description: An overview of Atsign's core pillars of technology icon: layer-group --- -# atPlatform +# atPlatform Overview ## TL;DR @@ -17,11 +17,11 @@ The atPlatform can be used to send data synchronously or asynchronously, and can Relationships -Every **atServer** is associated with _one_ **atSign**, and each atServer stores _many_ **atRecords.** +Every **atServer** is associated with _one_ **Atsign**, and each atServer stores _many_ **atRecords.** -When provided an **atSign**, the **atDirectory** returns a _DNS address_ and _port number_ for its **atServer.** +When provided an **Atsign**, the **atDirectory** returns a _DNS address_ and _port number_ for its **atServer.** -The **atProtocol** is the _application layer protocol_ used to communicate with an **atServer.** +The **atPlatform Protocol** is the _application layer protocol_ used to communicate with an **atServer.** @@ -39,8 +39,8 @@ Unless explicitly made public, atServers only store encrypted data and do not ha * Cryptographic authentication of client devices. * Cryptographic authentication of other atServers. -* Persistence of encrypted data on behalf of the controlling atSign. -* Caching of data shared by others with the controlling atSign. +* Persistence of encrypted data on behalf of the controlling Atsign. +* Caching of data shared by others with the controlling Atsign. * Notification of data change events to clients (edge devices) and other atServers to facilitate delivery of information shared with them. * Synchronization of data with multiple clients (edge devices). * TLS wire encryption from clients to atServers using SSL certificates. diff --git a/docs/atplatform/core/frequently-asked-questions.md b/docs/atplatform/core/frequently-asked-questions.md new file mode 100644 index 0000000..2e05472 --- /dev/null +++ b/docs/atplatform/core/frequently-asked-questions.md @@ -0,0 +1,249 @@ +--- +icon: question +--- + +# Frequently Asked Questions + +## Frequently Asked Questions + +This page answers common questions about the AtPlatform: how Atsigns, AtServers, and the AtDirectory work together to provide end-to-end encrypted, identity-first communication. + +### Atsign + +#### What is an Atsign? + +An Atsign (e.g. `@alice`) is a resolvable address, similar in concept to an email address. Anyone or anything can have an Atsign — people, organizations, AI agents, and devices (IoT sensors, gateways, routers, etc.). + +#### What is an Atsign used for? + +An Atsign is used to securely exchange information with other Atsigns without risk of surveillance, impersonation, or data theft. The exchange can be a pure data exchange, or it can trigger an action on the receiving system. + +#### What characters can be used to form an Atsign? + +Atsigns can be made of any combination of UTF-7 characters up to 55 characters in length, provided they are not already registered. This provides a name space of roughly 10^224 Atsigns. Some combinations may be unavailable or restricted (e.g. trademarked names, already registered Atsigns). + +### AtServers + +#### What is an AtServer? + +An AtServer is a private datastore for encrypted data owned by a single Atsign, and a rendezvous point for information exchange. It is responsible for delivering encrypted information to other AtServers, where the recipient can then retrieve it. **An AtServer only stores encrypted information and never has access to the cryptographic keys.** + +#### What functions does an AtServer perform? + +An AtServer provides: + +* Cryptographic authentication of client devices +* Cryptographic authentication of other AtServers +* Persistence of encrypted data on behalf of the controlling Atsign +* Caching of data shared by others with the controlling Atsign +* Notification of data change events to clients and other AtServers +* Monitoring of notifications from other AtServers +* Synchronization of data across multiple clients (edge devices) +* TLS wire encryption from clients to AtServers +* Mutually authenticated TLS 1.2/1.3 wire encryption between AtServers + +#### What does an AtServer consist of? + +An AtServer is a small dockerized service that can be deployed almost anywhere. It requires persistent storage and publicly addressable network connectivity. Each Atsign gets its own isolated AtServer instance. + +This distributed, single-tenant architecture means there is no centralized service mixing data from many Atsigns together — unlike traditional multi-tenant web services that present an attractive target for hackers. + +#### Where are AtServers hosted? + +There are two options: + +* **Atsign-hosted AtServers** — Run by Atsign in the cloud with automated deployment and maintenance. Atsign cannot see private data because it is encrypted with keys Atsign never has access to. +* **Self-hosted AtServers** — Run by the Atsign owner on platforms ranging from a Raspberry Pi to GCP, AWS, or on-premises infrastructure. + +#### How does authentication work with an AtServer? + +The very first authentication uses a shared secret (a "cram key") (CRAM stands for Challenge Response Authentication Mechanism). After that, an RSA-2048 or ECC key pair is generated and used for all subsequent authentication via PKAM (Public Key Authentication Mechanism). + +To create additional keys that grant access to the same AtServer with namespace restrictions, you can use APKAM (Application Public Key Authentication Mechanism). APKAM allows individual applications to authenticate with their own keypair, scoped to only the namespaces they need. + +#### How do AtServers protect the data they hold? + +Each AtServer holds data for a single owner, which limits the appeal of an attack. If an attacker did gain access to an AtServer's datastore, all private data is encrypted with cryptographic keys that the AtServer does not hold. It is therefore _provably true_ that the data cannot be decrypted from the AtServer alone — unlike systems that rely on policy and procedure to safeguard centralized data. + +#### What is the size of an AtServer? How much can it store? + +An AtServer can store as much data as its underlying storage system allows. For Atsign-hosted AtServers, the default configuration allocates 50MB of memory to the docker container, which is sufficient for most Atsigns representing people or things. Busier Atsigns (e.g. for companies) can be allocated more CPU and RAM. Contact us at support@atsign.com + +### AtDirectory + +#### What does "resolvable address" mean for an Atsign? + +For an Atsign to communicate with another, it needs to locate the AtServer that handles its traffic. This lookup is done through the AtDirectory service (`root.atsign.org`), which returns the DNS address and port number of the AtServer for any Atsign it has a record for. The AtDirectory contains no information about the owner of the Atsign. + +### Edge Devices + +#### What is an edge device and what is edge-to-edge encryption? + +An edge device is any device located at the edge of a network that produces or consumes data — smartphones, personal computers, servers, IoT devices, gateways, etc. + +Edge-to-edge encryption is an extension of end-to-end encryption: data is encrypted at all times during transmission and is only decrypted on edge devices. Atsigns store their cryptographic keys exclusively on the edge device. The AtDirectory is never used to route personal data — it is only used for DNS lookups. AtServers transmit, receive, and store encrypted data without any access to the keys needed to decrypt it. Only data that has been intentionally made public is stored in the clear. + +#### How does the AtPlatform eliminate network attack surfaces from devices? + +All connections from an AtPlatform-enabled device are _outbound_ to its AtServer. Inbound communications must be encrypted and sent to the device's AtServer; the device picks them up the next time it connects (or immediately, if already connected). + +This means edge devices have no need for open listening ports, no need for a known IP address, and no need for direct network reachability. The result: no network attack surface. + +#### Does the AtPlatform require static IPs? + +No. Because all connections are outbound from the edge device to its AtServer, device IP addresses can change freely. AtServers themselves do have static DNS addresses. + +#### How are devices addressable when no ports are open? + +The AtPlatform provides bidirectional communication originating outbound from the device. The device is reachable as long as it has internet access — no port forwarding required, even behind firewalls or NAT. + +To send a message to a device, you send it to that device's AtServer. The AtServer authenticates you as a permitted sender and notifies the device. If the device is connected, it receives the message immediately; if not, it receives it as soon as it next connects. + +#### Does the AtPlatform require passwords? + +No. Authentication is mutual, cryptographic, and does not depend on shared secrets like passwords between endpoints. This eliminates the entire class of credential-compromise attacks against centralized credential stores. + +#### What is the latency? + +In a typical case where `@atsign_1` sends an end-to-end-encrypted message to `@atsign_2`, once the socket connections are established, end-to-end latency excluding speed-of-light is typically between 4 and 15 milliseconds — including encryption, decryption, and the AtServer's store-and-forward work. + +#### What hardware and operating systems are supported? + +**Processors** + +* x64 +* ARM (ARMv7, ARMv8, M1/M2 Apple Silicon) +* RISC-V (Beta) +* Older or more exotic CPUs are supported via the C atSDK + +**Operating Systems** + +* Linux +* macOS +* Windows +* iOS +* Android + +**Other** + +* Microcontrollers via the C atSDK + +#### Will this work on very low-power hardware? + +Yes, provided there is a microcontroller with enough RAM to handle crypto operations. Extensive testing has been done on Raspberry Pi Pico (192kB RAM) and various ESP32-based platforms. 128kB MCUs are likely workable; below that, an additional processor is generally needed. + +### Encryption + +#### Why does the AtPlatform use encryption? + +To make it _provably true_ that data is accessible only to the intended parties. Two properties make this work: + +1. Asymmetric cryptographic keys are generated and kept on the edge device where the data is created. +2. Symmetric encryption keys used to share data are themselves encrypted with those asymmetric keys, then exchanged via the atProtocol. + +This means only the creator and the intended recipient ever have the keys to decrypt the data. No infrastructure operator — including Atsign — can access private data. + +#### What encryption algorithms are used? + +The AtPlatform uses both symmetric and asymmetric encryption. Currently: + +* **Symmetric**: AES-256 (used to encrypt the actual data, including data streams) +* **Asymmetric**: RSA-2048 and ECC (used for authentication, data signing, and exchanging symmetric keys) + +The protocol is designed to be extensible, so additional algorithms (e.g. post-quantum) can be added as needed. + +#### How is data transmitted between two Atsigns? + +Suppose Alice (`@alice`) wants to share data with Bob (`@bob`): + +1. Alice's device generates a new AES key and encrypts the data with it. +2. Alice's device stores the encrypted data on her AtServer. +3. Alice's device encrypts the AES key using Bob's RSA public key, and stores that encrypted key on her AtServer too. +4. Alice's AtServer notifies Bob's AtServer that data is available. +5. Bob's device retrieves the encrypted AES key, decrypts it with his RSA private key, then uses the AES key to decrypt the data. + +#### What types of cryptographic keys does the AtPlatform manage? + +**Authentication** + +* `pkamPublicKey` / `pkamPrivateKey` (asymmetric) — public key held on the AtServer, private key held only on the edge. The technology supports holding the private key in a secure element and delegating sign/encrypt/decrypt operations to it. + +**Asymmetric encryption** + +* `encryptionPublicKey` / `encryptionPrivateKey` — public key held on the AtServer. When one Atsign needs to share a symmetric key with another, it retrieves the recipient's encryption public key, encrypts the symmetric key with it, and sends it. This keypair is also used for data signing and signature verification. + +**Symmetric encryption** + +* Symmetric keys are used to encrypt the actual data being exchanged. They are securely exchanged using the asymmetric encryption keypairs above. +* Atsigns also generate symmetric keys to encrypt data they want to store privately for themselves. + +#### How are these keys protected? + +Asymmetric keypairs are generated on the edge device, and private keys never leave it. There is no centralized key management. Ideally, keys are generated and held in a secure enclave (TPM, SIM, etc.), with private keys isolated from other forms of access. + +#### What happens if I lose my keys? + +Atsign cannot retrieve lost keys — they were generated on your device and Atsign never had access to them. However, you still own your Atsign and can reset it by contacting `support@atsign.com`. You can then generate a new keyset and continue using the same Atsign. + +#### How are stolen or compromised devices handled? + +There are several options depending on the use case: + +1. The Atsign can be reset on the `my.atsign.com` portal, invalidating any compromised keys. +2. Keys can be cut in hardware (SIM or TPM) so the private key is never exposed directly. +3. Keys can be exported and imported across devices. (This is being phased out in favor of a model where each Atsign supports multiple keys across multiple devices, with a master key that can revoke access for any individual device — protected by a second factor such as biometrics.) + +#### Are there any other security features? + +In addition to end-to-end encryption of private data, TLS validates the authenticity of AtServers and encrypts wire traffic between clients and their AtServer. Communication between AtServers is mutually authenticated and TLS-encrypted. + +### Data Model + +#### What is the data exchange and persistence model? + +The atProtocol's default persistence model is a simple key-value store. Record IDs have a syntactical structure that is also used in the protocol exchanges between clients and AtServers. + +The record ID structure is: + +``` +[cached:]:.@ +``` + +Record IDs are always stored in lowercase. + +**Visibility scope** — defines who can see and access the data: + +* **Public** (e.g. `public:location.some_app@alice`) — available to anyone, surfaces in unauthenticated AtServer scans, and is not encrypted. +* **Private** (e.g. `@bob:phone.some_app@alice`) — shared privately with a specific Atsign. Only shows up in scans for the owner and recipient after authentication, and can only be decrypted by the owner and recipient. + +**Entity ID and namespace** (e.g. `@bob:work.email.an_app@alice`): + +* Entity IDs can be any alphanumeric string. Because record IDs are stored in lowercase, snake\_case is recommended (`home_phone_number`, not `homePhoneNumber`). +* The namespace (`an_app` above) controls which applications can read, write, and synchronize a given record. + +**Owner Atsign** — indicates which Atsign created the record. + +**Cached prefix** (e.g. `cached:@bob:phone.buzz@alice`) — indicates the record was created by another Atsign, encrypted and shared with you, with metadata permitting it to be cached on your datastore. This enables offline support and improves performance. + +#### Can I share different subsets of a device's data with different parties? + +Yes. You can configure a device so that different datasets are sent to different recipients, each uniquely encrypted for the intended recipient. + +### Integration + +#### Can I integrate the AtPlatform with existing cloud and IoT platforms? + +Yes. The AtPlatform is powered by the open atProtocol and provides SDKs for integration with most stacks. There are open-source libraries, widgets, and connectors available on [Atsign's GitHub organization](https://github.com/atsign-foundation). The default cloud is GCP, but the platform is compatible with any cloud or on-premises infrastructure. + +#### How do I assign an Atsign to a device? + +There are several options: + +* Assigned manually via a physical connection or OTA update. +* Pre-assigned by the manufacturer of the device or SIM. + +For IoT devices, a best practice is to define separate Atsigns for administration and data ownership. This separation makes it easy to keep device administration distinct from data ownership and privacy. + +#### Can I change the Atsign on a device? + +It depends. If the Atsign is embedded in an eSIM/iSIM, it generally cannot be changed. Otherwise it is possible — but in practice, it is more common to change the _designated owner_ of a device (e.g. when the device is sold) rather than the Atsign itself. diff --git a/docs/infrastructure.md b/docs/atplatform/infrastructure.md similarity index 85% rename from docs/infrastructure.md rename to docs/atplatform/infrastructure.md index 596bbd9..d04ae0c 100644 --- a/docs/infrastructure.md +++ b/docs/atplatform/infrastructure.md @@ -17,7 +17,7 @@ UpTimeRobot Reports Atsign runs the Internet atDirectory, which has to be resilient and dependable. To provide that level of service, we use Google's Cloud Platform, Kubernetes, containers, and a distributed in-memory database. -
Architecture Diagram of the atDirectory infrastructure

Highly available design

+
Architecture Diagram of the atDirectory infrastructure

Highly available design

The atDirectory runs in a GCP Virtual Private Cloud. This VPC also houses an auto-scaling Kubernetes cluster which is spread across multiple datacenters and availability zones. @@ -33,7 +33,7 @@ Each Atsign has its own dedicated personal data store, called an "atServer," run Why Docker Swarm and not Kubernetes? Kubernetes is an excellent choice for groups of containers that provide a service like the atDirectory or websites. But, Kubernetes does not scale down well for thousands or millions of tiny independent containers like atServers. Docker Swarm also provides highly resilient networking and is very lightweight. -

resilient atServer Cluster

+

resilient atServer Cluster

The FQDN and port number for a given Atsign from the atDirectory is connected to the Docker Swarm. Each Docker Swarm node will route the port number to the right container on the swarm via its internal VXLAN. The Manager Nodes are responsible for ensuring each container is running and available across the whole swarm. diff --git a/docs/atsdk/atsdk-walkthroughs/README.md b/docs/atsdk/atsdk-walkthroughs/README.md new file mode 100644 index 0000000..5135094 --- /dev/null +++ b/docs/atsdk/atsdk-walkthroughs/README.md @@ -0,0 +1,10 @@ +--- +icon: readme +--- + +# atSDK Walkthroughs + +Explore walkthroughs for building on the atPlatform across multiple languages. Start with the guide available today, and check back as we expand support for additional languages. + +
Cover imageCover image (dark)Cover image (dark)
Dart atSDK WalkthroughDart_logo.pngatsdk-tutorial
C atSDK Walkthrough
Coming Soon
C coming soon (1).pngC coming soon dark.pngC coming soon dark.png
Java atSDK Walkthrough
Coming Soon
Java coming soon.pngJava coming soon dark.png
+ diff --git a/docs/tutorials/atsdk-tutorial/README.md b/docs/atsdk/atsdk-walkthroughs/atsdk-tutorial/README.md similarity index 100% rename from docs/tutorials/atsdk-tutorial/README.md rename to docs/atsdk/atsdk-walkthroughs/atsdk-tutorial/README.md diff --git a/docs/tutorials/atsdk-tutorial/attalk.md b/docs/atsdk/atsdk-walkthroughs/atsdk-tutorial/attalk.md similarity index 93% rename from docs/tutorials/atsdk-tutorial/attalk.md rename to docs/atsdk/atsdk-walkthroughs/atsdk-tutorial/attalk.md index 1f58196..1bbd049 100644 --- a/docs/tutorials/atsdk-tutorial/attalk.md +++ b/docs/atsdk/atsdk-walkthroughs/atsdk-tutorial/attalk.md @@ -14,7 +14,7 @@ This code is in a separate repo, so, once again, in VS Code click the "Clone Git https://github.com/atsign-foundation/at_talk.git ``` -
+
Like before, you will get asked if you want to run `pub get` and should say yes, or, if you prefer, you can open a terminal window and type: @@ -54,7 +54,7 @@ In the right window, the same, but in reverse. In this session, you can see the typed messages in white and the received messages in green with the prompts in red. -

talking atSigns

+

talking atSigns

Unlike Linux talk, however, these two Atsigns can be anywhere on the Internet and communicating with Privacy. Get a friend to run through the demo and use at\_talk ! diff --git a/docs/tutorials/atsdk-tutorial/cutting-your-atsigns-keys.md b/docs/atsdk/atsdk-walkthroughs/atsdk-tutorial/cutting-your-atsigns-keys.md similarity index 92% rename from docs/tutorials/atsdk-tutorial/cutting-your-atsigns-keys.md rename to docs/atsdk/atsdk-walkthroughs/atsdk-tutorial/cutting-your-atsigns-keys.md index c76296d..f7139ce 100644 --- a/docs/tutorials/atsdk-tutorial/cutting-your-atsigns-keys.md +++ b/docs/atsdk/atsdk-walkthroughs/atsdk-tutorial/cutting-your-atsigns-keys.md @@ -22,4 +22,4 @@ dart run .\bin\at_activate.dart -a "@crunchyfrog" These keys are important to be kept safe, as they are the only keys to your Atsign and your data. Speaking of data, let's send some between the two Atsigns next. -
+
diff --git a/docs/tutorials/atsdk-tutorial/get-sample-code.md b/docs/atsdk/atsdk-walkthroughs/atsdk-tutorial/get-sample-code.md similarity index 82% rename from docs/tutorials/atsdk-tutorial/get-sample-code.md rename to docs/atsdk/atsdk-walkthroughs/atsdk-tutorial/get-sample-code.md index 5f73940..7f3eb40 100644 --- a/docs/tutorials/atsdk-tutorial/get-sample-code.md +++ b/docs/atsdk/atsdk-walkthroughs/atsdk-tutorial/get-sample-code.md @@ -14,7 +14,7 @@ https://github.com/atsign-foundation/at_demos.git This will copy down all the sample code from GitHub to the directory you select. VS Code will ask you if you want to open the directory you just downloaded and say no. We will pick the one directory we need in the next step. -

Clone code from GitHub

+

Clone code from GitHub

## Open at\_getting\_started @@ -22,7 +22,7 @@ Click the Open Folder selection and go to the directory you selected and then at At this point you will have the demo code in the IDE and probably see a bunch of red files, meaning something is wrong with them. -

dart pub get

+

dart pub get

VS Code if you have the Dart plugin installed will ask if you want to run `pub get` you can safely say yes. @@ -38,4 +38,4 @@ dart pub update Once you have run those commands in the terminal window all the red text will have gone and we are ready to run some code. -

Ready to run.

+

Ready to run.

diff --git a/docs/tutorials/atsdk-tutorial/put-and-get-data-asynchronously.md b/docs/atsdk/atsdk-walkthroughs/atsdk-tutorial/put-and-get-data-asynchronously.md similarity index 96% rename from docs/tutorials/atsdk-tutorial/put-and-get-data-asynchronously.md rename to docs/atsdk/atsdk-walkthroughs/atsdk-tutorial/put-and-get-data-asynchronously.md index 6e509e3..139ad84 100644 --- a/docs/tutorials/atsdk-tutorial/put-and-get-data-asynchronously.md +++ b/docs/atsdk/atsdk-walkthroughs/atsdk-tutorial/put-and-get-data-asynchronously.md @@ -46,7 +46,7 @@ Invalid argument(s): Option other-atsign is mandatory. The `-n`namespace is lefthand side of the atRecord, so in this case the full atRecord would be `@7capricorn:message.atsign@energetic22` and you see this in the results, too. Experiment for yourself! -
+
You may also notice that the first time you fail to get the message. This is because we specified in the metadata that the TTL is 60000 millisecond or 1 minute. Try again as you see in the above image and you should get your message too. diff --git a/docs/tutorials/atsdk-tutorial/rpc.md b/docs/atsdk/atsdk-walkthroughs/atsdk-tutorial/rpc.md similarity index 95% rename from docs/tutorials/atsdk-tutorial/rpc.md rename to docs/atsdk/atsdk-walkthroughs/atsdk-tutorial/rpc.md index b4a53c8..bc94e58 100644 --- a/docs/tutorials/atsdk-tutorial/rpc.md +++ b/docs/atsdk/atsdk-walkthroughs/atsdk-tutorial/rpc.md @@ -33,7 +33,7 @@ You will get a prompt after a second or two and you can put in a math expression See our session in action: -

RPC

+

RPC

Something to notice here is that the RPC server will only respond to RPCs from the designated Atsign with the `--allow-list` argument. diff --git a/docs/tutorials/atsdk-tutorial/send-and-receive-data-synchronously.md b/docs/atsdk/atsdk-walkthroughs/atsdk-tutorial/send-and-receive-data-synchronously.md similarity index 90% rename from docs/tutorials/atsdk-tutorial/send-and-receive-data-synchronously.md rename to docs/atsdk/atsdk-walkthroughs/atsdk-tutorial/send-and-receive-data-synchronously.md index c6a898f..06dc186 100644 --- a/docs/tutorials/atsdk-tutorial/send-and-receive-data-synchronously.md +++ b/docs/atsdk/atsdk-walkthroughs/atsdk-tutorial/send-and-receive-data-synchronously.md @@ -29,7 +29,7 @@ There are two examples in the repo `at_notify_receive.dart` and `at_notify_send. To test for yourself, you will need two terminal windows. To do that, you can press the split button on the VS Code IDE. -
+
You can then run the following commands again note to replace the Atsigns with your own. @@ -47,7 +47,7 @@ dart run .\bin\at_notify_send.dart -a "@7capricorn" -n "atsign" -o "@energetic22 The net result should look like this, and your message should appear in the right-hand side. -

Message received.

+

Message received.

You can try sending different messages and make sure they arrive, you can also put Dart on another machine and talk from machine to machine without setting up any other infrastructure. diff --git a/docs/tutorials/atsdk-tutorial/using-the-atsdk-with-dart.md b/docs/atsdk/atsdk-walkthroughs/atsdk-tutorial/using-the-atsdk-with-dart.md similarity index 51% rename from docs/tutorials/atsdk-tutorial/using-the-atsdk-with-dart.md rename to docs/atsdk/atsdk-walkthroughs/atsdk-tutorial/using-the-atsdk-with-dart.md index f47f122..d97acf8 100644 --- a/docs/tutorials/atsdk-tutorial/using-the-atsdk-with-dart.md +++ b/docs/atsdk/atsdk-walkthroughs/atsdk-tutorial/using-the-atsdk-with-dart.md @@ -8,14 +8,12 @@ description: >- ## What and why Dart ? - Dart is an opensource project from Google offering a fast and multi-platform programming language. The atPlatform team choose Dart as a high level language to build proof of concept code but Dart proved to be a fast and reliable language to build on and as we needed features like being able to compile to executables, the Dart team delivered. +Dart is an opensource project from Google offering a fast and multi-platform programming language. The atPlatform team choose Dart as a high level language to build proof of concept code but Dart proved to be a fast and reliable language to build on and as we needed features like being able to compile to executables, the Dart team delivered. -At this point we have ported the atSDK to other languages, like Java and Python the Dart atSDK is a great place to start. +At this point we have ported the atSDK to other languages, like Java and Python the Dart atSDK is a great place to start. ## Get Dart Dart is available at [dart.dev](https://dart.dev/get-dart) for Windows, Linux, macOS, download and follow the instructions to install Dart. You can program in the IDE of your choice, but we can recommend [VS Code](https://code.visualstudio.com/) as it has excellent support for Dart, download install VS Code then install the Dart extension. - - -

to get to the Extensions screen press "Control Shift X" then add Dart

+

to get to the Extensions screen press "Control Shift X" then add Dart

diff --git a/docs/atsdk/sdk/README.md b/docs/atsdk/sdk/README.md new file mode 100644 index 0000000..375971b --- /dev/null +++ b/docs/atsdk/sdk/README.md @@ -0,0 +1,12 @@ +--- +description: Get to know Atsign's SDK, the atSDK +icon: toolbox +--- + +# atSDK Overview + +The atSDK is the best way to embed the atPlatform Protocol into new or existing software. This can be anything from a graphical desktop application to firmware flashed on a microcontroller. + +### Sections + +
LinkDescription
get-started.mdSetup the atSDK for your preferred language
onboarding.mdHow to authenticate to an atServer
atid-reference.mdLearn how to create atKeys for your chosen platform
crud-operations.mdHow to do basic CRUD operations on an atServer
events.mdHow to send and receive real-time messages
synchronizationImplementation specific features to know about
diff --git a/docs/learn/sdk/atid-reference.md b/docs/atsdk/sdk/atid-reference.md similarity index 94% rename from docs/learn/sdk/atid-reference.md rename to docs/atsdk/sdk/atid-reference.md index d2dfdc2..f9cad56 100644 --- a/docs/learn/sdk/atid-reference.md +++ b/docs/atsdk/sdk/atid-reference.md @@ -13,7 +13,7 @@ Please note that any reference to the word "AtKey" in this document is not assoc {% hint style="warning" %} This article explains how to create an atKey in the atSDK. -If you are unfamiliar with atKeys please read [this](../core/atrecord.md#atid) first. +If you are unfamiliar with atKeys please read [this](../../atplatform/atrecord.md#atid) first. {% endhint %} {% tabs %} @@ -22,7 +22,7 @@ If you are unfamiliar with atKeys please read [this](../core/atrecord.md#atid) f ### Package Installation -The [at\_commons](https://pub.dev/packages/at\_commons) package contains common elements used in a number of Atsign's Flutter and Dart packages. This package needs to be included in the application in order to create atKeys. +The [at\_commons](https://pub.dev/packages/at_commons) package contains common elements used in a number of Atsign's Flutter and Dart packages. This package needs to be included in the application in order to create atKeys. First add the package to your project: @@ -119,15 +119,15 @@ AtKey atKey = (AtKey.shared('phone', namespace: 'wavi', sharedBy: '@alice') ### API Docs -You can find the API reference for the entire package available on [pub](https://pub.dev/documentation/at\_commons/latest/). +You can find the API reference for the entire package available on [pub](https://pub.dev/documentation/at_commons/latest/). -The `AtKey` class API reference is available [here](https://pub.dev/documentation/at\_commons/latest/at\_commons/AtKey-class.html). +The `AtKey` class API reference is available [here](https://pub.dev/documentation/at_commons/latest/at_commons/AtKey-class.html). {% endtab %} {% tab title="C" %} ## C -You can find all these examples also on our [GitHub](https://github.com/atsign-foundation/at\_demos/tree/trunk/demos/get\_started\_c). +You can find all these examples also on our [GitHub](https://github.com/atsign-foundation/at_demos/tree/trunk/demos/get_started_c). ### Introduction @@ -143,7 +143,7 @@ There are three kinds of atKeys: [Shared atKey](atid-reference.md#shared-atkey) holds encrypted data that is only decipherable by you and the intended recipient. -Every atKey has [metadata](atid-reference.md#metadata), which is free for you to also control (to an extent). Not all metadata should be handled by the developer. Some metadata is managed by the SDK itself. Check out our [documentation](../core/atrecord.md) on metadata to find out which metadata is worth your time handling. +Every atKey has [metadata](atid-reference.md#metadata), which is free for you to also control (to an extent). Not all metadata should be handled by the developer. Some metadata is managed by the SDK itself. Check out our [documentation](../../atplatform/atrecord.md) on metadata to find out which metadata is worth your time handling. Before running any of the examples, be sure to include `atkey.h` diff --git a/docs/learn/sdk/crud-operations.md b/docs/atsdk/sdk/crud-operations.md similarity index 99% rename from docs/learn/sdk/crud-operations.md rename to docs/atsdk/sdk/crud-operations.md index 5954531..5bb10b7 100644 --- a/docs/learn/sdk/crud-operations.md +++ b/docs/atsdk/sdk/crud-operations.md @@ -32,7 +32,7 @@ AtClient atClient = atClientManager.atClient; #### atKey -Before you can do anything with an atRecord, you need an [atKey](../core/atrecord.md#atidentifier) to represent it. +Before you can do anything with an atRecord, you need an [atKey](../../atplatform/atrecord.md#atidentifier) to represent it. If you don't know how to create an atKey, please see the [reference](atid-reference.md) first. @@ -229,7 +229,7 @@ You can find all of these examples on our [GitHub](https://github.com/atsign-fou In this section, we will learn how to `put`, `get`, and `delete` an atKey. -If you are unfamiliar with the different atKey types, check out our documentation on [atRecords](../core/atrecord.md). +If you are unfamiliar with the different atKey types, check out our documentation on [atRecords](../../atplatform/atrecord.md). ### Put Public atKey diff --git a/docs/learn/sdk/events.md b/docs/atsdk/sdk/events.md similarity index 100% rename from docs/learn/sdk/events.md rename to docs/atsdk/sdk/events.md diff --git a/docs/sdk/get-started.md b/docs/atsdk/sdk/get-started.md similarity index 99% rename from docs/sdk/get-started.md rename to docs/atsdk/sdk/get-started.md index 24ad2f1..921c678 100644 --- a/docs/sdk/get-started.md +++ b/docs/atsdk/sdk/get-started.md @@ -10,7 +10,7 @@ description: Set up the atSDK for your preferred language Guide coming soon! -For now, please check out our [atsdk-tutorial](../tutorials/atsdk-tutorial/ "mention") +For now, please check out our [atsdk-tutorial](../atsdk-walkthroughs/atsdk-tutorial/ "mention") {% endtab %} {% tab title="Flutter" %} diff --git a/docs/learn/sdk/onboarding.md b/docs/atsdk/sdk/onboarding.md similarity index 98% rename from docs/learn/sdk/onboarding.md rename to docs/atsdk/sdk/onboarding.md index 8c6d714..c4be450 100644 --- a/docs/learn/sdk/onboarding.md +++ b/docs/atsdk/sdk/onboarding.md @@ -78,7 +78,7 @@ bool onboarded = false; ## Flutter {% hint style="warning" %} -If you followed the [get-started.md](../../sdk/get-started.md "mention") guide for Flutter, then you should already have onboarding setup in your app. Feel free to skip this section and move on. +If you followed the [get-started.md](get-started.md "mention") guide for Flutter, then you should already have onboarding setup in your app. Feel free to skip this section and move on. {% endhint %} ### Package Installation diff --git a/docs/sdk/synchronization/README.md b/docs/atsdk/sdk/synchronization/README.md similarity index 100% rename from docs/sdk/synchronization/README.md rename to docs/atsdk/sdk/synchronization/README.md diff --git a/docs/sdk/synchronization/connection-hooks.md b/docs/atsdk/sdk/synchronization/connection-hooks.md similarity index 100% rename from docs/sdk/synchronization/connection-hooks.md rename to docs/atsdk/sdk/synchronization/connection-hooks.md diff --git a/docs/sdk/synchronization/synchronization.md b/docs/atsdk/sdk/synchronization/synchronization.md similarity index 100% rename from docs/sdk/synchronization/synchronization.md rename to docs/atsdk/sdk/synchronization/synchronization.md diff --git a/docs/learn/sdk/README.md b/docs/learn/sdk/README.md deleted file mode 100644 index ce4bbb5..0000000 --- a/docs/learn/sdk/README.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -description: Get to know Atsign's SDK, the atSDK -icon: toolbox ---- - -# atSDK - -## Overview - -The atSDK is the best way to embed the atPlatform Protocol into new or existing software. This can be anything from a graphical desktop application to firmware flashed on a microcontroller. - -### Sections - -
LinkDescription
get-started.mdSetup the atSDK for your preferred language
onboarding.mdHow to authenticate to an atServer
atid-reference.mdLearn how to create atKeys for your chosen platform
crud-operations.mdHow to do basic CRUD operations on an atServer
events.mdHow to send and receive real-time messages
synchronizationImplementation specific features to know about
diff --git a/docs/tutorials/ai-architect-walkthrough/nodes-and-connections.md b/docs/tutorials/ai-architect-walkthrough/nodes-and-connections.md deleted file mode 100644 index 6f6277b..0000000 --- a/docs/tutorials/ai-architect-walkthrough/nodes-and-connections.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -description: 'Not sure when to use what? Here are a few quick guidelines to help you choose:' -icon: ballot-check ---- - -# Nodes and Connections - -## Node Palette - -
CardDescriptionWhen to useExample
:user: Person
Customers or stakeholders
You want to model people's actions, permissions, or decision points.A person logging into an admin dashboard, approving a workflow, or sending a secure message.

:diamond: Entity

Business entities or AIs

You need access for AI agents, companies, tenants, departments, identity domains.A healthcare provider, an insurance company, or a tenant account applying its own access rules.

:cube: Thing

Physical or digital objects/devices

You’re modelling hardware, IoT devices, sensors, servers, or edge components.A smart meter sending readings, a kiosk receiving updates, or a server reporting health status.
:gear: Process
Business processes or Agentic workflows
You want to show business logic, transformations, or background tasks.A data validation step, a policy enforcement engine, or a message-routing workflow.
:rectangle: API
External systems or platform integrations
You’re integrating with third-party services or exposing functionality programmatically.A payment processor API, mapping service, or internal microservice endpoint.
:plus: Other
Custom node type for anything else
You need to include concepts like storage, policies, models, or abstract systems.A policy store, encryption module, AI model, or logging system.
- -## Connection Types - -{% hint style="warning" icon="lightbulb" %} -If you are unsure, you can use Data Stream. -{% endhint %} - -

Async Comms

Asynchronous, non-blocking communication where the sender does not wait for a response and the receiver does not need to be online.

Uses Get/Put semantics.
Read more here.

Really handy if you cannot guarantee both the sender/ receiver will be online at the same time.A device uploads data that is processed later, or a message is delivered when the recipient comes online.

Sync Comms

Synchronous communication where the sender waits for an immediate response.

Uses Notification (Read more here) semantics and/or Get/Put (Read more here) semantics.

You need real-time interaction or confirmation.A user request that must return a result immediately, like fetching account details.

Notifications

One-way signals used to alert or inform.

Uses Notification semantics Read more here.


You need to notify without requiring a response.
Push notifications, system alerts, or status updates sent to users or services.

RPC

Structured request/response interactions between systems.
Ideal for complex operations where the other party may not be online at the time of execution (especially useful for policy-driven workflows).

Supported in the SDK semantics.
Read more here.

You want function-like calls across services with clear inputs and outputs.Calling a billing service to calculate charges or a policy engine to validate access.

Data Stream

Ideal for long-running processes (such as LLM generation) where completion time is uncertain and results may need to stream incrementally.

Uses the stream (Read more here) semantics
or notifications (Read more here) semantics.
You’re handling live, ongoing data rather than discrete messagesTelemetry feeds, sensor data, logs, or real-time analytics pipelines.

TCP

Low-level, persistent network connections that enable lower latency communication (e.g., NoPorts SSH, MCP servers).


Uses Noports_Core (Read more here) semantics.

You need a fast end-to-end encrypted TCP connection with raw network speed.A custom protocol, legacy integration, or long-lived secure connection.