# What stays the same in 1.x
dhtml is not at 1.0 yet. Until it is, anything here can change, and the status page says what is built and what has been proven. This page is the promise that starts at 1.0.0: what you build on 1.x keeps working on every 1.x version of dhtml.net, and you never have to read a changelog before your site is moved to a newer one.
The rule in one sentence: **in 1.x, things are added and fixed, and nothing that worked is taken away or changes what it means.** The next number that may break something is 2.0.
## What is promised
- **The template language.** Every tag, attribute and filter in [syntax.md](syntax.md) and [templates.md](templates.md) keeps its name and its meaning. A page that compiles and works today still does. New tags, attributes and filters may be added.
- **The settings.** Every key of `dhtml.config` in [config.md](config.md) keeps its name, its meaning and its default. New keys may be added, and they are off or harmless when you do not set them.
- **The folder.** An app is the folder layout in [syntax.md](syntax.md): `server/pages`, `server/api`, `server/layouts`, `server/partials`, `server/components`, `server/jobs`, `server/migrations`, `public`. Your own files are yours: dhtml reads them and does not rewrite them.
- **Migrations and your data.** A migration is a plain SQL file that is applied once, in order, and never changed. Your database is a SQLite file, and you can always download it. The tables dhtml adds for accounts, sessions, jobs and the like (their names start with `_dhtml_`) only grow new columns and tables, through migrations that are applied for you; an app made with an earlier 1.x runs on a later one after that.
- **The address space.** Paths that start with `/_dhtml/` belong to dhtml. Everything else is yours.
## What may change
- **Words.** The wording of errors, warnings, hints and log lines. Read them as a person; do not match on them in a script. (The file and the line are the parts to rely on.)
- **Speed and size.** How fast things are and how much memory they use.
- **Limits.** The numbers that cap sizes, counts and time-outs may be raised in 1.x, and lowered only for the reason below.
- **Inside.** Anything that is not written in these docs: the generated HTML that is not part of a page's own output, the order of unrelated things, files in `server/data` other than your database and your uploads.
## One exception: security
If keeping something exactly as it was would leave a hole open, it changes in the next 1.x release and the [security page](/security/) says what changed and why. That can mean a tighter default, a stricter check, or a limit that gets lower. It is the only reason for a change that could make a working app fail, and the check on your upload tells you what to fix.
## How things get retired
Nothing is deleted in 1.x. A feature that is going away is marked **deprecated** in the docs and the check on every upload warns about it in every app that uses it, for at least one minor release (1.4 deprecates, 1.5 or later still works and warns). It is removed in 2.0, not before.
## How you can trust this
The promise is written down and checked by tests. Every tag, attribute, filter and setting in the docs has to exist, and every one that exists has to be in the docs. The two starter apps are built and run by the tests, so an incompatible change to the language shows up there first.
## Version numbers
The version of dhtml is `MAJOR.MINOR.PATCH`. A patch release fixes bugs. A minor release adds things. A major release is the only one that may break something. Your app has a version of its own (`[app] version`), unrelated to it.