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

For developers building mobile apps with AI coding agents.

Not released yet. No launch date.

Illustrative

Your prompt

Add premium AI coaching. 200 messages per billing period.

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

edict.yaml+6-1

    
    
    modules:
  
    
    
      identity:
  
    
    
        providers: [apple, google]
  
    
    
      subscriptions:
  
    
    removed
        plans: [free]
  
    
    added
        plans: [free, premium]
  
    
    added
      ai_coach:
  
    
    added
        requires_plan: premium
  
    
    added
        quota:
  
    
    added
          per: billing_period
  
    
    added
          limit: 200
  

$ edict test ai_coach

  • free user402 upgrade required
  • premium, 1st messageanswered, 199 remaining
  • premium, 201st message429 limit reached, 0 remaining
  • AI call failedallowance released, 200 remaining

4 passed, 0 failed

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.

What is Edict? 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.

Choose what your app needs. Edict is designed to connect it.

Each module pairs one block of edict.yaml with the screen it changes. A concept preview, not a working product.

edict.yaml
  • Authentication
  • Database

    
    
    modules:
  
    
    
      identity:
  
    
    
        providers: [apple, google]
  
    
    
      data:
  
    
    
        workouts:
  
    
    
          owner: user
  

$ edict test workouts

  • owner reads ownallowed
  • other user readsdenied
  • signed out401

3 passed, 0 failed

Illustrative. The syntax is not final.

edict.yaml
  • Subscriptions
  • Payments

    
    
    modules:
  
    
    
      identity:
  
    
    
        providers: [apple, google]
  
    
    
      subscriptions:
  
    
    removed
        plans: [free]
  
    
    added
        plans: [free, premium]
  
    
    
      payments:
  
    
    added
        consumables:
  
    
    added
          small_pack:
  
    
    added
            stores: [app_store, google_play]
  
    
    added
            credits: 20
  
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.
edict.yaml
  • Push
  • Background jobs

    
    added
      notifications:
  
    
    added
        templates:
  
    
    added
          streak_at_risk:
  
    
    added
            title: "Keep your streak going"
  
    
    added
            body: "You have not logged today."
  
    
    added
      jobs:
  
    
    added
        streak_check:
  
    
    added
          schedule: "0 20 * * *"
  
    
    added
          when: workouts.today == 0
  
    
    added
          send: streak_at_risk
  
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.
edict.yaml
  • AI gateway

    
    added
      ai_coach:
  
    
    added
        requires_plan: premium
  
    
    added
        quota:
  
    
    added
          per: billing_period
  
    
    added
          limit: 200
  
    
    added
        on_failure: release
  

$ edict test ai_coach

  • free user402 upgrade required
  • premium, 1st199 remaining
  • premium, 201st429 limit reached
  • AI call failedallowance released

4 passed, 0 failed

Illustrative. Example rule, not a measured result.

edict.yaml
  • Files
  • Database

    
    added
      files:
  
    
    added
        avatars:
  
    
    added
          owner: user
  
    
    added
          max_size_mb: 5
  
    
    added
          types: [image/jpeg, image/png]
  
    
    added
      data:
  
    
    added
        profiles:
  
    
    added
          owner: user
  
    
    added
          fields:
  
    
    added
            display_name: text
  
    
    added
            avatar: avatars
  

$ edict test avatars

  • owner uploads a PNGsaved, 200
  • someone else replaces it403 forbidden
  • 12 MB file413 too large

3 passed, 0 failed

Illustrative. The syntax is not final.

edict.yaml
  • Business logic

    
    added
      rules:
  
    
    added
        share_limit:
  
    
    added
          counts: routines.shared_with
  
    
    added
          limit:
  
    
    added
            free: 2
  
    
    added
            premium: 10
  

$ edict test share_limit

  • free user, 2nd shareallowed
  • free user, 3rd sharerejected, limit is 2
  • premium, 3rd shareallowed, 3 of 10

3 passed, 0 failed

Illustrative. The syntax is not final.

Sample sessions. Illustrative. Not a recording of a released product.

Paywall
  1. You

    Add premium AI coaching. 200 messages per billing period.

  2. 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
  3. 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

  4. 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.

  5. 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.
Reminders
  1. You

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

  2. 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
  3. 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

  4. 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.

  5. 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.
Profile photos
  1. You

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

  2. 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
  3. 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

  4. 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.

  5. 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.
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. 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
  3. 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

  4. 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.

  5. 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.
Plan limits
  1. You

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

  2. 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
  3. 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

  4. Agent

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

  5. 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.

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

  • MarketplacesAuthentication, Database, Payments, Files, Push
  • Dating and matchingAuthentication, Database, Files, Push, AI gateway
  • Chat and messagingAuthentication, Database, Files, Push
  • Meditation and sleepAuthentication, Subscriptions, Files, Background jobs, Push
  • Language learningAuthentication, Database, Subscriptions, Push, AI gateway
  • Kids learningAuthentication, Database, Subscriptions, Business logic
  • Quizzes and triviaAuthentication, Database, Business logic, AI gateway
  • Games with leaderboardsAuthentication, Database, Business logic, Payments, Push
  • Event ticketsAuthentication, Database, Payments, Business logic, Push
  • Local deliveryAuthentication, Database, Payments, Push, Background jobs
  • Property rentalsAuthentication, Database, Payments, Files, Business logic
  • Photo and video editingAuthentication, Files, Background jobs, Subscriptions, AI gateway
  • Document scanning and notesAuthentication, Files, Background jobs, AI gateway
  • Podcasts and audioAuthentication, Files, Subscriptions, Background jobs, Push
  • News readersAuthentication, Database, Subscriptions, Push, Background jobs
  • Field serviceAuthentication, Database, Files, Background jobs, Push
  • Clubs and membershipsAuthentication, Database, Subscriptions, Payments, Push
  • Loyalty and rewardsAuthentication, Database, Business logic, Payments, Push
  • Pet careAuthentication, Database, Files, Background jobs, Push
  • Outdoor trailsAuthentication, Database, Files, Push
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.