Build large Flask apps without losing your sanity. Auth, admin, modular architecture in one pip install.
Project description
Build large Flask apps without losing your sanity.
Auth, admin panel, modular architecture โ all the batteries, none of the boilerplate.
๐ 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 newcreates a project.shopyo startappcreates a module.shopyo startboxcreates 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
requiredecorator 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 --democreates 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 newinside an existing directory to scaffold Shopyo in place. Note:shopyo new .does not work โ the project name must be alphanumeric. Useshopyo 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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file shopyo-4.18.1.tar.gz.
File metadata
- Download URL: shopyo-4.18.1.tar.gz
- Upload date:
- Size: 5.4 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.25
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fbdbea4e547e9e7190dbb12de7ead0cd371a1b2647a2cd9894cc054d21adda92
|
|
| MD5 |
c0484f2adc911b1c01fb982b4c668910
|
|
| BLAKE2b-256 |
8a6a99e786b7f3ddd16f403eac4cead501124d3ad8781a231032d3b4c05d58ad
|
File details
Details for the file shopyo-4.18.1-py3-none-any.whl.
File metadata
- Download URL: shopyo-4.18.1-py3-none-any.whl
- Upload date:
- Size: 5.4 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.25
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
299eac3cd8e598e1e767730f41bdc753d281ed07b0ffeb85e882c66f1104d478
|
|
| MD5 |
bfce200a3b21755b3abe1510aa429584
|
|
| BLAKE2b-256 |
571142aa66d0d49b42b6a7649fc668c5162a7d912f78c6700236c21493803aaa
|