Developer Tools

Doory: A Free, Open-Source Canva Alternative You Can Host Yourself

A free design editor that runs in your browser, exports video and PDF, supports live co-editing, and can run on your own server. Here is what you get and where it still falls short.

·
8 min read
Ankit Singh
Software Engineer
Doory: A Free, Open-Source Canva Alternative You Can Host Yourself

Canva is a great tool. Even Doory's own README says so.

But if you've used any online design tool for a while, you know the pattern. The free plan gets you started, the good features sit behind a paid plan, and your files live on someone else's servers.

Doory takes a different route. It's a full design editor that runs in your browser. Every feature is free. And you can run the whole thing on your own machine.

I spent some time going through the repo and its README. This post covers what Doory is, what's inside, how to set it up, and where I'd be careful.

💡 Quick take: Doory is a young project with a lot packed into it. If you want a free, self-hostable design editor, it's worth a look. If you need a huge template library today, read the "Things to watch" section first.


What is Doory?

Doory is an open-source design editor made by a developer called Siam (GitHub: shaongitbd). You can make posters, social posts, stories, slides, invitations, resumes, thumbnails and business cards.

You can start from a template or a blank page. Then you can export to PNG, JPG, SVG, PDF, MP4 or GIF.

Here are the basics at a glance:

What it is

A browser-based design editor, like Canva

Price

Free, every feature

Account needed?

No, you can start designing right away

Self-hosting

Yes, with Docker Compose

Frontend

React 19, TypeScript, Vite

Backend

Django 5, PostgreSQL

License

Attribution Assurance License

Website

doory.art

Repo

github.com/shaongitbd/doory


Why people might pick it

The README gives four reasons. I think they hold up as a good way to explain the project.

1. Free, for real. There is no Pro plan, no locked templates, no watermarks and no ads. Tools like background removal and video export are open to everyone.

2. Start in one click. You open the editor and design. If you're a guest, your work is saved in the browser. When you decide to make an account, your designs move over in one step.

3. Yours to host. One docker compose up runs the app, the API, the database and live collaboration on your own server. Your designs and uploads stay with you.

4. A real editor. This isn't a toy canvas. More on that next.


What's inside the editor

Here is the feature list from the README, grouped so it's easier to read.

Area

What you get

Text

Headings, curved text, text effects, font pairings, bulleted and numbered lists, an open-licensed font catalogue, and your own uploaded fonts

Elements

Shapes, lines and arrows, about 25,000 icons, emoji and illustrations, stickers, QR codes

Photos

Upload, crop, masks and filters, one-click background removal, stock photo search

Layout

Layers with lock and hide, groups, alignment guides, snapping, rulers, multi-page designs, magic resize

Motion

Enter, exit and emphasis animations and page transitions on a timeline

Sound

Music loops, sound effects, uploads, voiceover recording, trims and fades

Present

Present mode with speaker notes, timing, auto-advance, a laser pointer and a second presenter window

Together

Share links, comments, version history, real-time co-editing

Brand

Brand kits with your colours, fonts and logos

Export

PNG, JPG, SVG, PDF, MP4, WebM and animated GIF

A few of these deserve a closer look.

Background removal that runs in your browser

The background removal model runs in the browser, not on a remote service. That matters if you care about where your photos go.

On a self-hosted setup you install the model with one command: sync_models.

Animation and video

Doory has 27 enter and exit animations, 12 emphasis effects and 16 page transitions. There is also a built-in audio library with 24 music loops and 88 sound effects, all CC0.

You can present a design, or export it as MP4, WebM or an animated GIF. The README says these exports are made in your browser.

If you're designing something to print, you can get a PDF with bleed and crop marks. That's a detail you only find in tools that were built with real use in mind.

Working together

You can share a design with a link that lets people view, comment or edit. Links can be password protected. There are pinned comments, version history, and real-time co-editing with live cursors.


Templates: the honest part

Doory ships with ten starter templates:

  • Gig poster

  • Wedding invitation

  • Event story

  • Sale post

  • Café flyer

  • Quote card

  • Resume

  • YouTube thumbnail

  • Pitch deck

  • Business card

Each one has its own palette, uses open-licensed fonts, and is fully editable. You can add your own templates in the admin area and browse them by category, size and orientation.

Ten is a small number. Canva has a very large library, and Doory's README says so itself. If you live on templates, this is the biggest gap.


Doory vs Canva

The README has its own comparison table. Keep in mind that it comes from the Doory author, so it shows their point of view.

Doory

Canva

Price

Free, every feature

Free plan, paid Pro and Teams plans

Open source

Yes

No

Run it on your own server

Yes

No

Design without an account

Yes

No

Files stay on infrastructure you control

Yes

No

Real-time co-editing and comments

Yes

Yes

Animation, video and GIF export

Yes

Yes

Background removal

Yes, in your browser

Yes

Template library

10 starter templates, plus any you add

A very large library

The pattern is clear. Doory wins on openness and control. Canva wins on content.


How it's built

Here is the stack, straight from the README:

  • In the browser: React 19, TypeScript, Vite, Fabric.js, Yjs and Zustand

  • On the server: Django 5, Django REST Framework, Channels and PostgreSQL

  • Around it: Docker Compose with nginx, optional Redis and S3-compatible storage

The README explains the request flow in one line. The web container serves the app and forwards /api and /ws to the backend, so the browser only talks to one address.

Here is how that looks:

flowchart LR
    B["Browser (React app)"] -->|"port 8080"| W["web container (nginx)"]
    W -->|"/api"| A["Backend (Django)"]
    W -->|"/ws"| A
    A --> P[("PostgreSQL")]
    A -.->|"optional"| R[("Redis")]
    A -.->|"optional"| S[("S3-compatible storage")]

My guess is that Yjs handles the shared document state for co-editing, and Channels carries it over WebSockets. I haven't dug into the code to confirm that, so treat it as a guess.


Self-hosting it

This is where the project shines. The README promises three commands, and that is what it shows.

cp .env.example .env     # set DJANGO_SECRET_KEY and POSTGRES_PASSWORD
docker compose up -d --build
docker compose exec api python manage.py createsuperuser

Then open http://localhost:8080 and start designing.

⚠️ Before you run it: the .env file needs a DJANGO_SECRET_KEY and a POSTGRES_PASSWORD. The README suggests openssl rand -base64 48 for the secret key.

A new site starts empty

This surprised me a little. A fresh install has no templates, icons, fonts or audio. You add them yourself with a few commands:

docker compose exec api python manage.py seed_gallery         # template categories
docker compose exec api python manage.py sync_fonts --popular 100
docker compose exec api python manage.py seed_templates       # the starter templates
docker compose exec api python manage.py seed_elements        # shapes and graphics
docker compose exec api python manage.py sync_element_packs   # icons, emoji and illustrations
docker compose exec api python manage.py sync_models          # background removal model
docker compose exec api python manage.py sync_audio           # music and sound effects

It's a small extra step, but it's good to know about before you wonder where all the content went.

Settings worth knowing

These live in your .env file:

Setting

What it does

SITE_URL

The public address of the site, like https://doory.example.com, with no trailing slash

DJANGO_ALLOWED_HOSTS

The host names the site answers to, comma separated

SECURE_SSL_REDIRECT, SECURE_COOKIES

Set to true behind HTTPS, false for plain http://

EMAIL_URL, DEFAULT_FROM_EMAIL

SMTP settings. Without them, emails are printed to the API log

WEB_PORT, WEB_BIND

Where the site is published (default 0.0.0.0:8080)

INSTALL_CHROMIUM

Set to false to skip the headless browser that server-side PDF export needs

GOOGLE_CLIENT_ID

Turns on "Sign in with Google"

UNSPLASH_ACCESS_KEY, PEXELS_API_KEY

Turn on stock photo search

USE_S3 and AWS_*

Store uploads in S3-compatible storage instead of a local volume

Running it for development

If you want to hack on it instead:

make setup     # virtualenv, dependencies, local database
make dev-api   # API on http://localhost:8000
make dev-web   # app on http://localhost:5173 (second terminal)

Run make help to see the other targets, like tests and lint.


Where do your designs live?

This is a fair question for any design tool, and the README answers it clearly:

  • Guest designs and their images stay in the browser, on that device.

  • Signed-in designs are stored on the server that runs Doory. If you self-host, that's your server.

  • Uploads can go to a local volume or to S3-compatible storage.

One thing follows from this. If you design as a guest and then clear your browser data, that work is tied to the browser. If you care about keeping a design, make an account.


The license: read this part

Doory uses the Attribution Assurance License. You can use it, change it and redistribute it, including for commercial work.

But there's a condition. You must credit the author. That means keeping the license and NOTICE files with the code, and showing a credit line in the running app. The credit names Siam and links to the repo.

📌 Worth knowing: if you plan to host Doory for your own users or your business, the credit has to be visible in the app. Read the LICENSE and NOTICE files yourself before you commit. I'm not a lawyer, and this is a summary of what the README says.

Third-party software, fonts and content keep their own licenses. Those are listed in THIRD_PARTY.md.


Things to watch

I like the ambition here. But a few facts are worth knowing before you build on it.

It's early. When I looked, the repo had 6 commits, 3 stars, 0 forks and 16 pull requests. That's a young project with a small community. Expect rough edges, and don't assume a big team is behind it.

The template library is small. Ten starters is a good base. It's not a Canva replacement for someone who wants thousands of ready-made layouts.

Setup takes more than three commands. The three commands get the app running. Getting templates, fonts, icons and audio in place takes the extra seed steps above.

You become the admin. Self-hosting is the whole point, but it also means you handle updates, backups and email setup. That's real work.

The comparison table is the author's view. I didn't verify Canva's current features, so check them if the details matter to you.


Who should try it?

Doory looks like a good fit if you:

  • want a free design tool with no paywalled features

  • care about keeping files on your own infrastructure

  • run a small team, community or school and want one shared editor

  • like reading and contributing to open-source projects

It's probably not the right fit if you need a huge template library today, or you don't want to look after a server.


Final thoughts

What I like most about Doory is how complete the feature list is for an open-source project. Layers, animation, video export, print-ready PDFs and live co-editing are not small things to build.

It's young, and the template library is small. But the direction is clear, and the three-command setup makes it easy to try.

If you're curious, start here:

And if the project is useful to you, the README asks for a ⭐ on GitHub. It helps other people find it.

Comments(0)

Join the discussion by logging into your account.

No comments yet. Be the first to comment!

Ankit Singh
Ankit Singh

Software Engineer

Passionate developer sharing knowledge about modern web technologies and best practices.

Subscribe to Ankit Singh's Newsletter

Direct email dispatches when new stories are published. Zero algorithms.