Skip to main content

shopyo

Build large Flask apps without losing your sanity.
Auth, admin panel, modular architecture — all the batteries, none of the boilerplate.

Downloads Codecov Tests PyPI Docs CII OpenSSF

📖 Docs • 💬 Discord • 🎯 Contribute • 🐦 Twitter


Your Flask app works. Until it doesn't.

You start with a single app.py. Then you add auth. Then an admin panel. Then a few blueprints. Suddenly you have 5,000 lines and no idea where anything lives. You think about Django — but you chose Flask for a reason.

Shopyo is the answer. It gives you the modular architecture, auth, admin dashboard, CLI scaffolding, and project structure that Flask is missing — in one pip install.

pip install shopyo
shopyo new myapp
cd myapp && shopyo initialise && flask run --debug
# → Working app with auth, admin panel, and dashboard at localhost:5000

Featured on Python Weekly issue 436 and presented at EuroPython 2023.


Why Shopyo?

Instead of this... You get this
Wiring up Flask-Login, Flask-Admin, Flask-Migrate, Flask-WTF, and 5 other extensions separately One pip install with everything working together
Manually registering blueprints and hoping you didn't miss one Auto-discovery: drop a module in modules/ and it just works
Googling "how to structure a large Flask app" for the 10th time A proven architecture that scales from day one
Configuring static files differently for dev and prod Zero-friction assets: one url_for() call works everywhere
Writing the same user management UI for every project Built-in admin dashboard and user management

Features

  • 🔐 Auth built-in — Login, registration, password reset, email confirmation, API tokens, rate limiting, password complexity, roles, and an events system. Drop-in, no wiring required.
  • 📦 2-level modularity — Organize features as modules and group them into boxes. Add, remove, or replace parts without touching the rest of your app.
  • 🖥️ Admin dashboard — User management, settings, and a customizable admin panel. Works out of the box, fully hackable.
  • 🪜 CLI scaffolding — shopyo new creates a project. shopyo startapp creates a module. shopyo startbox creates a box. No boilerplate to write.
  • 🌅 Zero-friction assets — Use standard Flask url_for('static', ...) in development and production. Transparent static shadowing handles the rest.
  • ⚛️ i18n ready — Internationalization setup included.
  • 🎨 Theme system — Front-end and back-end theming with pluggable CSS themes.
  • 🔧 Production-ready — Session hardening, CSRF protection, environment-enforced secrets, rate limiting, multi-platform CI/CD, 75%+ test coverage.
  • 🔑 Policy-based authorization — Role-based access control with fine-grained permissions, grant/revoke semantics, and a require decorator for protecting views.
  • 🔄 Persistent login — Optional "remember me" functionality with configurable cookie duration.
  • 📝 Customizable auth pages — Override login and registration templates via config without touching package internals.
  • 🧩 Modular packages — Auth, dashboard, page, i18n, settings, theme, and appadmin extracted as independent packages with URL override support.
  • ⚡ Modern UI — Tailwind CSS, AlpineJS, and FontAwesome 6.5.1 bundled locally for offline reliability.
  • 🖊️ Rich text editing — Quill editor integrated for a lightweight writing experience.
  • 🎯 Demo scaffolding — shopyo new --demo creates a project pre-loaded with demo apps.

Quick start

pip install shopyo
shopyo new blog
cd blog
shopyo initialise
flask run --debug

Open http://localhost:5000/dashboard — credentials: admin@domain.com / pass.

You can also run shopyo new inside an existing directory to scaffold Shopyo in place. Note: shopyo new . does not work — the project name must be alphanumeric. Use shopyo new (no argument) instead to create the project in the current directory.

What does "modular" mean?

Every feature in Shopyo is a module. Modules are self-contained Flask blueprints with their own models, views, forms, templates, and static assets.

myproject/
├── modules/
│   ├── www/              # Homepage, public routes
│   ├── blog/             # Blog module (you create this)
│   ├── analytics/        # Analytics module (you create this)
│   └── box__billing/     # Box: group of related modules
│       ├── subscriptions/
│       └── invoices/
├── config.py
├── app.py
└── requirements.txt

Add a module by dropping a folder into modules/. Shopyo auto-discovers and registers it. No blueprint registration, no configuration files to update.

Who uses Shopyo?

Site Description
Maurilearn.com Elearning platform
Linkolearn.com Learn by links
FlaskCon.com Conference software

Built something with Shopyo? Let us know and we'll add you to the list.

Why not Django?

Django is excellent for Django-shaped problems. But if you want:

  • Flask's flexibility (swap SQLAlchemy for Peewee, Jinja for Mako)
  • A flat project structure (no nested proj/proj)
  • Granular modularity (modules and boxes, not Django "apps")
  • Zero boilerplate (auto-discovery, no manual registration)

...then Shopyo gives you Django's batteries without Django's constraints.

Why not plain Flask?

Flask is perfect for small projects. As you grow, you need:

  • A project architecture that doesn't collapse at 10k lines
  • Auth that works out of the box (not 6 extensions you wire up yourself)
  • An admin panel that isn't an afterthought
  • CLI commands for scaffolding, not copy-paste from Stack Overflow

Shopyo gives you all of this while keeping 100% Flask compatibility. Every Shopyo project is still a Flask project.

First time contributing?

We have a 100% first-timers friendly policy. Check out the testimonials.

"One of the best onboarding experiences I've had. Learned a lot too." — Ramon from Codesee.io

👉 Get started contributing 👉 Join the Discord

License

MIT — see LICENSE.

Contact

Metadata

Release files for shopyo 4.19.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for shopyo 4.19.0
File Size Uploaded
shopyo-4.19.0.tar.gz 5.5 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for shopyo 4.19.0
File Interpreter ABI Platform
shopyo-4.19.0-py3-none-any.whl Python 3 none any Details

Total release size: 11.0 MB

Release files / shopyo-4.19.0.tar.gz

Download URL shopyo-4.19.0.tar.gz
Size 5.5 MB
Tags Source
SHA-256 checksum
How to use checksums
823ba66ec7f0f341c180baf9db2e8da050c6a517056f31802e1e22685603710e
BLAKE2b-256 checksum
How to use checksums
007f04cca55f8c4295c35aaee1f1e7a1a4163e3e4f8b24abed5f5fb7e1a44f33
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.17

Release files / shopyo-4.19.0-py3-none-any.whl

Download URL shopyo-4.19.0-py3-none-any.whl
Size 5.5 MB
Tags Python 3
SHA-256 checksum
How to use checksums
e4302ace13f49dc86553f43b04da036cdee872afeb097b3bcbcc68244bc633c2
BLAKE2b-256 checksum
How to use checksums
d108d9c444b6efa1d874ed259385c5d9a8c41e53c6a5b4e803e772f1666e80f1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.17

Release history Release notifications | RSS feed

This release

4.19.0 This release

2 release files

4.18.1

2 release files

4.18.0

2 release files

4.17.2

2 release files

4.17.1

2 release files

4.17.0

2 release files

4.16.1

2 release files

4.12.1

2 release files

4.11.0

2 release files

4.10.0

2 release files

4.9.5

2 release files

4.9.4

2 release files

4.9.3

2 release files

4.9.2

2 release files

4.9.1

2 release files

4.9.0

2 release files

4.8.6

1 release file

4.8.4

1 release file

4.8.3

1 release file

4.6.0

1 release file

4.5.8

1 release file

4.5.7

1 release file

4.5.6

1 release file

4.5.5

1 release file

4.5.3

1 release file

4.5.2

1 release file

4.5.1

1 release file

4.4.3

1 release file

4.4.2

1 release file

4.3.4

1 release file

4.3.2

1 release file

4.2.1

1 release file

4.2.0

1 release file

4.1.3

1 release file

4.1.2

1 release file

4.1.1

1 release file

4.1.0

1 release file

4.0.0

1 release file

3.9.4

1 release file

3.9.2

1 release file

3.9.1

1 release file

3.9.0

1 release file

3.8.41

1 release file

3.8.31

1 release file

3.8.4

1 release file

3.8.2

1 release file

3.8.1

1 release file

3.8.0

1 release file

3.4.2

1 release file

3.3.2

1 release file

3.0.0

1 release file

2.8.0

1 release file

2.0.0

1 release file

1.2.4

1 release file

1.2.3

1 release file

1.2.1

1 release file

1.2.0

1 release file

1.1.61

1 release file

1.1.58

1 release file

1.1.57

1 release file

1.1.56

1 release file

1.1.55

1 release file

1.1.54

1 release file

1.1.53

1 release file

1.1.52

1 release file

1.1.51

1 release file

1.1.45

1 release file

1.1.44

1 release file

1.1.43

1 release file

1.1.42

1 release file

1.1.41

1 release file

1.1.40

1 release file

1.1.8

1 release file

1.1.7

1 release file

1.1.6

1 release file

1.1.5

1 release file

1.1.3

1 release file

1.1.2

1 release file

1.1.1

1 release file

0.3.3

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page