Files
wekan/docs/DeveloperDocs/Developer-Documentation.md
Lauri Ojansivu b7589737f5 File docs/Features the way the WeKan menus are.
A feature's guide now sits under the menu it is used from, read from the
templates rather than from where somebody once put it: Header-Bar,
All-Boards, Pages, Board-Header (search and every Board View), Board-Sidebar
(Board Settings, Filter, Members, Labels, Archive), Rules, Swimlanes, Lists,
Cards, Member-Settings, Admin-Panel and Login-Page. Topics used from several
menus (editor, history, theme, translations, email, troubleshooting) are in
General.

- Each area has a README mapping its menu entries to their guides and to the
  template or server module that implements them. Board-Header/README.md
  lists all 40 Board View entries with the template boardBody.jade renders;
  five views (Table, Calendar Mode, Time, Timeline, Map) have no guide of
  their own yet and say so.
- Board-View.md listed 25 views while BOARD_VIEWS has 40; it now lists all
  of them with their English labels.
- Pages keep their file names. Where a released changelog links an old path,
  a "# Moved" page stays there and points to the new one; test-menu.sh skips
  folders holding only those.
- Undo was filed under Login; it is General/Undo now.
- Every link in docs, code comments, scripts and tests follows the move;
  docsLinksResolve checks them all.

Tests that read a doc follow it to its new place. boardViewSettings now fails
when Board-View.md or Board-Header/README.md differs from BOARD_VIEWS, or
names a template boardBody.jade does not render.

Thanks to xet7 !
2026-10-16 23:45:35 +03:00

7.6 KiB

Style guide

We follow the meteor style guide.

Please read the meteor style guide before making any significant contribution.

Stories about how Wekan works, and developing Wekan

Building code and submitting pull request

  • Building code and submitting pull request
  • When you start meteor command, it watches for changes to files in wekan directory and subdirectories, and if it detects changed code, it starts rebuilding bundle and then reloads webbrowser after that automatically
  • Also look at meteor changelog mentioned new feature hot reload how that could make reloading faster

VSCode / VSCodium

  • I use VSCodium that has MS tracking code removed
  • Plugin Prettier for right click format javascript code with prettier
  • There could be other plugins for Meteor, Jade, Stylus, Dockerfile, etc

Finding code

There is find.sh script that ignores generated directories, finds code in subdirectories, and paginates with less. For example, finding how search cards is implemented:

cd wekan
./find.sh js-search

When you run this, you see .jade template files where is search input box, and .js files where is the search code. CSS is in .styl files.

Getting Started

  • Currently Wekan development is done mainly at Ubuntu 20.10 64bit, but building Wekan does work on any Debian, Ubuntu, WSL Ubuntu 20.04, Mac. Sametime maybe on Windows with choco install -y meteor and installing packages it then asks for with meteor add ... or meteor npm install --save ... and then running meteor again.
  • Docker up-to-date way: You can clone wekan/wekan repo and update docker-compose.yml file ROOT_URL etc as documented at https://github.com/wekan/wekan commented docker-compose.yml file, install docker, and build from source with docker with docker compose up -d --build
  • Docker not up-to-date way: Docker environment for Wekan development.

Pull Request Workflow (Please read before submitting PR's)

Preventing Travis CI lint errors before submitting pull requests

  • NOTE: Travis is currently broken and always shows warnings and errors like variables not defined or not used, so if your code works, ignore Travis.
  • Eslint for linting. To prevent Travis CI lint errors, you can test for lint errors by installing npm install eslint and running it with npm run lint and trying automatic fixing with eslint --fix filename.js
  • There is also probably not-currently-working as of 2018-05-05 jsbeautifer website with settings Indent with 2 spaces (topmost dropdown), [X] Space before conditional: "if(x)" / "if (x)", [X] Use JSLint-happy formatting tweaks.

Choosing issues to work on

  • You are free to select what feature to work on.
    • Leave a comment on an issue saying that you're working on it, and give updates as needed.
    • Work and concentrate on one issue at a time and finish it, before moving to other issue.
  • Keep list of your contributions on your personal website.
  • Keep track of time it takes to implement each part of a feature, so you can estimate what time it would take to implement similar feature. After implementing feature, review your estimate was it correct, make improvements to your process and estimates, also keeping enough time allocated in estimate if something is harder to implement. Employers look for coders with proven track record.
  • You can ask for comments from others, but usually those feature requests are clearly defined how they should work. You can place those Settings options there where it seems most logical for you.

Main point is to be friendly to those commenting of your code, and incorporate those suggestions that make most sense.

Build Pipeline

  • Templates are written in JADE instead of plain HTML. Also see HTML to JADE converter.
  • CSS is written in the Stylus precompiler - see Stylus to CSS converter, and
  • Meteor templates are created as BlazeLayout templates.
  • Instead of the allow/deny paradigm a lot of the collections defined in the project use mutations to define what kinds of operations are allowed.

For further details look for the 'feature summaries' in the Wiki (still in progress) otherwise go through the git history and see how old features were built. Might I suggest the Start and Due date feature wefork#26

Translations

If adding new features, please also support the internationalization features built in. Refer to the Translations wiki page.

Export From Trello

It's possible to import your existing boards from Trello. Instructions here

Directory Structure Details

Directory Structure

Chat

Wekan chat