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 scaffoldingshopyo 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 scaffoldingshopyo 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

Release files for shopyo 4.18.2

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.18.2
File Size Uploaded
shopyo-4.18.2.tar.gz 5.5 MB Details

Built distribution (wheel)

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

Total release size:11.0 MB

Release files / shopyo-4.18.2.tar.gz

Download URL shopyo-4.18.2.tar.gz
Size 5.5 MB
Tags Source
SHA-256 checksum
How to use checksums
35bc58fc14ef02eeda3d8fb97a3e1595428c3f67148010a320e485e38e8e97fc
BLAKE2b-256 checksum
How to use checksums
a1e51ad269e0becdc521a4cdd0942e896281f87c8a5595ed863885afbf254d58
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.15

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

Download URL shopyo-4.18.2-py3-none-any.whl
Size 5.5 MB
Tags Python 3
SHA-256 checksum
How to use checksums
f78f1b054a6ea7fe159e6cb656711c7ff8e17861f9766d5b549d6cc59eebde45
BLAKE2b-256 checksum
How to use checksums
255775d7681484b02a33190d06d02b57940e6d1dfeabdcd6f96e89b29f66f152
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.15

Release history Release notifications | RSS feed

This release

4.18.2 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