Skip to main content

Publ

A personal publishing platform. Like a static publishing system, only dynamic.

Motivation

I make a lot of different things — comics, music, art, code, games — and none of the existing content management systems I found quite satisfied my use cases. Either they don't allow enough flexibility in the sorts of content that they can provide, or the complexity in managing the content makes it more complicated than simply hand-authoring a site.

I wanted to bring the best of the classic static web to a more dynamic publishing system; scheduled posts, private posts, category-based templates, and built-in support for image renditions (including thumbnails, high-DPI support, and image galleries). And I want to do it all using simple Markdown files organized in a sensible file hierarchy.

Basic tenets

  • Containerized web app that's deployable with little friction (hopefully)
  • Do one thing (present heterogeneous content), do it well (hopefully)
  • Use external tools for site content editing
  • Be CDN-friendly
  • High-DPI images and image sets as first-class citizens
  • Interoperate with everything that's open for interoperation (especially IndieWeb)

See it in action

The main demonstration site is at https://beesbuzz.biz/ — it is of course a work in progress! The documentation site for Publ itself (which is also a work in progress) lives at https://publ.beesbuzz.biz/

Operating requirements

I am designing this to work in any WSGI-capable environment with a supported version of Python. This means that it will, for example, be deployable on any shared hosting which has Passenger support (such as Dreamhost), as well as on Heroku, Google AppEngine, S3, or any other simple containerized deployment target.

The file system is the ground truth for all site data, and while it does use a database as a content index, the actual choice of database doesn't matter all that much. A typical deployment will use SQLite, but MySQL, Postgres, Oracle, and Cockroach are also supported.

Developing Publ

In order to develop Publ itself, you'll need to install its dependencies; see the getting started guide for more information. In particular, make sure you have compatible versions of Python and Poetry installed, and, if on Windows, you'll probably need to install the Visual C++ build tools.

As far as developing Publ itself goes, cloning this repository and running ./runTests.sh (Linux/macOS/etc.) or wintests.cmd (Windows) should get you up and running. The runtime manual test suite site lives in tests/ (with the actual site content in content/, templates/ and static/).

For developing CLI functionality, you'll have to override the FLASK_APP environment variable to be test_app.py.

Additional resources

The Publ-site repository stores all of the templates, site content, and configuration for the Publ site.

The Publ-templates-beesbuzz.biz repository provides a stripped-down sample site based on my personal homepage.

Authors

In order of first contribution:

Release files for Publ 0.8.16

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

Source distribution (sdist)

Source distribution for Publ 0.8.16
File Size Uploaded
publ-0.8.16.tar.gz 81.6 kB Details

Built distribution (wheel)

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

Total release size: 176.7 kB

Release files / publ-0.8.16.tar.gz

Download URL publ-0.8.16.tar.gz
Size 81.6 kB
Tags Source
SHA-256 checksum
How to use checksums
f0e518e8fb493cbe6694737d05773093462d71a8041bc32b5edb3efa84692def
BLAKE2b-256 checksum
How to use checksums
a512a6ad5f509660f9b6ed42198035d7e447978bd860afd1ef68c470d0179670
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.1.4 CPython/3.13.15 Darwin/27.0.0

Release files / publ-0.8.16-py3-none-any.whl

Download URL publ-0.8.16-py3-none-any.whl
Size 95.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
85a58c0a3287faa517373442d7057f56a79e4aeff6cc5a2a0aaf6c7a8ab3a610
BLAKE2b-256 checksum
How to use checksums
90b4c77f9d8b31ab9cbfd0facb759ab0e822a716af75e5ed1146745b65093fb5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.1.4 CPython/3.13.15 Darwin/27.0.0

Release history Release notifications | RSS feed

This release

0.8.16 This release

2 release files

0.8.15

2 release files

0.8.14

2 release files

0.8.13

2 release files

0.8.11

2 release files

0.8.10

2 release files

0.8.9

2 release files

0.8.8

2 release files

0.8.7

2 release files

0.8.6

2 release files

0.8.5

2 release files

0.8.4

2 release files

0.8.3

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.37

2 release files

0.7.33

2 release files

0.7.32

2 release files

0.7.29

2 release files

0.7.26

2 release files

0.7.25

2 release files

0.7.24

2 release files

0.7.23

2 release files

0.7.19

2 release files

0.7.18

2 release files

0.7.17

2 release files

0.7.15

2 release files

0.7.13

2 release files

0.7.12

2 release files

0.7.11

2 release files

0.7.10

2 release files

0.7.9

2 release files

0.7.8

2 release files

0.7.7

2 release files

0.7.6

2 release files

0.7.5

2 release files

0.7.4

2 release files

0.7.3

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.14

2 release files

0.6.11

2 release files

0.6.9

2 release files

0.6.8

2 release files

0.6.7

2 release files

0.6.6

2 release files

0.6.5

2 release files

0.6.4

2 release files

0.6.3

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.16

2 release files

0.5.15

2 release files

0.5.12

2 release files

0.5.11

2 release files

0.5.10

2 release files

0.5.9

2 release files

0.5.8

2 release files

0.5.6

2 release files

0.5.5

2 release files

0.5.4

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.6

2 release files

0.4.5

2 release files

0.4.4

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.20

2 release files

0.3.18

2 release files

0.3.17

2 release files

0.3.16

2 release files

0.3.15

2 release files

0.3.13

2 release files

0.3.12

2 release files

0.3.11

2 release files

0.3.10

2 release files

0.3.9

2 release files

0.3.8

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.24

2 release files

0.1.21

2 release files

0.1.20

2 release files

0.1.19

2 release files

0.1.18

2 release files

0.1.17

2 release files

0.1.16

2 release files

0.1.15

2 release files

0.1.14

2 release files

0.1.13

2 release files

0.1.12

2 release files

0.1.11

2 release files

0.1.10

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

3 release files

0.1.1

2 release files

0.1.0

3 release files

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