
Show HN: Wagtail, our new Django CMS - tomd
Wagtail is a new, open-source Django CMS focused on flexibility and user experience. It was originally built for the Royal College of Art, but now we&#x27;re able to share it with everyone. See<p>https:&#x2F;&#x2F;github.com&#x2F;torchbox&#x2F;wagtail<p>and<p>http:&#x2F;&#x2F;wagtail.io (marketing site)<p>and<p>http:&#x2F;&#x2F;www.rca.ac.uk&#x2F; (first big site built on Wagtail)<p>We&#x27;re really proud of the user interface, and we hope that Wagtail will make it easy for Django developers to build beautiful, modern sites. Feedback very welcome!<p>Tom Dyson, Technical Director at Torchbox (Wagtail developers)
======
tilt
[https://github.com/torchbox/wagtail](https://github.com/torchbox/wagtail)

[http://wagtail.io](http://wagtail.io) (marketing site)

[http://www.rca.ac.uk/](http://www.rca.ac.uk/)

~~~
mkesper
This HN no-link-doctrine is really annoying...

------
waterside81
I did the whole vagrant setup demo thing - this CMS looks unbelievably nice.
Kudos to the design team. Stock Django admin (even with Grappelli) is kinda
ugly now.

Like others mentioned, a live demo is definitely preferable - not many will go
through the vagrant setup.

Also there's a bug when trying to view a sample page:

'embed_filters' is not a valid tag library

But good stuff otherwise!

~~~
mattwestcott
oops, hazards of working off a live Git repo there :-) Fixed now - please run
a git pull / pip install -r requirements/dev.txt and try again!

------
yaph
The first thing I look for on a marketing site for a CMS is the link to the
demo, which isn't there.

Generally, I think demo videos don't fill this void and this one does a
particularly bad job, unless maybe played at half speed.

Apart from that, Wagtail looks very interesting and I'll take the time and
install the demo app. Thumbs up for choosing Postgres and integrating
CoffeeScript and LESS.

~~~
tomd
The video is intended to pique the interest of CMS choosers with short
attention spans... you're right that it's a poor substitute for a real demo,
and we'll try to get something up as soon as possible. What's the best
practice for refreshing the content on demo sites? I worry that a scheduled
content reset will confuse people who are halfway through trying publishing a
test page.

The CoffeeScript and LESS integration is a tricky one. We like LESS but we're
worried that npm / lessc is an annoying dependency, and we're considering
switching to SASS / SCSS, which has a pure-Python compiler, unlike LESS.
Opinions very welcome.

~~~
yaph
An idea for a content reset, would be to warn the user before it actually
happens and/or having a visible countdown widget that tells you when reset
happens.

I see that the npm dependency might draw away people, maybe provide and add-on
that depends on npm and makes it easy to integrate CoffeeScript, LESS, SASS?

~~~
tomd
> An idea for a content reset, would be to warn the user before it actually
> happens and/or having a visible countdown widget that tells you when reset
> happens.

Right, that doesn't sound too hard, we'll aim to add that.

> I see that the npm dependency might draw away people, maybe provide and add-
> on that depends on npm and makes it easy to integrate CoffeeScript, LESS,
> SASS?

Or perhaps we'll just ship the compiled CSS / JS and provide instructions for
people who want to use LESS etc in their Wagtail sites.

~~~
emhart
+1 for compiled CSS/JS. I'd love that and it would get me up and playing with
it much faster, personally.

------
rikkus
So, were you hired to make a site for the RCA and decided to build a CMS
first? I'm interested in how this came about.

~~~
tomd
Yes, sort of. We evaluated the options of sticking with their commercial CMS
or switching to a famous open source CMS which we're very familiar with, but
we estimated that it would be cheaper to build the site they wanted from
scratch in Django. When we'd finished it felt like a lot of the work was
reusable, and the RCA kindly agreed to let us open source the project. We've
spent the last few weeks extracting it into a standalone package, but there
are definitely still some rough edges: documentation, obviously; more tests;
i18n.

~~~
leobelle
This is pretty awesome. A non-PHP CMS is long, long overdue. I know there
already are some, but I think the challenge is that non-technical types are
still more able to quickly get started by just dragging some PHP into their
shared hosting service and turning it on. I hope this will change, and a
project like yours is key to making that transition.

------
jordn
Congrats on open sourcing this. It looks great! I'm very pleased to see a
Django app where the design hasn't come as an afterthought.

I'm just about to test it out but I have a question – how easy is it to to
integrate this into an existing project?

~~~
tomd
Thanks! Wagtail is just a collection of apps which can be added to a standard
Django project. Serafeim's tutorial demonstrates this:
[https://gist.github.com/tomdyson/8974456#creating-and-
config...](https://gist.github.com/tomdyson/8974456#creating-and-configuring-
your-project)

Note
[https://github.com/torchbox/wagtaildemo/blob/master/wagtaild...](https://github.com/torchbox/wagtaildemo/blob/master/wagtaildemo/urls.py#L46)
(from the example Wagtail site). To incorporate it into an existing app you'll
just need to adjust the URLs so Wagtail isn't taking over the whole URL space.

------
Ricapar
Quick tip on the video: I felt it moved a little too quickly. I tried keeping
up with the text, and it seemed to get pulled away from me as I was about
2/3rds through each time. At the end I was slightly dizzy :/

~~~
tomd
Thanks for the feedback. It's my fault - I kept asking our video guy to speed
it up! We're working on a proper 3 minute walk through right now. It should be
ready in the next day or so.

~~~
tomd
Here's the promised walk-through:
[https://vimeo.com/86719782](https://vimeo.com/86719782)

------
slater
Really nice. One question:

One feature I always wanted implemented in whatever CMS I was using was the
ability to enter, say, a comma-delimited list of page titles, select the
parent page and template to use, and have the CMS generate those pages in one
go, instead of having the content editors hit the "New page" button fifty
times.

I used to work for a large medical company, and they're departments always had
special requirements, with lists of sub-pages to create for their department.
Three hours later (it was a Java-applet-based CMS :( ), I was just about done
with creating their pages.

~~~
stevejalim
Wagtail is open-source, so there's nothing stopping you/someone adding that
functionality - indeed, it'd be pretty trivial do to as a Django management
command that would work something like:

    
    
         ./manage.py create_page_stubs path/to/your/list.csv

------
gizzlon
Anyone got a working dockerfile for the demo? Took a stab at it, but it
doesn't work :(

[https://index.docker.io/u/oyvindsk/wagtaildemo-
incomplete/](https://index.docker.io/u/oyvindsk/wagtaildemo-incomplete/)

[https://github.com/oyvindsk/docker-
playground/tree/master/do...](https://github.com/oyvindsk/docker-
playground/tree/master/dockerfiles/wagtaildemo)

~~~
gizzlon
ALmost works now:

docker run -p 8000:8000 oyvindsk/wagtail-demo

[https://index.docker.io/u/oyvindsk/wagtail-
demo/](https://index.docker.io/u/oyvindsk/wagtail-demo/)

------
djm_
Nice presentation on the marketing side.

Is there a live demo anywhere or plans for one? In particular to try out the
admin functionality.

~~~
tomd
Thanks! Yes, we'll have a live demo soon, and a more in-depth video of the
admin functionality even sooner - hopefully in the next few hours.

If you have Vagrant and a reasonable internet connection, the easiest way to
try out the admin UI is to clone the demo site at
[https://github.com/torchbox/wagtaildemo](https://github.com/torchbox/wagtaildemo),
which includes a range of example content types.

------
Cynddl
Seems really good! Are you planning to compare it with other CMS (especially
Django-CMS)? I would like to see its performances (with or without varnish).

Would you like to add OAuth support or other auth mechanisms like CAS? =) I
didn't find documentation for the "WAGTAIL_PASSWORD_MANAGEMENT_ENABLED"
option.

~~~
tomd
Django CMS definitely has more features than Wagtail (and contributors, and
impressive example sites). There's a large grid of CMSs and features at
[https://code.djangoproject.com/wiki/CMSAppsComparison](https://code.djangoproject.com/wiki/CMSAppsComparison)
which we haven't added ourselves to yet. We want to resist getting into a CMS
feature race - the focus for Wagtail is providing a thoughtful and attractive
user interface, and making it as easy as possible for designers to build
beautiful sites. As for performance, we haven't done any proper benchmarking,
but it feels very fast!

We already support LDAP auth, and CAS and / or Shibboleth is on the roadmap
for the near future. More importantly, we'll have proper Sphinx docs soon,
with details of the features that are already available.

~~~
pbowyer
> We want to resist getting into a CMS feature race - the focus for Wagtail is
> providing a thoughtful and attractive user interface, and making it as easy
> as possible for designers to build beautiful sites.

Yes, please keep that focus. A well-focused project is both refreshing and
produces extraordinary results. You also appear to have a 'bigger-picture'
view than many CMS creators - i.e. on the designers and the people who end up
using it, not just the developers.

Congratulations Tom!

------
acd
Very nice! Thanks for the good work! Will check it out.

Feedback: I hope for some good documentation like a starter tutorial and video
screencast so more people can understand your CMS and use it.

~~~
tomd
Thanks! In case you missed it elsewhere there's a tutorial by Wagtail
contributor Serafeim Papastefanos here:
[https://gist.github.com/tomdyson/8974456](https://gist.github.com/tomdyson/8974456)
but we're working hard on official docs and a proper screencast.

~~~
selmnoo
> To follow this tutorial you will need to have Python 2.7 installed with a
> working version of pip and virtualenv.

Is that true in general for this CMS, that Python 2.7 will be needed? Python 3
isn't supported?

~~~
tomd
Yes, we focused on Python 2.x support for initial release. I'm afraid we
haven't even tried Wagtail on Python 3 yet. Having said that, at Torchbox
(where Wagtail originated) we have a general if somewhat vague principle that
- as responsible Python developers - we should support the adoption of Python
3, so 3.x support is certainly a goal for the project.

If anyone has time to test Wagtail on Python 3 and report any problems to
[https://github.com/torchbox/wagtail/issues](https://github.com/torchbox/wagtail/issues)
that will accelerate the work!

------
SEJeff
Would you gents (upstream wagtail guys) be interested if I took a shot at
integrating pelican into this? I'd like a static blog and semi dynamic site
and <3 django.

~~~
miles932
That sounds very delicious to me. this CMS to build sites, and S3 static to
host them :)

~~~
tomd
The Royal College of Art (for whom Wagtail was originally developed) have
commissioned an 'archive' feature, which will take a snapshot of the whole
site, or a sub-section of it, and export as standalone HTML with all assets.
We're planning to extend this feature to support publishing to S3 / Github
Pages / SFTP etc.

------
dangayle
Thanks for the hard work. We need more CMSs in Python!

------
antihero
What's API support like? IE if I wanted to create a search widget that uses
JSON. Have you considered something like Django REST Framework?

~~~
tomd
As it happens, the predictive search already returns JSON, but we don't have a
general purpose API yet. It's on the list! Pages are just plain Django models
under the hood, so Django REST Framework would be a good fit.

~~~
SEJeff
Having used piston, then tastypie, and now django-rest-framework for a number
of json rest services, drf is hands down the nicest. Also, Tom Christie (main
author) is super responsive via twitter or IRC so you can get bugs fixed / prs
merged super fast. I literally can't recommend it enough

------
ewebbuddy
Looks really nice.. I can't wait to pull and try it out. Just out of
curiosity: Is the marketing site also built using Wagtail??

~~~
tomd
I was hoping no-one would ask that :)

No: the marketing site ([http://wagtail.io/](http://wagtail.io/)) is a single
static HTML page. But we're about to add a blog, so we'll convert the whole
thing into a Wagtail site, hopefully next week.

------
humanfromearth
Looks great. One thing that I find not so good is: There are no tests.

It would be hard to convince anyone to contribute without some unit tests.

~~~
mattwestcott
There are some
[https://github.com/torchbox/wagtail/blob/master/wagtail/wagt...](https://github.com/torchbox/wagtail/blob/master/wagtail/wagtailsearch/tests.py)
\- but not enough, we know. We're on it!

------
felipebueno
Wow, this is really beautiful. Just in time for my next project: a tiny ERP to
manage my sister's bakery.

Thanks for open sourcing this. :)

~~~
tomd
Please let us know if you end up using it. We'll post a Wagtail t-shirt to
your sister's bakery!

------
eknuth
Nice! I was just reevaluating the django cms world and happened to stumble on
this post.

Any support for multiple languages, yet?

~~~
tomd
Hi eknuth. There's a brief mention of this elsewhere in the thread: "[Wagtail
does support multiple languages] but it doesn't (yet) do anything clever like
link different language versions of the same article. On a related subject,
we're starting on i18n next week, with the first localisation - Greek -
following shortly."

------
andybak
Are there any developer docs? How extensible is it? How we do integrate 3rd
party apps into the wagtail admin?

~~~
tomd
Developer docs: currently
[https://github.com/torchbox/wagtaildemo/blob/master/README.m...](https://github.com/torchbox/wagtaildemo/blob/master/README.md)
and this tutorial from contributor Serafeim Papastefanos:
[https://gist.github.com/tomdyson/8974456](https://gist.github.com/tomdyson/8974456)

Clearly this isn't enough and we're working on proper Sphinx docs which should
be ready in the next few days.

Extensibility: it's just a Django app, so you can include it in your existing
project, or add your own apps / views / middleware etc. There are some hooks,
e.g. for including your app into the main admin navigation - see
[https://github.com/torchbox/wagtail/blob/master/wagtail/wagt...](https://github.com/torchbox/wagtail/blob/master/wagtail/wagtailadmin/templatetags/wagtailadmin_nav.py#L68)
for an example of where a hook gets called. It's a good candidate for
developer docs!

~~~
andybak
That looks interesting. I've got a CMS which shares some philosophical
similarities to Wagtail. It's a lot clunkier and uglier though. I wish I had
the time to add some polish. I think the 'pages have types' idea is spot on
and something all the other Django CMS's I've seen seem to get wrong. (too
much freedom for the user to create 'Frankenstein pages' by arbitrarily
combining blocks).

The editor and image library is very nice.

I feel you've gone slightly too far in the 'flat and beautiful' direction.
Some UI elements lack affordance and I think usability has suffered slightly
at the hand of aesthetics.

Finally I still feel there's a case for not completely replacing contrib.admin
but that is a complex debate and I can see in your specific case you probably
made the right decision. I'd really like to see if I could achieve some of
your elegance without abandoning (or reinventing!) contrib.admin.

Best of luck!

~~~
tomd
Thank you very much for your thoughtful feedback. We're pleased with the UI
but obviously it's not perfect - I've just started using slack.com which is
also pretty flat but feels like a new benchmark for usability. I'll discuss it
with the design team, and if you have any more specific feedback we'd love to
hear it.

There are still a couple of Wagtail features which rely on contrib.admin. We
have to decide whether to smarten up the contrib.admin UI or pull them into
the Wagtail admin. Is your CMS available somewhere public?

~~~
andybak
Not public public but there's a Git url, I'm happy to share if you drop me an
email: andy@andybak.net

------
yen223
Python 2 or 3?

~~~
joshfinnie
Classifier say 2:

    
    
        'Programming Language :: Python :: 2.7'

------
adamlj
Does it support handling multiple sites? If not, do you have any plans for
adding multi site feature?

~~~
mattwestcott
Yes, multiple sites are supported - there's a single tree for all pages in the
system, and any number of sites can be 'rooted' at different points in the
tree. (Currently this is configured in Django's own admin interface, but we'll
be moving this into the Wagtail interface proper.)

------
ereckers
After watching your marketing video I now know why I don't get much done. You
guys work fast.

------
abhimskywalker
Just tested out the demo site on local machine. The admin pages look
gorgeous!!! Great work!

------
guptankur
Why is npm listed as dependency ? Just curious. Congrats on this, it looks
awesome.

~~~
tomd
We currently need npm for lessc, as part of django-compressor, to compile
LESS. We want to reduce the dependencies as much as possible, so we're looking
into converting to SASS / SCSS, which has a pure-Python compiler, or simply
shipping the compiled CSS / JS files for people who don't need to change them.

Thanks for the congrats!

~~~
antihero
Can we use our own frontend stacks to design the frontend?

~~~
tomd
Yes, absolutely! Our first principle for Wagtail is that it should in no way
impede design decisions.

LESS is (currently) used for the admin UI, and the compiler / compressor is
available to the front-end if you want it, but you can easily plug in your own
compilers or use plain CSS if you prefer.

------
kkl232
Really excited for a CMS that takes the writing experience into account

------
leo_santagada
Does it support content in two languages?

~~~
tomd
Yes, but it doesn't (yet) do anything clever like link different language
versions of the same article.

On a related subject, we're starting on i18n next week, with the first
localisation - Greek - following shortly.

------
bencollier49
Brilliant name! Good work chaps!

~~~
tomd
Thank you! It's named after these lovely little birds which hang round our
offices (near Oxford, in the UK) from spring to autumn:

[https://www.rspb.org.uk/wildlife/birdguide/families/pipits.a...](https://www.rspb.org.uk/wildlife/birdguide/families/pipits.aspx)

~~~
yen223
You missed out on a great naming opportunity:

    
    
        pip install pipit

------
dandigangi
Frameworks on frameworks on frameworks.

~~~
afandian
What's the third 'framework'?

------
jlafon
This looks interesting, but I can't take it seriously. From what I can tell,
you haven't written any tests at all.

~~~
porker
So a CMS that works as the client requires and has a very nice UI can't be
taken seriously because it has no tests?

That's a _very_ developer focused mindset.

I'm glad it's been open sourced and I hope to see tests added by them or the
community, but it's not a deal-breaker for me.

And if you contribute tests I hope they'll be full functional tests to spot
cross-browser regressions, JS breaks and the rest ;)

~~~
batiste
Clients do care about having a stable and bug free software. Tests is one of
the best way to achieve this.

~~~
porker
I know and I agree, but I feel tests often cover the wrong thing, or what the
developers feel is most important. Unit testing libraries within the system:
great. Leaving the rest: not so great. Or aiming for 100% code coverage: uggh.

Playing devil's advocate here: Testing the system throughout to ensure
components play nicely together and that functionally the system works as
expected - this is in my opinion more important than unit testing.

~~~
SEJeff
There are two types of tests.

unit tests - most common and are tightly tied to the code. integration tests -
simulate example user behavior and test the pieces work together as expected.
For this type of app, selenium is the best tool for the job and splinter is an
amazing python abstraction ontop of selenium. For instance, I have Jenkins
setup splinter to run chrome and Firefox tests headlessly using a frame buffer
(xvfb) to test the apps I'm responsible for as part of $dayjob.

Both types of tests are necessary and equally important.

[http://splinter.cobrateam.info](http://splinter.cobrateam.info)

~~~
porker
I applaud your view. Here in the PHP universe we're only starting to exit the
"Everything must be unit tested" phase of programmer evolution, and
integration/functional testing is still a novelty.

I've not come across Splinter before, that looks interesting. I've been using
PhantomJS via CasperJS but my tests so far have been brittle...

~~~
SEJeff
Well we used to be in the same boat and then... A new developer wrote a few
new bit pieces of code that were supposed to work together. He overly unit
tested each piece discretely, but they didn't work together. So when we pushed
it out to staging and I manually tried to look at things, the entire design
was wrong and would never work.

From then on, the next task said individual worked on was setting up selenium
and write integration tests. Now we are in a pretty sweet place.

We have unit tests, which verify each discrete thing works as it is expected
to and make refactoring large swaths of code a breeze. Then we have
integration tests, which run on IE (in a windows vm that is on our build
server), firefox, and chrome via xvfb. It even helps us catch those obnoxious
conditions where javascript runs fine in "real browsers" and fails on IE's
lameness. Give it a try :)

