Model or dataset
didi/xiaoju-survey avatar
didi/xiaoju-survey

XIAOJUSURVEY: Didi's Full-Stack Survey Platform with a Meta Protocol at Its Core

XIAOJUSURVEY is an enterprises form builder and analytics platform that allows users to create questionnaires, exams, polls, quizzes, and analyze data online.

3,795 stars513 forksTypeScriptApache-2.0

At a glance

What is it?
XIAOJUSURVEY is an Apache-2.0 licensed, enterprise-grade form builder and analytics platform from Didi, built on Vue3, NestJS, and MongoDB. Its defining trait is a standardized questionnaire Meta protocol that promises consistency between design and rendering, but adoption requires weighing its full-stack weight against simpler alternatives.
Who is it for?
Adopt XIAOJUSURVEY if you need a complete, self-hosted survey system with a built-in analytics layer and you are prepared to run a NestJS server plus a Vue3 web app, likely with MongoDB and Docker. It suits teams that value a standardized questionnaire protocol and want to avoid assembling separate form and reporting tools.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 58 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What XIAOJUSURVEY Actually Delivers

XIAOJUSURVEY is a response to a specific problem: enterprises need to build questionnaires, exams, polls, and quizzes, then analyze the collected data, without stitching together a form library, a backend API, and a reporting tool. The README claims over 40 question types and 100+ templates accumulated from internal use, plus analytics features like per-question statistics, cross-tabulation, and multi-channel analysis. The intended audience is not a developer who wants to embed a single feedback widget. It is a team that wants a product-level survey system, complete with user management, survey permissions, and a lifecycle covering creation, editing, distribution, collection, and data analysis. The project is open source under Apache-2.0, so you can take that entire stack and run it yourself. The homepage and documentation point to a live demo at xiaojusurvey.didi.cn, which suggests the codebase is the same one Didi uses internally, though the README does not state that explicitly.

The Meta Protocol: A Standard That Drives Everything

The most distinctive design decision in XIAOJUSURVEY is the questionnaire Meta protocol. The README describes it as a domain standard that ensures concept interoperability across the system, and it is called the foundation and core of the entire platform. The protocol splits into two categories: business descriptions, which cover questionnaire and question type protocols, and material descriptions, which cover question type material protocols including question types and setters. This is not a trivial JSON schema. It is an attempt to formalize how a survey is described so that the builder and the renderer share the same mental model. The README ties this to a principle of high consistency between design and rendering. In practice, this means when you drag a question into the builder, the same protocol drives how it appears to the respondent. For developers, this is both a strength and a cost. The strength is that extending the system with a new question type requires understanding the protocol, not hacking the UI. The cost is that you must learn that protocol before you can make meaningful changes. The documentation link for the protocol is in Chinese, which may be a barrier for non-Chinese-speaking teams.

Architecture and Technology Stack

The repository is a monorepo with two main applications. The web front end uses Vue3 with Element Plus, and there is mention of a React Native cross-platform SDK, though the README does not elaborate on its current maturity. The server side is built with NestJS and MongoDB. This is a TypeScript project, so the entire stack shares a language, which can simplify hiring and code reuse. The README also lists AI as a topic, and one feature is AI-generated questionnaires through a conversational interface, with real-time preview. The backend likely calls an LLM, but the README does not specify which one or how it is configured. The architecture is front-end and back-end separated, which is standard for this kind of product. The use of MongoDB suggests that the survey response data is stored as documents, which fits the flexible nature of survey schemas. For deployment, the project offers Docker images in two flavors: a slim version based on node:18-slim for production, and a full version based on node:18 with development tools like curl, vim, and git. You switch between them by changing the image tag in docker-compose.yaml.

Getting It Running: Commands and Configuration

The README provides a quick start for local development. You need to start the server first. From the server directory, run npm install, then npm run local. The web application is started separately. From the web directory, run npm install, then npm run serve. After that, the B-side management interface is at http://localhost:8080/management, and the C-side rendering interface is at http://localhost:8080/render/:surveyPath, where surveyPath is likely a unique identifier for a survey. This two-process setup is typical for a full-stack project. For production, the README points to a Docker deployment guide and provides a docker-compose.yaml file. You can choose between the slim and full image tags. The README does not list the required environment variables or MongoDB connection strings, so you must consult the deployment guide for those details. The local development commands assume you have Node.js version 18 or higher, as indicated by the badge in the README. The project does not list any specific package manager, so npm is the default.

Analytics and Data Handling: Beyond Form Building

A survey platform is only half useful if it cannot turn responses into insights. XIAOJUSURVEY includes online reporting capabilities that have been refined on data volumes described as over a hundred million records. The README mentions per-question statistics, cross-analysis, and multi-channel analysis. Cross-analysis is particularly valuable for market research, where you want to compare responses across different demographic segments or answer paths. The platform also supports data export and management of collected responses. This built-in analytics layer is a differentiator compared to open-source form tools that only collect data and force you to export to a separate tool like Excel or a BI platform. However, the README does not specify the exact chart types or whether the analytics are real-time or batch. The claim of being tested on large data volumes is not a benchmark, and you should not assume the same performance on your own infrastructure. The underlying MongoDB can handle large collections, but the analytics queries may require proper indexing, which is not documented in the README.

Security Features and Their Limits

The README lists security as a key feature, including encrypted data transmission, sensitive word detection, and voting anti-fraud mechanisms. It also mentions publication review and a configurable security architecture. These are important for public surveys where respondents might submit malicious content or attempt to vote multiple times. However, the README does not provide implementation details. For example, it does not say which encryption protocol is used for data in transit, how the sensitive word library is maintained, or what anti-fraud heuristics are applied. The claim of providing security-related experience guidance suggests that the project offers documentation rather than turnkey solutions. As an adopter, you must assess whether these built-in measures meet your compliance requirements. The project is Apache-2.0, so you are free to modify the security layer, but doing so requires understanding the codebase. The README also mentions custom hooks for data push and message push integrations, which could be used to send responses to external systems, but again, the specifics are not given.

The Wrong Tool for Simple Needs and a Real Alternative

XIAOJUSURVEY is a heavyweight solution. If your only requirement is to collect a small number of responses from a simple form, this platform is overkill. You would need to run a NestJS server, a Vue3 web app, and MongoDB, which is a significant infrastructure footprint compared to a static form hosted on a CDN. A genuine alternative in the open-source space is Formily, a React-based form library (though it also has a Vue version), which focuses on dynamic form rendering and state management. Formily does not include a backend, user management, or analytics. It gives you a set of components and a schema-driven approach to build forms that you embed into your own application. The difference in approach is fundamental: XIAOJUSURVEY is a product with a server and a UI, while Formily is a library that you integrate into your own codebase. If you need a full survey system, Formily would require you to build the data collection and reporting yourself. If you need a lightweight form, XIAOJUSURVEY would drag you into running a full stack. The choice depends on whether you want a turnkey product or a component toolkit.

Maintenance, Upgrades, and the State of the Project

The repository was last pushed to in July 2026, and it is not archived, which indicates active development at the time of writing. However, there are no recent releases listed, so you cannot rely on stable version tags. The project uses a main branch as the default, and the Docker images are tagged with latest-slim and latest-full, which are moving targets. This has implications for upgrade cost. Without semantic versioning, you cannot easily pin a specific release, and a docker pull of latest may introduce breaking changes. The README points to a MAJOR CHANGELOG issue on GitHub, but it is not clear how often it is updated. For maintenance, you will need to monitor the repository for changes and test upgrades in a staging environment. The documentation is extensive but mostly in Chinese, which is a cost for international teams. The license is Apache-2.0, which is permissive and allows commercial use, but you must still comply with attribution requirements. There is no mention of a contributor license agreement or any proprietary clauses, which is positive for adoption.

Editorial conclusion

Adopt XIAOJUSURVEY if you need a complete, self-hosted survey system with a built-in analytics layer and you are prepared to run a NestJS server plus a Vue3 web app, likely with MongoDB and Docker. It suits teams that value a standardized questionnaire protocol and want to avoid assembling separate form and reporting tools. Do not choose it if you only need a simple embeddable form or a headless survey API, as the full-stack footprint and protocol learning curve will be overkill. Before committing, verify the state of the English documentation, because the README links mostly to Chinese pages, and check the latest commit activity on the main branch to confirm ongoing maintenance. The project has no recent releases listed, so you must rely on the default branch and Docker tags, which may change without semantic versioning.

Official sources

  1. didi/xiaoju-survey on GitHub
  2. Issues
  3. License: Apache-2.0
  4. Project website
  5. README
Community notes

Community notes