Bever is pre-alpha. The language, APIs, and packages will change in breaking ways between releases.Bever is pre-alpha. Expect breaking changes.Read more
Skip to content

Business logic as code.

Write what your business needs in one readable file. Bever turns it into a validated, authorized API and a working web app, on defaults you can replace. Your team reads it, your AI writes it, and nothing hides in the plumbing.

BeverBever
bev/tasks.bevNo errors
1/6 Declare an entity and who may use it

A real model, typed change by change. Each change compiles, and the app follows it.

The problem

Your rules are buried in code ​

A rule as simple as "signed-in people may change a task's status, and the status is To do, In progress, or Done" ends up spread across a controller, a validator, a migration, a form, client types, and the tests that keep them in step. Nobody can point to where the rule lives, so every change is a search, and every search can miss a copy.

A typical stack

  • TasksController.cswho may call it
  • TaskValidator.csthe allowed values
  • 20261028_AddStatus.csthe column and its default
  • TaskForm.vuethe select options
  • api/types.tsthe client's copy of the shape
  • TaskTests.csthe checks that they still agree

Bever

bev
Entity Task
    Field Status Enum(ToDo, InProgress, Done) = ToDo

Action Crud Task
    By Authenticated

One place to read, one place to change. The server enforces it, the database migration follows it, and the app shows it.

Your AI writes the model, not the plumbing ​

Coding agents spend most of their effort reading and rewriting boilerplate. With Bever, a feature is a few lines in a .bev file. The server and the app read the compiled model, so the agent has nothing else to keep in sync.

Add a priority to tasks, Normal by default.

diff
 Entity Task
     Field Title Text(200)
     Field Status Enum(ToDo, InProgress, Done) = ToDo
+    Field Priority Enum(Low, Normal, High) = Normal

The API validates it, the migration adds the column with a value for existing rows, and the list and forms show it.

Fewer tokens per change

The agent reads and writes a model of a few dozen lines instead of controllers, forms, and migrations. Smaller context, smaller output, lower cost.

Diffs you can review at a glance

A feature is a short change to one readable file, not a pull request across twenty. You see the business change, not the wiring.

Guardrails the agent cannot skip

The compiler rejects mistakes with file, line, and column. The server checks every permission, whatever the agent wrote. Destructive migrations wait for your consent.

Opinionated defaults you can replace ​

bever new picks a stack so you can start in minutes: Nuxt for the app, SQLite for the data, and ASP.NET Core for the server. None of it is locked in. The model is the contract, and every layer around it is a default you can change.

The default, and how to change it

  • Nuxt web appany framework, through @bever/sdk or the HTTP API
  • SQLiteyour own IBeverDatabaseProvider
  • shadcn-vue componentsordinary files in client/
  • ThemeCSS variables for colors, radius, and font
  • ASP.NET Core serveryour own endpoints, middleware, and services

Read the customizing guide →

The rules stay with the model

Validation and permissions run in the server, whatever client or database you use. A replacement decides where data is stored or how it looks, never whether a request is allowed.

Nothing to eject

client/ and server/ are ordinary projects in your repository, and Bever comes in as packages. Replace one page and the model still drives the rest.

A documented contract

The compiled model is JSON in a documented format, so your own tools and scripts can read it too.

A complete application from the model ​

Secure by default

Every action names who may perform it. The server checks every request, filters lists to what each person may see, and rejects values that do not match their type.

An app on day one

Lists with search and sorting, forms with validation, relationship pickers, sign-in, dark mode, and a phone layout.

Safe database changes

Schema changes become reviewed migration files. Destructive changes need consent, and new required fields need a value for existing rows.

Code you own

client/ is a normal Nuxt app and server/ is a normal ASP.NET Core app. Change any page, component, or endpoint; Bever stays a library.

Business meaning first

A .bev file says what the business needs and nothing about how a framework wires it up. Product owners can read it.

Open source

The language, compiler, runtime, and tools are Apache 2.0. A project created with bever new is entirely yours.

Run it yourself ​

Four commands give you a task app with sign-in, projects, and tasks, running locally.

sh
dotnet tool install --global --prerelease Bever.Cli
bever new "Acme Tasks"
cd "Acme Tasks"
bever dev

Read the getting started guide →

The generated task list: a table of tasks with project, status, priority, due date, and assignee columns.The generated task list in dark mode.

Released under the Apache License 2.0. Documentation under CC BY 4.0.