Your mobile app. An entire backend. Designed to come connected.

For developers building mobile apps with AI coding agents. In the planned design, your agent edits one file, edict.yaml, and sign-in, subscriptions, reminders, files, credits, and rules come out connected.

Join the betaSee how it works

Not released yet. No launch date.

Sample session

Illustrative. Not a recording of a released product.

Paywall
  1. You

    Add premium AI coaching. 200 messages per billing period.

  2. Example app screen on the planned backendYour app before the changeFree user, after the changePremium user, after one coach exchangePremium user, after all 200 messagesYour app code builds screens. edict.yaml does not generate them.
  3. Agent

    Read edict.yaml 5 lines

    Your config has free only. I'll add a premium plan and an ai_coach module gated on it.

    Edit edict.yaml+6-1

    Changes to edict.yaml. Old line number, new line number, change, code.
    11modules:
    22 identity:
    33 providers: [apple, google]
    44 subscriptions:
    5-removed plans: [free]
    5+added plans: [free, premium]
    6+added ai_coach:
    7+added requires_plan: premium
    8+added quota:
    9+added per: billing_period
    10+added limit: 200
  4. Agent

    edict dev

    Postgres ready on localhost:5432

    Backend ready on http://localhost:8787

    Modules: Authentication, Subscriptions, AI gateway

    edict test ai_coach

    • free user:402 upgrade requiredpass
    • premium, 1st message:answered, 199 remainingpass
    • premium, 201st message:429 limit reached, 0 remainingpass
    • AI call failed:allowance released, 200 remainingpass

    4 passed, 0 failed

  5. Agent

    Done. Free users get the upgrade screen. Premium users get 200 coach messages each billing period, a failed AI call gives its message back, and message 201 is refused until the next period.

Reminders
  1. You

    Remind people at 8 PM if they have not logged a workout, so they keep their streak.

  2. Example app screen on the planned backendYour app before the changeUser with no workout, at 8:00 PMAfter the user logs a workoutYour app code builds screens. edict.yaml does not generate them.
  3. Agent

    Read edict.yaml 4 lines

    You store workouts per user but send nothing. I'll add a reminder template and a daily job that sends it to anyone who has not logged.

    Edit edict.yaml+11

    Changes to edict.yaml. Old line number, new line number, change, code.
    11modules:
    22 data:
    33 workouts:
    44 owner: user
    5+added notifications:
    6+added templates:
    7+added streak_at_risk:
    8+added title: "Keep your streak going"
    9+added body: "You have not logged today."
    10+added jobs:
    11+added streak_check:
    12+added schedule: "0 20 * * *"
    13+added timezone: user
    14+added when: workouts.today == 0
    15+added send: streak_at_risk
  4. Agent

    edict dev

    Postgres ready on localhost:5432

    Backend ready on http://localhost:8787

    Modules: Database, Background jobs, Push

    edict test streak_check

    • no workout today:one push at 8:00 PM localpass
    • workout logged:no push sentpass
    • user in another zone:push at 8:00 PM their timepass

    3 passed, 0 failed

  5. Agent

    Done. streak_check is set to run at 8 PM in each user's time zone and send the reminder only to people with no workout that day.

Profile photos
  1. You

    Let people add a profile photo. JPEG or PNG, 5 MB max, and only they can change it.

  2. Example app screen on the planned backendYour app before the changePhoto over the 5 MB limitOwner, after a valid uploadYour app code builds screens. edict.yaml does not generate them.
  3. Agent

    Read edict.yaml 3 lines

    You have sign-in only. I'll add an avatars file collection owned by the user and a profiles record that points to it.

    Edit edict.yaml+11

    Changes to edict.yaml. Old line number, new line number, change, code.
    11modules:
    22 identity:
    33 providers: [apple, google]
    4+added files:
    5+added avatars:
    6+added owner: user
    7+added max_size_mb: 5
    8+added types: [image/jpeg, image/png]
    9+added data:
    10+added profiles:
    11+added owner: user
    12+added fields:
    13+added display_name: text
    14+added avatar: avatars
  4. Agent

    edict dev

    Postgres ready on localhost:5432

    Backend ready on http://localhost:8787

    Modules: Authentication, Files, Database

    edict test avatars

    • owner uploads a PNG:saved, 200pass
    • someone else replaces it:403 forbiddenpass
    • 12 MB file:413 too largepass

    3 passed, 0 failed

  5. Agent

    Done. Each profile points to one avatar file. Only its owner can upload or replace it, and files over 5 MB or of other types are refused.

Credit packs
  1. You

    Sell a pack of 20 image credits as an in-app purchase. One credit per image, and a failed render gives it back.

  2. Example app screen on the planned backendYour app before the changeAfter the store purchase, balance topped upAfter one render and one failed renderYour app code builds screens. edict.yaml does not generate them.
  3. Agent

    Read edict.yaml 3 lines

    You have sign-in only. I'll add a store consumable that grants 20 credits, an image_credits balance it tops up, and an ai_image feature that spends it.

    Edit edict.yaml+15

    Changes to edict.yaml. Old line number, new line number, change, code.
    11modules:
    22 identity:
    33 providers: [apple, google]
    4+added payments:
    5+added consumables:
    6+added small_pack:
    7+added stores: [app_store, google_play]
    8+added credits: 20
    9+added credits:
    10+added balance: image_credits
    11+added grant:
    12+added on: purchase
    13+added product: small_pack
    14+added reserve:
    15+added per_request: 1
    16+added release_on: failure
    17+added ai_image:
    18+added spends: image_credits
  4. Agent

    edict dev

    Postgres ready on localhost:5432

    Backend ready on http://localhost:8787

    Modules: Authentication, Payments, AI gateway

    edict test image_credits

    • pack bought in store:20 credits grantedpass
    • image rendered:1 credit spent, 19 leftpass
    • render failed:credit released, 19 leftpass

    3 passed, 0 failed

  5. Agent

    Done. A verified App Store or Google Play purchase adds 20 credits. Each image holds one credit while it renders, spends it on success, and releases it on failure.

Plan limits
  1. You

    Free users can share a routine with 2 friends. Premium users can share with 10.

  2. Example app screen on the planned backendYour app before the change, with no sharing yetFree user adds a third friendPremium user adds a third friendYour app code builds screens. edict.yaml does not generate them.
  3. Agent

    Read edict.yaml 6 lines

    Routines belong to a user and the plans exist. I'll track who each routine is shared with and add a share_limit rule that reads its limit from the plan.

    Edit edict.yaml+7

    Changes to edict.yaml. Old line number, new line number, change, code.
    11modules:
    22 subscriptions:
    33 plans: [free, premium]
    44 data:
    55 routines:
    66 owner: user
    7+added shared_with: users
    8+added rules:
    9+added share_limit:
    10+added counts: routines.shared_with
    11+added limit:
    12+added free: 2
    13+added premium: 10
  4. Agent

    edict dev

    Postgres ready on localhost:5432

    Backend ready on http://localhost:8787

    Modules: Subscriptions, Database, Business logic

    edict test share_limit

    • free user, 2nd share:allowedpass
    • free user, 3rd share:rejected, limit is 2pass
    • premium user, 3rd share:allowed, 3 of 10pass

    3 passed, 0 failed

  5. Agent

    Done. share_limit counts the people on each routine and checks the count against the owner's plan before it allows another share.

What is Edict?

Edict is a backend for mobile apps, in development. AI coding agents have made screens quick to build. The backend behind them is still wired up by hand, one service at a time.

What gets wired by hand today

  • Sign-in and data

    Accounts, sessions, a database, and rules for who can read what.

  • Subscriptions

    Store purchases, webhooks, and entitlements that stay in step.

  • Notifications and jobs

    Templates, schedules, and who should receive what, and when.

  • AI limits

    Counting usage per plan, and giving it back when a call fails.

  • The glue between them

    The logic that makes all of the above behave as one product.

Edict is designed to supply each of these as a module, with the connections between them written in one file your agent can read.

What does a connected backend look like?

Pick a few capabilities and see the connections Edict is designed to make. This is a concept preview, not a working product.

Compose your backendConcept preview
Choose your capabilities

Showing an example selection. Changing it needs JavaScript.

3 capabilities selected

  • Give each user a subscription and an access level.
  • Trigger a notification when a subscription changes.
  • Send each notification to the right user.
edict.yamlillustrative
modules:
  identity:
    providers: [apple, google]
  subscriptions:
    plans: [free, premium]
  notifications:
    templates:
      welcome:
        title: "Welcome"
      plan_changed:
        title: "Your plan changed"
  rules:
    user_plan:
      for: user
      starts_on: free
    plan_change_notice:
      on: subscription.changed
      send: plan_changed
    notify_user:
      send_to: user.devices

Designed to include data models, access rules, and business logic. Preview only. No infrastructure is created.

What does the backend decide on each AI request?

The Paywall sample session above shows the file. Edict is designed to run the same checks, in the same order, on the server for every request.

A free user asks the coach a question
402 upgrade required
The plan is checked first.
A premium user asks, with allowance left
Answered, 1 message counted
The allowance is checked next.
A premium user asks, with the allowance used up
Refused until it renews
The count resets each billing period.
The AI provider fails mid-request
The message is given back
A failed call does not use the allowance.

Illustrative outcomes. Not a released feature.

How does an app get from idea to production?

The agent is designed to work from one file you can read, and you keep that file all the way to production.

  1. Describe

    Tell your coding agent what the app needs.

  2. Configure

    The agent edits edict.yaml through the planned CLI and MCP server.

  3. Test locally

    It starts a local backend and runs tests on realistic scenarios. You read the diff and the results.

  4. Validate

    Check the same file against real provider test environments before launch.

  5. Ship

    Release the app. The same edict.yaml runs on managed hosting, with production credentials added.

See the intended workflow

Can I build and test without paying for hosting?

Local development is planned to be free. Managed hosting will be paid, with pricing still to be decided. The same configuration is designed to describe both.

Local development compared with hosted production, as planned
AreaLocal developmentHosted production
IdentitiesTest usersReal users
Subscriptions and paymentsSimulated purchases and payment eventsReal entitlements from the app stores
DataSeeded PostgreSQL on your machineManaged storage and APIs
NotificationsMock notificationsProvider integrations
Terminal, illustrative
$ edict devPostgres ready on localhost:5432Backend ready on http://localhost:8787$ edict testseeded workouts   12 rows for test user   passsimulated buy     premium is active       passmock push         1 reminder queued       pass3 passed, 0 failed

Simulated services do not prove a real provider integration works. Production still needs validation against real provider test environments.

What kinds of apps is Edict for?

Edict is designed for mobile apps that need accounts, payments, and data. Edict is in development, and its goal is a backend for 99% of the apps on the App Store and Google Play today. These examples are illustrative.

And more we plan to cover

See all use cases

Get an invitation when the beta opens.

Joining gets you email updates while Edict is built, and an invitation to the hosted beta when it opens.

Building now. No launch date yet.