A platform to create documentation/wiki content built with PHP & Laravel

Overview

BookStack

GitHub release license Crowdin Discord Repo Stats Build Status StyleCI

A platform for storing and organising information and documentation. Details for BookStack can be found on the official website at https://www.bookstackapp.com/.

📚 Project Definition

BookStack is an opinionated wiki system that provides a pleasant and simple out-of-the-box experience. New users to an instance should find the experience intuitive and only basic word-processing skills should be required to get involved in creating content on BookStack. The platform should provide advanced power features to those that desire it but they should not interfere with the core simple user experience.

BookStack is not designed as an extensible platform to be used for purposes that differ to the statement above.

In regard to development philosophy, BookStack has a relaxed, open & positive approach. At the end of the day this is free software developed and maintained by people donating their own free time.

🛣️ Road Map

Below is a high-level road map view for BookStack to provide a sense of direction of where the project is going. This can change at any point and does not reflect many features and improvements that will also be included as part of the journey along this road map. For more granular detail of what will be included in upcoming releases you can review the project milestones as defined in the "Release Process" section below.

  • Platform REST API (Base Implemented, In review and roll-out)
    • A REST API covering, at minimum, control of core content models (Books, Chapters, Pages) for automation and platform extension.
  • Editor Alignment & Review
    • Review the page editors with goal of achieving increased interoperability & feature parity while also considering collaborative editing potential.
  • Permission System Review
    • Improvement in how permissions are applied and a review of the efficiency of the permission & roles system.
  • Installation & Deployment Process Revamp
    • Creation of a streamlined & secure process for users to deploy & update BookStack with reduced development requirements (No git or composer requirement).

🚀 Release Versioning & Process

BookStack releases are each assigned a date-based version number in the format v . [. ] . For example:

  • v20.12 - New feature released launched during December 2020.
  • v21.06.2 - Second patch release upon the June 2021 feature release.

Patch releases are generally fairly minor, primarily intended for fixes and therefore is fairly unlikely to cause breakages upon update. Feature releases are generally larger, bringing new features in addition to fixes and enhancements. These releases have a greater chance of introducing breaking changes upon update, so it's worth checking for any notes in the update guide.

Each BookStack release will have a milestone created with issues & pull requests assigned to it to define what will be in that release. Milestones are built up then worked through until complete at which point, after some testing and documentation updates, the release will be deployed.

Feature releases, and some patch releases, will be accompanied by a post on the BookStack blog which will provide additional detail on features, changes & updates otherwise the GitHub release page will show a list of changes. You can sign up to be alerted to new BookStack blogs posts (once per week maximum) at this link.

🛠️ Development & Testing

All development on BookStack is currently done on the master branch. When it's time for a release the master branch is merged into release with built & minified CSS & JS then tagged at its version. Here are the current development requirements:

This project uses SASS for CSS development and this is built, along with the JavaScript, using a range of npm scripts. The below npm commands can be used to install the dependencies & run the build tasks:

# Install NPM Dependencies
npm install

# Build assets for development
npm run build

# Build and minify assets for production
npm run production

# Build for dev (With sourcemaps) and watch for changes
npm run dev

BookStack has many integration tests that use Laravel's built-in testing capabilities which makes use of PHPUnit. There is a mysql_testing database defined within the app config which is what is used by PHPUnit. This database is set with the database name, user name and password all defined as bookstack-test. You will have to create that database and that set of credentials before testing.

The testing database will also need migrating and seeding beforehand. This can be done with the following commands:

php artisan migrate --database=mysql_testing
php artisan db:seed --class=DummyContentSeeder --database=mysql_testing

Once done you can run php vendor/bin/phpunit in the application root directory to run all tests.

📜 Code Standards

PHP code style is enforced automatically using StyleCI. If submitting a PR, any formatting changes to be made will be automatically fixed after merging.

🐋 Development using Docker

This repository ships with a Docker Compose configuration intended for development purposes. It'll build a PHP image with all needed extensions installed and start up a MySQL server and a Node image watching the UI assets.

To get started, make sure you meet the following requirements:

  • Docker and Docker Compose are installed
  • Your user is part of the docker group

If all the conditions are met, you can proceed with the following steps:

  1. Copy .env.example to .env, change APP_KEY to a random 32 char string and set APP_ENV to local.
  2. Make sure port 8080 is unused or else change DEV_PORT to a free port on your host.
  3. Run chgrp -R docker storage. The development container will chown the storage directory to the www-data user inside the container so BookStack can write to it. You need to change the group to your host's docker group here to not lose access to the storage directory.
  4. Run docker-compose up and wait until the image is built and all database migrations have been done.
  5. You can now login with [email protected] and password as password on localhost:8080 (or another port if specified).

If needed, You'll be able to run any artisan commands via docker-compose like so:

docker-compose run app php artisan list

The docker-compose setup runs an instance of MailHog and sets environment variables to redirect any BookStack-sent emails to MailHog. You can view this mail via the MailHog web interface on localhost:8025. You can change the port MailHog is accessible on by setting a DEV_MAIL_PORT environment variable.

Running tests

After starting the general development Docker, migrate & seed the testing database:

# This only needs to be done once
docker-compose run app php artisan migrate --database=mysql_testing
docker-compose run app php artisan db:seed --class=DummyContentSeeder --database=mysql_testing

Once the database has been migrated & seeded, you can run the tests like so:

docker-compose run app php vendor/bin/phpunit

🌎 Translations

Translations for text within BookStack is managed through the BookStack project on Crowdin. Some strings have colon-prefixed variables in such as :userName. Leave these values as they are as they will be replaced at run-time. Crowdin is the preferred way to provide translations, otherwise the raw translations files can be found within the resources/lang path.

If you'd like a new language to be added to Crowdin, for you to be able to provide translations for, please open a new issue here.

Please note, translations in BookStack are provided to the "Crowdin Global Translation Memory" which helps BookStack and other projects with finding translations. If you are not happy with contributing to this then providing translations to BookStack, even manually via GitHub, is not advised.

🎁 Contributing, Issues & Pull Requests

Feel free to create issues to request new features or to report bugs & problems. Just please follow the template given when creating the issue.

Pull requests are welcome. Unless a small tweak or language update, It may be best to open the pull request early or create an issue for your intended change to discuss how it will fit in to the project and plan out the merge. Just because a feature request exists, or is tagged, does not mean that feature would be accepted into the core project.

Pull requests should be created from the master branch since they will be merged back into master once done. Please do not build from or request a merge into the release branch as this is only for publishing releases. If you are looking to alter CSS or JavaScript content please edit the source files found in resources/. Any CSS or JS files within public are built from these source files and therefore should not be edited directly.

The project's code of conduct can be found here.

🔒 Security

Security information for administering a BookStack instance can be found on the documentation site here.

If you'd like to be notified of new potential security concerns you can sign-up to the BookStack security mailing list.

If you would like to report a security concern in a more confidential manner than via a GitHub issue, You can directly email the lead maintainer ssddanbrown. You will need to login to be able to see the email address on the GitHub profile page. Alternatively you can send a DM via twitter to @ssddanbrown.

Accessibility

We want BookStack to remain accessible to as many people as possible. We aim for at least WCAG 2.1 Level A standards where possible although we do not strictly test this upon each release. If you come across any accessibility issues please feel free to open an issue.

🖥️ Website, Docs & Blog

The website which contains the project docs & Blog can be found in the BookStackApp/website repo.

⚖️ License

The BookStack source is provided under the MIT License. The libraries used by, and included with, BookStack are provided under their own licenses.

👪 Attribution

The great people that have worked to build and improve BookStack can be seen here.

The wonderful people that have provided translations, either through GitHub or via Crowdin can be seen here.

These are the great open-source projects used to help build BookStack:

Issues
  • Notification webhook framework

    Notification webhook framework

    It would be nice if there was a global settings page and the framework to enable activity log notifications.

    Notification when a page is created/modified/deleted Notification when a user is created/modified/deleted Notification when a file is created/modified/deleted

    Notifications could be sent to several possible endpoints, but Slack and Rocket.Chat would be likely good first choices. Eventual additions could be email or messenger platform notifications to the admins

    :hammer_and_wrench: Enhancement :coffee: Open to discussion 
    opened by DeftNerd 51
  • LDAP over SSL not working - ldap_bind(): Unable to bind to server: Can't contact LDAP server

    LDAP over SSL not working - ldap_bind(): Unable to bind to server: Can't contact LDAP server

    Describe the bug LDAP authentication when using LDAPS is not working. I get this error: image

    Already added the CA to the trust store on the server. LDAP configs:

    General auth

    AUTH_METHOD=ldap LDAP_SERVER=ldaps://dc02-srv2016.ad.mydomain.com:636 LDAP_BASE_DN=DC=ad,DC=mydomain,DC=com [email protected] LDAP_PASS=mypasshere LDAP_USER_FILTER=(&(sAMAccountName=${user})) LDAP_VERSION=3 LDAP_EMAIL_ATTRIBUTE=mail LDAP_DISPLAY_NAME_ATTRIBUTE=cn LDAP_ID_ATTRIBUTE=BIN;objectGUID APP_DEBUG=true

    If I change to ldap and port 389, it works perfectly... any ideas?

    opened by joaomezzari 49
  • Support more sublevel in chapters

    Support more sublevel in chapters

    It should be interesting if we could use at least one more level of sub-chapter in a book. Collapsible sections are also interesting.

    :hammer_and_wrench: Enhancement :coffee: Open to discussion 
    opened by ducheneo 46
  • [Feature Request] Change names of objects in the hierarchy (eg,

    [Feature Request] Change names of objects in the hierarchy (eg, "Books" to "Products")

    It would be valuable to have a simple UI-accessible way to rename the types of objects in the wiki hierarchy. I wanted to change from Books -> Chapters -> Pages, to Products -> Features -> Pages. I had to change these in the localization files so it'd be nice to have a simpler way to mass-change these names.

    :hammer_and_wrench: Enhancement 
    opened by bensulli 43
  • [Feature Request] 2FA Implementation

    [Feature Request] 2FA Implementation

    Describe the feature you'd like Implementation of 2FA time based tokens.

    Describe the benefits this feature would bring to BookStack users The benefit would be that I would feel confident allowing BookStack face the public internet if 2FA could be turned on and enforced. This would allow the user direct access without having to turn on a VPN to get inside our network. I realize this might not be the use case for a lot of folks, but for those who are documenting sensitive systems this would be a huge win.

    :hammer_and_wrench: Enhancement :computer: Front-End :factory: Back-End :door: Authentication :hammer: Feature Request 
    opened by cb3inco 33
  • 2019 design

    2019 design

    This is a WIP design update targeted for early 2019. It includes some functional aspects of the design as well as just styles.

    Design Goals

    • Improved design consistency and feature usage throughout application.
    • Provide a more modern, less "stock" feel.
    • Cleanup of colour-scheme for easier customizability.
    • Lessen usage of glaring entity colours.
    • Improved mobile usability.
    • Increased functionality in core areas for improved app usage efficiency. (Book list sorting, for example)

    Early Preview (Comparison)

    Old Books List View bookstack_books_redesign_old

    New Books List View bookstack_books_redesign

    :hammer_and_wrench: Enhancement :wrench: Maintenance :art: Design :computer: Front-End :massage: UX 
    opened by ssddanbrown 33
  • PDF Export issue

    PDF Export issue

    • BookStack Version: 0.16.2
    • PHP Version: 5.6.30
    • MySQL Version: 5.5.52-MariaDB

    Hi, Firstly, thank's a lot for this tool. Secondly, I have an issue with PDF exports. When I try to export an article as PDF, all images are missing from the file created.

    I tried to use WKHTMLTOPDF instead, but without success.

    :bug: Bug 
    opened by Dav31 32
  • Problem with Version 0.31.0

    Problem with Version 0.31.0

    I run BookStack on Ubuntu Container, i want to update to new Version 0.31.0, but after upgrade Bookstack dont work anymore.

    I go to /var/www/html/Bookstack and run git pull origin release && composer install --no-dev && php artisan migrate

    After update Bookstack dont work anymore? Can somebody help me pleas?

    opened by dugs951 31
  • Authenticate via header, e.g. Auth Proxy

    Authenticate via header, e.g. Auth Proxy

    Support for authentication via header would be a great low-cost addition to Bookstack. With this authentication mode, Bookstack would check for the request header X-Webauth-User, and attempt to log-in as that user automatically with no password/token. This mode leverages an external service, the auth proxy, to authenticate users and add the header. Sessions are stored externally also; the user remains logged-in while the header is present.

    Louketo is a good example auth proxy that supports OIDC providers, like Keycloak, Dex, etc.

    Grafana has an authentication module that works in this way.

    To be clear, I am planning to make a pull request to add these features. It would be great to get some feedback on the plan first though!

    How it works

    The login flow looks like:

    1. User visits bookstack.example.com
    2. The request comes through to an auth proxy, not Bookstack. For example:
      • Nginx configured with Basic Auth, or
      • Louketo, connected to an external OIDC IdP like Keycloak.
    3. The auth proxy authenticates the user (via a login page, an SSO token, etc)
    4. The auth proxy adds/populates the X-Webauth-User header, and proxies the request to Bookstack.
    5. Bookstack sees the header, trusts the auth proxy, and logs the user in automatically.
    6. User is redirected to the application, skipping the login page.

    A variety of auth proxies can be used to authenticate and set the header, for example: Basic Auth, vouch proxy, oauth2-proxy.

    Benefits

    • Allows a variety of authn services to be used; e.g. Keycloak supports almost any OIDC provider.
    • Allows sessions to be managed externally (useful for strict security policies).
    • Allows seamless SSO; users only presented with login page once, then have immediate access to other applications.
    • Highly secure; leveraging an auth proxy project whose sole focus is on security.
    • Easy to implement; minimal code to get it working.
    • The Keycloak/Louketo setup is popular in Kubernetes, and would allow Bookstack to fit into existing setups very nicely.
    • Permissions still handled within Bookstack; the auth proxy only handles authentication.

    Considerations

    LDAP: It would be very useful if LDAP Group Sync could continue working. When a user visits Bookstack, they should be authenticated via auth proxy, but their user info (and groups) could still come from LDAP sync.

    Documentation: It is very important that users are not able to forge the X-Webauth-User header as it allows passwordless login to any account. It is also important that users (either via web, or CLI on the server hosting Bookstack) are not able to bypass the auth proxy. There should be a dedicated section in the docs about protecting that header in Nginx, Apache, etc.

    Logout: Logging-out can be handled in many different ways, depending on the auth proxy. The Logout button in the Bookstack UI should be configurable to provide maximum flexibility.

    Configuration: Some extra configuration options will be needed:

    • User auth header (configure which header is used to pass the username/email to Bookstack).
    • User auth field (does the header refer to username, or email?).
    • Proxy IP whitelist (restrict incoming connections to a list of IPs, to ensure users can't bypass the auth proxy).
    • Auto sing-up (if the user doesn't exist, should they be signed up? not applicable if LDAP sync is being used).
    • Signup group (add new sign-ups to this group? again, not applicable for LDAP sync).
    :door: Authentication :hammer: Feature Request 
    opened by ryanc-me 30
  • Agnostic S3 Integration

    Agnostic S3 Integration

    Describe the feature you'd like I'd like an "agnostic" S3 implementation

    Describe the benefits this feature would bring to BookStack users Currently, S3 is limited ONLY to amazon, that I can tell

    Additional context There are other S3 implementations besides Amazon. As it stands, my options for storage with bookstack are, as follows:

    • File (local only)
    • FTP (old, complicated to make highly available, etc)
    • "s3" (Amazon only, meaning it's limited ONLY to paying a cloud provider)
    • Rackspace (rackspace only, again limited to paying a cloud provider)

    I want a better solution for storing uploads, etc. than local storage and FTP, and as it happens, I am running a full ceph cluster, complete with a rados gateway, 3 separate instances, load balanced by a highly available, 3-node traefik cluster, to ensure that my rados gateway (and thus, it's s3 api as well) is always up and available, and 3+ nodes in my ceph cluster, with multiple TBs of redundant storage. I have created a user and a bucket, and they are available via the s3 API (http://docs.ceph.com/docs/mimic/radosgw/s3/) - yet, no matter what I do, going so far as working with a friend to add some custom PHP code, BookStack still insists on using on amazonaws.com for s3...

    :hammer_and_wrench: Enhancement :book: Docs Update :factory: Back-End 
    opened by Gorian 28
  • When creating a user, do not persist the user on invitation sending failure

    When creating a user, do not persist the user on invitation sending failure

    See https://github.com/BookStackApp/BookStack/issues/3174

    What this PR do:

    • Wrap the user creation process in a transaction
    • Add test
    opened by Julesdevops 0
  • enh(recently updated): show updatedBy and updated_at

    enh(recently updated): show updatedBy and updated_at

    See https://github.com/BookStackApp/BookStack/issues/3045 for informations

    opened by Julesdevops 1
  • fix overscroll not working on Chrome

    fix overscroll not working on Chrome

    the previous fix appears not to work on Chrome - this one should work better

    opened by Emmeran 0
  • [Bug Report]: User creation done but reported as failed to the user

    [Bug Report]: User creation done but reported as failed to the user

    Describe the Bug

    When creating a user and selecting the option to send an invitation by email, I got an error like 'An unknown error occured'. Checking the logs, I have this :

    [2022-01-17 16:54:45] production.ERROR: Expected response code 220 but got an empty response {"userId":5,"exception":"[object] (Swift_TransportException(code: 0): Expected response code 220 but got an empty response at /srv/bookstack.santepros.com/BookStack/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php:447)
    [stacktrace]
    #0 .........
    

    So I think my email configuration is broken right ? But the problem is that the user was created anyway, without the assigned role/roles and without the 'user_create' log. Maybe we could wrap this in a transaction, wdyt ?

    Steps to Reproduce

    • Break your bookstack email sending config
    • Create a user with email invitation
    • Normally you will get an error but the user is created if you look at the user list

    Expected Behaviour

    I think the user creation should fail entirely and maybe report a log entry with a high severity like : 'email sending failed' ?

    Screenshots or Additional Context

    No response

    Exact BookStack Version

    21.12

    PHP Version

    7.4

    Hosting Environment

    Ubuntu 20.04

    :bug: Bug 
    opened by Julesdevops 2
  • [Feature Request]: Add book/shelf image from URL

    [Feature Request]: Add book/shelf image from URL

    Describe the feature you'd like

    It would be great if any image could not only be uploaded, but also imported via URL

    Describe the benefits this feature would bring to BookStack users

    Not having to download and re-upload images that are already online somewhere

    Additional context

    No response

    :hammer: Feature Request 
    opened by xplosionmind 1
  • [Feature Request]: Add option to assume default light/dark preference from user system preferences

    [Feature Request]: Add option to assume default light/dark preference from user system preferences

    Describe the feature you'd like

    It would be great if light and dark mode could be toggle automatically, according to the OS preference the user is visiting from.

    Describe the benefits this feature would bring to BookStack users

    No need to manually toggle dark or light theme every time

    Additional context

    No response

    :hammer: Feature Request 
    opened by xplosionmind 1
  • [Support Request]: How to install Lets Encrypt via Nginx?

    [Support Request]: How to install Lets Encrypt via Nginx?

    Attempted Debugging

    • [X] I have read the debugging page

    Searched GitHub Issues

    • [X] I have searched GitHub for the issue.

    Describe the Scenario

    Hello! How to install Lets Encrypt via Nginx? My Nginx config:

    I have modified the standard installation script for Ubuntu 20.04:

    I am getting an error 502 Bad Gateway. What am I doing wrong?

    Exact BookStack Version

    last

    Log Content

    No response

    PHP Version

    8.0

    Hosting Environment

    Ubuntu 20.04

    :dog2: Support 
    opened by aes4096 4
  • [Bug Report]: diff tool error while processing space between general and multibytes characters

    [Bug Report]: diff tool error while processing space between general and multibytes characters

    Describe the Bug

    Diff tool can not work correctly if add/delete space in general character and multibytes characters.

    2022-01-17_160517

    Steps to Reproduce

    1. Create a page
    2. copy and paste this string: test測試
    3. Save page. (revision 1)
    4. Edit page
    5. Add a space between the words. New string will be: test 測試
    6. Save page. (revision 2)
    7. Click Revision of page details.
    8. Click Changes on the latest revision.
    9. Diff tool show some un-expect digits: 2022-01-17_162254

    Expected Behaviour

    Diff tool should show spaces only.

    Screenshots or Additional Context

    Error WILL occur if and if the add / delete space between general character and multibyte character.


    The error will NOT occur on this conditions:

    • New space between general characters. Example: unittest to unit test.
    • New space between multibyte characters. Example: 你好 to 你 好.

    Exact BookStack Version

    21.12

    PHP Version

    7.4.27

    Hosting Environment

    • Ubuntu 20.04.3 LTS
    • Nginx 1.18.0 (reverse proxy)
    • PHP-fpm 7.4.27
    :bug: Bug 
    opened by johnroyer 0
  • [Feature Request]: able to set custom slug when creating bookshelve, book and etc...

    [Feature Request]: able to set custom slug when creating bookshelve, book and etc...

    Describe the feature you'd like

    Request to add a optional field on create page to allow user set a custom slug.

    Describe the benefits this feature would bring to BookStack users

    This may very useful for CJK (Chinese Japanese Korean) users.

    Additional context

    No response

    :hammer: Feature Request 
    opened by Antares95 2
  • [Feature Request]: Allow disable SMTP certificate verification

    [Feature Request]: Allow disable SMTP certificate verification

    Describe the feature you'd like

    I didn't find any way to use SMTP server with self signed certificate.

    It would be great to have an option like 'MAIL_TLS_VERIFICATION=true/false'

    To allow insecure certs we need only add folowing to app/Config/mail.php

    'stream' => [
       'ssl' => [
           'allow_self_signed' => true,
           'verify_peer' => false,
           'verify_peer_name' => false,
       ],
    ],
    

    Describe the benefits this feature would bring to BookStack users

    Sometimes users need to use self signed certificates and usually services allow to disable TLS verification, but not bookstack.

    Additional context

    No response

    :hammer: Feature Request 
    opened by azhinu 0
Releases(v21.12.2)
  • v21.12.2(Jan 10, 2022)

    Links

    Full List of Changes

    This release contains the following fixes and changes:

    • Improved handling of uploaded images when thumbnails fail to load. (#3142)
    • Updated translations with latest Crowdin changes. (#3148)
    • Fixed issue where webhooks would error for specific recycle bin operations. (#3154)
    • Fixed Spanish invite email subject translation. Thanks to @AitorMatxi. (#3153)
    • Fixed issue where custom homepage could cause strange deletion behavior and lead to errors. (#3150)
    Source code(tar.gz)
    Source code(zip)
  • v21.12.1(Jan 6, 2022)

    Security Release

    BookStack v21.12.1 has been released. This is a security release that better enforces permissions on book-sort & chapter-move operations to address scenarios where content could be moved to non-permissible locations.

    It's advised to upgrade as soon as possible if untrusted users can update books or chapters in your BookStack instance.

    Thanks again to @haxatron for discovering and reporting this vulnerability via huntr.dev.

    Full List of Changes

    • Added timeout and debugging statuses to webhooks. (#3139)
    • Added new webhook_call_before logical theme system event hook. (#3138)
    • Updated support for APNG images to retain animation. (#3136)
    • Updated book sort and chapter move handling to enforce more permissions. (#3134)
    • Updated item-search/select box to autofocus on search field. (#3127)
    • Updated webhooks to not stop application on endpoint call failure. (#3122)
    • Updated translations with latest Crowdin changes. (#3117)
    • Fixed webhooks list view issue where columns would become to narrow. (#3135)
    • Fixed linked images showing small in PDF export. (#3120)
    • Fixed issue where pasting certain code blocks would cause erratic editor behavior. (#3133)
    Source code(tar.gz)
    Source code(zip)
  • v21.12(Dec 22, 2021)

    Links

    Full List of Changes

    • Added webhooks. (#147, #3099)
    • Added ability to copy books, chapters & roles. (#3118, #1123)
    • Added audit log IP address search. Thanks to @johnroyer. (#3081)
    • Updated translations with latest Crowdin changes. (#3117)
    • Fixed issue where non-ascii content could break search result previews. Thanks to @Kristian-Krastev. (#3113)
    • Fixed mismatched password validation rules across the application. (#2237)
    Source code(tar.gz)
    Source code(zip)
  • v21.11.3(Dec 15, 2021)

    Security Release

    BookStack v21.11.3 has been released. This is a security release that helps prevent potential discovery and harvesting of user details including name and email address.

    It's advised to upgrade as soon as possible if your BookStack instance is public or is used by untrusted members.

    Thanks to @haxatron for discovering and reporting this vulnerability via huntr.dev.

    Full List of Changes

    • Helped prevent discovery and harvesting of user information. Thanks @haxatron for reporting. (#3108)
    • Updated search API results to include the highlighted preview content. (#3096)
    • Updated search API results to include item URL. (#3080)
    • Updated translations with latest Crowdin changes. (#3093)
    Source code(tar.gz)
    Source code(zip)
  • v21.11.2(Nov 30, 2021)

    Security Release

    BookStack v21.11.2 has been released. This is a security release that address a couple of vulnerabilities relating to API access and page draft related content visibility:

    • If the "Public" role was provided API access then the API could be accessed, in certain scenarios by non-authenticated users even if the "Allow public access" setting was disabled.
    • In some specific scenarios, content related to page drafts (Such as attachments) could be visible to non-owners (Whom would have permission to view the page if saved as a non-draft at that point).

    It's advised to upgrade as soon as possible if the API has been enabled for roles within your instance or if draft page content visibility could be a security concern for you.

    Full List of Changes

    • Fixed issue with greater-than-expected visibility on page-draft-related items. Thanks @haxatron for reporting. (#3086)
    • Fixed issue where public API access was not limited by system public control in certain conditions. (#3091)
    • Updated translations from latest Crowdin changes. (#3076)
    Source code(tar.gz)
    Source code(zip)
  • v21.11.1(Nov 23, 2021)

    Links

    Full List of Changes

    This release contains the following fixes and changes:

    • Added custom command support to the logical theme system. (#3072)
    • Added support for prefers-contrast media setting to increase contrast in faded areas when active. (#2634)
    • Updated TOTP confirmation view to autofocus on code input. Thanks to @raccettura. (#3068)
    • Updated translations with latest changes from Crowdin. (#3057)
    • Updated any links on homepage lists to be more obvious & accessible. (#3046)
    • Fixed faulty page navigation links when headers are nested within other content. Thanks to @Julesdevops. (#3069, #3058)
    Source code(tar.gz)
    Source code(zip)
  • v21.11(Nov 16, 2021)

    Links

    Upgrade Notices

    • Security Releases - There were some security vulnerabilities found during the life of v21.10. See the v21.10.1, v21.10.2 and v21.10.3 posts for more details.
    • API Changes - As of v21.11 any dates in API responses will be formatted as per ISO-8601, with 2019-12-02T20:01:00.283041Z reflecting an example of this format. You may need to review any of your scripts that utilise dates from API responses.
    • Upload Limit - System file upload limits are now configured using a FILE_UPLOAD_SIZE_LIMIT option in your .env file. This value is specified as an integer and represents the max upload size in MegaBytes. This defaults to 50MB. This replaces the old window.uploadLimit HTML head option that could be set.
    • Search Index Changes - There have been search indexing and scoring changes in v21.11. It's recommended to run php artisan bookstack:regenerate-search to ensure a consistent search experience and take advantage of these changes.
    • Logout Endpoints - Logout endpoints have now changed to be CSRF protected POST endpoints instead of GET endpoints. If you were using these for any external purposes you may now need to implement an alternative workflow.

    Full List of Changes

    • Added a new tag view. (#3042, #738)
    • Added a wide series of improvements to the search system, including: (#3043, #2840)
      • Added highlighting of search terms in search results. (#1891, #997)
      • Added matching of tag names and values through normal search terms. (#1577)
    • Added search API endpoints. (#909)
    • Added new .env option to limit file uploads. (#3033)
    • Updated the used Laravel framework from version 6 to version 8. Thanks to @laravel-shift for accelerating this. (#3012, #3011)
    • Implemented initial use of static analysis for PHP code. (#3039)
    • Updated Slack and Facebook logos to be current. Thanks to @na3shkw. (#3032)
    • Updated user invite/email-confirmation journeys to help prevent potential malicious user manipulation. Thanks again to @haxatron for reporting. (#3050)
    • Updated logout endpoints to be POST to prevent potential CSRF concerns. Thanks to @hdvinnie for reporting. (#3047)
    • Updated page include system to retain the pre tags when including a code block. (#2406)
    • Updated translations with latest changes from Crowdin. (#3040)
    • Fixed issue where using the back button in the page editor could lead you to the same page. (#2834)
    • Fixed issue where setting new search filters could remove existing created_by & updated_by filters. (#2736)
    • Fixed issue where markdown draft pages could convert to HTML. (#3054)
    • Fixed issue where "Skip to content" link could be visible on print views. (#3051)
    Source code(tar.gz)
    Source code(zip)
  • v21.10.3(Nov 1, 2021)

    Security Release

    BookStack v21.10.3 has been released. This is a security release that address a couple of vulnerabilities within the attachment and image serving mechanisms. The attachment vulnerability could result in users uploading content to be served in a way that can be utilized for phishing. The image serving vulnerability could result in unintended file access within your BookStack storage folder.

    If you allow untrusted users to login or upload attachments you should update as soon as possible.

    Full List of Changes

    • Updated AzureAD login library to work with the new Microsoft Graph API. (#3028)
    • Fixed path image file path traversal vulnerability. Thanks @theworstcomrade for reporting. (#3030)
    • Prevented HTML attachments being served inline. Thanks @theworstcomrade for reporting. (#3027)
    • Updated translations from latest Crowdin changes. (#3023)
    Source code(tar.gz)
    Source code(zip)
  • v21.10.2(Oct 28, 2021)

    Security Release

    BookStack v21.10.2 has been released. This is a security release that builds upon changes in v21.10.1 which covers a vulnerability which would allow malicious users, who have permission to update or create pages, to upload content that could then be utilized for phishing or other general malicious intent.

    If you allow untrusted users to edit page content you should update as soon as possible.

    Full List of Changes

    • Made further fixes to address image upload vulnerability. Thanks again to @haxatron (#3019)
    • Updated translations with latest changes from Crowdin. (#3014)
    Source code(tar.gz)
    Source code(zip)
  • v21.10.1(Oct 27, 2021)

    Security Release

    BookStack v21.10.1 has been released. This is a security release that covers a vulnerability which would allow malicious users, who have permission to update or create pages, to upload content that could then be utilized for phishing or other general malicious intent.

    If you allow untrusted users to edit page content you should update as soon as possible.

    Full List of Changes

    • Fixed image upload vulnerability. Thanks to @haxatron (#3010)
    • Fixed capitalization for Estonian language option. Thanks to @IndrekHaav. (#3008)
    • Updated PHP packages to prevent abandoned warning. (#3007)
    • Updated translations with latest changes from Crowdin. (#3006)
    Source code(tar.gz)
    Source code(zip)
  • v21.10(Oct 25, 2021)

    Links

    Full List of Changes

    • Added OpenID Connect authentication option. Thanks to @jasperweyne. (#2960, #2169, #1390, #1157)
    • Added Attachment API endpoints. (#2986, #2942)
    • Added Estonian language to BookStack via Crowdin. (#2979)
    • Added support for SAML2 SLS signing to help address issues with ADFS. Thanks to @theodor-franke. (#2902)
    • Added support for base64 image content within markdown text via page POST/PUT. (#2898)
    • Updated translations from Crowdin contributors. (#2983)
    • Updated SAML ACS post flow to retain user session and therefore redirect to the correct location upon login. (#2996, #2552)
    • Fixed padding within book-tree sidebar items. Thanks to @ffranchina. (#3000)
    Source code(tar.gz)
    Source code(zip)
  • v21.08.6(Oct 15, 2021)

    Links

    Full List of Changes

    This release contains the following fixes and changes:

    • Added custom whoops-based debug view which fixes issue where debug view would not show content due to CSP rules. (#2977, #2976)
    • Added throttling to password reset requests. (ca764ca)
    • Updated translations with latest changes from Crowdin. (#2980)
    • Updated DOMPDF chroot directory to prevent potential unintended file access. (#2965)
    • Fixed issue where TOTP setup would provide guest email address upon QR code scan when MFA setup was enforced at login. (#2971)
    Source code(tar.gz)
    Source code(zip)
  • v21.08.5(Oct 8, 2021)

    Security Release

    This security release covers a vulnerability which would allow malicious users, who have permission to update or create pages, to load content from files stored within the storage/ or public/ directories (Such as application logs) via the page HTML export system.

    If you allow untrusted users to edit page content you should update as soon as possible.

    This release also changes the way browser response caching is performed, while logged in, to help prevent navigating back to confidential content after logout.

    Additional Changes

    • Added concurrent page editing warnings upon draft save events. Thanks to @MatthieuParis (#2877)
    • Updated translations with the latest changes from Crowdin. (#2953)
    Source code(tar.gz)
    Source code(zip)
  • v21.08.4(Oct 4, 2021)

    Links

    Full List of Changes

    This release contains the following fixes and changes:

    • Added IP address to tracked activities and displayed in audit log. Thanks to @johnroyer. (#2936, #2747)
    • Added the option to use database table prefixes. Thanks to @floviolleau. (#2935)
    • Allowed the use of content includes when using a custom homepage.
    • Updated translations with latest content from Crowdin. (#2926)
    • Converted old test cases to remove reliance on BrowserKit. (#2928)
    • Fixed incorrect audit log detail on social account sign-in. (#2930)
    • Fixed issue where QR codes were not readable when using dark mode. (#2925)
    Source code(tar.gz)
    Source code(zip)
  • v21.08.3(Sep 12, 2021)

  • v21.08.2(Sep 4, 2021)

    Security Release

    This security release is intended to cover a couple of XSS vulnerabilities, where a malicious user with page edit access could enter script that would execute upon page view. You should update as soon as possible if you allow untrusted users to edit content in your instance.

    In addition, this releases expands the CSP headers set by BookStack to help avoid any similar vulnerabilities from being effective going forward. If you've performed some more advanced customizations on your instance, they may need to be altered to work with the built-in CSP system.

    Source code(tar.gz)
    Source code(zip)
  • v21.08.1(Sep 2, 2021)

    Links

    Full List of Changes

    This release contains the following fixes and changes:

    • Updated TOTP setup flow to display a URL of the QR code contents during setup for non-QR scanning usage. (#2908)
    • Updated translations with latest Crowdin updates. (#2906)
    • Fixed broken page ordering on various views. (#2905)
    Source code(tar.gz)
    Source code(zip)
  • v21.08(Aug 31, 2021)

    Links

    Upgrade Notices

    • Config & Administration - The introduction of multi-factor authentication brings the first use of encryption in the platform. This uses the APP_KEY value in your .env file. Ensure you have this stored safely since it would be required if you ever restore/migrate your instance to another system.
    • Security/Exports - During this release cycle it was highlighted that server-side request forgery could be achieved via the PDF export system. External fetching in the default PDF renderer has been disabled by default. The WKHTMLtoPDF renderer will now not be used if active. Either of these changes can be overridden by setting ALLOW_UNTRUSTED_SERVER_FETCHING=true in your .env file. This should only be used were only trusted users can create and export content. To support this we've added permissions that allow disabling of exports per role.
    • Security/Authentication - A slight change was made in relation to how email addresses are confirmed. Email confirmations are now primarily checked at point-of-login rather than being checked on every request. Enabling email confirmation, or email domain restrictions, may no longer take action on unconfirmed users right away in the future.

    Full List of Changes

    • Added multi-factor authentication system. (#2827, #1118)
    • Added the ability to export content as Markdown. Thanks to @nikhiljha. (#2115, #1717)
    • Added role permissions for exporting content. (#2899, #1251)
    • Added an advisory notice on the shelf permissions page regarding the lack of cascade. (#2876)
    • Added Lithuanian language translations. Thanks to @ffranchina. (#2868)
    • Added item parent link in recycle bin restore to make parent item restore easier. Thanks to @arjvand. (#2682, #2594)
    • Added some core opengraph tags to content. Thanks to @james-geiger. (#2393, #2348)
    • Updated blade views to be more consistent and follow a documented convention. (#2805)
    • Fixed markdown blockquotes not rendering correctly in preview. (#2858, #2837)
    • Fixed issue on API where page updates can remove HTML. (#2856)
    • Fixed inconsistency in list display and nesting. (#2854)
    • Standardised styling of the codebase. (#2820)
    Source code(tar.gz)
    Source code(zip)
  • v21.05.4(Aug 4, 2021)

    Links

    Full List of Changes

    This release contains the following fixes and changes:

    • Added VB.NET code block highlighting option. (#2869)
    • Improved audit log user select list stability. (#2863)
    • Fixed issue where user profile pages item "View All" links used ids hence did not link to proper searches. (#2857)
    Source code(tar.gz)
    Source code(zip)
  • v21.05.3(Jul 3, 2021)

    Links

    Full List of Changes

    This release contains the following fixes and changes:

    • Added a "Skip to content" link as first page focus item for accessibility use. (#2810)
    • Updated social account detachment to have CSRF protection. (#2808)
    • Updated PHP dependency versions.
    • Fixed issue where translations system may attempt to load from the root directory when a theme was not in use. (#2836)
    Source code(tar.gz)
    Source code(zip)
  • v21.05.2(Jun 13, 2021)

    Links

    Full List of Changes

    This release contains the following fixes and changes:

    • Added the ability to server attachments without forcing downloads. (#2791)
    • Fixed issue where empty HTML comments could cause errors. (#2804)
    • Updated translations with latest changes from Crowdin. (#2790)
    • Extracted not found text into it's own view for easier overriding (58117bc)
    Source code(tar.gz)
    Source code(zip)
  • v21.05.1(Jun 4, 2021)

    Links

    Full List of Changes

    This release contains the following fixes and changes:

    • Added base64 image extraction within page content. Thanks to @awarre. (#2700, #2631)
    • Added Croatian translations. Thanks to @ffranchina. (#2784, #2785)
    • Updated item permission roles list to be sorted alphabetically. (#2782)
    • Merged in latest Crowdin translations. (#2787, #2777)
    • Fixed incorrect styling of favourites sidebar when using a non-default homepage option. (#2783)
    Source code(tar.gz)
    Source code(zip)
  • v21.05(May 30, 2021)

    Links

    Full List of Changes

    • Added shelf/book/chapter/page favourite system. (#2748)
    • Added previous/next navigation to chapters and pages. Thanks to @shubhamosmosys. (#2511, #1381)
    • Added display of tags within search results. Thanks to @burnoutberni. (#2487, #2462)
    • Added the ability to import JPEG user avatar images during LDAP login/registration. Thanks to @jasonhoule. (#2320, #1161)
    • Updated export meta date format to align with the format used in revisions. (#2771)
    • Updated drawing manager system to verify host on post messages for additional security. (#2769)
    • Updated potential external links with rel="noopener" for better security . Thanks to @CorruptComputer. (#2768)
    • Updated drawing upload error handling to better advise when images are too large for the server. (#2740)
    • Updated page deletions to also delete related revisions. (#2668)
    • Updated shelf, book & chapter creation/edit views to autofocus on the name input. (#1956)
    • Updated translations with latest Crowdin changes. (#2764)
    • Fixed issue where user search field could stack too early in certain languages. (#2147)
    Source code(tar.gz)
    Source code(zip)
  • v21.04.6(May 24, 2021)

    Links

    This release contains the following fixes and changes:

    • Added a way to configure options on a social driver, for the initial redirects, through the Theme::addSocialDriver system. (#2759)
    • Fixed scenario where recent Image upload visibility changes caused issues on hosting where webserver and PHP process group/user differ. (#2758)
    Source code(tar.gz)
    Source code(zip)
  • v21.04.5(May 15, 2021)

    Links

    This release contains the following fixes and changes:

    • Fixed error during PDF export in some cases due to incorrect path. (#2746)
    • Fixed error thrown when saving a markdown page with empty content. (#2741)
    • Updated S3 ACL setting so ACLs are set via another request, as per pre-v21.04.2, but only when actually use AWS S3. (#2739)
    • Updated translations with latest Crowdin changes. (#2737)
    • Updated overflowing table content to be consistent. Thanks to @dopyrory3. (#2735, #2732)
    Source code(tar.gz)
    Source code(zip)
  • v21.04.4(May 9, 2021)

    Links

    This release contains the following fixes and changes:

    • Added a new SAML2_IDP_AUTHNCONTEXT option for SAML2 authentication since the default did not work well for some Windows environments. Thanks to @ivir. (#1998)
    • Updated translations with latest Crowdin changes. (#2719)
    • Updated Korean translations. Thanks to @Jokuna. (#2716)
    • Improved error messaging when attempting to access a non-existent image file. (#2696)
    • Updated table style handling across exports types to be consistent. (#2666)
    • Updated export system to remove JavaScript used in Custom HTML Head Content to prevent errors or strange behaviour. (#2490)
    • Fixed page export error thrown when the created by, or last updated by user, had been deleted. (#2733)
    • Fixed white borders on layout buttons when in dark mode when using Safari. (#2728)
    Source code(tar.gz)
    Source code(zip)
  • v21.04.3(Apr 27, 2021)

    Links

    This release contains the following fixes and changes:

    • Updated migration string column lengths to better fit within restrictive index limits (#2710)
    • Updated select box styles with to work around default iOS styles causing issues in dark mode. (#2709)
    • Updated translations with latest Crowdin changes. (#2695)
    • Updated styles of layout view buttons in mobile screen sizes to respect dark mode.
    • Updated image upload behaviour for s3 style uploads to set public permissions as part of the upload request instead of a separate request.
    • Fixed issue where "Recently Viewed" would show non-viewed content for new users. (#2703)
    Source code(tar.gz)
    Source code(zip)
  • v21.04.2(Apr 20, 2021)

  • v21.04.1(Apr 19, 2021)

    Links

    Full List of Changes

    This release contains the following fixes and changes:

    • Updated mobile header elements for much better keyboard/screen-reader accessibility. (#2681)
    • Updated translations with latest CrowdIn changes. (#2672)
    • Updated WYSIWYG editor code-block handling provide a more stable undo/redo experience. (#2602)
    • Updated AWS S3 SDK to fix incompatibility with Minio. (#2689)
    • Fixed HTTP JSON detection when an encoding is in the response JSON content type. (#2684)
    Source code(tar.gz)
    Source code(zip)
  • v21.04(Apr 9, 2021)

    Links

    Update Notices

    Requirements Change - PHP 7.3 or greater is now required to run BookStack. If you previously installed BookStack using the 18.04 script, please see the details of this release in our update notes for the commands that should help you upgrade to PHP 8.

    URL/Search-Filter Change - User profile pages, and user-based search filters, now use name-based "slugs" rather than being ID based. Any old links or instructions you may have for these elements may need to be updated.

    Full List of Changes

    • Added back-end theme system. (#2639)
    • Added APP_VIEWS_BOOKSHELF .env option to set default view type within a shelf. Thanks to @philjak. (#2591)
    • Added owned_by search filter. Thanks to @benediktvolke. (#2561)
    • Added sorting for Books within Shelves. Thanks to @guillaumehanotel. (#2515, #1742)
    • Added user filter to the Audit Log. (#2472)
    • Added a healthcheck endpoint. (#2467)
    • Added TLS support to the LDAP system. Thanks to @Body4. (#2376)
    • Added .env variable to set default system light/dark mode option. (#2081)
    • Added the ability to configure custom footer links via the settings screen. Thanks to @james-geiger. (#1973)
    • Added create buttons to the books and shelves homepage view options. Thanks to @philjak. (#1756)
    • Updated minimum required PHP version to 7.3 and added PHP 8.0 support. (#2648, #2388)
    • Updated non-admin reference to users to be slug-based instead of id-based. (#2626, #2525)
    • Updated file upload system to remove dots in the filename instead of simply preventing upload. Thanks to @Hecke29. (#2611, #2217)
    • Updated the versioning system used by the project. (#2570)
    • Updated export format to not include user and revision links in content meta details. (#2526)
    • Updated docker development environment to work with our php tests and to fix permissions with the node service. Thanks to @Abijeet. (#2522, #2510)
    • Updated the systems for loading code blocks to be quicker & more efficient, especially within the WYSIWYG editor. (#2518)
    • Updated libraries used for revision diffs to provide much better performance with large amounts of content. (#2503)
    • Updated user profile password fields to disable autocomplete. Thanks to @l1n. (#2484)
    • Updated header so search is more commonly centered. (#2310)
    • Updated "Move Page" interface to allow efficient keyboard navigation. (#2064)
    • Updated our test-case files so they are less likely to trigger virus scan systems. (#1571)
    • Updated WYSIWYG editor to include some bottom padding for readability. (#1075)
    • Fixed issue where code blocks would not appear when within <details> HTML elements, added via the markdown editor. (#781)
    • Fixed issue where the bookstack:update-url would not change the URL used for a custom header logo image. (#2546)
    • Fixed issue where saving without any changes would still result in revisions being created. (#1846, #1737)
    • Optimized and cleaned some core permission system components. (#2633)
    • Removed mentions of unavailable mail mail driver from our files. (#2657)
    Source code(tar.gz)
    Source code(zip)
A Blogging Platform with a built-in Feed Aggregator. Built with AngularJS and Laravel.

ReMark ReMark is an open source publishing platform built with the informed content creator in mind. It works as: A blogging platform A feed aggregato

Ren 4 Nov 1, 2019
Backend of the Articly wiki/cms project

Documentation | Changelog | Roadmap Currently under heavy development & testing. Fast, easy and reliable wiki software running in the web. What is Art

null 3 Dec 29, 2021
a super lightweight markdown wiki/blog/tweeting system.

laMDWiki is a super light weight blog/wiki platform running on PHP!

null 4 Dec 24, 2021
Self-hosted platform to keep and share your content: web links, posts, passwords and pictures.

Shaark is a self-hosted platform to keep and share your content: web links, posts, passwords and pictures. All of your data can be private, public or

MarceauKa 336 Jan 19, 2022
Drupal is an open source content management platform supporting a variety of websites ranging from personal weblogs to large community-driven websites.

Drupal is an open source content management platform supporting a variety of websites ranging from personal weblogs to large community-driven websites.

Drupal 3.6k Jan 14, 2022
This is a plugin written in PHP programming language and running on the PocketMine platform that works stably on the API 4.0.0 platform. It allows you to query some other server information

QueryServer This is a plugin written in PHP programming language and running on the PocketMine platform that works stably on the API 4.0.0 platform. I

Thành Nhân 1 Dec 31, 2021
The platform allows you to manage articles, comments, tags, categories, and users for a blogging platform.

Laravel Blogging Platform The platform allows you to manage articles, comments, tags, categories, and users for a blogging platform. The project was w

Khaled Farhat 4 Dec 23, 2021
mTube is a simple video sharing platform built with Laravel.

mTube is a simple video sharing platform built with Laravel. Create personal channel share videos online with friends and family.

Nyi Nyi Lwin 89 Jan 8, 2022
A powerful open source Laravel Blog with WYSWYG and CRUD (Create Read Update Delete) built on Laravel 5.8 and Bootstrap 4

Larablog A powerful open source Laravel Blog with WYSWYG and CRUD (Create Read Update Delete) built on Laravel 5.8 and Bootstrap 4 Table of contents F

Jeremy Kenedy 133 Dec 19, 2021
Create Your Own Broadcast Network With AVideo Platform Open-Source. OAVP OVP

Audio Video Platform AVideo is a term that means absolutely nothing, or anything video. Since it doesn't mean anything the brand simply is identifiabl

World Wide Broadcast Network 1.5k Jan 11, 2022
Create videos programmatically in the cloud from PHP: add watermarks, resize videos, create slideshows, add soundtrack, voice-over with text-to-speech (TTS), text animations.

Create videos programmatically in the cloud from PHP: add watermarks, resize videos, create slideshows, add soundtrack, voice-over with text-to-speech (TTS), text animations.

null 2 Jan 8, 2022
This is a clone of Angry birds's homepage built using Wordpress, it is configured to run on the Pantheon platform.

Angry-Birds-UI-Clone Description This is a clone of Angry birds's homepage built using Wordpress, it is configured to run on the Pantheon platform. Li

Abir Bouhriz Daidj 3 Oct 20, 2021
Easily self host your documentation.

Docs for Laravel Generate docs for your projects Support us Like our work? You can support us by purchasing one of our products. Installation WIP, do

Flowframe 5 Nov 5, 2021
Laravel website prototype with backoffice for content and users management

LaraProto LaraProto is a Laravel website prototype with backoffice for content and users management. Just install and glue your front end views Based

Marco Afonso 7 Aug 26, 2016
Free, open-source, online appointments platform based on Laravel PHP Framework.

timegrid (Archived) Timegrid helps contractors and customers to find the perfect meeting time through online appointments. Features Built with Laravel

timegrid.io 836 Jan 5, 2022
Self-hosted CMS platform based on the Laravel PHP Framework.

October is a Content Management System (CMS) and web platform whose sole purpose is to make your development workflow simple again. It was born out of

October CMS 10.8k Jan 15, 2022
Hybrid Content Management System with the freedom of a headless CMS and with the full functionality of a traditional CMS

INTRODUCTION Flextype is an open-source Hybrid Content Management System with the freedom of a headless CMS and with the full functionality of a tradi

Flextype 480 Jan 18, 2022
Universal Design Online content Inspection Tool

The Universal Design Online content Inspection Tool, or UDOIT (pronounced, “You Do It”) enables faculty to identify accessibility issues in their Learning Management System. It will scan a course, generate a report, and provide resources on how to address common accessibility issues.

University of Central Florida - Open Source 85 Dec 19, 2021
Satu platform demo ringkas untuk rujukan Basic PHP

praktisphpmysql Satu platform demo ringkas untuk rujukan Basic PHP Demo https://legoom.biz.my/praktisphpmysql/ Belajar Koding Kemasukan Mei dan Septem

RB 10 Apr 25, 2021