Skip to content

ABC Tool

  • Home
  • About / Contect
    • PRIVACY POLICY
dropseed/plain: A web framework for building products with Python. · GitHub

dropseed/plain: A web framework for building products with Python. · GitHub

Posted on April 14, 2026 By safdargal12 No Comments on dropseed/plain: A web framework for building products with Python. · GitHub
Blog


The full-stack Python framework designed for humans and agents.

mkdir my-app && cd my-app && claude "$(curl -sSf https://plainframework.com/start.md)"

Also works with Codex, Amp, OpenCode, or your agent of choice.

Explicit, typed, and predictable. What’s good for humans is good for agents.

Here’s what Plain code looks like:

# app/users/models.py
from plain import postgres
from plain.postgres import types
from plain.passwords.models import PasswordField

@postgres.register_model
class User(postgres.Model):
    email: str = types.EmailField()
    password: str = PasswordField()
    display_name: str = types.CharField(max_length=100)
    is_admin: bool = types.BooleanField(default=False)
    created_at: datetime = types.DateTimeField(auto_now_add=True)

    query: postgres.QuerySet[User] = postgres.QuerySet()

    model_options = postgres.Options(
        constraints=[
            postgres.UniqueConstraint(fields=["email"], name="unique_email"),
        ],
    )

Views are class-based:

# app/users/views.py
from plain.views import DetailView
from .models import User

class UserDetail(DetailView):
    template_name = "users/detail.html"

    def get_object(self):
        return User.query.get(pk=self.url_kwargs["pk"])

URLs use a Router class:

# app/users/urls.py
from plain.urls import Router, path
from . import views

class UsersRouter(Router):
    namespace = "users"
    urls = [
        path("<int:pk>/", views.UserDetail),
    ]

Plain projects include built-in tooling that agents use automatically.

Rules — Always-on guardrails stored in project rules files (e.g. .claude/rules/ for Claude Code). Short files (~50 lines) that prevent the most common mistakes.

Docs — Full framework documentation, accessible on demand from the command line:

plain docs models                      # full docs
plain docs models --section querying   # one section
plain docs models --api                # typed signatures only
plain docs --search "queryset"         # search across all packages

Skills — End-to-end workflows triggered by slash commands:

  • /plain-install — add a new package and walk through setup
  • /plain-upgrade — bump versions, read changelogs, apply breaking changes, run checks
  • /plain-optimize — capture performance traces, identify slow queries and N+1 problems, apply fixes
  • /plain-bug — collect context and submit a bug report as a GitHub issue

All commands run with uv run (e.g. uv run plain dev).

  • plain dev — start dev server with auto-reload and HTTPS
  • plain fix — format and lint Python, CSS, and JS in one command
  • plain check — linting, preflight, migration, and test validation
  • plain test — run tests (pytest)
  • plain docs --api — public API surface, formatted for LLMs

Plain is opinionated. These are the technologies it’s built on:

  • Python: 3.13+
  • Database: Postgres
  • Templates: Jinja2
  • Frontend: htmx, Tailwind CSS
  • Python tooling: uv (packages), ruff (lint/format), ty (type checking) — all from Astral
  • JavaScript tooling: oxc (lint/format), esbuild (bundling)
  • Testing: pytest

30 first-party packages, one framework. All with built-in docs.

Foundation:

Backend:

Frontend:

Development:

Production:

Users:

Plain is a fork of Django, driven by ongoing development at PullApprove — with the freedom to reimagine it for the agentic era.



Source link

Post Views: 19

Post navigation

❮ Previous Post: Google’s giving Gemini Personal Intelligence a huge expansion
Next Post: The FCC just saved Netgear from its router ban for no obvious reason ❯

You may also like

Weather-monitoring firm hangs dark cloud over customers’ heads by forcing new app
Blog
Weather-monitoring firm hangs dark cloud over customers’ heads by forcing new app
May 16, 2026
Realme 16T arrives with the Dimensity 6300 SoC, a 144Hz display, and an 8,000 mAh battery
Blog
Realme 16T arrives with the Dimensity 6300 SoC, a 144Hz display, and an 8,000 mAh battery
May 23, 2026
iPhone 18 Pro and iPhone 18 Pro Max to have a smaller Dynamic Island
Blog
iPhone 18 Pro and iPhone 18 Pro Max to have a smaller Dynamic Island
May 5, 2026
OpenAI Could Make 30 Million Phones Over the Next 2 Years, Report Says
Blog
OpenAI Could Make 30 Million Phones Over the Next 2 Years, Report Says
May 5, 2026

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Recent Posts

  • Waze's traffic lights feature continues to roll out to more users
  • Under-16 social media ban announced by UK government
  • The AI layoff wave is becoming a powder keg
  • Honor X80 Pro Max to take peak brightness to five digit territory
  • Even More Batteries Included with Emacs

Recent Comments

  1. Last Chance for Big Savings on TechCrunch Disrupt 2026 Tickets – Artiverse on 5 days left: Save up to $410 on Disrupt 2026 passes

Archives

  • June 2026
  • May 2026
  • April 2026

Categories

  • Blog

Copyright © 2026 ABC Tool.

Theme: Oceanly News by ScriptsTown